Alternative

GoatCounter Review 2026: The 1KB Analytics Tool

If you run a small site or an indie project, you probably don’t need a heavyweight analytics platform. You need to know how many people landed on a page, what brought them there, and which posts are pulling weight. GoatCounter was built for exactly that audience, and at around 1KB compressed, its tracking script is among the smallest you can install on a web page today.

This GoatCounter review walks through what the tool is, who built it, what the free tier actually covers, and where it falls short. No marketing fluff, no GA4 cheerleading, just an honest take after using it on a handful of low-traffic sites.

What Is GoatCounter?

GoatCounter is an open-source web analytics tool created and maintained by Martin Tournoij, a Dutch developer who has been working on it since 2019. The mission statement on the project page is unusually direct: build something that respects users’ privacy, costs nothing for non-commercial sites, and doesn’t try to compete with enterprise analytics suites.

The hosted service runs at goatcounter.com. The source code is on GitHub under the European Union Public License (EUPL-1.2), which means you can self-host it for free, modify it, and even ship a commercial fork as long as you keep the same license. The codebase is written in Go, with SQLite as the default database. PostgreSQL is supported for larger deployments.

For a broader view of where this tool sits in the ecosystem, see our roundup of the 15 best Google Analytics alternatives in 2026, where GoatCounter consistently ranks in the top tier for privacy and lightweight options. Our standalone GoatCounter Analytics tool profile keeps the same scorecard up to date alongside the rest of the privacy-first vendors we track.

The 1KB Tracking Script Claim — Verified

GoatCounter advertises a “less than 1KB” tracking script. I checked the actual file served from the CDN at the time of writing.

  • count.js minified and gzipped: 906 bytes
  • count.js minified, uncompressed: 2.4 KB
  • count.js raw source: about 4.1 KB

For comparison, here is what the major alternatives ship over the wire (gzipped, minified):

  • Google Analytics 4 (gtag.js + analytics.js dependencies): 50–80 KB depending on configuration
  • Plausible: about 1.1 KB
  • Umami: about 2 KB
  • Fathom Lite: about 1.5 KB
  • Matomo (cloud script): 22 KB

So GoatCounter is genuinely the lightest of the bunch. On a slow 3G connection or a low-end Android phone, that difference matters. It is also one fewer thing to fight with when you are tuning Core Web Vitals scores.

Free Tier vs Paid Tier

This is where most people land first, so let’s get the numbers out of the way.

Plan Pageviews/month Price
Free (non-commercial) Up to 100,000 $0
Starter Up to 100,000 $5/month
Business Up to 1,000,000 $15/month

The free tier is generous compared to most peers. The catch is the non-commercial clause: if your site is a personal blog, an open-source project, a hobby project, or a small community, you stay free. If you run a SaaS, an e-commerce store, or a site that earns serious ad revenue, the honor system asks you to upgrade. Tournoij has been pragmatic about this: there is no automated enforcement, but the request is clear in the dashboard.

One quirk worth flagging: the free tier used to be advertised as “6,000 pageviews/month soft cap” in older documentation. The current limit is much higher (100K), but you may still see the older number quoted in third-party reviews. The dashboard shows your current usage and warns you well before you hit any limit.

Features That Matter

GoatCounter does not try to be everything. Here is what you actually get:

  • Pageviews per URL, per day, with hourly resolution available
  • Referrers, grouped by domain, with full URL on hover
  • Browser and OS stats, including version breakdowns
  • Screen sizes, useful for responsive design audits
  • Country-level geolocation, derived from IP at request time and immediately discarded
  • Campaign tracking via UTM parameters or custom data-goatcounter-campaign attributes
  • Event tracking, for clicks and custom events, but no funnel chaining
  • Public-stat option, where you can expose your own dashboard at a public URL (handy for indie devs sharing build-in-public numbers)

What it explicitly does not store: IP addresses, cookies, fingerprints, user IDs, or any data that could re-identify a returning visitor as the same person across sessions.

Self-Hosting Option

This is where GoatCounter shines for engineers. The entire product ships as a single Go binary, around 25 MB. SQLite is the default database, which means you can run a production analytics service with literally no external dependencies.

