A static QR code cannot be tracked at all
A static code carries the destination inside the pattern. The camera reads the URL straight out of the black and white squares and opens it — the scan never passes through a server you control, so there is nothing anywhere to count. No dashboard, no free QR code tracker, and no analytics tool can recover scans from a static code after the fact, because the event was never recorded in the first place. The only trace is whatever the destination itself sees: a visit with no referrer, indistinguishable from someone typing the address by hand.
Settle that before anything else. Tracking is not a feature bolted onto a QR code; it is a side effect of routing the scan through a redirect. If the sticker is already printed and static, those scans are gone and cannot be reconstructed. That trade is often the right one — a WiFi code taped to the wall does not need analytics, and a static code keeps working with nothing behind it at all. But you choose it at design time, not later.
What a trackable QR code records
A dynamic code encodes a short redirect link instead of your destination. Every scan hits that link, gets logged, and is forwarded on in a fraction of a second — the person sees only your page. That one hop is the entire mechanism behind QR code analytics. What the log holds:
- Scan count — total scans, split into unique and repeat. Unique is estimated from a first-party cookie plus device signals, so treat it as a good estimate, not a headcount.
- Timestamp — date and time to the minute. This is what produces the daily curve that tells you when a table tent or a shop window actually gets used.
- City-level location — resolved from the scanning device's IP address.
- Device and OS — phone versus tablet, iOS versus Android, and the browser. Useful when a landing page misbehaves on one platform.
- Which code — every code in the account reports separately, which is what makes placement comparison possible.
What it deliberately does not record
- No identity. No name, email, or account is attached to a scan. A QR scan is an anonymous HTTP request; there is no login involved.
- No GPS. Location comes from IP geolocation, which lands on a city and can be wrong. On mobile networks the answer is sometimes the city your carrier routes traffic through, not the street the person is standing on.
- No browsing history or ad profile. The redirect sees one request and forwards it.
- No answer to "who scanned my code". If you need to know the person, ask on the landing page after the scan. That is a form, and it is opt-in — not something tracking can give you.
One code per placement
The most common mistake in QR tracking is reusing one code across the poster, the flyer, the table tent, and the packaging. Every scan lands in one bucket, and the bucket answers nothing.
Generate a separate dynamic code for each placement, all pointing at the same destination. The printed patterns differ; the experience is identical.
| Setup | What the dashboard shows | What you can answer |
|---|---|---|
| One code on four placements | 1,200 scans | Nothing about placement |
| One code per placement | 640 / 310 / 220 / 30 | Which spots earn their rent, which to cut |
That last row is the whole point: the 30-scan placement is a decision, and with a single shared code you would never have seen it. Name codes by location and print date — "window-decal-march", "flyer-run-2" — because in six months the dashboard is the only record of which code went where.
QR scans in Google Analytics with UTM parameters
The QR dashboard tells you a scan happened. Google Analytics tells you what happened next. Run both, because neither answers the other's question.
Add UTM parameters to the destination URL before you generate the code:
https://example.com/menu?utm_source=qr&utm_medium=print&utm_campaign=spring-menu&utm_content=window-decal
- utm_source=qr and utm_medium=print separate scan traffic from search and social in GA4's Traffic acquisition report. Without them a QR scan arrives as Direct, mixed in with people who typed the address.
- utm_content carries the placement, mirroring the one-code-per-placement rule, so both systems slice the campaign the same way.
- Keep the parameters short. They add characters to the encoded link, and denser patterns need more physical size — see the QR code size guide. A shortened link keeps the grid sparse.
Expect the two numbers to disagree, usually with GA lower by 10 to 30 percent. The redirect counts a scan the moment it is hit; GA counts a session only after the page loads, the tag fires, and consent is granted. People who scan on bad reception and give up are real scans that never become sessions. That gap is normal and is itself information: a large one means the landing page is too slow or too heavy.
Reading the data honestly
Scan counts are the easiest QR metric to over-read. A few rules keep the numbers useful:
- A scan is not a conversion. It is a moment of interest that costs nothing and commits to nothing. The conversion lives on the destination — an order, a booking, a signup — and only the destination can measure it.
- Repeat scans inflate totals. Staff, your own testing, and the same diner reopening the menu three times all count. Judge campaigns on unique scans and keep the total for load planning.
- Bots leave a baseline. Some messaging apps and email security tools follow links to check them, so a code shared in a chat can show scans with no human behind them. A steady trickle at odd hours with no device variety is usually this.
- Small numbers are noise. Do not rebuild a campaign on a week of 30 scans. Give a comparison four weeks or a few hundred scans before you act on it.
- Change one thing at a time. If you move the poster and redesign it in the same week, the data cannot tell you which change moved the number.
For the wider picture — how often people scan, on what, and how the market is growing — see the QR code statistics page.
Asset and inventory tracking is a different problem
Searches for QR code asset tracking and inventory tracking usually want something scan analytics does not provide: one code per physical item that opens that item's record — serial number, service history, location, who has it.
The QR half of that is trivial. Generate one dynamic code per asset, each pointing at that asset's page, print it on a durable label, and keep the destination editable so the record can move without relabeling the equipment. The hard half is the system behind it: a database or a spreadsheet with a row per item and a URL per row. Scan analytics will tell you a label was scanned 14 times; it will never tell you where the forklift is. For labels that survive a warehouse, print vector at generous size — see the print guide — and test one on real stock before running a thousand.
How to create a trackable QR code and track scans
Create a dynamic code, one per placement
Tracking requires a dynamic code, because only a redirect can log the scan. Make a separate code for each poster, flyer, or package even when they all point to the same page — that is what lets you compare them later.
Add UTM parameters to the destination
Append utm_source=qr, utm_medium=print, a campaign name, and utm_content set to the placement. Without them, Google Analytics files every scan under Direct traffic.
Name the code and print it
Label the code in your dashboard by location and print date. Export SVG for print, size it for the scan distance, and test the printed proof on two phones before the full run.
Read scans and sessions side by side
The dashboard shows scans, unique visitors, times, cities, and devices. Google Analytics shows what happened after the page loaded. Expect GA to report 10 to 30 percent fewer sessions than the dashboard reports scans.
Wait for enough data, then change one thing
Give a comparison four weeks or a few hundred scans before acting on it. Then change a single variable — the placement or the artwork, not both — so the next set of numbers means something.
Frequently asked
Can you track a static QR code?
No. A static code holds the destination inside the pattern, so the phone opens it directly and no server of yours ever sees the scan. There is no log to read later and no tool that can recover one. Tracking requires a dynamic code, whose short redirect the scan actually passes through.
What data does a trackable QR code collect?
Per scan: a timestamp, the approximate city from the device's IP address, device type and operating system, browser, and whether the visitor looks new or returning. No names, no emails, no GPS coordinates, and no browsing history — a scan is an anonymous request, and the redirect only forwards it.
Is there a free QR code tracker?
Free trackers exist, but every one of them runs redirect servers and stores scan data on your behalf, so the cost sits somewhere — usually a scan cap, ads on a branded landing page, or a code that stops resolving when the free tier ends. QRolling puts the cost where it belongs instead: building and downloading a code is free with an account, tracking is part of the paid plan, and the 7-day trial lets you test it before anything gets printed.
How accurate is QR scan location data?
City-level at best, and sometimes wrong. It is derived from the IP address, and mobile carriers often route traffic through a hub in another city entirely. Use it to spot broad regional patterns, not to prove which branch a scan came from — for that, give each branch its own code.
How do I see QR code scans in Google Analytics?
Add UTM parameters to the destination URL before generating the code: utm_source=qr, utm_medium=print, a campaign name, and utm_content for the specific placement. The scans then appear under Traffic acquisition in GA4 instead of being lumped into Direct. Keep the QR dashboard as well, because it counts scans that never became sessions.
Why does my QR dashboard show more scans than Google Analytics?
Because they measure different moments. The redirect counts the scan instantly; GA counts a session only after the page loads and the tag fires, which loses anyone on weak signal, anyone who declines consent, and anyone who backs out while loading. A gap of 10 to 30 percent is normal; a much larger one means the landing page is too slow.
Need a different QR type? Browse all 48 QR types on the home page.
