Plausible CE
Replaceable in one session with an AI coding agent.
The self-hosted edition of the cookie-free analytics product: the same collector and dashboard, run on your own server, with the paid plan being the hosting and the upkeep.
Build the analytics I actually need instead of running Plausible's community edition — and read the trade first, because self-hosting the original is a real option and it is heavier than it looks. The community edition wants a columnar database alongside the application, which is more to operate than most small sites need. If you want six numbers you can defend, one Node process and SQLite will hold years of traffic on the smallest machine you can rent. STACK - Node 20+ with Fastify - SQLite through better-sqlite3, WAL mode - A tracking script under 2KB gzipped, served from your own domain — not a third-party host, which is what gets a script blocked - Server-rendered dashboard, charts as inline SVG drawn by hand - Caddy in front THE DATA MODEL - sites: id, domain, name, timezone, salt, is_public, public_token - pageviews: id, site_id, path, referrer_host, referrer_url, utm_json, country, lang, device, browser, os, screen_bucket, status, visitor_hash, session_id, is_entry, is_exit, duration_ms, bot, prefetch, created_at - events: id, site_id, name, path, props_json, value_num, visitor_hash, bot, created_at - goals and conversions - Record more than you publish. A signal not captured today starts from zero the day somebody wants it NO COOKIE - visitor_hash is HMAC-SHA256 of address, user agent and a per-site salt that rotates daily; the inputs are discarded immediately - Nothing is written to the visitor's browser - The rotation means 'visitors today' is exact and 'visitors this month' is an estimate — say so beside the number - Carry the previous salt for a grace period so a session spanning the rotation is not counted twice WHERE THE COLLECTOR RUNS - On a different machine from the site it measures. If the site is down you still want to know what traffic tried to arrive - Serve the script from your own domain, ideally from a first-party path proxied to the collector. A script on a well-known analytics hostname is on every blocklist within a week - The collect endpoint answers 204 in a couple of milliseconds and writes after responding BOTS AND PREFETCHES - Flag, never drop, and exclude through a SQL view so the filtering lives in one place rather than fifteen chances to forget it - Detection from the user agent list, from whether the script executed at all, and from behaviour — no referrer, one page, zero time, arrivals too regular for a person - Referrer spam counted separately rather than let into 'top sources' - Prefetches and prerenders identified from request headers and kept out of the view count. Two refreshes must not produce six views - Redirects do not count, and only a 2xx GET is a page view THE DASHBOARD - One screen: headline numbers, one chart, then pages, sources, countries, devices and goals - Every figure filterable by every dimension, with a comparison against the previous period - Definitions written beside the numbers, because everybody computes bounce rate differently - A public sharing link per site, read-only — publishing your own numbers is a small act of credibility OPERATIONS - .env: DATABASE_PATH, BASE_URL, HASH_SALT, GEOIP_DB_PATH, SESSION_SECRET - Migrations on boot, each once; country from a local database file, never an external API - Nightly backup off the machine, restore script - Health endpoint WHAT MATTERS MOST Bot filtering and the first-party script path. Build collection, flagging and the excluding view before the dashboard, then reconcile a week against the access log and account for every difference.
What you lose
- A collector hosted apart from the site it measures, so a bad day for your server is not a gap in your numbers
- A script kept working as browsers change how they treat third-party requests
- Bot filtering and referrer-spam lists maintained against traffic from many sites
- Upgrades applied by somebody else, on a stack that includes a columnar database
If you would rather not build
- Umami — a small self-hosted collector and dashboard
- The reverse proxy access log, parsed nightly, which is analytics for nothing
The escape hatch
open source · no votes, no paid placement
GoatCounter
$0One binary, no cookies, free for non-commercial sites.
arp242/goatcounterfree · open source
Why this verdict
our own opinion · changed only by a person
80/100
Verdict yes at 80: the same argument as the hosted product, one step further along. The community edition exists and is good; the reason to build is that a columnar database is more machinery than a small site needs, and SQLite holds years of traffic on the cheapest box available.
History
tracked since 14 Aug 2026 · nothing is ever overwritten
Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.
Questions about Plausible CE
answered from the record above
Is Plausible CE free?
No — the plan we track is $9 a month. Growth from $9/month billed monthly for 10,000 monthly page views; the community edition is free to self-host under AGPL.
Can you replace Plausible CE by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 80 out of 100, build time one session. Read what you lose before you decide.
How much does Plausible CE cost?
$9 a month on Growth — $108 a year. Recorded 14 Aug 2026.
What do you lose by replacing Plausible CE?
A collector hosted apart from the site it measures, so a bad day for your server is not a gap in your numbers; A script kept working as browsers change how they treat third-party requests; Bot filtering and referrer-spam lists maintained against traffic from many sites; Upgrades applied by somebody else, on a stack that includes a columnar database. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Plausible CE?
Yes: Plausible CE, GoatCounter. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