Resource footprint on a real-world deployment:

  • RAM: roughly 10 MB at idle, up to 30 MB under moderate load
  • Disk: a few MB for the binary plus a SQLite file that grows about 100 KB per 10K pageviews
  • CPU: negligible on any modern VPS

You can run it on a $5 DigitalOcean droplet with capacity to spare. The official Docker image is available, and there is a community Helm chart for Kubernetes setups. Compared to self-hosting Umami with Docker, GoatCounter is markedly lighter on resources because it skips the Node.js stack entirely and avoids forcing PostgreSQL on small deployments.

GoatCounter vs Plausible vs Umami

These three are the most common options people compare for indie and small-business use. Here is a side-by-side breakdown.

Capability GoatCounter Plausible Umami
Script size (gzipped) ~0.9 KB ~1.1 KB ~2 KB
Free hosted tier Yes (non-commercial) 30-day trial only Yes (Umami Cloud, 100K events)
Self-host license EUPL-1.2 (free) AGPL (free) MIT (free)
Default database SQLite PostgreSQL + ClickHouse PostgreSQL or MySQL
Goals/conversions Limited (event-based) Yes Yes
Funnels No Yes (paid) Yes
API access Paid only Paid plan Free
Cookie-free Yes Yes Yes

The pattern is clear. GoatCounter is the lightest and the cheapest at the entry level, but Plausible and Umami both have richer feature sets. If you need funnels, conversion tracking, or a proper API, GoatCounter is not your tool. For a deeper look at the closest peer, see our Plausible analytics review for 2026 or the dedicated GoatCounter vs Plausible head-to-head.

Where GoatCounter Falls Short

I want to be honest here, because most reviews skip this part.

  • No funnels. You can track events, but you cannot define a multi-step conversion path. If you want to see “homepage → pricing → signup” drop-off rates, look elsewhere.
  • No goals dashboard. Events are logged and counted, but they don’t roll up into named goals with conversion rates. You build that yourself by filtering.
  • No e-commerce tracking. No revenue, no products, no cart events out of the box.
  • API is paid-only on the hosted tier. If you self-host, you get the API for free. On goatcounter.com, you need a paid plan to query data programmatically.
  • Limited data retention controls. Free tier holds data for as long as your account is active, but there is no fine-grained “delete after 90 days” toggle.
  • No mobile SDK. If you want to track a native iOS or Android app, you have to call the HTTP endpoint manually. There is no Swift or Kotlin SDK.
  • UI feels dated. The dashboard is functional but visually plain. If you want polished charts, Plausible looks better.

None of these are dealbreakers for the target audience (indie devs, bloggers, OSS maintainers), but they will be dealbreakers if you are running anything that needs serious conversion analytics.

Setup Walkthrough

Setup on the hosted version takes about three minutes:

  1. Sign up at goatcounter.com with an email address and pick a subdomain (e.g. yoursite.goatcounter.com).
  2. Copy the tracking snippet from the dashboard. It looks like this:
    <script data-goatcounter="https://yoursite.goatcounter.com/count" async src="//gc.zgo.at/count.js"></script>
  3. Paste it before the closing </body> tag on every page (or in your theme’s footer template).
  4. Visit your own site once. Within seconds, the dashboard shows the hit.

Self-hosting is similar but with a few extra steps:

  1. Download the Go binary or pull the Docker image.
  2. Run goatcounter serve with a database path and your domain.
  3. Put it behind nginx or Caddy with HTTPS.
  4. Create your first site account through the CLI: goatcounter create -domain example.com -email [email protected]
  5. Add the same tracking snippet, but pointed at your own domain.

If you have ever spent an afternoon fighting with a heavyweight analytics setup, the simplicity here will feel almost suspicious. It really is this easy.

Ideal Use Cases

Based on running it across multiple sites, GoatCounter is the right pick for:

  • Personal blogs. You want to know what people read. You don’t want to babysit a tracking pipeline.
  • Indie SaaS marketing sites. The pre-signup funnel is rarely complex enough to need full GA4. GoatCounter tells you what is bringing traffic.
  • OSS project sites and documentation. Lightweight, privacy-friendly, no GDPR consent banner needed.
  • Build-in-public projects. The public-stats feature lets you share your dashboard URL openly.
  • Static sites generated with Hugo, Jekyll, Eleventy, or Astro. The script tag pattern fits naturally.

