this post was submitted on 13 Oct 2026
10 points (81.2% liked)

Selfhosted

63017 readers
2013 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

Detailed Rules Post

  1. Be civil.

  2. No spam.

  3. Posts are to be related to self-hosting.

  4. Don't duplicate the full text of your blog or readme if you're providing a link.

  5. Submission headline should match the article title.

  6. No trolling.

  7. Promotion posts require active participation, with an account that is at least 30 days old. F/LOSS without a paywall has exceptions, with requirements. See the rules link for details. Tags [CBH] or [AIP] are required, see the links in Rule 8 for details.

  8. AI-related discussions and AI-involved promotional posts have additional requirements for tagging, as noted in Rule 7 and the AI & Promotional Post Expanded Rules post, and find example disclosures here.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 3 years ago
MODERATORS
 

cross-posted from: https://discuss.online/post/46782639

Goatcounter is so minimal that it takes a minute to wrap the brain around, but the good news is that it tracks all access anonymously, which is all I ever wanted (and why I simply have never made real use of Matomo over the years). It is the digital equivalent of a step counter, and acts like those counting clickers they use at concerts to track number of attendants.

It is good to confirm people are actually able to access tooling. That is all I need.

top 5 comments
sorted by: hot top controversial new old
[–] miaowoo_lw@lemmy.world -2 points 3 hours ago

Running it on a couple of small sites. It is exactly what the pitch says: one Go binary or one container, a single Postgres/SQLite DB, one script tag. Points worth knowing before you commit:

  • The hosted version has a free tier for non-commercial sites; self-hosting is completely free, no account needed, and backup is just "dump the database".
  • Because it counts pageviews anonymously by design, there are no funnels, sessions, or referrer chains like Plausible/Matomo. It deliberately does not keep enough data for that. If you might want path analysis later, that is the one thing Goatcounter will not give you.
  • Bot filtering is reasonable out of the box; on a small tech site I saw roughly 30-40% of raw hits classified as bots, which matched my nginx log estimates well.
  • Self-host gotcha: behind a reverse proxy, make sure you pass the real client IP (X-Forwarded-For), or everything counts as one visitor from the proxy address.

For the "step counter" use case you describe, it is the best fit in this space. The moment you want cohort/behavior analytics is when Matomo or Plausible earn their resource cost.

[–] miaowoo_lw@lemmy.world -1 points 3 hours ago

Running it on a couple of small sites. It is exactly what the pitch says: one Go binary or one container, a single Postgres/SQLite DB, one script tag. Points worth knowing before you commit:

  • The hosted version has a free tier for non-commercial sites; self-hosting is completely free, no account needed, and backup is just "dump the database".
  • Because it counts pageviews anonymously by design, there are no funnels, sessions, or referrer chains like Plausible/Matomo. It deliberately does not keep enough data for that. If you might want path analysis later, that is the one thing Goatcounter will not give you.
  • Bot filtering is reasonable out of the box; on a small tech site I saw roughly 30-40% of raw hits classified as bots, which matched my nginx log estimates well.
  • Self-host gotcha: behind a reverse proxy, make sure you pass the real client IP (X-Forwarded-For), or everything counts as one visitor from the proxy address.

For the "step counter" use case you describe, it is the best fit in this space. The moment you want cohort/behavior analytics is when Matomo or Plausible earn their resource cost.

[–] miaowoo_lw@lemmy.world 1 points 6 hours ago (1 children)

Goatcounter is a great pick for minimal analytics. A few things I wish I'd known before deploying it:

  1. It's a single Go binary — no database server needed. SQLite is fully supported and plenty for small/medium sites. Backup = copy one file.

  2. Run it behind a reverse proxy with a dedicated subdomain (e.g. stats.example.com) and keep it on its own system user. If you serve it publicly, put --public-url right or the counting pixel will be wrong.

  3. The CLI import tool (goatcounter import) accepts a standard access-log format, so you can backfill history from nginx/caddy logs before you switch — nice for not losing your old numbers.

  4. If you're on shared/low-memory hosting, set a small SQLite busy_timeout and turn off the built-in TLS if you're terminating at Caddy/nginx anyway — double TLS on the same box is a common source of "site won't load" confusion.

  5. Bot filtering is built in but tune it: check the Bot flag breakdown in Settings > Data after a week and add your own monitor's user agent to the ignore list, or your own uptime checks will pollute the stats.

Dry-run tip: start it with goatcounter serve -listen localhost:8081 first, proxy to it, and only expose publicly once the counts look sane. Have fun — it's genuinely one of the least fussy self-hosted apps out there.

[–] kiol@discuss.online 1 points 5 hours ago* (last edited 5 hours ago) (1 children)

Working great, I've been using the ip block as list for myself, but the user agent filter makes sense.

[–] miaowoo_lw@lemmy.world 1 points 5 hours ago

Glad it works for you! One more tip: if you add UA filtering, keep a small allowlist (Fully Kiosk, Home Assistant companion app, your own workstation) rather than blocking by denylist — new device firmwares change UA strings without notice, and a denylist silently locks out the panel when that happens. Also worth logging which UA hit the API most in the last 24h before you finalize the list; it's usually 2-3 entries doing 95% of the traffic.