Analytics you can feel.
A live look at what a website can see about you, and the long version of how I make four numbers make sense.
See it on yourself
This page is the long version of how I measure. The short version: four systems count four different things, I trace them against each other so you know why they differ, and I fix the differences that turn out to be breakage. The panel below is the first part, live, on you. What it can't show is the tracing itself, because that needs your forms and your CRM; the worked example below stands in for it.
What this site records about you, exactly
Before you accept anything
This is what any site sees before you accept anything. Before you accept, this site's own analytics stores nothing and sends nothing about you. The only thing in this tab's storage is a note if you were shown the hint, and it goes when the tab closes. Once you accept, a random session key for this tab is created, and it goes when the tab closes too. Cloudflare's cookieless counter adds the visit to a total, once.
- the page you are on, and whether it came from cache
- an estimate of your country, region, city and time zone, which Cloudflare guesses from your network address
- which Cloudflare data centre served the page, and the round trip to it in milliseconds
- the name of your network
- the web protocol and encryption version your browser used
- your device class and browser family
- the page that sent you, and any campaign tags in the link
- the time of the request
After you accept analytics
Everything below is worked out in your browser, kept in this tab's session storage, and gone when you close the tab.
- the pages you open in this session, in order, with the time on each and how far down you read
- how many seconds each section of a page was in view, named by its heading
- what you click, named by the label of the link or button (the site's own wording, never anything you typed), with dead clicks (nothing happened) and rage clicks (three or more in a second) called out
- where you click, as dots on the page (a position as a percentage of the page)
- how long you hover over buttons, and how long the tab was hidden against visible
- how many times you copied text (a count, never the text)
- how the page loaded for you: server reply, first paint, the biggest element painted (described in words), layout shifts and your slowest interaction
- your screen size and orientation, when they change, and your connection type, speed and data-saver setting where your browser reports them
- whether your browser can reach the two analytics scripts
- your consent choice, and the time this tab first saw it
Where the law asks for consent (the EU, the UK, Brazil and similar regions), my own analytics records nothing about you until you accept; elsewhere it runs by default. It also keeps a random visitor ID and session ID in cookies (the visitor cookie lasts 13 months), and Google Analytics 4 runs only with your consent. The privacy policy lists both.
What leaves your browser
Once analytics is on, this site's analytics sends what the privacy policy lists: a random visitor ID and session ID (kept in cookies), the pages you view, the page you came from and any campaign tags in the link, your country (worked out from your IP address, which it does not store), your device type, browser and operating system, page-loading performance, and the steps you take towards an order or an enquiry. With your consent Google Analytics 4 receives similar usage data.
What this site doesn't collect
- no text you type, and no form values
- no fingerprinting
- no tracking across other sites
- no stored IP address
Withdraw clears everything this tab holds and stops it recording, then opens the cookie settings so you can switch analytics off for the whole site. Click positions already sent are anonymous, so they cannot be traced back to you to delete.
What a reconciliation looks like
Here's one form across three countries. Example data, not a client's; the shape is what real ones look like.
| Country | Submissions | Accepted by the form | Unique CRM records | Analytics conversions | Ad-attributed conversions | Why they differ |
|---|---|---|---|---|---|---|
| United States | 50 | 49−1 | 47−2 | 44 | 31 | One spam entry, and two duplicates merged in the CRM. Ad blockers hid six from analytics. The ad platform counts the 31 that followed an ad click. |
| Germany | 30 | 28−2 | 26−2 | 17 | 14 | Two spam entries, and two submissions lost to a failed webhook - that one is breakage. Eleven visitors declined analytics consent and two used blockers. Ads: 14 followed a click. |
| United Kingdom | 20 | 19−1 | 18−1 | 12 | 9 | One spam entry and one duplicate merged. Eight visitors declined analytics consent. Ads: 9 followed a click. |
| All three | 100 | 96−4 | 91−5 | 73 | 54 | Four dropped as spam, three merged as duplicates and two lost to a failed webhook; only the failed webhooks are breakage. Analytics and ads count different things, so they were never going to equal 100. |
Why the numbers disagree
Analytics counts a visit when a script runs in the browser. Your form counts a submission when someone presses send, accepted or not. Your CRM counts a lead when the submission arrives. Your ad platform counts a conversion when its tag fires. Four different moments, four different scripts, and four different ways to miss: a consent banner that keeps analytics off in Europe, an ad blocker, a form plugin update that quietly breaks the handoff, a thank-you page someone visits twice. Some of those differences are expected, because they're counting different things. Some are breakage. The work is telling the two apart.
Example data
One form, with example numbers. 100 submissions; 96 accepted by the form, after 4 were dropped as spam; 91 unique CRM records, after 3 duplicates were merged and 2 submissions were lost to a failed webhook. Separately, the ad platform reports54 conversions, which counts the clicks that led to a submission inside its attribution window, so it is a different quantity.
Where each number comes from
Three sources feed the daily reconciliation, and what it finds becomes proposals that wait for approval.
- Counted at the edge (Counted in aggregate). Can see: Each request that reaches the site: the page, the country, the device class, where the visit came from and when. It's counted once in a total, with no cookie and no identifier. Can't: Who the visitor is, what they did on the page, or anything that happens after the page arrives.
- Events in the browser (Where consent is required). Can see: The pages in a visit and the time on each, how far down each page, where clicks land as a position, how fast the page loaded, and the steps towards an enquiry or an order. Can't: Anything before consent is given where it's required, and anything an ad blocker or a privacy setting stops.
- Imports from your systems (Read-only). Can see: Search Console impressions and clicks, GA4, Google Ads and Meta spend and conversions, leads in HubSpot or Salesforce, what your forms actually sent, and your consent platform's records. Can't: Why the systems differ, or anything a system never recorded.
- The daily reconciliation (Daily). Can see: Submissions, leads, conversions and spend, matched by form and country, with a reason beside each difference. Can't: A single visitor. It works on counts, not on people.
- Fix proposals (Waits for approval). Can see: A difference that turns out to be breakage becomes a proposal: the page, the exact change, why, the risk and what it replaced, so it can be put back. Can't: Change anything until a named person approves it, and it can't approve its own work.
How I do it
I reconcile by form and country, never by thank-you page, because thank-you pages get visited without a submission and submissions happen without a thank-you page. I count server-side and client-side and show both, because the gap between them is worth knowing. Consent choices and ad blockers are part of it, and so are tagging errors, failed requests and what each system chooses to count. I separate what the evidence explains from what's still unknown. And every change I make to a site is measured against the reconciled number, not the dashboard.
Once in a while this turns up something nobody expected: a form that stopped sending its event months ago, an analytics property that was tracking a product instead of the website. That's usually worth more than the dashboard was.
It connects to Google Analytics, Search Console, Google Ads, Meta, HubSpot, Salesforce, your form tools and your consent platform, read-only unless you approve a fix, and thestatus of each source is on the extend page. If you want this for your site, the first step is a two-week audit: see Measurement, oremail me.
See what your own numbers say.
Connect your site. The first report is free and takes about a day.
Start with a free report