QR Code Tracking & Scan Analytics

QR code tracking: what a scan can and cannot tell you

Every scan passes through a redirect we control, which is the moment it can be counted. Here is exactly what gets recorded, what does not, and how to make the numbers answer a question.

Track your first QR code — free A scan analytics dashboard: a rising bar chart next to a world map dotted with scan locations.

Why a static QR code cannot be tracked at all

This is the part most comparison articles skip. A static QR code encodes your destination directly: the camera reads the URL out of the pattern and opens it. Nothing of ours is involved, so there is nothing to count. Any generator promising analytics on a static code is either describing a dynamic code by another name, or describing your website analytics.

A dynamic code encodes a short redirect address instead. The phone loads that address, our server records the request and answers with your destination. The extra hop takes a few dozen milliseconds and nobody notices it — and it is the entire reason a scan can be measured.

Which means the decision about tracking is made before printing, not after. A static code already in the wild cannot be retro-fitted with analytics; it can only be replaced.

The numbers are people, because the machines are removed

A scan count that includes robots is worse than no scan count, because it is confidently wrong. Paste a code’s link into a group chat and WhatsApp, Slack and Facebook all fetch it to build a preview — three "scans" from one message nobody has read yet. Uptime monitors add one every few minutes, forever. A crawler that finds the URL can add hundreds in an afternoon.

Every request is classified before it is counted. Link unfurlers, crawlers, monitors, scripted clients and browser prefetches are stored with a reason and kept out of the totals, out of scan notifications and out of webhooks. They are still visible — the dashboard shows how many were filtered — because "the count did not move but 400 bots came through" is itself worth knowing.

The detector is deliberately cautious. An unfamiliar or missing user agent is counted as a person, because discarding a real scan is a worse error than counting a script.

What is not recorded, and why that is the right line

There is no identity behind a scan. No account, no cookie set on the scanner’s phone, no way to recognise the same person returning tomorrow, and no ability to follow them once they have been handed to your destination.

The location is derived from an IP address, which places a scan in a city and no closer — it is routinely wrong on mobile networks, which route traffic through regional gateways. Treat it as "which market", never as "which street".

This is a real ceiling and worth stating plainly rather than discovering later: QR analytics answer questions about placements, not about people. Which poster earns its print run, when scanning peaks, whether the audience is on iOS — all answerable. Who scanned, and whether they came back — not answerable here, and not by anyone else measuring a redirect either.

Joining scans up with what happened next

The redirect stops being able to see anything the moment the phone lands on your site. To learn what happened after that, hand the information over: add UTM parameters to the destination — a source, a medium and a campaign naming the placement — and your web analytics will attribute the session, the pages and the purchase to that exact poster.

The two datasets answer different halves of the same question. Scan counts tell you how many people were interested enough to point a camera; your site analytics tell you how many of them did anything about it. The gap between the two numbers is usually the most useful figure either system produces, because it is a fact about your landing page rather than about your print.

What every scan records

What the feature actually does, part by part.

Time of every scan

To the second, so a lunchtime peak on a table card and an evening one on a window are visible rather than averaged away.

Approximate location

Country and usually city, derived from the IP address. Enough to see that the trade show worked; nowhere near enough to identify anyone.

Device and browser

iOS or Android, and which browser. The split decides whether an app-download code should lead anywhere but the store.

Bots kept separate

Link unfurlers, crawlers, uptime monitors and prefetches are stored and labelled, but never added to your scan count.

Per-code, per-placement

One code per poster, table or bag, each with its own history — which is what turns a total into a comparison.

Exports and reports

CSV and PDF out, plus a scheduled email so the numbers arrive without anyone remembering to look.

Built for

Anyone who has been asked whether the printing was worth it.

Print campaign attribution Packaging and inserts Multi-location retail Events and stands Agencies reporting to clients Product manuals

Set up tracking that answers a question

The mistake is one code everywhere. The fix costs nothing.

1

Create a separate dynamic code for each placement — per poster, per table, per bag, per branch.

2

Name them after the placement rather than the campaign, so the dashboard reads like a map of where they are.

3

Add UTM parameters to each destination so your site analytics can attribute the visit too.

4

Leave them for a fortnight. A day of data is noise, and a week still has a weekend in it.

5

Compare placements, drop the ones nobody scans, and schedule a report so nobody has to remember to check.

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.

Can you track a static QR code?
No, and nobody can. A static code encodes your destination directly, so the phone goes straight there and no third party ever sees the request. Any analytics you get for a static code are your website’s own, and they cannot tell a visitor who scanned a poster from one who typed the address. Tracking requires a dynamic code, and that decision has to be made before printing.
What information does a scan actually record?
The time, the device type and browser the phone reports, and an approximate location derived from the IP address — usually accurate to a city and often wrong by a region on mobile networks. There is no identity attached, no cookie set on the scanner’s phone, and no way to recognise the same person on a later scan.
Are link previews and crawlers counted as scans?
No. Requests from link unfurlers, crawlers, uptime monitors, scripted clients and prefetches are identified, stored with a reason, and kept out of your totals, your notifications and your webhooks. You can still see how many were filtered, because a sudden wave of them is worth knowing about.
Is QR code tracking GDPR-compliant?
It is designed to sit on the right side of the line: no identity, no cross-site tracking, no cookie on the scanner’s device, and IP addresses used to derive an approximate location rather than stored as a profile. Whether your own use is compliant depends on what you do with the data and what your destination does next, so treat this as a foundation to build on rather than a certificate.
How do I tell which poster a visitor came from?
Create one code per poster rather than reusing a single code, and add UTM parameters to each destination. The scan counts tell you which placement got the attention; the UTM parameters carry that attribution into your website analytics, so you can follow it through to what the visitor actually did.
How long is scan history kept?
For as long as your retention setting says — it is configurable, and exports let you keep your own copy of anything older. Scheduled reports also mean the figures are captured and emailed at the end of each period, so the summary survives even after the individual rows are pruned.

Ready to find out which placement is doing the work?

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

Track your first QR code — free