unsubbed.co

GoatCounter

GoatCounter handles easy web statistics without tracking of personal data as a self-hosted solution.

Open-source analytics, honestly reviewed. No marketing fluff, just what you get when you self-host it.

TL;DR

  • What it is: Open-source web analytics platform — think Google Analytics stripped down to what actually matters, with no user tracking and no GDPR consent banner required [1][2].
  • Who it’s for: Founders, bloggers, and small-to-medium businesses who want meaningful pageview data without the legal overhead of consent management, the complexity of Google Analytics, or the infrastructure weight of Matomo [1][2].
  • Cost savings: Google Analytics 4 is free but sends your data to Google and requires consent banners in the EU. Matomo Cloud starts at €19/mo. GoatCounter’s hosted tier is free for low-traffic sites; self-hosted runs on a $5/mo VPS with a single binary and SQLite [2].
  • Key strength: Genuinely simple by design. No cookies, no fingerprinting, no cross-site tracking — privacy is the architecture, not a setting you toggle [1][2].
  • Key weakness: Not an event-tracking or conversion-funnel platform. If you need goal tracking, A/B testing, custom dimensions, or the kind of behavioral depth Google Analytics 4 offers, GoatCounter is the wrong tool [1].

What is GoatCounter

GoatCounter is an open-source web analytics platform written in Go by Martin Tournoij (GitHub: arp242). The pitch in the README is as plain as it gets: “Easy web analytics. No tracking of personal data.” [1] It bills itself as an alternative to Google Analytics or Matomo, and that positioning is accurate — but it occupies a specific, narrower slot than either [1][2].

The project ships as a statically compiled binary with no runtime dependencies. You point it at a SQLite file (or PostgreSQL for higher traffic) and it runs. That’s the whole install [1]. There’s no Docker swarm, no Redis cluster, no Node.js process to babysit. It’s one of those rare self-hosted tools where the deployment story matches what’s written in the docs.

GoatCounter currently sits at 5,564 GitHub stars [merged profile]. It’s maintained by one primary author rather than a VC-backed company, which has implications for both longevity and feature velocity.

The privacy model is worth understanding before everything else. GoatCounter identifies unique visits without cookies and without storing any personal data. It uses a daily-rotated hash that includes IP address, User-Agent, and some other request metadata — not stored anywhere, just used to distinguish one session from another within a single day. The result: you get visitor counts that aren’t inflated by the same person refreshing, without any of the fingerprinting or cross-site tracking that triggers GDPR consent requirements [1][2]. The author has written explicitly about this design — the “Why GoatCounter ignores Do Not Track” document on the website is worth reading if you care about the technical rationale [2].

The license is listed as NOASSERTION in automated tooling, which usually means the SPDX identifier isn’t standard. The README explicitly says “completely Open Source/Free Software” and states it can be “self-hosted without restrictions” [1][2]. In practice it behaves like open-source — the full source is public, self-hosting is unrestricted, and contributions are accepted. If you’re in a legal context where the exact license identifier matters, read the LICENSE file in the repository before committing.


Why people choose it

No usable third-party review articles were available in the source material for this review — the provided sources were irrelevant to GoatCounter. What follows is based on primary sources (README, website, design documents) and the tool’s stated design philosophy.

The reasons to reach for GoatCounter over the alternatives are consistent and narrow:

You want to skip the consent banner. This is the single biggest reason. GDPR, PECR, and similar regulations require explicit consent before you drop cookies or build user profiles. GoatCounter’s design means you legally don’t need a banner in most EU jurisdictions — not because it ignores privacy law, but because it doesn’t collect personal data in the first place [1][2]. The difference in practice: your real traffic numbers. Cookie consent acceptance rates typically run 60–80%, meaning 20–40% of your visitors are invisible in cookie-based analytics. GoatCounter sees all of them [2].

You want Google Analytics out of your stack. GA4 is free but it sends all your traffic data to Google’s servers, it requires a consent banner in the EU, and the interface was redesigned into something significantly harder to navigate for simple use cases. GoatCounter’s dashboard shows pageviews, unique visits, referrers, browsers, locations, and screen sizes in a single scrollable page with no configuration required [1][2].

