How it works

Count once,
read forever.

The expensive part of analytics is aggregation. Most tools do it when you open the dashboard. This does it once, as the traffic arrives — which is why it stays fast and stays inside a free tier.

The path of one pageview

From the visitor's browser to your database.

How a pageview travels through GhostPane A visitor's browser sends one request to the collector Worker at the nearest Cloudflare location, which answers immediately. The event is then passed to the site's aggregator, which stitches sessions and de-duplicates visitors, batches the counters, and writes pre-grouped rows to a D1 database that the dashboard reads. Browser 1.7 KB, deferred Collector nearest edge PoP Aggregator one per site D1 pre-grouped rows Dashboard one query answered here — visitor waits for nothing else hashes the visitor, no cookie sessions · de-duplication · batching 1,000 views → 1 row
The visitor's request is answered at the edge in a couple of milliseconds. Session stitching, visitor de-duplication and the write to the database all happen after the response has already gone back.
Setting it up

Four steps, about two minutes.

Nothing to install on your machine, no terminal, no repository to clone. The wizard talks to Cloudflare's API on your behalf and shows you every step as it happens.

Pay

Card or wallet, through Polar — the merchant of record, so VAT is charged correctly for your country and you get a proper invoice. Your licence key arrives immediately.

Connect Cloudflare

Paste a Cloudflare API token. The wizard lists the accounts it can reach so you never have to find an account id, and the token is used for this run only — never stored, never logged.

Watch it build

Database, schema, your login, the Worker, your domain and edge rate-limiting — each step reported as it completes. Every step is repeatable, so a hiccup means "run it again".

Add one tag

Paste the snippet below into your site and the dashboard starts filling up. That is the only thing that touches your own codebase.

The entire installation on your side. One tag, 1.8 KB gzipped, deferred.
<script defer data-site="YOUR_SITE_KEY" src="https://ghostpane.com/gp.js"></script>
Moving over

Bring your history with you.

The real cost of leaving Google Analytics is not the setup — it is losing three years of data the week you switch. Export a report from GA4 as CSV and it imports straight in: daily totals, or a breakdown by page, country, device, browser, source or campaign.

  • It merges, not sits besideImported days land in the same tables as everything measured here, so the twelve-month chart spans the switch and every breakdown, export and API call reads across it.
  • It never overwritesA day that already has data is skipped, and you are told how many before anything is written. An import that quietly doubled a week would be undetectable afterwards.
  • It never inventsOnly what is in the file is written. Nothing is spread across hours it cannot know about to make a chart look fuller than the export was.

Two minutes from here.

Buy it, paste a Cloudflare token, and the dashboard is yours — running in your account, with your history brought across.

One payment · runs in your own Cloudflare account · nothing reports back