GoatCounter
EUPL-1.2 (server) · ISC (count.js) ↻ 5 days ago Self-host ✓ Free
← All tools

GoatCounter Review (2026)

Solo-developer cookieless analytics — single binary on SQLite, EUPL-1.2 license

🇮🇪 Ireland Since 2019 EUPL-1.2 (server) · ISC (count.js)

Lightest stack in the entire category. Single static Go binary (~10-15 MB), SQLite by default, Docker optional. No Postgres, no ClickHouse, no Redis, no Kafka. Comfortable on a $5/mo VPS with 256 MB RAM. Contrast with Plausible (Postgres + ClickHouse) or Matomo (PHP + MySQL + Redis archiving cron).

— Mark Sutton, editor
GoatCounter public stats — Pages with sparklines, weekly date filter (stats.arp242.net live demo)
Dashboard captured via puppeteer
Editor score 3.5/5 ★ ★ ★ ★ ★
From Free Cloud + self-host
GitHub ★ 5,662 254 forks · last commit 5 days ago
Hosting Self-host ✓ EU hosted
Privacy passport

GoatCounter compliance at a glance

GDPR posture, sub-processors under DPA, per-jurisdiction stance, and encryption — everything a procurement team checks.

GDPR ✓ Compliant EU General Data Protection Regulation EU's omnibus privacy law requiring a lawful basis for processing personal data (consent, legitimate interest, etc.). Applies to anyone handling EU-resident data. GoatCounter's posture: Legitimate interest.
CA
CCPA ✕ Not held California Consumer Privacy Act California Consumer Privacy Act — rights for California residents (access, deletion, opt-out of sales). Triggered at $25M revenue or 50k+ CA-consumer records.
UK PECR ✕ Not held UK Privacy and Electronic Communications Regulations UK Privacy and Electronic Communications Regulations sit on top of GDPR specifically for cookies and electronic marketing. PECR Reg 6 governs analytics-cookie consent.
SOC 2 · II ✕ Not held SOC 2 Type II SOC 2 Type II — independent audit verifying security/availability controls operate effectively over 6+ months. Standard B2B procurement requirement.
ISO27001
ISO 27001 ✕ Not held ISO/IEC 27001 information-security ISO/IEC 27001 — international information-security management standard, certified by accredited bodies on a 3-year renewal cycle.
HIPAA ✕ Not held US HIPAA (with BAA) US health-data law requiring a Business Associate Agreement (BAA) for any tool touching protected health information. Without BAA the tool cannot legally process PHI.

Per-jurisdiction posture

🇫🇷
France CNIL No banner Cookieless + no PII = CNIL-exempt.
France · CNIL Cookieless + no PII = CNIL-exempt.
🇬🇧
United Kingdom UK ICO / PECR Banner recommended PECR Reg 6 likely doesn't trigger (no cookies), but no formal ICO ruling.
United Kingdom · UK ICO / PECR PECR Reg 6 likely doesn't trigger (no cookies), but no formal ICO ruling.
🇩🇪
Germany TTDSG Banner recommended TTDSG §25 stricter reading by some German DPAs — disclosure recommended.
Germany · TTDSG TTDSG §25 stricter reading by some German DPAs — disclosure recommended.
🇮🇹
Italy Garante Banner recommended Italian Garante is the strictest in EU — disclosure recommended.
Italy · Garante Italian Garante is the strictest in EU — disclosure recommended.

Sub-processors (3)

GDPR Art. 28 disclosure — third parties under DPA that may receive data.

Martin Tournoij (sole trader) Legal entity (sole-trader data processor) Ireland
Hetzner Online GmbH Cloud hosting — Finland AND Germany data centers Finland
Stripe Payment processing (paid subscriptions) Ireland

● Collected

  • URL of page visited
  • HTTP referrer
  • User-Agent (browser/OS family)
  • Country (from IP, IP not stored)
  • Screen size (optional)