You want something simpler than Matomo. Matomo is the obvious privacy-respecting GA alternative, but it’s a PHP/MySQL application with a multi-step install, plugin management, and an interface that mirrors GA’s complexity. GoatCounter is explicitly designed for the person who found all those options confusing [1][2]. The README says: “Easy; if you’ve been confused by the myriad of options and flexibility of Google Analytics and Matomo that you don’t need then GoatCounter will be a breath of fresh air.” [1]

You run a personal site or small business. GoatCounter’s hosted tier is free for “reasonable public usage” on a personal website or small-to-medium business [2]. For those use cases it costs literally nothing and requires no infrastructure.


Features

Based on the README and website:

Data collection methods:

  • JavaScript snippet — single <script> tag, ~3.5KB of payload [1][2]
  • No-JavaScript tracking pixel — for environments where JS is blocked or disabled [1]
  • Backend middleware integration — send events from your application server directly via the REST API [1]
  • Log file import — parse nginx, Apache, Caddy, CloudFront, or any standard HTTP log format [1]

What it tracks:

  • Pageviews and unique visits (cookie-free session identification) [1]
  • Browser and browser version [1]
  • Geographic location [1]
  • Screen size [1]
  • Referring sites and UTM campaigns [1]
  • Custom paths and events via API [1]

What it doesn’t track:

  • Individual users across sessions [1]
  • Cross-site behavior [1]
  • Personal identifiers of any kind [1]

Dashboard features:

  • Single-page dashboard with all metrics visible at once [2]
  • “Text view” for accessibility — works with screen readers [1][2]
  • Path filtering [2]
  • Data export at any time [1][2]
  • REST API for backend integration and custom reporting [1]

Infrastructure:

  • SQLite (default) or PostgreSQL [1]
  • Statically compiled binary — no runtime dependencies [1]
  • Built-in TLS with automatic ACME/Let’s Encrypt certificate generation [1]
  • Docker available as an alternative to the binary [merged profile]
  • Multi-site support — one GoatCounter instance can serve multiple domains [1]

What GoatCounter does not have: event funnels, conversion tracking, A/B testing, heatmaps, session recordings, custom dimensions, or real-time streaming dashboards. It’s a pageview counter with referrer and basic device metadata. That’s it. For some use cases that’s exactly enough. For others it’s a hard blocker.


Pricing: SaaS vs self-hosted math

GoatCounter.com hosted:

  • Free for personal websites and small-to-medium businesses with reasonable traffic [2]
  • No hard limit published — the site says it’s “free for reasonable public usage” and that “sending millions of pageviews/day isn’t” covered [2]
  • Donations accepted via GitHub Sponsors to cover server costs [2]
  • No paid tier documented — this is a single developer running a donation-supported service, not a VC-backed SaaS

Self-hosted:

  • Software: free [1]
  • VPS: $5–10/mo (Hetzner CX11 or equivalent — SQLite runs comfortably on 1 vCPU, 2GB RAM for most sites)
  • Single binary, no external services required for SQLite deployments [1]

Google Analytics 4 for comparison:

  • Free, but requires a consent management platform in the EU (CMP software costs $10–50+/mo) and sends all data to Google
  • GA4’s interface complexity and the UA→GA4 migration drove significant user departures

Matomo Cloud for comparison:

  • Starts at €19/mo for 50,000 pageviews/mo on managed cloud
  • Self-hosted: free software, but PHP/MySQL stack requires more infrastructure than GoatCounter

Plausible Analytics for comparison (the most direct competitor):

  • $9/mo for up to 10,000 pageviews, $19/mo for 100K, $79/mo for 1M on hosted
  • Self-hosted available under AGPL

Fathom Analytics for comparison:

  • $15/mo for 100,000 pageviews, hosted-only, no self-hosted option

Concrete math for a small business:

Say you’re a founder running a marketing site with ~50,000 pageviews/month, currently paying for Matomo Cloud at €19/mo (€228/year) or Plausible at $9/mo ($108/year). GoatCounter self-hosted on a Hetzner VPS at $5/mo: $60/year. If your site traffic qualifies as “reasonable” for GoatCounter.com’s free tier: $0/year.

The catch: GoatCounter.com’s free tier has no SLA, no guaranteed uptime, and depends on one maintainer’s continued interest in running a free service. For anything production-critical, self-hosting the binary is the right call.


