GoatCounter
Easy and privacy-friendly web analytics
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.
- GoatCounter vs PostHog
- GoatCounter vs Umami
- GoatCounter vs Plausible
- GoatCounter vs Matomo
- GoatCounter vs Rybbit
- GoatCounter vs Fathom Lite
- GoatCounter vs OpenPanel
- GoatCounter vs Ackee
- GoatCounter vs Shynet
- GoatCounter vs Tianji
- GoatCounter vs Open Web Analytics
- GoatCounter vs Counterscale
- GoatCounter vs Vince Analytics
- GoatCounter vs Litlyx
- GoatCounter vs Swetrix
- GoatCounter vs Pirsch
- GoatCounter vs Counter.dev Selfhost
- GoatCounter vs Offen Fair Web Analytics
- GoatCounter vs Medama
Similar web analytics apps
Superset
Web AnalyticsModern data exploration and visualization platform
Replaces Tableau, Power BI
Metabase
Web AnalyticsOpen-source business intelligence and dashboards
Replaces Tableau, Looker
PostHog
Web AnalyticsOpen-source product analytics platform
Replaces Google Analytics, Mixpanel
Umami
Web AnalyticsSimple, fast, privacy-focused web analytics
Replaces Google Analytics
Postiz
Web AnalyticsSchedule posts, track the performance of your content, and manage all
Replaces Buffer, Hootsuite
Netron
Web AnalyticsVisualizer for neural network and machine learning models