● Explicitly NOT collected

  • IP address (not stored, used briefly for country lookup only)
  • Device fingerprint
  • Cross-site tracking identifiers
  • Personal user data
Data retention

GoatCounter does not publish a retention period on /pricing or /privacy. Backups retained up to 30 days post-deletion. Self-hosted is unlimited.

Encryption
  • In transit: TLS
  • At rest: Encrypted at rest (Hetzner-managed)
DPA Yes · manual
✦ AI & Modern Capabilities

How GoatCounter works with AI agents

Tier 3 — no AI yet — vendor focuses on classic privacy-first analytics; no AI/MCP features advertised.

✕ AI Chat Not yet

Conversational natural-language interface

Not advertised by vendor

✕ MCP Server Not yet

Model Context Protocol — Claude / Cursor / Codex

Not advertised by vendor

✕ Agent API Not yet

Programmatic AI-agent endpoints

Not advertised by vendor

✕ AI Insights Not yet

Anomaly detection / hypothesis / summaries

Not advertised by vendor

✕ Export for AI Not yet

Structured export formatted for LLM ingestion

Not advertised by vendor

Strengths & weaknesses

What makes GoatCounter worth a look — and where it falls short.

Strengths 8

  • Lightest stack: single Go binary on SQLite, ~256 MB RAM
  • EUPL-1.2 license (server) + ISC count.js — friendlier than AGPL
  • Genuinely free for personal use, no card, no nag
  • 8-hour salt rotation — most aggressive privacy in the field
  • Built-in Let's Encrypt + ACME for TLS
  • NLnet NGI0 grant funded — EU public-interest project
  • ~3 KB tracker (gzipped)
  • Hetzner Finland + Germany hosting on Cloud

Weaknesses 7

  • Solo developer — bus factor of 1
  • Dated UI vs Umami's modern React dashboard
  • No funnels, no goals, no conversions
  • No GA4 importer (logfile import only)
  • No official WordPress plugin
  • No mobile SDKs / webhooks / plugin system
  • No HIPAA / no SOC 2 / no ISO 27001

Feature matrix

All 38 verified checks across 4 categories. Hover any row for the editor's note.

Tracking & Reporting 15

  • Pageviews & visitors ✓Yes
  • Live visitor count —No
  • Top pages report ✓Yes
  • Top referrers ✓Yes
  • UTM campaign tracking ✓Yes
  • Country & city breakdown ~Partial
  • Device, browser, OS ✓Yes
  • Bounce / engagement —No
  • Time on site —No
  • Custom events ~Partial
  • Goals / conversions —No
  • Funnels —No
  • Outbound link tracking —No
  • File download tracking —No
  • 404 / error tracking —No

Privacy & Compliance 9

  • Cookieless by default ✓Yes
  • No personal data collected ✓Yes
  • GDPR-compliant out of the box ✓Yes
  • Data hosted in EU ✓Yes
  • Data hosted in US —No
  • Self-hostable ✓Yes
  • Open source ✓Yes
  • Data retention period Configurable
  • Bot & spam filtering —No

Setup & Integrations 10

  • Script weight (KB) 3
  • Single-snippet install ✓Yes
  • WordPress plugin ~Partial
  • Proxy / first-party domain ✓Yes
  • Public API ✓Yes
  • Data export (CSV/JSON) ✓Yes
  • Google Search Console connector —No
  • Email digests ✓Yes
  • Slack / webhook alerts —No
  • Public shareable dashboard ✓Yes

Pricing & Plans 4

  • Free tier exists ✓Yes
  • Entry price ($/mo) Free
  • Price at 100k pageviews Free
  • Unlimited sites on entry plan ✓Yes

GoatCounter vs alternatives

How it compares to the closest 3 rivals on key buyer-decision fields.

Compare GoatCounter against

Side-by-side comparisons with other tools in the directory.

Pricing tiers

Real plans, real numbers — pulled from goatcounter.com (verified May 2026).

Self-hosted

Free/free

