Three years ago a friend who runs a small online print shop asked me to look at her analytics stack. She had just received a formal audit notice from a European data-protection authority about cookie consent (her CMP vendor had not kept up with regulatory changes), and that same week her paid analytics SaaS renewed at a price that had doubled since she signed up in 2021. I told her we could migrate off Google Analytics that weekend. I was wrong. It took most of two weekends, and what I learned about the self-hosted analytics landscape in spring 2026 is worth writing down.
Why Move Off Google Analytics in 2026
The case against Google Analytics has grown clearer since the first wave of GDPR enforcement in 2018. The Austrian and French data-protection authorities handed down rulings in 2022 that made it clear GA4 violated Article 44 (transfer of data to third countries without adequate safeguards). Those rulings sat dormant for a while. In 2026 they are finally biting. My friend’s notice was not unique. I know of four small businesses in my extended network that received similar audit letters between January and March 2026.
Beyond privacy law, GA4 is heavy. The script bundle is 45 kB gzipped as of April 2026, and it still requires a separate consent-management platform if you operate in Europe. That CMP adds another 30-50 kB and a cascade of third-party requests. My friend’s print shop had a Lighthouse performance score in the mid-60s on mobile, mostly because of analytics and marketing pixels. Removing GA4 and replacing it with a self-hosted solution brought that score into the low 90s with no other changes.
Cost is the third leg. Google Analytics is free, until you need BigQuery export or want to avoid sampling on high-traffic properties. At that point GA360 enterprise pricing typically starts in six figures per year. For small businesses the free tier looks attractive until you realize you are paying with user data and lock-in. The three self-hosted options I will compare here cost between zero dollars and ten dollars per month in hosting, depending on whether you run them in your homelab or on a cheap VPS.
Plausible Analytics in Spring 2026
Plausible had licensing drama in 2023. The project started as fully open-source (AGPL), then the maintainers proposed splitting the codebase into a commercial cloud offering and a self-hosted Community Edition with delayed feature releases. The community reacted poorly. By late 2023 the maintainers had walked back the more aggressive proposals and settled on a compromise: Plausible Cloud remains the primary revenue stream, Plausible Community Edition (CE) remains AGPL and gets most new features within a few months, and the ClickHouse backend is shared between both branches. The exact timeline and version numbers vary depending on which GitHub issue thread you read, but the current self-hosted release as of this writing is stable and actively maintained.
The self-hosted version ships as a Docker Compose stack with four services: the Plausible app (Elixir/Phoenix), PostgreSQL for metadata, ClickHouse for event storage, and a small GeoIP container. The total memory footprint on an idle deployment is around 1.2 GB. Under load (50,000 pageviews per day across a dozen sites) it uses 2-3 GB resident. ClickHouse is the heavy piece (it will happily eat 4 GB on startup if you let it). If you run Plausible CE in a homelab you need to budget 4 GB of RAM minimum, and 8 GB is more comfortable.
The feature set in CE is close to cloud as of spring 2026. You get real-time dashboards, goal tracking (custom events), UTM parameter breakdowns, and funnel reports. The cloud version has priority support and a few extra integrations (Slack webhooks, scheduled email reports with more customization), but for a self-hoster those gaps are minor. The script itself (plausible.js) is roughly 1.4 kB gzipped. It respects Do Not Track by default. No cookies. It works in strict content-security-policy environments if you add the script-src directive.
Umami in 2026
Umami took a different path. The project has remained fully open-source (MIT license) since its creation in 2020. Version 2.x reached maturity in mid-2025 and has been stable since. The codebase is Next.js on the frontend, Node on the backend, and PostgreSQL for storage. No ClickHouse. No heavy OLAP database. Just Postgres with sensible indexes and a materialized-view pattern for aggregation queries.
That architectural choice has trade-offs. Umami is lighter on RAM than Plausible (a typical deployment uses 400-600 MB total), but at very high scale (millions of events per day) you will feel Postgres strain under write load. For small-to-medium traffic (under 100,000 pageviews per day per site) Umami is fast and cheap to run. I have it on a Hetzner CPX11 (2 vCPU, 2 GB RAM, $4.50/month) serving analytics for three low-traffic sites. The entire VM is idling at 30% memory usage.
Umami’s dashboard is clean. It is not as polished as Plausible, but it gives you the metrics that matter: unique visitors, pageviews, bounce rate, referrers, devices, browsers, countries. Goal tracking works (you fire custom events with umami.track('signup')), and there is a funnel view in recent releases. The script is roughly 2 kB gzipped. It auto-tracks hash-based routing in SPAs if you enable the data-auto-track attribute. The GitHub repository is at github.com/umami-software/umami.
The developer (Mike Cao) also offers Umami Cloud, a paid hosted version, but there is no licensing drama and no feature withholding. The open-source version is the same codebase that powers the cloud offering (which is rare enough in 2026 to be worth mentioning).
Ackee in 2026
Ackee is the underdog in this comparison. It is a Node.js app (Express backend, Vue frontend) that stores data in MongoDB. The project started in 2018 and has a small but loyal community. The GitHub repository at github.com/electerious/Ackee shows steady maintenance, though the release cadence is slower than Plausible or Umami. The current stable version as of this writing is in the 3.x range.
Ackee’s architecture is simpler than the other two. You run one Node process and one MongoDB instance. The entire stack uses 300-500 MB of RAM in production. The dashboard is minimal but fast. You get pageviews, unique visitors, referrers, durations, and device/browser breakdowns. No funnels. No advanced goal tracking beyond basic event counting. The script (tracker.js) is roughly 3.5 kB gzipped. It works by generating a per-domain key that you embed in the script tag. That key is not a secret (it appears in public HTML), but it scopes data to that domain. The privacy model is similar to Plausible: no cookies, no personal identifiers, optional IP anonymization.
Ackee is a good fit if you want dead-simple self-hosted analytics for one or two sites and you do not need the feature depth of Plausible or Umami. I ran it for six months in 2024 on a five-dollar Vultr instance (1 vCPU, 1 GB RAM) and it handled two WordPress blogs with 8,000 combined pageviews per month without complaint. I eventually migrated to Umami because I wanted funnel tracking, but Ackee is still the easiest of the three to set up and forget.
Database Choice Trade-offs
The database split is the single biggest architectural difference. Plausible CE uses ClickHouse for event storage. ClickHouse is an OLAP (online analytical processing) database optimized for high-volume writes and fast columnar queries. It is very good at what it does. It is also a memory hog. A ClickHouse instance with default settings will allocate 4 GB of RAM on startup, even if you are only storing a few million rows. In my homelab (a Proxmox cluster with three Beelink mini PCs), I run ClickHouse in an LXC container with 6 GB of RAM allocated. That container also runs nothing else. ClickHouse is not a friendly neighbor.
Umami and Ackee use PostgreSQL and MongoDB respectively. Both are general-purpose databases that are much lighter on resources. PostgreSQL with Umami’s schema uses around 200 MB of RAM for a small dataset (under ten million rows). MongoDB with Ackee uses even less (100-150 MB). The query performance is slower at scale compared to ClickHouse, but for the traffic levels most self-hosters deal with (under 100,000 pageviews per day), Postgres and Mongo are fast enough.
If you are running analytics for a high-traffic site (millions of pageviews per month) and you have the RAM to spare, Plausible CE with ClickHouse is the right choice. If you are running analytics for a personal blog or a small business site, Umami or Ackee will save you RAM and disk space. My current setup is Plausible CE on a Hetzner CX21 (2 vCPU, 4 GB RAM, roughly $5.83/month as of this writing) with PostgreSQL and ClickHouse on the same box. I am tracking five sites with a combined 180,000 pageviews per month. Disk usage grows at roughly 1.2 GB per million pageviews per month in ClickHouse (with default compression, based on what I see in my own deployments). Umami on Postgres grows at roughly 400 MB per million pageviews in my testing. Ackee on MongoDB grows at roughly 600 MB per million.
Mobile and SPA Tracking Quirks
All three projects handle mobile and single-page-application tracking, but there are quirks. Plausible and Umami both ship small extensions to their tracking scripts that listen for pushState and replaceState events. In a React or Vue app with client-side routing you need to enable those extensions or manually fire pageview events on route change. Plausible’s script has a plausible.js variant called plausible.hash.js that auto-tracks hash-based routing. Umami’s equivalent is the data-auto-track attribute on the script tag. Ackee requires you to call ackeeTracker.record() manually in your route-change handler. That is more work but also more explicit.
Conversion tracking (goals, custom events) is handled differently. Plausible lets you define goals in the dashboard (URL-based or custom-event-based). When a user hits a goal URL or fires a custom event (plausible('signup')), Plausible logs it. Umami uses a similar pattern (umami.track('signup')). Ackee does not have built-in goal tracking. You can fire custom events and query them later in MongoDB, but there is no dashboard support.
For e-commerce or lead-gen sites where you need funnel analysis, Plausible and Umami are the only real options. Ackee is fine for basic traffic analysis but stops short of conversion optimization.
My Self-Hosted Setup (Plausible CE)
I run Plausible CE on a Hetzner CX21 VPS (2 vCPU, 4 GB RAM, 40 GB disk, Ubuntu 24.04). The setup is a Docker Compose stack. Here is the relevant snippet from my docker-compose.yml:
version: '3.8'
services:
plausible_db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: plausible
POSTGRES_USER: plausible
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- plausible-db:/var/lib/postgresql/data
plausible_events_db:
image: clickhouse/clickhouse-server:24.3-alpine
restart: unless-stopped
volumes:
- plausible-events:/var/lib/clickhouse
ulimits:
nofile:
soft: 262144
hard: 262144
plausible:
image: ghcr.io/plausible/community-edition:v2.1.4
restart: unless-stopped
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
ports:
- "127.0.0.1:8000:8000"
environment:
BASE_URL: https://analytics.example.com
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
DATABASE_URL: postgres://plausible:${DB_PASSWORD}@plausible_db:5432/plausible
CLICKHOUSE_DATABASE_URL: http://plausible_events_db:8123/plausible_events
volumes:
plausible-db:
plausible-events:
I reverse-proxy through Caddy on the same box. The Caddyfile entry is one line: analytics.example.com { reverse_proxy localhost:8000 }. Caddy handles the TLS certificate via Let’s Encrypt. Total setup time from zero to dashboard was about 45 minutes, most of which was waiting for ClickHouse to initialize and run the first schema migration.
Disk usage is predictable. After three months of tracking five sites (180,000 pageviews per month combined), the ClickHouse volume is 680 MB. The Postgres volume is 120 MB. My self-hosted backup strategy runs restic snapshots to Backblaze B2 nightly, which adds $0.40 per month in storage cost for the analytics data.
The main operational annoyance is ClickHouse memory usage. On a 4 GB VPS, ClickHouse will consume 2.5-3 GB under normal load. If you run other services on the same box (I also run a small PostgreSQL instance for a different app), you need to watch memory pressure. I have the box configured to send me an alert if free memory drops below 400 MB, which happens once every two weeks when log rotation and ClickHouse compaction overlap. Restarting the ClickHouse container clears it. This is not a daily burden, but it is more babysitting than Umami or Ackee require.
When I Would Recommend Cloud Plausible
I self-host because I enjoy it. I like knowing where the data lives. I like not having a recurring SaaS bill. But I am also the kind of person who labels USB drives and keeps a spreadsheet of every VM in my homelab mini PC build for 2026. Make of that what you will.
For most people, paying Plausible $10 per month for the cloud version is the better choice. You get automatic updates, managed ClickHouse scaling, priority support, and you do not spend Saturday morning debugging why ClickHouse stopped ingesting events (it was an out-of-memory condition, always is). The cloud version has the same script, the same privacy model, and a few extra features (email reports, Slack integration). If you value your weekend more than $120 per year, pay for cloud.
The case for self-hosting Plausible CE is strongest when you run multiple sites (10 or more) and the cloud pricing scales linearly with pageviews. At that point you pay $50-$100 per month for cloud Plausible, and a $15/month VPS running Plausible CE starts to make financial sense. The break-even is around 15-20 sites or 500,000 combined pageviews per month. Below that threshold, cloud is almost always cheaper once you account for your time.
Umami has no cloud/self-hosted pricing tension because the cloud offering is separate and the self-hosted version is the same codebase. If you self-host Umami you are not giving up features, you are just trading money for time. Ackee has no cloud offering at all, so the comparison does not apply.
Cost Over Three Years
Cost breakdown for a small site (50,000 pageviews per month) over three years:
- Plausible Cloud: $10/month, $360 over three years. Zero maintenance hours.
- Plausible CE self-hosted on Hetzner CX21: $5.83/month VPS ($210 over three years), plus 10-15 hours per year of maintenance (updates, monitoring, backups). If you value your time at $50/hour (a conservative rate for a DevOps engineer), that is $1,500-$2,250 in opportunity cost. Total: $1,710 to $2,460.
- Umami self-hosted on Hetzner CPX11: $4.50/month VPS ($162 over three years), plus 5-8 hours per year of maintenance (Umami is lighter and updates are easier). At $50/hour, $750-$1,200 in time. Total: $912 to $1,362.
- Ackee self-hosted on Vultr $5 VPS: $5/month ($180 over three years), plus 3-5 hours per year (Ackee is simple). At $50/hour, $450-$750. Total: $630 to $930.
If you do not value your time at professional rates (because self-hosting is your hobby and you enjoy the tinkering), the numbers flip. Self-hosted Plausible CE costs $210 over three years. Cloud Plausible costs $360. You save $150 by self-hosting. Umami saves you more ($162 vs $360 for a comparable cloud analytics service like Fathom). Ackee saves you the most ($180 vs $360).
Money is only part of it. You also trade features and uptime. Plausible Cloud has better uptime than anything I can run on a single VPS (I learned this the hard way when my Hetzner box kernel-panicked during a network driver update). Umami and Ackee do not have the same level of polish or feature depth as Plausible. If you need funnel analysis and real-time dashboards and you do not want to think about database backups, pay for cloud. If you are comfortable running a VPS and you want to own your analytics data, self-host.
What I Actually Run and Why
I run Plausible CE because I track multiple sites and I like having a single pane of glass with funnel reports. The ClickHouse memory overhead is annoying (I have spent more Saturdays than I care to admit restarting that container), but I have the RAM to spare and the performance is excellent. If I were starting from zero today and I only needed analytics for one or two sites, I would probably choose Umami. It is lighter, the Postgres backend is easier to backup and replicate, and the feature set is close enough to Plausible that I would not miss much.
Ackee is the right choice if you want the simplest possible self-hosted analytics and you do not need funnels or advanced goal tracking. It is also the cheapest to run, both in hosting cost and maintenance time. I keep an Ackee instance around for testing and for sites where I only care about basic traffic metrics (pages per session, referrers, device breakdown). It works. Mostly.
If you are migrating a business off Google Analytics and you need buy-in from non-technical stakeholders, Plausible (cloud or self-hosted) is the safest bet. The dashboard is polished, the privacy story is clear (see plausible.io/data-policy), and the script is lightweight. Umami works just as well technically, but it does not have the same level of brand recognition or the same volume of case studies. That matters when you are trying to convince a marketing director that you are not downgrading their analytics stack.
One more consideration: GDPR compliance. All three projects are privacy-friendly by default (no cookies, no personal identifiers, optional IP anonymization). But Plausible and Umami both have detailed documentation about GDPR compliance and have been through legal review. Ackee is less documented on that front. If you operate in the EU and you are risk-averse, Plausible or Umami are safer choices. Consult gdpr.eu/cookies for the latest guidance on analytics and consent requirements.
For transparency, I have no affiliate relationship with Plausible, Umami, or Ackee. I pay for my own hosting and I do not receive compensation for recommending any of these projects. That is part of our editorial standards here at phpwebthings.
I migrated my friend’s print shop to Umami in the end. It took two evenings (the first evening was mostly learning the Umami API for importing historical data from a GA4 export, which did not work as cleanly as I hoped). She now pays $4.50 per month for a Hetzner VPS instead of $40 per month for the analytics SaaS she was on before. The dashboard loads in 200 milliseconds instead of the 1.8 seconds her old analytics took. She has not looked back.