Deployment reality check

This is where GoatCounter earns its reputation. The deployment story is genuinely simple by self-hosted standards.

Binary install (simplest path):

  1. Download the pre-compiled binary for your OS from GitHub releases [1]
  2. Run goatcounter serve — starts on port 8080 with SQLite auto-created [1]
  3. Create your first site via the web wizard or CLI [1]
  4. For production: goatcounter serve -listen=:443 -tls=tls,rdr,acme — this handles HTTPS and certificate renewal automatically [1]

No nginx configuration required. No separate TLS termination proxy if you don’t want one. The binary handles it directly [1].

What you actually need:

  • A Linux VPS (any size — 1 vCPU, 512MB RAM is workable for SQLite on low-traffic sites)
  • A domain pointing to the VPS
  • That’s it for the minimal setup [1]

PostgreSQL if you need it: SQLite works well for most sites. The README is explicit about when to switch: “10 million pageviews spread out over 5 pages is quite fast even on SQLite, but spread out over 1 million different pages is much slower.” [1] The bottleneck is path cardinality, not raw volume. A high-traffic site with few pages stays on SQLite. A site with millions of unique URLs benefits from PostgreSQL.

Docker path: Docker is available if you prefer containers [merged profile]. The binary path is simpler for GoatCounter specifically because there are no service dependencies to orchestrate — you’re not losing anything by avoiding Docker here.

What can go wrong:

  • GoatCounter.com hosted service has no formal SLA and is run by a single maintainer. If that person stops maintaining it (they’ve been at it since at least 2019), the hosted option goes away.
  • The license ambiguity (NOASSERTION in automated tooling) is a minor issue for most users but worth verifying if your legal team cares about SPDX compliance.
  • Multi-site setup (multiple domains on one instance) requires CLI commands to configure — the wizard only creates the first site [1].
  • Realistic estimate for a technical user: 15–30 minutes from a fresh VPS to a working GoatCounter instance with HTTPS. For a non-technical founder following a guide: 1–2 hours including domain DNS propagation.

Pros and Cons

Pros

  • No cookie banner required. The architecture — not the configuration — means you likely don’t need GDPR consent popups. That’s a meaningful legal and UX advantage [1][2].
  • Single binary, zero dependencies. Download, run, done. No PHP, no Node.js, no Redis, no Elasticsearch. Lowest operational overhead in the analytics category [1].
  • Built-in TLS. Certificate management is included in the binary via ACME. You don’t need to configure nginx or Caddy just to get HTTPS [1].
  • SQLite by default. Appropriate for 99% of sites and eliminates the “set up a database server” step entirely [1].
  • Multiple data collection paths. JavaScript, pixel, backend middleware, log file import — you can use GoatCounter even on sites where you control only the server logs [1].
  • Accessible interface. Screen reader support is explicitly listed as a high-priority feature — rare in analytics tools [1][2].
  • Export your data anytime. Full data export, cancel at any time — no lock-in [1][2].
  • Free hosted tier for personal sites and small businesses [2].

Cons

  • No event tracking or funnels. If your analytics workflow includes conversion goals, e-commerce tracking, form submission events, or funnel visualization — GoatCounter doesn’t do any of that [1][2].
  • Single maintainer. This is a one-person project. The hosted service, the release schedule, and bug fixes all depend on one developer’s continued engagement. That’s a real risk for anything critical [2].
  • License ambiguity. The SPDX identifier doesn’t resolve cleanly in automated tooling. The README says “Open Source/Free Software” but you should read the actual LICENSE file if this matters to your organization [merged profile][1].
  • No team features. No user management, no role-based access, no shared dashboards with granular permissions. One GoatCounter instance, one admin [1].
  • Free tier has no SLA. GoatCounter.com is donation-supported. “Free for reasonable usage” is not a contractual commitment [2].
  • 5,564 GitHub stars — active and maintained, but significantly smaller community than Matomo (18K+ stars) or Plausible (18K+ stars). Fewer integrations, fewer third-party guides, smaller support surface.
  • No real-time data. GoatCounter aggregates stats and doesn’t offer a real-time visitor view [1].

Who should use this / who shouldn’t

