Questions

Everything people ask,
answered properly.

Full answers rather than teasers — including the ones where the honest answer is "it depends on your jurisdiction" or "check your own position".

Do I need a cookie consent banner for this?

In most jurisdictions, no. Consent rules like the EU's ePrivacy Directive are triggered by storing or reading information on someone's device. GhostPane stores nothing on the device — no cookie, no localStorage, no fingerprint. Data protection law still applies to the processing itself, and you remain the controller for it, so check your own position if you have a specific obligation.

How does it count unique visitors without a cookie?

It hashes the visitor's IP address and user-agent together with a secret salt that is different for every site and regenerated every day. The salt is derived at the moment of use and never stored, and the raw IP address is never written anywhere. Within a day the same person produces the same id, so sessions and unique counts are real. Across days the salt has changed, so the ids cannot be linked.

Why does my visitor count look different from Google Analytics?

Two reasons, and both mean GhostPane is closer to the truth. It counts a returning visitor once per day rather than linking them across weeks, because the identifier is deliberately re-salted daily. And it filters bots at the edge using Cloudflare's network-level signals before anything is stored, which typically removes traffic GA never noticed.

What does it actually cost to run?

For most sites, nothing. It runs entirely inside Cloudflare's free tier: Workers, D1 and Durable Objects. Because pageviews are counted into pre-grouped rows rather than stored one by one, a busy site writes a fraction of the rows you would expect. There is no per-pageview fee because there is no vendor in the middle.

Why pay for this when there are free open-source analytics for Cloudflare?

Because they measure from a browser script, and that has two consequences no amount of good code fixes. A blocked, failed or disabled script is a pageview that never existed — and the share is highest among exactly the technical audience most sites care about. And no crawler executes JavaScript, so no script-based product can ever show you that OpenAI, Anthropic or Perplexity are reading your pages. GhostPane runs inside your own Cloudflare account, so it can also count the HTML request itself: your blocked-script gap becomes a measured number instead of an industry average, and the AI crawlers become visible. That needs your DNS on Cloudflare — the site itself can be hosted anywhere. If you only need pageviews and referrers on a personal site, the free options are a reasonable call and they are genuinely good software.

Can I see which countries or devices a conversion came from?

Yes. Conversions are stored with the full dimension set, so any event can be broken down by country, device, browser, referrer or campaign, and every dashboard filter applies to events as well as pageviews.

Can I move my Google Analytics history across?

Yes. Export a report from GA4 as CSV with Date included — either the daily totals or a breakdown by page, country, device, browser, source or campaign — and it imports straight in. Imported days merge into the same tables as everything measured afterwards, so your twelve-month chart spans the switch. Days that already have data are skipped rather than overwritten, and you are told how many before anything is written.

Can it track revenue, not just conversions?

Yes. Pass an amount when you fire the event and the goal totals it in whatever currency you set, with the average order value beside it. Amounts are stored as whole hundredths rather than as floating point, so a year of sales still adds up to the figure your payment processor has — money summed as a float drifts, and an analytics total that disagrees with the bank by a few cents invites a reconciliation nobody can finish.

Does it have funnels, and are they honest?

Yes to both. A funnel chains goals into an order, and a visit is only counted at a step if it genuinely reached every step before it, in that order, within the same visit — someone who lands on your checkout page and then wanders back to pricing does not count as having progressed. Funnels are computed from row-level data, which means they need the detailed-data setting on and reach back as far as that site's retention window.

Does it work with React, Next.js, Vue, Astro or Angular?

Yes, with the same single script tag. Rather than integrating with any framework's router, the snippet hooks history.pushState and replaceState — the browser primitive all of them are built on — so client-side navigation is counted with nothing to configure. Hash-based routers need one extra attribute.

With edge mode on, do I still need the tracking script?

Keep both — that is the recommended setup, and the two are complements rather than alternatives. Edge mode counts the request, so it sees the visits a script never gets to report; the script sees what only exists in a browser. Engagement time, bounce rate, visit duration, single-page-app route changes, custom events, goals and revenue all come from the script, so removing it turns those quiet while pageviews, visitors, countries, devices and referrers carry on. You also lose the coverage figure itself, which is measured by comparing the two. Remove the script only if you want pageviews and breakdowns with no client-side JavaScript at all, and accept that trade. A pageview both collectors see is counted once, never twice.

What happens to my data if I stop using it?

Nothing, because it never left your account. The database is yours, in your Cloudflare dashboard. You can export any range as CSV in one click, or query the D1 database directly with SQL. There is no export request to file and no lock-in to escape.

What if I buy it and it turns out not to work for me?

You have 30 days to ask for a full refund, no reason needed and nothing to prove — email and it is issued through Polar, tax included. In practice you should not need it: the free tier is the same software with a smaller cap, it does not expire, and upgrading later re-runs the installer against the same Worker and the same database with no migration and no data lost. Seeing it work on your own site before paying anything is the better test, and it is free.

What happens if you stop working on this?

Your installation keeps running, indefinitely, because there is nothing of mine in it. The Worker, the database and every row are in your own Cloudflare account under your own billing, and nothing checks a licence, calls home or expires at runtime — the software has no idea I exist. That is a property of the design rather than a promise: there is no service to switch off and no key to let lapse. The realistic loss is future updates and somebody to email, not the thing you bought. Updates are published for at least twelve months from purchase, and the security page explains exactly what your deployment does and does not talk to.

Ask something that is not here →

Satisfied?

The whole thing installs into your own Cloudflare account in about two minutes.

20% off, applied at the checkout · runs in your own Cloudflare account · nothing reports back