Bot Filtering for Scan Analytics

Scan counts that mean people, not previews

Paste a QR link into WhatsApp or Slack and the app fetches it to draw a preview card. That is not a scan, and counting it as one quietly inflates every number you report.

See your real scan numbers — free A scan analytics dashboard: a rising bar chart next to a world map dotted with scan locations.

Where phantom scans come from

A QR code’s link gets fetched by a lot of things that are not customers. Messaging apps fetch it to build a preview card — often several times, from several servers, the moment somebody pastes it. Search crawlers follow it. Uptime monitors poll it on a schedule. Security scanners open every link in an email. Browsers prefetch links they think you are about to click.

Every one of those looks like a visit at the redirect. Counted as scans, they turn a poster that got eleven real scans into one that reports forty, and the inflation is worst on exactly the campaigns that got shared the most — which is where you are most likely to be making a decision from the number.

Filtered, not deleted

Automated traffic is still recorded, with a note of why it was classified that way. It simply does not raise the scan count, fire a webhook, or trigger a scan notification email, and it is hidden from analytics by default — so the dashboard, the CSV export, the API and the mobile app all show human scans without anyone having to remember a filter.

The count of what was filtered is shown too. Knowing that a code got 30 human scans and 120 previews is genuinely useful: it tells you the link travelled, even where the camera did not.

Deliberately cautious

The classifier errs towards counting. A request with an unfamiliar or missing user agent is treated as a person, because dropping a real scan is a worse mistake than counting a script — an under-reported campaign gets cancelled, an over-reported one just gets watched.

When a new signature is added, historical scans are re-classified and each code’s count is rebuilt from the human ones, so the past matches the present rather than showing a step change on the day of a deploy.

How the filtering works

What the feature actually does, part by part.

Link unfurlers

WhatsApp, Slack, Facebook, Discord, Telegram and the rest fetch a link to draw a preview card. Those fetches are recognised and set aside.

Crawlers and monitors

Search bots, uptime checks, security scanners and scripted clients are classified on the way in.

Prefetch requests

Browsers that fetch a link before anyone clicks it announce themselves, and those requests are not counted as scans.

Human-only by default

Dashboard, exports, API and the mobile app all read human scans without anyone selecting a filter.

No false alerts

Filtered traffic never fires a webhook or a scan notification, so a paste into a group chat cannot wake you up at 3am.

History stays consistent

When a new signature is added, stored scans are re-classified and counts rebuilt, so last month’s report still matches.

Built for

Anyone whose scan numbers end up in front of somebody who will act on them.

Campaign reporting Client-facing analytics Agencies Anyone sharing links in chat Print attribution

What you have to do

Nothing. It is on for every code on every plan — but here is what you will see.

1

Create and share a QR code as usual.

2

Scan counts on the dashboard show human scans only.

3

A separate card shows how much automated traffic was filtered out.

4

Exports, the API and the mobile app read the same human-only figures.

5

Webhooks and scan notifications fire on real scans, not on link previews.

Which plans include this

Taken from the live plan matrix, so this page and your account always agree.

Free
Included
Normal
Included
Pro
Included
Teams
Included

See the full plan comparison for everything each tier includes.

Questions people ask

Straight answers to what usually decides whether this is the right tool for the job.

Why did my scan count drop?
If a code was being shared in chat apps, a share of what it was counting was preview traffic rather than people. The lower figure is the more honest one, and the filtered count is shown alongside it so you can see the difference rather than having to guess at it.
Is the automated traffic deleted?
No. It is stored with a reason for the classification and can be reported on separately. It simply does not inflate the scan count or trigger anything that should only happen for a real person.
Could a real scan be filtered out by mistake?
It is possible but unlikely, because the classifier is deliberately cautious: anything it does not recognise is treated as a person. Missing or unusual user agents count as human for the same reason.
Does this slow the redirect down?
No. Classification happens against the request that already arrived, and the scan is recorded on a queue after the visitor has been sent on their way.
Which plans include it?
All of them, including Free. Accurate numbers are not a premium feature — a wrong number is worse than no number regardless of what you pay.

Report numbers you can defend

Free plan available forever. No credit card required. Get started in under 60 seconds.

See your real scan numbers — free