GoatCounter alternatives and similar software solutions
Based on the "Analytics" category.
Alternatively, view GoatCounter alternatives based on common mentions on social networks and blogs.
10.0 10.0 L2 GoatCounter VS ElasticsearchFree and Open, Distributed, RESTful Search Engine
9.9 9.9 L2 GoatCounter VS SupersetApache Superset is a Data Visualization and Data Exploration Platform [Moved to: https://github.com/apache/superset]
9.8 7.1 L4 GoatCounter VS RedashMake Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.
9.8 10.0 GoatCounter VS MetabaseThe simplest, fastest way to get business intelligence and analytics to everyone in your company :yum:
9.6 9.9 L3 GoatCounter VS PiwikLiberating Web Analytics. Star us on Github? +1. Matomo is the leading open alternative to Google Analytics that gives you full control over your data. Matomo lets you easily collect data from websites & apps and visualise this data and extract insights. Privacy is built-in. We love Pull Requests!
9.5 9.7 L1 GoatCounter VS DruidApache Druid: a high performance real-time analytics database.
9.3 9.9 GoatCounter VS cube.js📊 Cube — Headless Business Intelligence for Building Data Applications
9.1 9.7 GoatCounter VS PlausibleSimple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.
8.8 9.9 GoatCounter VS PostHog🦔 PostHog provides open-source product analytics that you can self-host.
8.7 9.0 GoatCounter VS SnowplowThe enterprise-grade behavioral data engine (web, mobile, server-side, webhooks), running cloud-natively on AWS and GCP
8.5 6.8 GoatCounter VS Fathom AnalyticsFathom Lite. Simple, privacy-focused website analytics. Built with Golang & Preact.
8.5 8.2 L2 GoatCounter VS CountlyCountly helps you get insights from your application. Available self-hosted or on private cloud.
8.0 0.0 L2 GoatCounter VS ThinkUpThinkUp gives you insights into your social networking activity on Twitter, Facebook, Instagram, and beyond.
7.4 9.8 GoatCounter VS RudderStackPrivacy and Security focused Segment-alternative, in Golang and React
7.0 8.9 L2 GoatCounter VS Open Web AnalyticsOfficial repository for Open Web Analytics which is an open source alternative to commercial tools such as Google Analytics. Stay in control of the data you collect about the use of your website or app. Please consider sponsoring this project.
5.2 1.9 L2 GoatCounter VS Rakam📈 Collect customer event data from your apps. (Note that this project only includes the API collector, not the visualization platform)
4.9 9.4 GoatCounter VS ChartbrewOpen-source web platform used to create live reporting dashboards from APIs, MongoDB, Firestore, MySQL, PostgreSQL, and more 📈📊
4.4 9.1 GoatCounter VS OffenThe fair and lightweight alternative to common web analytics tools
3.6 5.8 GoatCounter VS Koko AnalyticsPrivacy-friendly analytics for your WordPress site.
3.3 9.7 GoatCounter VS TelleryTellery lets you build metrics using SQL and bring them to your team. As easy as using a document. As powerful as a data modeling tool.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of GoatCounter or a related project?
GoatCounter is an open source web analytics platform available as a hosted service (free for non-commercial use) or self-hosted app. It aims to offer easy to use and meaningful privacy-friendly web analytics as an alternative to Google Analytics or Matomo.
There are two ways to run this: as hosted service on goatcounter.com, free for non-commercial use, or run it on your own server. The source code is completely Open Source/Free Software, and it can be self-hosted without restrictions.
See [docs/rationale.markdown](docs/rationale.markdown) for some more details on the "why?" of this project.
There's a live demo at https://stats.arp242.net.
Identify unique visits without cookies using a non-identifiable hash (technical details).
Keeps useful statistics such as browser information, location, and screen size. Keep track of referring sites and campaigns.
Easy; if you've been confused by the myriad of options and flexibility of Google Analytics and Matomo that you don't need then GoatCounter will be a breath of fresh air.
Accessibility is a high-priority feature, and the interface works well with assistive technology such as screen readers.
100% committed to open source; you can see exactly what the code does and make improvements, or self-host it for any purpose.
Own your data; you can always export all data and cancel at any time.
Integrate on your site with just a single script tag:
Getting data in to GoatCounter
There are three ways:
Integrate in your middleware; send data to GoatCounter by calling the API from your backend server middleware. Detailed documentation for this is available at https://www.goatcounter.com/api#backend-integration
Parse logfiles. GoatCounter can parse logfiles from nginx, Apache, CloudFront, or any other HTTP middleware or proxy. See
goatcounter help importfor detailed documentation on this.
Running your own
Note this README is for the latest master and may be inaccurate for the latest
released version; use the
release-2.2 branch for the 2.1 README.
The release page has binaries for Linux amd64, arm, and arm64. These are statically compiled, contain everything you need, and should work in pretty much any Linux environment. The only other thing you need is somewhere to store a SQLite database file or a PostgreSQL connection.
GoatCounter should run on any platform supported by Go, but there are no binaries for them (yet) as cross-compiling SQLite is somewhat complex. You'll have to build from source if you want to run it on e.g. FreeBSD or macOS.
Generally speaking only the latest release is supported, although critical fixes (security, data loss, etc.) may get backported to previous releases.
Deploy scripts and such
- "StackScript" for Linode; Alpine Linux VPS; you can also use this for other Alpine Linux machines.
If you don't have a Linode account yet then consider using my referral URL and I'll get some kickback from Linode :-)
Some people have created Dockerfiles. You don't really need Docker since GoatCounter has no external dependencies; it probably creates more problems than it solves IMHO. At any rate, here are some that seem alright at a glance if you must:
Some other guides people have written:
Building from source
You need Go 1.17 or newer and a C compiler (for SQLite). If you compile it with
CGO_ENABLED=0 you don't need a C compiler but can only use PostgreSQL.
Compile from source with:
$ git clone -b release-2.2 https://github.com/arp242/goatcounter.git $ cd goatcounter $ go build -ldflags="-X zgo.at/goatcounter/v2.Version=$(git log -n1 --format='%h_%cI')" ./cmd/goatcounter
You'll now have a
goatcounter binary in the current directory.
-ldflags=[..] sets the version; this isn't strictly required as such,
but it's recommended as it's used to "bust" the cache for static files and may
also be useful later when reporting bugs. This can be any string and doesn't
follow any particular format, you can also set this to the current date or
banana or anything you want really.
To build a fully statically linked binary:
$ go build -tags osusergo,netgo,sqlite_omit_load_extension \ -ldflags="-X zgo.at/goatcounter/v2.Version=$(git log -n1 --format='%h_%cI') -extldflags=-static" \ ./cmd/goatcounter
It's recommended to use the latest release as in the above command. The master branch should be reasonably stable but no guarantees, and sometimes I don't write detailed release/upgrade notes until the actual release so you may run in to surprises.
You can compile goatcounter without cgo if you're planning to use PostgreSQL and don't use SQLite:
$ CGO_ENABLED=0 go build \ -ldflags="-X zgo.at/goatcounter.Version=$(git log -n1 --format='%h_%cI')" \ ./cmd/goatcounter
Functionally it doesn't matter too much, but builds will be a bit easier and faster as it won't require a C compiler.
You can start a server with:
$ goatcounter serve
The default is to use an SQLite database at
will be created if it doesn't exist yet. See the
-db flag and
help db to customize this.
Both SQLite and PostgreSQL are supported. SQLite should work well for most smaller sites, but PostgreSQL gives better performance. There are some benchmarks over here to give some indication of what performance to expect from SQLite and PostgreSQL.
GoatCounter will listen on port
*:443 by default. You don't need
to run it as root and can grant the appropriate permissions on Linux with:
$ setcap 'cap_net_bind_service=+ep' goatcounter
Listening on a different port can be a bit tricky due to the ACME/Let's Encrypt
goatcounter help listen documents this in depth.
You can create new sites with the
db create site command:
$ goatcounter db create site -vhost stats.example.com -user.email [email protected]
This will ask for a password for your new account; you can also add a password
on the commandline with
-password. You must also pass the
-db flag here if
you use something other than the default.
You may need to run the database migrations when updating. Use
serve -automigrate to always run all pending migrations on startup. This is the
easiest way, although arguably not the "best" way.
goatcounter migrate <file> or
goatcounter migrate all to manually run
migrations; generally you want to upload the new version, run migrations while
the old one is still running, and then restart so the new version takes effect.
goatcounter migrate pending to get a list of pending migrations, or
goatcounter migrate list to show all migrations.
To use PostgreSQL run GoatCounter with a custom
-db flag; for example:
$ goatcounter serve -db 'postgresql+dbname=goatcounter' $ goatcounter serve -db 'postgresql+host=/run/postgresql dbname=goatcounter sslmode=disable'
This follows the format in the
psql CLI; you can also use the
$ PGDATABASE=goatcounter DBHOST=/run/postgresql goatcounter serve -db 'postgresql'
The database will be created automatically if possible; if you want to create it for a specific user you can use:
$ createuser --interactive --pwprompt goatcounter $ createdb --owner goatcounter goatcounter
You can manually import the schema with:
$ goatcounter db schema-pgsql | psql --user=goatcounter --dbname=goatcounter
goatcounter help db and the pq docs for more details.
You can start a test/development server with:
$ goatcounter serve -dev
-dev flag makes some small things a bit more convenient for development;
TLS is disabled by default, it will listen on localhost:8081, the application
will automatically restart on recompiles, templates and static files will be
read directly from the filesystem, and a few other minor changes.
See [.github/CONTRIBUTING.markdown](/.github/CONTRIBUTING.markdown) for more details on how to run a development server, write patches, etc.