Unlimited

  • ✓ Single Go binary
  • ✓ SQLite default
  • ✓ Built-in TLS
  • ✓ Forever free
Cloud (free)

Free/free

Reasonable use

  • ✓ Personal + SMB
  • ✓ No card needed
  • ✓ No formal cap
Donate

Custom

—

  • ✓ GitHub Sponsors
  • ✓ Pay-what-you-can
  • ✓ Supports the maintainer

Tech specs

Stack, repo health, deployment options — for engineers evaluating self-host.

Stack

  • Written inGo ≥1.21
  • DatabaseSQLite (default) · PostgreSQL (optional)
  • TLSBuilt-in Let's Encrypt + ACME
  • LicenseEUPL-1.2 (server) · ISC (count.js)
  • Min specs~256 MB RAM · 1 vCPU (community-reported, no vendor floor)

GitHub github.com/arp242/goatcounter

  • Stars★ 5,662
  • Forks254
  • Open issues33
  • Last commit5 days ago

Deploy

  • · Single static binary
  • · Docker
  • · From source

Used by

Companies and projects that publicly trust GoatCounter.

NLnet NGI0 grant
arp242.net
Mark Sutton

Editor review

Reviewed by Mark Sutton, cross-checked against vendor documentation. Click any panel to expand.

+ What it does well

Lightest stack in the entire category. Single static Go binary (~10-15 MB), SQLite by default, Docker optional. No Postgres, no ClickHouse, no Redis, no Kafka. Comfortable on a $5/mo VPS with 256 MB RAM. Contrast with Plausible (Postgres + ClickHouse) or Matomo (PHP + MySQL + Redis archiving cron).

Genuinely free for personal use. Vendor's homepage explicitly says: "GoatCounter.com is currently offered for free for reasonable public usage. Running your personal website or small-to-medium business on it is fine." No card, no nag, no pressure to upgrade. Donation-supported via GitHub Sponsors.

Most aggressive privacy posture in the cookieless category. Salt rotates every 8 hours (vs daily for Plausible/Fathom/Pirsch, monthly for Umami). Cross-visit linkability window is the shortest in the field.

EUPL-1.2 license. A weak-copyleft, EU-jurisdiction-aware license. Friendlier than AGPL for derivative work; the integration script count.js is separately ISC-licensed for frictionless embedding.

NLnet NGI0 grant funded. EU public-interest software grant — not VC-backed, not running on burn rate.

− Weaknesses & gotchas

