Analytics QR Code
QR Code Tracking: Scan Analytics and CSV Export
Every scan of a dynamic QR passes through a redirect, and the redirect is what records it. Timestamp, city, device, browser, referrer and full UTM set, exported to CSV or pulled through the API.
Your QR code will appear here
About Analytics QR Codes
QR code analytics answer one question: did the print work? A dynamic QR encodes a short redirect URL, and every scan passes through that redirect before landing on your destination. The redirect is the measurement point. It records the scan, then forwards the visitor.
That mechanism sets a hard boundary most vendor pages skip. A static QR cannot be tracked at all. Its destination is encoded directly in the module pattern, so the scan goes phone-to-website with nothing in between to count it. No vendor can track a static code. That is physics, not a paywall, and any tool claiming otherwise is either quietly converting your code to a dynamic one or counting something else.
Exactly what one scan records
Most generators describe QR analytics in adjectives. Here is the actual record EZQR writes when a code is scanned, field by field. Every row below is a column we store, and the three derived rows are computed from the request and then discarded at source.
| Field | Example | Where it comes from |
|---|---|---|
| Timestamp | 2026-10-24 14:02:11 UTC | When the redirect was hit |
| Device type | Mobile, Tablet or Desktop | Derived from the user-agent: three values, nothing finer |
| Browser | Safari | Derived from the user-agent |
| Operating system | iOS | Derived from the user-agent |
| Country | United Kingdom | Edge geo lookup on the request |
| City | Manchester | Edge geo lookup, Pro and above |
| Referrer | instagram.com | Sent by the scanning app, often empty for a camera scan |
| Landing URL | The destination at the moment of the scan | Captures the repoint history implicitly |
| UTM source / medium / campaign / content / term | flyer / print / spring_sale | Whatever you attached to the destination |
| Anonymous ID + session ID | Opaque identifiers | Separates a repeat scan from a first one |
What is not stored: the raw IP address and the full user-agent string. The IP is used for the geo lookup and for rate limiting and is then dropped; the user-agent is reduced to the three rows above and discarded. Neither is written to the scan record.
What the numbers cannot tell you
This is the part a tracking page usually leaves out, and it is the part that decides whether you can trust a report.
A scan is not a person. A QR scan usually opens in a fresh in-app browser with no history, so the anonymous ID separates repeat scans well within a session and poorly across days. Treat unique scans as a close estimate, never as a headcount.
A quiet code is ambiguous. Zero scans can mean nobody saw the placement, or that the printed code is too small to resolve at the distance people stand. The analytics cannot distinguish those, which is why the size guide matters before the campaign, not after.
Referrer is usually empty. A scan from the native camera app carries no referrer, so that column tells you about in-app scans and little else.
Very high bursts are excluded on purpose. The redirect allows 300 scans a minute from one address before it stops recording. Past that the code still redirects, a printed code is never made to fail to protect a chart, but the excess is left out of the numbers rather than inflating them.
A static code records nothing at all. There is no redirect to pass through, so there is nothing to count. That is a property of the format, not a plan restriction.
What each plan actually sees
Analytics depth is the main thing the tiers differ on, so it is worth stating plainly rather than as a feature grid.
| Plan | History kept | Location detail | Export |
|---|---|---|---|
| Free | Scan count only | None | None |
| Lite, $5/mo | 30 days | Country | None |
| Pro, $10/mo | Full history | Country and city | CSV |
| Max, $20/mo | Full history | Full | CSV and REST API |
The free tier reports a number and nothing behind it. If the question is "which of my ten placements worked", that needs Lite at minimum and one code per placement.
- Decide the reporting question before printing. Ten placements sharing one code produce one number that cannot be split afterwards, and no plan can recover the breakdown later.
- If the scans need to sit beside your other campaigns, put UTM tags on the destination and the same scan appears in both EZQR and GA4.
Walkthrough
How to Create an Analytics QR Code
Create the code as dynamic, not static
Analytics require a redirect, so the code has to be dynamic from the start. Pick a dynamic QR when you create it. Converting later means reprinting, because the encoded pattern changes.
Add UTM parameters if you use GA4
Set utm_source, utm_medium and utm_campaign on the destination. EZQR appends them to the forwarded URL, so the same scan appears in both EZQR and your Google Analytics property. Without UTMs, GA4 files QR traffic under direct.
Give every placement its own code
Give each physical placement its own code. One code across ten locations produces a single number that cannot tell you which of those ten locations earned it, which is the question you printed the code to answer in the first place. Ten codes produce ten numbers, and the comparison between them is the actual insight.
Read the dashboard
Scans appear with timestamp, city and country, device type, browser and operating system, referrer, and any UTM values you attached to the destination before printing. Totals and unique counts are shown separately, because the gap between them is what tells you whether one person scanned repeatedly or many people scanned once.
Export to CSV or pull through the API
Pro exports full scan history to CSV. Max adds REST API access so scan data lands in your warehouse or BI tool without a manual download.
Analytics QR Code FAQ
Common questions about generating, printing, and deploying these codes.
How does scan attribution work?
Two mechanisms, and they answer different questions. The first is one code per placement: a scan can only ever be attributed to the code that was scanned, so if the same code goes on ten posters you get one number and no way to split it. Generate a separate dynamic code for each poster, table tent or mailer and the attribution is structural rather than inferred. Folders keep that organised: 10 on Lite, 25 on Pro, unlimited on Max. The second is UTM parameters on the destination: EZQR records all five (source, medium, campaign, content, term) against the scan and forwards them to the destination, so the same scan is attributable in your own analytics too. Each scan also carries the referrer and the final landing URL.
Can I see repeat scans, or only totals?
Both. Each scan carries an anonymous visitor ID and a session ID, so repeat scans are distinguishable from first-time ones and multiple scans inside one session are not counted as separate people. That is the honest limit of engagement measurement from a redirect: it tells you how often a code is scanned and how much of that is the same device coming back, not who the person is or what they did after they landed. Anything past the redirect (time on page, items added to a basket, a form submitted) belongs to your own analytics, which is what the UTM pass-through is for.
Does this work for an organisation with many codes and several people?
Up to a point, and the limits are worth knowing before you commit. Max at $20/mo adds 5 team seats, unlimited dynamic codes, unlimited folders, REST API access and scan-threshold email notifications. Pro at $10/mo is single-user but carries full scan history, CSV export, A/B testing and 100 dynamic codes. Neither tier offers SSO, audit logs, or role-based permissions beyond simple team membership, so an organisation that needs those should evaluate an enterprise platform instead. Saying otherwise would waste your procurement cycle.
What analytics does each plan include?
Free records scan counts only, with no location data and no history. Lite at $5/mo adds 30 days of history and country-level location. Pro at $10/mo unlocks full history with no retention limit, city-level location, CSV export and A/B testing. Max at $20/mo adds region-level detail, API access, team seats and scan notifications. The redirect records the same fields on every plan; the plan decides how much of it you can see and keep.
What exactly gets recorded on each scan?
Timestamp, country, city and region, device type, browser, operating system, referrer, the final landing URL, and all five UTM values (source, medium, campaign, content, term). Each scan also carries an anonymous visitor ID and a session ID so repeat scans are distinguishable from first-time ones, plus the variant name when A/B testing is active. No name, email, phone number or precise location is captured, because a redirect has no access to any of it.
Does tracking slow down the scan?
No. The redirect responds first and the scan is written afterwards, outside the request that the visitor is waiting on. The scanner gets its redirect immediately, and the analytics write happens in the background. The redirect also carries an X-Robots-Tag noindex header so tracking URLs never enter search results.
Can I track a static QR code?
No, and neither can anyone else. A static code encodes the destination directly in the black-and-white pattern, so the phone goes straight to your site with no intermediate step to count. There is nothing to instrument. If you need scan data, the code has to be dynamic before it goes to print. The one partial workaround is putting a UTM-tagged URL inside a static code, which gives you GA4 sessions without scan-level detail, and locks those UTM values into the printed pattern forever.
How accurate is the location data?
City-level and directional. Location is derived from the IP address at the edge, not from device GPS, because a web redirect cannot request location permission. Mobile carriers frequently route traffic through gateways in another city, and corporate VPNs will place a scan in whichever country the exit node sits. Country data is reliable enough to act on. City data is useful in aggregate and wrong often enough that you should not build a decision on a single row.
Will scan data appear in Google Analytics?
Yes, if you set UTM parameters. EZQR forwards them to the destination URL, so GA4 attributes the session to your campaign instead of filing it under direct traffic. The two systems count different things and will not match exactly: EZQR counts redirects, GA4 counts sessions that finished loading. Scans where someone closes the browser mid-load appear in EZQR and never reach GA4, so EZQR totals normally run slightly higher.
Written by Tasnim Ahmed, Founder · Last updated
Related Articles
How Much Does a QR Code Cost? The Honest 2026 Price Breakdown
A QR code costs $0 to generate, and static codes stay free forever. You pay only for dynamic features such as editable links and scan analytics, $5–20/mo.
EZQR vs Bitly for QR Codes: Purpose-Built vs Add-On
Bitly Core is $10/mo and allows 5 QR codes a month. EZQR Pro is $10/mo and allows 100. Every figure verified on both pricing pages in August 2026.
Related Industries
Retail QR Codes for Products & Packaging
Create QR codes for retail product packaging, loyalty programs, and digital coupons. Bridge in-store and online shopping. Free static codes available.
Free Event QR Codes: Tickets, Check-in & Schedules
Free QR codes for event management: tickets, attendee check-in, live schedules, WiFi, session feedback. Cut check-in lines and handle last-minute changes.
Related Guides
Dynamic vs Static QR Codes: What Is the Difference?
Dynamic vs static QR codes in 2026: how each works, when to pick which, real pricing, and the vendor-cancellation trap that kills printed dynamic codes.
How to Create a QR Code (Step-by-Step Guide)
How to create a QR code in 60 seconds: pick a content type, fill the form, add colors and a logo, then download PNG or SVG. No signup for static codes.
Related Tools
Dynamic QR Code Generator
Editable destination: change the URL without reprinting.
QR Code API
Programmatic QR generation for developers.
Bulk QR Code Generator
Generate hundreds of unique QR codes from a CSV.
No-Expiration QR Code Generator
A free QR code that keeps working forever, even after you cancel.
Make an Analytics QR code
Static codes are free and carry no watermark. Dynamic codes, which you can repoint after printing, start at $5 a month.
Generate Free QR Code