It is not the right pick for a small business analytics setup if you need real conversion tracking. For the personal-site crowd, though, the calculus tilts heavily toward GoatCounter.

Privacy Posture

GoatCounter’s privacy stance is the cleanest in the space. Here is what actually happens when a visitor loads a tracked page:

  • The script makes one POST request to the count endpoint with the URL, referrer, screen size, and user-agent string.
  • The server hashes the visitor’s IP address with a daily-rotating salt, throws away the IP, and uses the hash only to count unique visits within the same day.
  • No cookies are set. No localStorage is touched. No fingerprint is computed.
  • The hash itself is discarded at the end of each day, so cross-day uniqueness is never tracked.

This means that under GDPR, ePrivacy, and similar regulations, you almost certainly do not need a consent banner for GoatCounter. If you are weighing whether a cookie consent banner is hurting your conversions, removing one of the dependencies that requires it is a real win. For more context on the legal landscape, see our complete guide to privacy-friendly website analytics for site owners.

Should You Pick It?

Three questions to ask yourself:

  1. Do I run a small or non-commercial site? If yes, the free tier covers you. If no, you’ll pay $5 or $15 per month, which is still cheap.
  2. Do I need funnels, e-commerce, or a free API? If yes, look at Plausible or Umami instead.
  3. Do I want the smallest possible footprint on page load and the fewest possible privacy concerns? If yes, GoatCounter wins.

For people who got tired of GA4 complexity for small websites, GoatCounter is one of the most painless escapes. You install it in three minutes, you stop worrying about data retention settings, and you get back to writing.

Frequently Asked Questions

Is GoatCounter really free, or is there a catch?

For non-commercial sites, it is genuinely free, and the limit is 100,000 pageviews per month, which is plenty for most personal projects. The honor system asks commercial sites to upgrade, but there is no automated enforcement. Self-hosting is free in all cases.

Is self-hosting GoatCounter worth the effort?

Only if you need full data ownership, the API on a paid-tier-equivalent setup, or if you run multiple sites and want one dashboard. For a single small site, the hosted version is faster to set up and maintain.

Can I import my existing GA4 data?

No. GoatCounter does not provide a GA4 import path. You would need to export your historical data manually and either keep it as an archive or load it via the (paid) API. For most small sites, this isn’t worth the effort.

What happens when I scale beyond the free tier?

You either upgrade to the $5 or $15 plan, or you self-host. The dashboard warns you well before you hit any limit, and there is no hard cutoff that drops your data. Pageviews keep being recorded.

Does GoatCounter support e-commerce tracking?

Not in any meaningful sense. You can fire custom events for purchases, but there is no revenue field, no product catalog, no cart abandonment tracking. If you run an online store, look at Matomo or stay with GA4.

Is there a mobile SDK for iOS or Android apps?

No. GoatCounter is web-only. To track a native app, you would need to make HTTP POST requests to the count endpoint manually with the URL, referrer, and user-agent fields. This works but is unsupported.

Bottom Line

GoatCounter is exactly what it claims to be: a minimalist, open-source, privacy-respecting analytics tool for people who don’t want to think about analytics. The 1KB script claim holds up. The free tier is generous. The privacy posture is the cleanest in the category. The self-hosting story is genuinely the simplest among all GA alternatives.

The trade-offs are real. No funnels, no e-commerce, no free API on the hosted tier, no mobile SDK. If those matter to you, this isn’t your tool.

For everyone else, the indie devs, the bloggers, the OSS maintainers, the people running side projects who got tired of GA4: GoatCounter is one of the easiest “good enough” choices on the market. Install it, paste the script tag, get on with your life. If you want to triple-check your shortlist before committing, pull up our comparison of the 15 best Google Analytics alternatives one more time and weigh the trade-offs.

Want more like this?

Browse the rest of the blog — no newsletter, no tracking, no follow-up funnels.