Why your scan analytics and your web analytics disagree

Bot filtering, unique-visitor definitions and people who scan and then close the page. The gap is normal — here is what causes it.

Your code reports 1,000 scans. Your site analytics reports 780 sessions. Neither number is wrong.

Bots are counted differently

We identify known crawlers and unfurlers — the request a chat app makes to build a link preview, for instance — and exclude them from your totals. Other analytics tools use different lists and different rules. Two honest systems will disagree.

"Unique" means different things

We count a unique visitor with a daily-rotating salted hash. It cannot be reversed to an IP address and it cannot be joined across days, which is deliberate: it keeps the count useful without retaining anything identifying.

The consequence is that the same person scanning on Monday and Tuesday is two unique visitors. A cookie-based tool would call that one returning visitor. Neither is lying.

People leave between the scan and the page

A scan is recorded when the redirect is served. If the visitor closes the browser before the destination loads — slow connection, second thoughts, wrong code — we counted a scan and your site counted nothing.

This gap is usually the largest single cause, and it widens on slow mobile connections.

Time zones

Our daily aggregates are UTC. If your web analytics reports in IST, the boundary between "yesterday" and "today" is five and a half hours apart, so daily numbers will not line up even when the totals do.

What to do about it

Compare trends, not absolute numbers. If scans rose 40% and sessions rose 38%, the systems agree about what matters. Chasing an exact match between two tools with different definitions is a way to spend a week and learn nothing.

Which number to use for which question

The two systems are not competing measurements of one thing. They answer different questions, and the disagreement stops being annoying once each is used for what it can actually tell you.

The mistake worth avoiding

The tempting fix is to pick whichever number is higher and use it everywhere. It works until someone reconciles the two, and then every figure you have ever reported becomes suspect.

Write the definition down once — "scans = redirects served, known bots excluded, counted at redirect time" — put it in the footer of the report, and use the same definition every month. A slightly conservative number you can explain is worth considerably more than a flattering one you cannot.