Try it on your own data
Every report in this article is in the free plan. One snippet, cookieless, up to 10 sites.
Start freeEvery team that installs a second analytics tool asks the same question in the first week: why is the visitor count different? The honest answer is that “unique visitor” is not one metric. It is a family of metrics that share a name, and each tool picks a different member. This article walks through the six places where the definitions diverge, gives you a checklist to reconcile two tools, and explains why a funnel is still trustworthy even when the totals are not.
What you will learn
- The five definition choices that make two correct tools disagree on UV
- A reconciliation checklist you can run in an afternoon
- Why funnel drop-offs are comparable even when totals are not
A visitor is a definition, not a fact
A pageview is close to a fact: a page loaded, a request arrived. A visitor is an inference. Someone has to decide which requests belong to the same person, for how long, and whether that person is a person at all. Each of those decisions is a fork, and no two products take the same path.
The most common forks are the identity key (cookie, local storage, or a daily hash), the session rule (30 minutes of inactivity, midnight, or a campaign change), the bot filter, the time zone used for day boundaries, and how single-page apps report a route change. Five forks, two options each, and you already have 32 ways to count the same traffic.
Session rules move the line first
The classic rule closes a session after 30 minutes of inactivity. Some tools also close it at midnight in the property time zone, or when the campaign parameters change mid-visit. A visitor who reads at 23:50 and clicks again at 00:05 is one session in the first model and two in the second. Multiply that by a global audience and the daily unique count drifts by a few percent before anyone has done anything wrong.
TapCub uses the 30-minute rule and does not split on midnight. The glossary states this in the same words the product uses, so the definition in the meeting matches the definition in the chart.
Bots inflate exactly one side
The biggest single source of disagreement is not a definition at all. It is traffic that one tool counts and another removes. Monitoring services, link previews, search crawlers and AI crawlers all load pages. If tool A removes them and tool B does not, B will always be higher, and the gap will grow on the days a crawler decides to re-index you.
TapCub runs five layers of checks (user agent, request headers, client signals, ASN and request rate, 197+ rules in total) and keeps humans and bots in separate reports rather than silently deleting the bot rows. In the sample workspace below, the human line sits about 22% under the all-traffic line, and the gap widens on the two days a crawler visited.
Humans
48,213
▲ 12.4%
All traffic incl. bots
61,902
▲ 19.8%
Sessions
73,480
▲ 10.9%
Daily visitors · last 14 days
HumansAll trafficCookieless hashing and the day boundary
Cookieless measurement changes the identity key. Instead of a persistent identifier stored in the browser, TapCub derives a hash from request attributes and a salt that rotates daily, then discards the inputs. The result is a visitor count that needs no banner and holds up under strict privacy settings, but it has a known property: the same person on two different days is two visitors.
A cookie-based tool will therefore report fewer uniques over a month and more “returning” visitors. Neither is wrong. If you compare the two, compare daily uniques, where both models agree on what a person is, and treat weekly or monthly uniques as different metrics with different names. The cookieless explainer goes into the trade-off in detail, and the privacy page describes what is stored.
Time zones and single-page apps
Two smaller forks finish the job. First, the time zone: a tool reporting in UTC and a tool reporting in the account’s local time will put the same visit on different days near midnight, so day-level totals never line up perfectly even if the month does. Check the property time zone in both tools before comparing anything daily.
Second, single-page apps. A route change in a React or Vue app is not a page load. One snippet may send a pageview on every route change, another only on the first load, a third only when the title changes. The pageview count is affected most, but it also changes sessions when a route change is the only activity that keeps a session alive. TapCub’s web SDK sends a pageview on history changes by default; the data platform page lists the setting.
A reconciliation checklist
You can reconcile two tools in an afternoon if you compare one thing at a time. Work down this list, fixing or noting each difference before moving to the next. Most teams find that bot filtering and session rules explain three quarters of the gap, and the rest is time zone and SPA handling.
| Check | What to compare | Typical effect on UV |
|---|---|---|
| Bot filtering | Is one tool removing crawlers and monitors? Compare “all traffic” to “all traffic” first. | 10–25% in the tool without filtering |
| Session timeout | 30 minutes in both? Midnight split on or off? | 2–5% on daily uniques |
| Identity key | Cookie vs. daily hash. Compare daily uniques, not monthly. | Large on monthly, small on daily |
| Time zone | Same property time zone in both tools? | Shifts visits across the midnight boundary |
| SPA route changes | Does each snippet fire on history changes? | Mostly pageviews; some sessions |
| Consent mode | Does one tool drop visitors who decline cookies? | Up to 30–40% in strict regions |
| Snippet placement | Both in the head of every template? Any pages missing one? | Whole sections of a site |
Ranges are illustrative sample figures from our own reconciliations, not benchmarks.
Why funnels survive the disagreement
Here is the part that matters for decisions. A funnel does not need the UV total to match anything. It compares steps inside one dataset, counted with one definition. If 2,400 visitors reach the pricing page, 1,248 start checkout, 674 reach payment and 508 complete, the 46% drop between checkout and payment is real under any definition, because every step was counted the same way.
So the practical advice is: stop trying to make the totals match and start reading shape. Run both tools for a week, compare the trend lines, and when the shapes agree, pick one and open its funnel report. The behavior analytics page shows the funnel with the same sample numbers, and the migration guide covers the parallel-run week step by step.
TapCub Team
The people who design, build and support TapCub. We write about what we measure on our own site and what customers ask us most.