Solo developer — bus factor of 1. GoatCounter is built and maintained by Martin Tournoij (arp242) alone. No co-maintainers visible in the repo. If Martin stops, the hosted service goes with him. The OSS code keeps working forever (it's a static binary), but there's no roadmap velocity, no community of contributors absorbing requests.

UI is intentionally basic / dated. No dark mode polish, no drag-rearrange dashboards, simple bar charts. Reviewers consistently note it looks "2010-era" — fine for a personal blog, jarring next to Umami's modern React dashboard.

Feature gaps are real. No funnels, no goals/conversions, no custom dimensions, no A/B testing, no session replay, no heatmaps, no mobile SDKs, no webhooks, no plugin system. If you outgrow basic pageviews + referrers + UTM, you outgrow the tool.

No GA4 importer. Migration tooling is logfile-based only (nginx/Apache/Caddy/CloudFront). No one-click backfill from Google Analytics.

No official WordPress plugin. Community manual install only — search "goatcounter" on wordpress.org and nothing matches.

No HIPAA / no SOC 2 / no ISO 27001. No formal certifications; appropriate for solo blogs and OSS docs, not enterprise procurement.

★ Best for

Best for solo bloggers and writers (Hugo, Jekyll, Astro static sites), OSS maintainers tracking docs/landing pages, privacy-first indie hackers on $5 VPS budgets, and side-project owners who want zero ops burden. Anyone tired of GA4's UI complexity who just wants pageviews + referrers.

Self-hosting is the obvious recommendation — a single Go binary on SQLite scales fine for any solo/small portfolio without ever paying anyone. Cloud is for people who don't want to even think about it.

Not for e-commerce sites (no goal/revenue tracking), marketing teams running paid acquisition (no UTM funnel attribution), agencies managing multi-client dashboards with white-label needs, anyone needing session recordings or A/B testing, teams requiring SSO/SAML or RBAC, or healthcare contexts requiring a BAA.

⚡ Setup walkthrough

Self-host (recommended):
1. Download single static binary from github.com/arp242/goatcounter/releases (Go binary, ~10-15 MB).
2. goatcounter serve -listen :8080 -tls http — that's it. SQLite is default storage, no DB to set up.
3. Built-in Let's Encrypt + ACME for TLS.
4. Add a single to your pages.
5. ~5-10 minutes total.

Cloud (free):
1. Sign up at goatcounter.com — free for personal use, no card.
2. Get your subdomain (yoursite.goatcounter.com).
3. Paste the snippet.
4. ~2 minutes.

Docker also available for containerized deploys (arp242/goatcounter on Docker Hub).

↔ Migrating from GA4

No GA4 importer. GoatCounter doesn't ship one and the maintainer has stated no plans to build one. Migration is a clean cut, not a data merge.

Logfile import is the only documented migration path: goatcounter help import reads nginx, Apache, Caddy, and CloudFront access logs to backfill historical pageview data into GoatCounter.

Recommended: parallel tracking for ~30 days. Don't expect identical numbers — GoatCounter's 8-hour salt rotation means uniques drift differently from GA4's persistent Client-ID. Export GA4 historical data to BigQuery if you need it preserved before sunset.

The honest pitch: if you're moving away from GA4 because you wanted relief from complexity, GoatCounter is the relief. If you wanted historical-data continuity, look at Plausible/Fathom (free GA4 importers) instead.

Help & FAQ

Where to get help with GoatCounter and the questions buyers email us about.

Support

HoursAsync (single developer)IST (UTC+0/+1)
ChannelsEmail · Github issues
LanguagesEnglish
Response SLA~72h

FAQ (6)

Is GoatCounter actually free?

Yes — for personal use, OSS projects, hobby sites, and small/non-profit organizations the Cloud version is permanently free (donation-supported via GitHub Sponsors). Larger commercial use is asked to pay $15/mo for Cloud. Self-hosted is free under EUPL-1.2.

Why is GoatCounter so minimalist?

By design. The maintainer Martin Tournoij decided analytics didn't need a Series B — it's a 3KB script and a single Go binary on SQLite. No funnels, no session recording, no e-commerce attribution, no fancy dashboards. If you outgrow it, switch to Plausible/Fathom/Matomo. Until then, GoatCounter stays out of your way.

Does GoatCounter honor Do Not Track?

No. The maintainer's published position is that DNT was rendered useless by the ad-tech industry years ago and is not a meaningful privacy signal. GoatCounter argues that since it doesn't collect personal data anyway, DNT is moot. Visitors who want to opt out should use a browser ad-blocker.

Can I self-host GoatCounter on a $5 VPS?

Yes — that's the explicit design target. GoatCounter is a single Go binary using SQLite by default (PostgreSQL optional for higher traffic). It runs comfortably on 256MB RAM, 1 CPU. Built-in TLS via Let's Encrypt — no nginx/Caddy needed.

How is GoatCounter different from Plausible?

GoatCounter is a one-person project, free for personal/SMB use, intentionally minimalist (no funnels, no goals beyond simple events), and runs as a single Go binary on SQLite. Plausible is venture-funded with a 10+ person team, has Cloud-only features (Looker Studio, sub-folder views), runs on Elixir + ClickHouse, and starts at $9/mo. GoatCounter wins on minimalism + price; Plausible wins on polish + features.

Where is GoatCounter hosted?

Hetzner Online GmbH data centers in Finland and Germany — exclusively EU. The legal entity is Martin Tournoij (sole trader), based in Ireland per the privacy policy.