CO

Counterscale

Scalable web analytics that runs on Cloudflare Workers

Web Analytics ★ 2.1k stars Easy setup MIT

Counterscale is a simple, privacy-friendly web analytics tool designed to be easy to deploy and maintain on Cloudflare Workers. It tracks page views and visitors with minimal infrastructure.

Key features

  • Runs on Cloudflare Workers
  • Privacy-friendly tracking
  • Minimal infrastructure
  • Cheap to operate

Pros & cons

Strengths

  • Almost free to run
  • Very easy deployment

Trade-offs

  • Cloudflare dependency
  • Basic feature set

Counterscale replaces

Last reviewed Sep 13, 2026 · 815 words

Counterscale is self-hosted analytics with no host. It deploys as a Cloudflare Worker that writes page views into Cloudflare's Analytics Engine, and the "server" you operate is a free-tier account plus one API token. For a personal site or a handful of small projects the monthly cost rounds to zero, there is nothing to update, nothing to back up and nothing that can fill a disk. The price is that every byte lives inside Cloudflare, and that the underlying store keeps only about 90 days of data. Whether that is a fair trade depends on how much you meant the word "self-hosted" when you typed it into the search box.

Deployed from a laptop in under 10 minutes

There is no compose file because there is no container. The install is a CLI that provisions the Worker and the Analytics Engine dataset on your account:

npx @counterscale/cli@latest install

It prompts for a Cloudflare API token with Workers and Analytics Engine permissions, creates the Worker, and prints a URL such as counterscale.your-subdomain.workers.dev. Add a custom domain in the Workers dashboard if you want the dashboard on stats.example.org. Then drop the tracker into each site:

<script id="counterscale-script"
  data-site-id="example-org"
  src="https://stats.example.org/tracker.js" defer></script>

The dashboard is the Worker itself, protected by the Cloudflare Access rule or basic auth you put in front of it; out of the box it is public, which is the first thing to change. Updates are npx @counterscale/cli@latest install again. That is the entire operations manual for a tool that was first released in 2024 and has 2,136 stars on the strength of exactly that brevity.

What it counts, and what it refuses to

Page views, unique visitors, referrers, top paths, country, browser and device, over a chosen date range. Visitor uniqueness is inferred from request headers and cache behaviour rather than a cookie, so there is no consent banner to argue about under GDPR, the same posture Plausible and Umami take. Beyond that the feature list stops. No custom events, no funnels, no goals, no UTM breakdowns beyond the referrer, no per-user API tokens, and no export button. If the questions you ask of analytics are "how many people, from where, reading what", it answers all three. If you have ever built a conversion funnel, you will hit the wall in the first week.

The 90-day retention is the number to plan around

Analytics Engine, the Cloudflare product underneath, retains data for a limited window (90 days at last check; verify against the current Analytics Engine documentation). Counterscale inherits that and does not roll data up into its own long-term store. A year-over-year comparison is therefore impossible without exporting on your own schedule, and there is no built-in exporter. For a blog that wants to know whether last week's post did well, that is fine. For a project tracking growth across quarters, it disqualifies the tool on its own. The dependence cuts both ways: Cloudflare's free Workers tier covers 100,000 requests a day, which is more page views than most self-hosters will ever see, and if Cloudflare changes the free tier the entire economics change with it.

Umami and Plausible cost a real server and keep the data forever

Both run as a container with a PostgreSQL database, both idle at a few hundred MB, and both hold years of history you can query and export. Umami adds events and multiple websites with team access; Plausible adds goals, funnels and a polished paid-hosting option. The Plausible versus Umami comparison splits those two; GoatCounter is the lightest option that still gives you a real database, running happily in a single SQLite-backed binary. Counterscale beats all three only when you have no server and do not want one. My broader case for leaving Google's product is in ditching Google Analytics, and Counterscale is a legitimate answer to it for the smallest sites.

What I'd do

If you already run a homelab with a reverse proxy, install Umami and be done; the marginal cost of one more container is nothing and you keep the data. If you have a static site on Cloudflare Pages or GitHub Pages and no server at all, Counterscale is the right size: 10 minutes to deploy, lock the dashboard behind Cloudflare Access on day one, and write a monthly calendar note to screenshot or scrape the numbers you care about before they age out. Do not call it self-hosted in the sense that matters for a threat model. Do call it the cheapest honest page counter available in 2026.

Compare Counterscale

19 head-to-head comparisons.

Similar web analytics apps