GoatCounter
Solo-developer cookieless analytics — single binary on SQLite, EUPL-1.2 license
- HQ🇮🇪 Ireland
- Founded2019
- LicenseEUPL-1.2 (server) · ISC (count.js)
- ReferenceRead full review
Two privacy-first web analytics tools, compared side-by-side on the same axes. Data is descriptive — no rankings, no editorial winners.
Solo-developer cookieless analytics — single binary on SQLite, EUPL-1.2 license
Open-source self-hosted privacy analytics
Five facts that most often qualify or disqualify a tool early.
| GoatCounter | Umami | |
|---|---|---|
| Price floor | Free | Free |
| Free tier | Yes | Yes |
| Hosting model | SaaS + self-host | SaaS + self-host |
| Data residency | EU | US |
| Cookieless | Yes | Yes |
Frameworks claimed and sub-processors disclosed under DPA.
| Framework | GoatCounter | Umami |
|---|---|---|
| GDPR | Held | Held |
| CCPA | Not held | Held |
| UK PECR | Not held | Not held |
| SOC 2 Type II | Not held | Not held |
| ISO 27001 | Not held | Not held |
| HIPAA | Not held | Not held |
Cheapest published plan from each vendor that covers the listed pageview volume. Retrieved May 1, 2026.
| Traffic | GoatCounter | Umami |
|---|---|---|
| 10k pv/mo | $0/moEntry | $0/moHobby |
| 100k pv/mo | $15/mo100k | $0/moHobby |
| 500k pv/mo | Custom — contact sales | $20/moPro |
| 1M pv/mo | Custom — contact sales | $20/moPro |
Volumes between tiers follow each vendor's published pricing model. "Custom" indicates the vendor does not publish a price for that volume on their pricing page.
All 38 verified checks across 4 categories.
| Feature | GoatCounter | Umami |
|---|---|---|
| Pageviews & visitors | Yes Pageviews + visitors |
Yes Pageviews + visitors |
| Live visitor count | No Not in dashboard |
No Cloud only feature |
| Top pages report | Yes By hits, simple list |
Yes By pageviews/visitors |
| Top referrers | Yes Referrer list |
Yes Referrer + UTM breakdown |
| UTM campaign tracking | Yes Campaign tracking via UTM parameters |
Yes Auto-detected from referrer |
| Country & city breakdown | Partial Country-level only; no city tracking |
Yes Country + city |
| Device, browser, OS | Yes Browser + OS |
Yes Device + browser |
| Bounce / engagement | No Not measured |
Yes Bounce rate |
| Time on site | No Not measured |
Yes Avg session duration |
| Custom events | Partial count({event:true}) or data-goatcounter-click attribute; no custom dimensions |
Yes Custom events with property tracking; v3.1 added Custom Boards |
| Goals / conversions | No Not supported — basic events only, no conversion modeling |
Yes Cloud goals; self-host via SQL |
| Funnels | No Not supported — intentionally minimal scope |
Yes Custom Boards (v3.1+); flat funnel reports |
| Outbound link tracking | No Manual via custom hits |
Yes Via custom events |
| File download tracking | No Manual via custom hits |
Yes Via custom events |
| 404 / error tracking | No Pageview to /404 path |
No Manual events |
| Feature | GoatCounter | Umami |
|---|---|---|
| Cookieless by default | Yes Cookieless: no localStorage; salt rotates every 8 hours (more aggressive than daily-rotation peers) |
Yes Cookieless tracking; visitor hash with salt rotation (monthly default, configurable) |
| No personal data collected | Yes IPs not stored; in-memory only for geo + 8h salt hash |
Yes IP not stored; used in-memory for geo + salted hash |
| GDPR-compliant out of the box | Yes Vendor explicitly claims no banner needed; legitimate-interest basis |
Partial Vendor claims no banner needed (cookieless + no PII); not a legal opinion, EU DPAs may differ on Schrems-II/US infra |
| Data hosted in EU | Yes Hetzner Finland + Germany; EU-only processing |
Partial Mixed: Vercel + Cloudflare (US), ClickHouse (US/EU), Hetzner (EU) |
| Data hosted in US | No EU-only — no US data residency |
Yes Vercel + Cloudflare US primary; control plane US-hosted |
| Self-hostable | Yes Single static Go binary or Docker; SQLite default, Postgres optional |
Yes Free, Docker |
| Open source | Yes Server: EUPL-1.2 (slightly modified); count.js: ISC |
Yes MIT |
| Data retention period | Configurable Indefinite by default on Cloud + self-host; manual deletion via dashboard/API |
Configurable Hobby 6 mo · Pro 2 yr · Business 5 yr · Self-host: indefinite |
| Bot & spam filtering | No Founder explicitly does not implement DNT (see arp242.net/dnt.html essay) |
Yes Bot detection |
| Feature | GoatCounter | Umami |
|---|---|---|
| Script weight (KB) | 3 ~3.2 KB gzipped (~9 KB uncompressed); ISC-licensed count.js |
2 ~2 KB gzipped (4.5 KB uncompressed); same gzipped basis as peers |
| Single-snippet install | Yes data-goatcounter endpoint URL |
Yes data-website-id attribute |
| WordPress plugin | Partial Plugin on GitHub (savjee/goatcounter-wp); not in WP.org repository |
No No official plugin; community "Integrate Umami" by Ancocodet (2k+ installs) |
| Proxy / first-party domain | Yes Self-host single binary or Docker; ISC-licensed count.js works anywhere |
Yes Configurable via TRACKER_SCRIPT_NAME env (rename to dodge adblockers) |
| Public API | Yes REST API at /api/v0/* with Bearer token auth |
Yes Full REST API (websites, stats, events, sessions, reports, realtime) |
| Data export (CSV/JSON) | Yes CSV/JSON |
Yes CSV |
| Google Search Console connector | No No native GSC connector |
No No native GSC connector |
| Email digests | Yes Weekly email reports |
Yes Cloud |
| Slack / webhook alerts | No No webhooks, no Slack integration, no plugin system |
No No native Slack |
| Public shareable dashboard | Yes Public stats per site; visitor counter widget |
Yes Share-link toggle |
| Feature | GoatCounter | Umami |
|---|---|---|
| Free tier exists | Yes Free Cloud for "reasonable public use" + permanent free Self-host |
Yes Hobby plan = permanent free (100k events/mo, 3 sites, 6mo retention) |
| Entry price ($/mo) | No No paid tiers; donation-supported via GitHub Sponsors |
20 Cloud Pro tier (1M events/mo, 20 sites, 2yr retention) |
| Price at 100k pageviews | No No tier ladder; "personal use OK, millions of pageviews/day not" |
20 Pro covers 1M events/mo (well over 100k benchmark) |
| Unlimited sites on entry plan | Yes Self-host: unlimited sites; Cloud: unlimited within fair-use |
Partial 3 sites Hobby · 20 sites Pro · unlimited Business · unlimited Self-host |
Axes where the two tools take materially different approaches. Each paragraph describes both vendors in parallel structure.
GoatCounter starts at $0/mo and reaches $15/mo at 100k pageviews. Umami starts at $0/mo and reaches $19/mo at the same volume. Both vendors publish per-tier pricing on their public pages.
GoatCounter is licensed under EUPL-1.2 (server) · ISC (count.js) and is available for self-hosting. Umami is licensed under MIT and is available for self-hosting.
GoatCounter data residency: EU. Schrems II posture: eu only no transfer. Umami data residency: US. Schrems II posture: sccs.
GoatCounter uses daily salt hash for visitor uniqueness. Umami uses daily salt hash. Both mechanisms operate without setting cookies on the visitor's browser.
More comparisons and reference pages on this site.