Making sense of numbers

Why two analytics tools never show the same number

Install two analytics tools and they will disagree, every time. Here is exactly where the gap comes from.

Put two analytics tools on the same website and they will report different numbers. Every time, on every site. This is normal, it is explicable, and once you know where the gap comes from it stops being worrying and starts being useful.

Five causes, in the order they usually matter.

1. One script gets blocked more than the other

This is the big one, and on most sites it accounts for more of the gap than the other four put together. Ad blockers and privacy extensions ship with lists of domains to block, and the largest analytics domains are on all of them. A blocked request is not recorded as a miss — it simply never happens, so the report looks complete.

How much it matters depends entirely on who reads your site. A developer audience blocks heavily; a general consumer audience blocks far less. Our script is 1270 bytes and served from a domain with no advertising history, so it tends to be blocked less — which is why sites running both usually see more traffic reported here, not less.

A diagram showing one hundred real visits arriving at a website. A widely-blocked analytics script records seventy of them while a less-blocked script records ninety-four. The twenty-four difference is visitors that one tool never heard about.

The visitors are identical. The difference is how many of them each script got to hear about — and neither report shows a gap, because a blocked request leaves no trace.

2. They disagree about what counts as a robot

A large share of traffic to any public website is automated — crawlers, uptime monitors, link previewers, AI agents. Every tool filters some of it, and no two filter the same set.

A tool that filters aggressively reports fewer visits and a cleaner picture. One that filters lightly reports more visits and flatters you. Both are defensible choices; they are simply different ones, and the difference lands straight in the gap between your two dashboards.

3. The words mean different things

"Visit", "session", "user" and "bounce" are not standard terms. Each tool defines them, and the definitions genuinely differ — GA4 redefined bounce rate so completely that most advice written about it is now describing a different number.

Sessions are the one that catches people most often. How long a visit stays open with no activity, whether a new campaign tag starts a fresh session, whether midnight ends one — all are choices, all vary, and all change the count.

A table comparing how two analytics tools can differ on the same page view: whether a bot is filtered, when a session expires, what counts as a bounce, and whether a prerendered page view is counted.

Four ordinary configuration choices. Each is reasonable on its own, and together they move the number before anybody has argued about blocking.

4. One of them samples, and one of them waits

Two smaller effects that both move the number.

Sampling. Some tools estimate from a subset once a query gets large, then scale up. The result is close and it is not exact, and it moves between queries.

Processing delay. Some tools show today's data immediately and some take hours to finish counting it. Comparing two dashboards at four in the afternoon can show a gap that has closed completely by the next morning. Always compare whole days that have finished.

5. The scripts are not in the same place

A worthwhile thing to check before concluding anything else. If one script is in the head and the other is at the end of the body, the second will miss people who leave quickly. If one is fired by a tag manager that waits for consent and the other is not, the difference is everybody who did not consent.

That last case is easy to overlook and large. It is also one of the quieter arguments for measuring without a banner at all — there is nothing to wait for, so nothing is lost while waiting. How cookieless analytics works covers the mechanism.

What to do about it

  1. Run both tools for a month before you conclude anything. You are learning a ratio, not hunting a bug.
  2. Compare completed days, never today.
  3. Pick one tool as your system of record and judge it against itself over time. Two sources of truth is none.
  4. Write your ratio down. Once you know this tool reads about fifteen per cent above that one, every future comparison takes ten seconds.

If you are partway through a move, what imports and what cannot lists the specific differences to expect in your history — and how to judge an alternative is the wider question if you have not decided yet.

Common questions

Which tool is telling the truth?

Usually the one that is blocked less, because the commonest cause of a gap is requests that never arrive. But "truth" is the wrong frame — the two are measuring slightly different things and both are internally consistent. Pick one as your system of record, and compare it to itself over time rather than to the other one.

How big a gap is normal?

It depends almost entirely on your audience. A site read by developers can see a very large gap, because ad blockers are near-universal in that group; a site read by the general public sees a much smaller one. Rather than reach for a benchmark, run both tools for a month and learn your own ratio — once you know it, the gap stops being alarming and becomes a constant you can reason with.

Why does my server log show more visits than my analytics?

Because a log counts requests and analytics counts people. One page view can be dozens of requests, bots make a large share of them, and anything served from a cache may never reach your server at all. Logs are good for debugging and poor for counting visitors.

Does the gap mean I am losing visitors?

No. The visitors arrived either way — one tool simply did not hear about some of them. Nothing about your actual traffic changes when you change how it is measured, which is worth saying out loud because a drop in a dashboard on migration day looks exactly like a drop in business.

Can I make two tools agree?

Not exactly, and it is not a goal worth pursuing. You can narrow the gap by matching definitions where they are configurable, but blocking rates and bot filtering will always differ. The useful target is a stable, explained ratio rather than a matching number.

All writing

Read next

Leaving Google Analytics

Ready

Paste one line. Watch the first visitor arrive.

A 1270-byte script, no cookie banner, and a dashboard that fits on one screen. 30 days on the plan you pick. A card is taken up front and charged when the trial ends, unless you cancel first.