GoatCounter

Easy and privacy-friendly web analytics

Web Analytics ★ 6k stars Easy setup EUPL-1.2

GoatCounter is an open-source web analytics platform that is easy to use and privacy-friendly, collecting no personal data. It targets small site owners and hobbyists. It is deployed as a single binary or via Docker.

Key features

  • No personal data collected
  • Single-binary deployment
  • Works without JavaScript
  • Lightweight and fast

Pros & cons

Strengths

  • Extremely easy to run
  • Very lightweight
  • Privacy-friendly

Trade-offs

  • Basic reporting depth
  • Small project

GoatCounter replaces

Last reviewed Sep 13, 2026 · 741 words

GoatCounter runs site analytics from a single Go binary and a SQLite file, sets no cookies, and its pixel tracker counts the readers who block JavaScript. For a personal blog, a docs site, or a small project page with up to a few hundred thousand pageviews a month, that is the complete pitch, and it is the lightest working answer to "I want to see my traffic without Google" that I know of. The reporting is deliberately basic, and the project is one maintainer's work, which is the trade you make for a 128 MB footprint.

One binary, two commands

Download the release binary for your platform, then:

goatcounter db create site -vhost stats.example.com -user.email [email protected]
goatcounter serve -listen :8080 -tls none

The first command creates the SQLite database and your login; the second serves the dashboard and the collection endpoint. Put a reverse proxy with TLS in front, point stats.example.com at it, and add the snippet from the settings page to your site. There is no PostgreSQL requirement (it is supported if you want it), no Redis, no ClickHouse, no build step. A systemd unit and a nightly copy of the database file is the entire operations story. Community Docker images exist, but the binary is honestly simpler.

No cookies, so no banner

GoatCounter does not set a cookie or store an identifier in the browser. Unique visitors are approximated with a short-lived hash of IP address, User-Agent, and site, which is discarded on a schedule and never written to disk in raw form. The project's own position is that this collects no personal data and needs no consent prompt, and it is the same reasoning Plausible relies on. I am not your lawyer; what I can say is that this design makes the "do I need a cookie banner" question go away for a hobby site in a way Google Analytics never will. The leaving Google Analytics post covers the wider move.

It counts readers who block scripts

Two paths exist for visitors with JavaScript off, which on a technical audience can be a fifth of your readers. First, a <noscript> image pixel: <img src="https://stats.example.com/count?p=/this-page"> records the hit with no script at all. Second, and the option most people forget, goatcounter import ingests nginx or Apache access logs in combined format, so you can run it with no tracking snippet on the page whatsoever and still get paths, referrers, and counts. That log-import mode is how I run it on a site where I refuse to add third-party requests of any kind.

Where the reporting runs out

You get pageviews, unique estimates, referrers, paths, browser, operating system, screen size, country, and campaign parameters, over any date range, plus a basic event API for counting button clicks. You do not get funnels, goals with conversion values, user journeys, session replay, or anything per-user, and the dashboard is a list of charts rather than a report builder. For a blog that is the right amount; for a product with a signup flow you will want more within a month. There is also a hosted version at goatcounter.com that is free for personal non-commercial use, which is a legitimate way to try it before running your own.

Plausible and Umami are the bigger siblings

Plausible and Umami both have larger teams, more polished dashboards, goals and funnels, and multi-site management that GoatCounter handles adequately but not gracefully. They also cost more to run: Plausible wants PostgreSQL plus ClickHouse and a couple of gigabytes of RAM, Umami wants PostgreSQL or MySQL and a Node runtime. The Plausible versus Umami comparison splits those two. GoatCounter's place is below both: the choice for a box that is already busy, a site that is small, or an operator who wants one file to back up.

What I'd do

For a personal site or a docs project, GoatCounter as a systemd service behind Caddy, SQLite, log import if the site is static and you can read the access logs, the pixel in <noscript> otherwise. Copy the database file nightly with the rest of the box. Move to Umami the day you need funnels or a second person needs a login with their own view, and not before.

Compare GoatCounter

19 head-to-head comparisons.

Similar web analytics apps