Use GoatCounter if:

  • You run a content site, blog, SaaS marketing page, or small business site and want to know what pages people read and where they come from — nothing more.
  • You’re in the EU and want to skip the consent banner without flying blind on traffic.
  • You want the simplest possible self-hosted analytics with minimal server overhead.
  • You’re comfortable with (or can learn) basic Linux server management — the binary install is the easiest deploy in this category.
  • You want analytics on a site where JavaScript might be blocked (pixel and log-import options help here).

Skip it (use Plausible instead) if:

  • You want a polished, actively-developed SaaS analytics product with a company behind it and paid support options.
  • You need a slicker dashboard and are willing to pay $9–19/mo for managed infrastructure.
  • You want the same privacy-first model but with a more funded roadmap.

Skip it (use Matomo instead) if:

  • You need event tracking, goal funnels, e-commerce analytics, heatmaps, or session recordings.
  • You need proper team management with role-based access control.
  • You’re replacing Google Analytics for a marketing team that depends on behavioral data, not just pageview counts.

Skip it (stay on Google Analytics) if:

  • Your marketing team depends on GA4’s audience segmentation, remarketing lists, or Google Ads integration.
  • You’re in a jurisdiction where the consent banner cost is lower than the migration cost.
  • You genuinely need the depth of behavioral data that GA4 provides and privacy-first analytics is a secondary concern.

Alternatives worth considering

  • Plausible Analytics — the closest competitor in the privacy-first, no-cookie-banner space. Better funded (VC-backed), more polished UI, active feature development, $9/mo hosted or self-hostable under AGPL. If GoatCounter feels too minimal, Plausible is the natural step up.
  • Umami — open-source, MIT-licensed, similar privacy philosophy, but with event tracking support. More complex stack (Node.js + PostgreSQL). A good middle ground between GoatCounter and Matomo.
  • Matomo — the full-featured GA replacement. PHP/MySQL, more infrastructure, more complexity, but full event tracking, funnels, and enterprise features. AGPL for self-hosted, paid cloud.
  • Fathom Analytics — similar privacy ethos to GoatCounter, hosted-only (no self-hosting option), $15/mo. Clean and simple but no self-hosted path.
  • Pirsch — privacy-friendly, Go-based, hosted only, developer-friendly API. No self-hosted option.
  • Open Web Analytics — older open-source option, PHP-based, less actively maintained. Only consider if you have a specific reason to avoid the newer tools.

For a non-technical founder who wants to escape Google Analytics without building a server: the realistic shortlist is GoatCounter.com free tier vs Plausible $9/mo. GoatCounter wins on price (free), Plausible wins on polish and company stability. For founders who can manage a VPS: GoatCounter self-hosted is the most operationally simple privacy-first analytics option available.


Bottom line

GoatCounter does one thing — count visits, track referrers, show device and location breakdown — and does it with the lowest possible setup cost of any self-hosted analytics tool. The single-binary deploy, built-in TLS, and SQLite-by-default make it the only analytics platform in this category you can have running in under 30 minutes on a $5 VPS with no prior infrastructure experience. The privacy model is the real differentiator: because it genuinely doesn’t collect personal data, you skip the consent banner and see your real traffic numbers, not the 70% of traffic that clicks “Accept.” The trade-off is equally clear — there’s no event tracking, no funnels, no real-time view, and no company behind it. If you need more than a clear view of what pages people read and where they came from, GoatCounter isn’t the tool. If that’s all you need, it’s probably the best-executed tool in the space.

If deploying and maintaining the server is the blocker, that’s exactly what upready.dev sets up for clients — one-time fee, you own the instance.


Sources

Note: The third-party review articles provided as sources [1]–[4] for this review were unrelated to GoatCounter and could not be used. The article is based entirely on primary sources below.

  1. GoatCounter GitHub READMEhttps://github.com/arp242/goatcounter (5,564 stars, open-source)
  2. GoatCounter Official Websitehttps://www.goatcounter.com
  3. GoatCounter Pricing (embedded in homepage) — https://www.goatcounter.com (pricing section)
  4. GoatCounter Privacy Policy and GDPR documentationhttps://www.goatcounter.com/privacy · https://www.goatcounter.com/gdpr
  5. GoatCounter Session/Uniqueness documentationhttps://www.goatcounter.com/help/sessions

Features

Integrations & APIs

  • REST API