WFD 19committed

picking an analytics provider

infrastructure
·5 min read·Ryana May Que

goatcounter is the goat

went with goatcounter. signed up, added the script tag to the root layout, done.

it checked every box. free hosted for personal sites with no event caps or tier limits, open source under EUPL, cookie-free so no consent banners, and the script is ~3.5kb which is negligible. the dashboard shows exactly what i wanted (page views, referrers, top pages, rough geography) and nothing i didn't.

the deciding factor over umami cloud was simplicity. umami's free tier caps at 10k events per month and the company makes money from paid plans so the free tier is a funnel that could change. goatcounter's hosted service is donation-supported with no usage limits mentioned. one fewer thing to think about.

setup took about two minutes. sign up, copy the script tag, add it to the Next.js root layout via next/script, deploy.


Original Comparison

everything below is the original draft where i compared providers and worked through the decision.

i'd like to know if anyone's reading this. the answer is probably zero and that's fine, WFD 16 covers why i write regardless. i'd just like to know.

what i actually need

page views, referrers, top pages, rough geography. which WFDs get read, where traffic comes from if it comes from anywhere. nothing else.

the rules

  • open source
  • free
  • no cookies, no consent banners
  • lightweight
  • no google analytics

what got cut

provider why it's out
vercel analytics proprietary, vendor-locked, the data belongs to vercel
fathom proprietary, $15/mo minimum
simple analytics proprietary, €9/mo minimum
posthog open source, ~70kb script, full product analytics suite with session replays and feature flags. forklift for a pencil.
matomo open source, uses cookies by default, requires a consent banner unless you disable everything useful. at that point you've built a worse goatcounter.
google analytics no.

what's left

provider license free hosted? self-hosted? script size github stars
goatcounter EUPL yes (personal use) yes ~3.5kb 5.5k
umami MIT yes (10k events/mo) yes ~2kb 35.2k
plausible AGPL no yes <1kb 24.2k
shynet Apache-2.0 no yes <1kb 3.1k
ackee MIT no yes ~1kb 4.3k

everything in this table is cookie-free and privacy-respecting by design. that's the baseline, not a feature.

goatcounter

goatcounter is made by Martin Tournoij and offered as a free hosted service for personal and small sites. no account limits, no event caps, just "reasonable public usage." donation-supported via GitHub Sponsors.

the script is ~3.5kb with a no-JavaScript tracking pixel fallback and log file import if you want zero client-side code. the dashboard covers page views, referrers, browsers, screen sizes, locations. written in Go, self-hostable with SQLite or PostgreSQL.

it is a one-person project. if Martin stops maintaining it the hosted service could disappear, and the code is open source so worst case i run it myself or migrate.

umami

umami has the most GitHub stars of any open source analytics tool (35.2k). MIT licensed. the cloud free tier gives 10k events per month.

built with Next.js, PostgreSQL-backed, ~2kb tracking script. the free tier is relatively new and the company makes money from paid plans so it's a funnel. 10k events/month is generous now and could shrink later.

plausible

plausible has the smallest tracking script at under 1kb. AGPL licensed, EU-based, funded entirely by subscribers. 24.2k stars. everyone recommends it.

there's no free hosted tier. $9/mo minimum. self-hosting the Community Edition is free and requires ClickHouse and PostgreSQL, making it the heaviest self-hosted option. premium features are stripped, releases come twice per year, no official support. a lot of infrastructure for page view counts.

shynet

shynet works without any JavaScript at all using a 1x1 tracking pixel. self-hosted only, built with Django, under 1kb when the script is used. tracks page load times, bounce rates, session durations, referrers, device info. respects Do Not Track headers by default.

the last release was July 2023. 51 open issues, 9 open PRs. Django means another stack on the homelab.

ackee

ackee has probably the prettiest dashboard of the bunch. Node.js, GraphQL API, MIT licensed, multi-step anonymization. self-hosted only, ~1kb tracking script.

less actively maintained than goatcounter or umami. GraphQL for personal analytics feels like overkill.

where i'm leaning

goatcounter. sign up, add a script tag, done. nothing to maintain, no event caps to worry about. the ~3.5kb script is the biggest here and still negligible.

umami cloud is the runner-up with a more polished dashboard. goatcounter not having tier limits makes it simpler.

if goatcounter disappears i'll self-host umami. i already know the stack.

Note

haven't set anything up yet. writing this down to think through it first.

does it matter

arguments against:

  • the writing doesn't change based on who reads it
  • checking analytics becomes a habit that adds nothing
  • zero readers is a valid outcome and i already accepted that

arguments for:

  • knowing which WFDs get read helps me understand what resonates
  • referrer data shows if anything i write gets shared anywhere
  • there's a difference between accepting zero and confirming zero

probably not. there's something satisfying about a page view counter that isn't zero, even if it's just me checking whether the deployment worked. and if it is zero, that's fine too.

want to talk about this? hey@ryanaque.com