Website analytics without cookies or personal data. It reports visitors, pages, referrers and goals on a single screen, and is sold specifically as the way to have numbers without a consent banner.
Build me analytics that replace Fathom: visitors, pages, referrers and goals on one screen, with no cookie and nothing that needs a consent banner. STACK - Node 20+ with Fastify - SQLite through better-sqlite3, WAL mode - A tracking script under 2KB gzipped, served from my own domain - Server-rendered dashboard, charts as inline SVG drawn by hand - Caddy in front THE DATA MODEL - sites: id, domain, name, timezone, salt, is_public, created_at - pageviews: id, site_id, path, query, referrer_host, referrer_url, utm_json, country, lang, device, browser, os, screen_bucket, status, duration_ms, bot, prefetch, visitor_hash, session_id, is_entry, is_exit, created_at - goals: id, site_id, name, kind, config_json — a path, a custom event, or an outbound link - conversions: id, goal_id, pageview_id, value_cents, created_at - events: id, site_id, name, path, value_num, meta_json, visitor_hash, bot, created_at - Record more than you publish. A signal not captured today starts from zero the day somebody wants it, and a missing year cannot be bought back NO COOKIE, WHICH IS THE ENTIRE POSITION - Nothing is written to the visitor's browser. No cookie, no localStorage, no fingerprint - visitor_hash is HMAC-SHA256 of the address, the user agent and a per-site salt that rotates daily. The address and the raw user agent are discarded immediately and never stored - The daily rotation means a visitor cannot be followed from one day to the next. That is the honest trade, and it means 'visitors today' is exact while 'visitors this month' is an estimate — say so on the page, next to the number - This is the same construction the reputable privacy-first analytics products use, and it is stricter than any cookie: nothing is stored on the device, and the hash identifies nobody - Write a page in your own words explaining exactly what is collected and what is never done with it, and link it from the dashboard. If you cannot explain your own collection in six sentences, collect less WHY THIS AVOIDS A BANNER — AND THE HONEST CAVEAT - No storage on the device is what takes it outside the cookie rules - Whether the processing needs a legal basis is a separate question and depends on where you and your visitors are. The README states the design and says plainly that this is not legal advice - Nothing is sent to any third party, ever. That is the property that makes the rest defensible WHAT IT MEASURES - Views, visitors, sessions, bounce rate, average time on page, pages per session — each with its definition written beside it, because everybody computes these differently - Top pages, top referrers with the full URL kept so 'which thread on which forum' is answerable, countries, devices, browsers, operating systems, languages - Entry and exit pages - UTM parameters parsed into their own columns, and referrers grouped into sources — search, social, direct, referral — with the grouping rules visible and editable rather than magic - Goals with a conversion rate and an optional value - Any figure filterable by any dimension, always, with a comparison against the previous period BOTS AND PREFETCHES, WHICH DECIDE WHETHER THE NUMBERS MEAN ANYTHING - Flag, never drop. A bot row is written with bot = 1 and excluded through a SQL view, so the filtering lives in one place rather than in 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 to be human - Prefetches and prerenders identified from the request headers and kept out of the view count. Two refreshes must not produce six views, which is what happens the first time a site turns on link prefetching - Redirects do not count, and only a GET can be a page view. A HEAD from an uptime monitor is answered, not read THE DASHBOARD - One screen. Four headline numbers, a chart, and the tables underneath. Resist adding a second page — the product being replaced is bought precisely because it fits on one screen - Dark and light, fast, no framework - A public sharing link per site, read-only, optionally password-protected COLLECTION - The endpoint answers 204 in a couple of milliseconds and writes after responding - Country from a local database file. Never an external geolocation API - A fallback for browsers with the script blocked: an image beacon, or server-side logging from the reverse proxy OPERATIONS - .env: DATABASE_PATH, BASE_URL, HASH_SALT, GEOIP_DB_PATH, SESSION_SECRET - Migrations on boot, each once - Nightly backup off the machine, restore script - Health endpoint WHAT MATTERS MOST The bot flag and the written definitions. Build collection, flagging and the excluding view before the dashboard, then compare a week of your own numbers against the server's access log and account for the difference. Analytics whose numbers you cannot defend in a sentence are worse than none — and the moment anyone else is shown them, a number you cannot explain is a number that will be doubted. Give me the repository, the tracking script, migrations, .env.example, and a README with deploy steps behind Caddy and the privacy page written out.
What you lose
- EU-isolated data handling and the compliance paperwork that comes with it
- A hosted collector that keeps working when your own server is the thing having a bad day
- Bounce detection, UTM parsing and referrer grouping that already handle the messy cases
- Email reports and uptime monitoring bundled alongside the analytics
- Not having to think about a table that grows with every single visit
If you would rather not build
- Plausible community edition — self-hosted
The escape hatch
open source · no votes, no paid placement
Umami
$0Web analytics with no cookies and no personal data, self-hosted or on their cloud.
umami-software/umamifree · open source
GoatCounter
$0Very small analytics tool that counts visits without tracking people.
arp242/goatcounterfree · open source
Why this verdict
our own opinion · changed only by a person
82/100
Verdict yes at 82: the same reasoning as Plausible — collection and a dashboard are one session. The score edges below the seventies only for the operational reality of a forever-growing table. Price needs verification before this publishes.
History
tracked since 6 Aug 2026 · nothing is ever overwritten
Questions about Fathom Analytics
answered from the record above
Is Fathom Analytics free?
No entry price recorded yet. The cheapest tier we could see was $45/mo for 500,000 pageviews, which does not read like a starting price — so rather than publish a figure we are unsure of, we have left it out. See the pricing page for your own traffic.
Can you replace Fathom Analytics by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 82 out of 100, build time one session. Read what you lose before you decide.
How much does Fathom Analytics cost?
Fathom Analytics has no public headline price. The tier we track is the entry plan.
What do you lose by replacing Fathom Analytics?
EU-isolated data handling and the compliance paperwork that comes with it; A hosted collector that keeps working when your own server is the thing having a bad day; Bounce detection, UTM parsing and referrer grouping that already handle the messy cases; Email reports and uptime monitoring bundled alongside the analytics; Not having to think about a table that grows with every single visit. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Fathom Analytics?
Yes: Umami, 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

