TapCub is live — analytics, insights and live chat, free on one platform
Analytics

Why UV never matches between tools, and how to read funnels anyway

Two tools on the same site will print two different visitor counts. That is not a bug. Here is where the gap comes from and a checklist to reconcile it.

TCTapCub Team Published Feb 12, 2026 Last updated Jun 20, 2026 8 min read Analytics

Every 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.

app.tapcub.com/sites/demo/overview

Humans

48,213

▲ 12.4%

All traffic incl. bots

61,902

▲ 19.8%

Sessions

73,480

▲ 10.9%

Daily visitors · last 14 days

HumansAll traffic
Jan 29Feb 1Feb 4Feb 7Feb 11
Sample data
Sample workspace. The two spikes in the dashed line are crawler days; the human line does not move.

Cookieless 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.

CheckWhat to compareTypical effect on UV
Bot filteringIs one tool removing crawlers and monitors? Compare “all traffic” to “all traffic” first.10–25% in the tool without filtering
Session timeout30 minutes in both? Midnight split on or off?2–5% on daily uniques
Identity keyCookie vs. daily hash. Compare daily uniques, not monthly.Large on monthly, small on daily
Time zoneSame property time zone in both tools?Shifts visits across the midnight boundary
SPA route changesDoes each snippet fire on history changes?Mostly pageviews; some sessions
Consent modeDoes one tool drop visitors who decline cookies?Up to 30–40% in strict regions
Snippet placementBoth 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.

TC

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.

See humans and bots side by side

TapCub keeps both lines in the overview and lets you switch the whole console to humans only.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics