GoatCounter
Small open-source web analytics app that runs as a single binary
Our verdict
#3 of 4 in Self-hosted web analytics · Lightest to run
Pros
- Nothing to run beside the program itself
- No cookies, and the README says it doesn't need a GDPR notice
- Counts visitors without JavaScript through an image tracker or server logs
- Exports every individual page view as CSV
Cons
- Goals, funnels, revenue reports and a view of current visitors aren't documented; statistics refresh every 10 seconds
- No release in almost a year
- The changelog says imported Google Analytics reports only correct the visitor counter and don't show on the dashboard
Who should skip:Sites that need conversion or revenue reports, which GoatCounter's documentation doesn't cover.
Rankings and alternatives
- #3 of 4 Self-hosted web analytics Lightest to run
- Matomo #1 For Google Analytics depth on your own server
- Umami #2 Best for most business sites
- Plausible Analytics #4 For a one-page dashboard with your GA4 history
Self-hosted web analytics scores
Evaluated Nov 7, 2026 Evidence ↓- Setup and upkeep 5
5/5 means: One program with nothing else to run; data can live in a local file
One statically compiled binary (or Docker image) whose only dependency is a SQLite database file or a PostgreSQL connection, so nothing else has to run.
- Tracking without a consent banner 5
5/5 means: No cookies and no stored personal data by default, and the project states that no consent banner or notice is needed
Counts unique visits without cookies and doesn't track users with unique identifiers; the README says it doesn't need a GDPR notice. The GDPR help page words this as "probably doesn't require" one.
- Reports beyond page views 2
2/5 means: Two of the six
Two of the six: click and custom events, and campaigns from UTM parameters. Goals, funnels and revenue tracking are not documented, and statistics refresh every 10 seconds with no view of current visitors.
Rests partly on what the sources don't mention, which is a weaker signal than what they say.
- Ways to collect data 4
4/5 means: Three of the four
Three of the four: a 1×1 image tracker, the /api/v0/count API for backends, and log file import with the goatcounter import command. No official mobile SDK is documented.
- Import from other tools 2
2/5 means: Imports only files in the product's own format: its own exports, or other data converted to that format first
Imports its own CSV exports, which can carry data from other systems converted to that format. Google Analytics reports can be imported, but the changelog says they only fix totals on the visitor counter and don't show on the dashboard.
- Export and API 4
4/5 means: Three of the four
Three of the four: a CSV export of every pageview, an API for dashboard statistics, and an API to manage sites. No download of the dashboard's reports as files is documented.
- Team access 4
4/5 means: Four of the five
Four of the five: several users, a read-only access level, a dashboard anyone with a secret token can view, and TOTP two-factor login. No single sign-on is documented.
Rests partly on what the sources don't mention, which is a weaker signal than what they say.
- Interface languages 4
4/5 means: 25 to 44 languages
The repository has 27 translation files besides the template, which make 26 languages once Chinese counts once (Norwegian Bokmål and Nynorsk are separate written languages). How complete each translation is isn't documented.
- Active maintenance 2
2/5 means: Within the last 12 months
Latest release v2.7.0 on 2025-12-15, within twelve months but not six months of this evaluation.
Evidence and sources
Self-hosted web analytics scores
Setup and upkeep 3 quotes
-
“The release page has binaries for several platforms. These are statically compiled and contain everything you need.”
github.com/arp242/goatcounter · checked -
“The only dependency is somewhere to store a SQLite database file or a PostgreSQL connection.”
github.com/arp242/goatcounter · checked -
“GoatCounter is available on DockerHub at arp242/goatcounter.”
github.com/arp242/goatcounter · checked
Tracking without a consent banner 3 quotes
-
“Privacy-aware; doesn’t track users with unique identifiers and doesn't need a GDPR notice.”
github.com/arp242/goatcounter · checked -
“Identify unique visits without cookies using a non-identifiable hash”
github.com/arp242/goatcounter · checked -
“The short version is that GoatCounter probably doesn’t require a GDPR consent notice, on the basis that 1) no personally identifiable information is collected, and 2) it is in the legitimate interest of a site’s owner to see how many people are visiting their site.”
goatcounter.com/help/gdpr · checked
Reports beyond page views 3 quotes
-
“GoatCounter will automatically bind a click event on any element with the data-goatcounter-click attribute”
goatcounter.com/help/events · checked -
“Campaigns are tracked automatically based on URL query parameters:”
goatcounter.com/help/campaigns · checked -
“For reasons of efficiency the statistics are updated once every 10 seconds.”
goatcounter.com/help/faq · checked
Ways to collect data 3 quotes
-
“The /count endpoint returns a small 1×1 GIF image on GET requests.”
goatcounter.com/help/pixel · checked -
“You can use /api/v0/count to send pageviews from your backend.”
goatcounter.com/help/api · checked -
“You can send data from logfiles with the goatcounter import command”
goatcounter.com/help/logfile · checked
Import from other tools 3 quotes
-
“We can't show anything useful on the dashboard, but we can use it to show correct totals on the visitor counter.”
github.com/arp242/goatcounter/blob/main/CHANGELOG.md · checked -
“You can now import the CSV exports, useful for migrating from self-hosted to goatcounter.com or vice versa, or for migrating from other systems.”
github.com/arp242/goatcounter/blob/main/CHANGELOG.md · checked -
“Allow importing Google Analytics reports.”
github.com/arp242/goatcounter/blob/main/CHANGELOG.md · checked
Export and API 3 quotes
-
“GoatCounter can export a CSV of all pageviews.”
goatcounter.com/help/export · checked -
“The GoatCounter API can be used to manage sites, users, export data, or build your own dashboard.”
goatcounter.com/help/api · checked -
“With the /api/v0/stats/* endpoint you get retrieve the dashboard statistics.”
goatcounter.com/help/api · checked
Team access 4 quotes
-
“You can now create multiple users; before there was always a single one.”
github.com/arp242/goatcounter/blob/main/CHANGELOG.md · checked -
“readonly Can't change any settings.”
github.com/arp242/goatcounter/blob/main/cmd/goatcounter/db.go · checked -
“You can now make the dashboard viewable to anyone who has a secret token”
github.com/arp242/goatcounter/blob/main/CHANGELOG.md · checked -
“TOTP-based multi-factor auth is now supported.”
github.com/arp242/goatcounter/blob/main/CHANGELOG.md · checked
Interface languages 1 quote
-
“28 files: be-BY.toml bg-BG.toml cs-CZ.toml da-DK.toml de-DE.toml en-GB.toml es-CL.toml fi_FI.toml fr-FR.toml hi.toml id-ID.toml it-IT.toml ja-JP.toml ko-KR.toml nb-NO.toml nl-NL.toml nn-NO.toml pl-PL.toml pt-BR.toml ro-RO.toml ru-RU.toml sk-SK.toml template.toml th-TH.toml tr-TR.toml uk-UA.toml zh-CN.toml zh-TW.toml”
api.github.com/repos/arp242/goatcounter/contents/i18n · checked
Active maintenance 1 quote
-
“tag_name: v2.7.0, published_at: 2025-12-15T19:01:48Z”
api.github.com/repos/arp242/goatcounter/releases/latest · checked
Facts
License 2 quotes
-
“GoatCounter is licensed under a slightly modified version of European Union Public License (EUPL) 1.2”
github.com/arp242/goatcounter/blob/main/LICENSE · checked -
“The source code is completely Open Source/Free Software, and it can be self-hosted without restrictions.”
github.com/arp242/goatcounter · checked
Runs on 2 quotes
-
“The release page has binaries for several platforms. These are statically compiled and contain everything you need.”
github.com/arp242/goatcounter · checked -
“GoatCounter is available on DockerHub at arp242/goatcounter.”
github.com/arp242/goatcounter · checked
Needs 1 quote
-
“The only dependency is somewhere to store a SQLite database file or a PostgreSQL connection.”
github.com/arp242/goatcounter · checked
Other quotes
Not cited by a score or fact 3 quotes
-
“SQLite should work well for most smaller sites, but PostgreSQL gives better performance especially for larger sites.”
github.com/arp242/goatcounter · checked -
“Accessibility is a high-priority feature, and the interface works well with assistive technology such as screen readers.”
github.com/arp242/goatcounter · checked -
“By my estimate about a third of pageviews are missed due to adblockers”
goatcounter.com/help/faq · checked