GoatCounter

EUPL-1.2
Platform
Linux Docker Self-hosted
Licence
EUPL-1.2 Open source
GoatCounter

GoatCounter is a privacy-friendly web analytics platform that is available both as a free hosted service and as software you can run on your own server. It was written to be the opposite of Google Analytics and Matomo: a single Go binary with an embedded SQLite database, no cookie banner, and a dashboard that answers the two questions most site owners actually have — how many people visited, and what did they read.

Key Features

  • No cookies, no personal data — visitors are counted using a non-identifiable hash instead of a persistent identifier, so there is nothing to put in a consent banner. The project states its data collection is compatible with GDPR without a notice.
  • A single static binary — the release archive is one self-contained executable. There is no runtime, no web server and no external database to install; the default store is a SQLite file that is created on first start. PostgreSQL is supported for larger sites.
  • Around 3.5 KB of extra page weight — the tracking script is tiny, and counting is not limited to JavaScript: there is a no-JavaScript image tracker, an HTTP API for backend middleware, and an importer for nginx, Apache, Caddy and CloudFront log files.
  • Useful reports, not vanity metrics — page views and unique visits per path, referrers, campaigns, browsers, operating systems, screen sizes, locations and languages, with per-page sparklines and a totals chart.
  • Built-in TLS — the server can terminate TLS itself and obtain and renew ACME certificates automatically, which is handy on a small VPS.
  • Accessibility as a design goal — the interface is built to work with assistive technology such as screen readers, which is unusual for analytics dashboards.
  • Your data stays yours — the full data set can be exported at any time, and the hosted plan can be cancelled without losing access to the export.
  • Data collection is configurable — individual page views, sessions and location lookups can be switched on or off per site, and a public dashboard view can be shared with a read-only token.

Why Use It?

Most analytics products are built for marketing teams and collect far more than a small site needs. GoatCounter takes the opposite approach: it records aggregate counts, drops the parts that require tracking individuals, and as a result removes the usual compliance work — no cookie banner, no consent flow, no third-party script calling out to an advertising network. For anyone who just wants to know which articles people read and where they came from, that is usually the whole job.

Operationally it is also unusually cheap to run. One binary plus one SQLite file fits comfortably on the smallest VPS, restarts in milliseconds, and can be backed up by copying a single file. Teams that outgrow SQLite can point the same binary at PostgreSQL without changing anything else.

Use Cases

  • Personal blogs and documentation sites that want page-view counts without a consent banner.
  • Small businesses and side projects replacing Google Analytics with a self-hosted instance on a cheap VPS.
  • Projects that need to count visits from a backend service, a CLI or static site build rather than from the browser.
  • Anyone who wants to analyse an existing nginx or Apache access log without adding any client-side tracking at all.
  • Organisations that prefer an EUPL-licensed, self-hostable product they can audit and run in-house.

Running It

The release page provides statically compiled binaries for Linux (amd64 and arm64) and FreeBSD, and an official Docker image is published as arp242/goatcounter. Starting a server is a single command, goatcounter serve, which listens on port 8080 and creates its SQLite database automatically. A setup wizard or the command line creates the first site and user. Updating is a matter of replacing the binary and running the pending database migrations, and a /status endpoint is available for health checks. Building from source needs Go 1.21 or newer.

Licence: EUPL-1.2 — a slightly modified European Union Public Licence 1.2 whose “compatible licences” appendix removes some entries; the client-side count.js integration script is ISC-licensed to make it easy to embed.

Explore More Categories

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.