Skip to content

Self-host GoatCounter

updated Sep 2026prices checked · Jul 2026
We earn commissions when you shop through the links below. Full disclosure →

The smallest serious web analytics server: a single statically compiled Go binary (or the project's own Docker image) writing to a SQLite file, with PostgreSQL optional for big sites. It counts unique visits without cookies or identifiers, tracks referrers, campaigns, browsers, locations and screen sizes, and offers a JavaScript-free tracking pixel, a backend API, and log-file import. Its own README says it doesn't need a GDPR notice. Licensed EUPL-1.2; the same author runs a free hosted service.

Key facts

LicenseEUPL-1.2
StackGo, SQLite
Min RAM256 MB
Official imageyes
Difficulty
Our recommendation

Pick GoatCounter when the whole point is to run as little as possible: one Go binary or one container, a SQLite file, no cookies, no consent banner by its own account, and a JavaScript-free tracking pixel for readers with scripts off. It counts visits, referrers, campaigns, browsers, locations and screen sizes, plus named events — and stops there. Want funnels, retention, event properties or a team dashboard? Umami is the next step up; Rybbit and OpenPanel are two more.

What you need

  • Any VPS with at least 256 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# GoatCounter — the project's Docker Hub image; one container, SQLite in a named volume, nothing else to run
docker run -d --name goatcounter --restart unless-stopped -p 8080:8080 -v goatcounter-data:/home/goatcounter/goatcounter-data arp242/goatcounter
#  →  http://SERVER_IP:8080  (the first visit runs the site-creation wizard)
# or create the first site from the CLI instead (it asks for a password):
docker exec -it goatcounter goatcounter db create site -vhost=stats.example.com -user.email=me@example.com

What you take on

GoatCounter is deliberately small, and that is where its limits come from:

non-negotiableIt does not have the feature ladder the rest of this hub competes on — no funnels, retention, session replay or user journeys, and its events carry a name and a title, not arbitrary properties. Its README positions it for people "confused by the myriad of options" in Google Analytics and Matomo; take that at face value.
non-negotiableThe license is EUPL-1.2 with a modified "Compatible Licenses" appendix (the LICENSE file says it is otherwise identical). It is a free-software license, but a less familiar one than MIT or AGPL, so check it if your organisation vets licenses.
non-negotiableSQLite is the default and, per the README, works well for smaller sites; the bottleneck is how many distinct pages you track, not how many pageviews. Switch to PostgreSQL for large, sprawling sites.
non-negotiableThe project publishes no RAM minimum. The 256 MB on our page is our estimate for a static Go binary plus SQLite, not a documented figure.

An alternative to

Head-to-head

More in Web analytics

Web analytics

Matomo

The full-featured Google Analytics alternative — goals, e-commerce tracking, and 100% data ownership, with funnels and heatmaps available as paid premium plugins. Heavier than Plausible, but the closest like-for-like replacement for GA's depth.
PHPMariaDB
moderateRead guide →
Web analytics

OpenPanel

An open-source web and product analytics platform that pitches itself as "the power of Mixpanel with the ease of Plausible": funnels, cohorts, user profiles, session history and replay, A/B tests, revenue tracking, real-time dashboards, and SDKs for web, iOS/Android and server-side events — cookieless. Licensed AGPL-3.0; the documented install clones a dedicated git branch, a setup quiz writes .env, and a start script brings up seven containers (Caddy, PostgreSQL, Redis, ClickHouse, API, dashboard, worker). Free to self-host with unlimited events, per its pricing page.
TypeScriptNext.jsFastifyPostgreSQLClickHouseRedis
moderateRead guide →
Web analytics

Plausible

Lightweight, privacy-friendly web analytics in a single dashboard — no cookies, no personal data, GDPR-friendly by default. The Google Analytics replacement you can actually read.
ElixirClickHousePostgreSQL
moderateRead guide →
Web analytics

Rybbit

An open-source, privacy-friendly Google Analytics alternative that goes further than a pageview dashboard: sessions, unique users, bounce rate, real-time view, goals, retention, user journeys, funnels, session replays, custom events with JSON properties, and country → region → city maps — no cookies. Licensed AGPL-3.0 and installed by one setup script that starts Caddy, ClickHouse, PostgreSQL, Redis and the two app containers; it needs a domain pointed at the server because its tracking script must be served over HTTPS.
TypeScriptClickHousePostgreSQLRedis
easyRead guide →

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.