Analytics guide
How to track QR code scans,
a practical guide for Indian businesses.
If you printed a QR on a flyer and have no idea how many people scanned it, you are flying blind. This guide shows exactly what you can measure, how to set it up, and how to read the numbers to decide which flyer, which city, and which hour actually worked.
Why a static QR cannot be tracked
A QR code is just a pattern of black-and-white squares. A static QR encodes your destination (a URL, a UPI ID, a phone number) directly inside that pattern. When someone scans it, their phone reads the URL and opens it straight away. Nothing sits in between, so nobody counts the scan. There is no server, no log, no number.
This is not a flaw you can configure around. It is how static QR works. If a vendor claims they can add analytics to your existing printed static QR without reprinting, they are mistaken.
A dynamic QR works differently. It encodes a short redirect link that lives on a server. The scanner hits that server, the server records the scan (count, time, device, approximate city), and then forwards the phone to your real destination in a split second. The visitor notices nothing. You get the data. For the full mechanics, see Dynamic QR explained.
What you can actually measure
A good scan dashboard gives you five signals. None of them identify a person; all of them help you make decisions.
- Scan count. The headline number. How many times the QR was scanned in total, and how many unique devices that was.
- Daily trend. Scans plotted over time. This is where you see the spike on launch day and the slow fade after, or the bump when your newspaper insert ran.
- City or region. Resolved from the IP address at scan time. Reliable at the metro level: you can tell Mumbai from Bengaluru from Delhi, but not which street.
- Device type. iOS, Android, or desktop. Useful for guessing audience profile and for knowing which device to test your landing page on first.
- Time of day. Which hours people scan. A lunch menu QR scanned mostly at 1pm tells you something a flyer scanned at 9pm does not.
Push it further with UTM parameters into Google Analytics. By tagging the destination URL with utm_source, utm_medium, and utm_campaign, the scan flows into GA next to your website traffic, and you can follow the scanner all the way to a signup or a purchase.
How to set it up, step by step
The whole thing takes about ten minutes the first time.
- Create a dynamic QR. Start from the URL generator and choose the dynamic option, or open the dynamic QR generator directly. Point it at your landing page, menu, or form.
- Give each placement its own QR. One QR per thing you want to compare. Hoarding A gets one code, hoarding B another, the Pune flyer a third, the Delhi flyer a fourth. They can all point at the same page; the codes stay separate so the data stays separate.
- Add UTM tags (optional but worth it). If you run Google Analytics, append something like
?utm_source=hoarding-a&utm_medium=qr&utm_campaign=diwalito each destination URL. Now GA can tie scans to revenue. - Print and deploy. Before any bulk print, scan the test copy with iPhone Camera, Android Camera, and one QR app to confirm it opens the right page.
- Watch the dashboard. Give it a few days of real traffic before drawing conclusions. One day of data is noise.
On QRSprint, static codes are free to start and the scan analytics live on the dynamic feature on the Pro plan. You can see current options on the checkout page.
A real comparison table
Here is what a two-week campaign might look like with separate dynamic QRs on each placement. The point is not the exact numbers; it is that separate QRs let you read them at all.
| Placement | Scans | Top city | Top device | Read |
|---|---|---|---|---|
| Hoarding A (Mumbai) | 1,840 | Mumbai | Android | High-traffic spot, mass-market crowd. |
| Hoarding B (Mumbai) | 410 | Mumbai | Android | Same city, weak spot. Drop it next time. |
| Flyer (Pune) | 730 | Pune | Android | Solid for a print run; cheap to scale. |
| Flyer (Bengaluru) | 1,290 | Bengaluru | iOS | iOS-heavy, premium segment. Worth more spend. |
| Newspaper insert | 220 | Mixed | Android | Low yield per rupee. Reconsider. |
How to read the data and decide
Which placement to keep
Do not compare raw scans alone; compare scans against what each placement cost. Hoarding A pulled 1,840 scans, but if it cost five times what the Bengaluru flyer cost (1,290 scans), the flyer is the better buy. Always divide scans by spend before you judge.
Which city to lean into
The city breakdown tells you where demand actually lives, which is often not where you assumed. If Bengaluru out-scans Mumbai despite less spend, shift the next batch of placements there. This is the single most actionable number for a regional campaign.
Which hour to post or staff
Time-of-day data is for operations, not just marketing. A restaurant whose menu QR peaks at 1pm and 8pm knows when to staff up. A retailer whose QR peaks at 9pm knows to schedule follow-up notifications for that window.
What device says about your audience
Heavy Android usually means a price-sensitive, mass-market crowd; heavy iOS often signals a premium segment. Use it to set tone, pricing emphasis, and which app store to prioritise. Also test your landing page on the dominant device first.
Privacy: coarse signals, not personal identity
Scan analytics are closer to footfall counting than to surveillance. You see an approximate city, a device family, and a timestamp. You do not see a name, a phone number, an email, or a precise location. The city comes from the IP address, which is accurate at the metro level and vague below it.
That is the honest ceiling, and it is the right one. You get enough to allocate budget sensibly without collecting anything that would make a scanner uncomfortable. If a tool promises to tell you the exact identity of each person who scanned, be sceptical: that is not how QR scanning works.
Common mistakes that waste your data
- One QR for everything. The biggest one. If the same code is on three flyers and two hoardings, every scan lands in one bucket and you learn nothing about what worked. One QR per thing you want to compare.
- Judging too early. One day of scans is noise. Give a campaign at least a week of real traffic before you decide anything.
- Ignoring spend. Raw scan count without cost context leads you to keep the expensive placement and drop the cheap winner. Always do scans per rupee.
- Forgetting UTMs. Without UTM tags you know the scan happened but not whether it led to a sale. Tag the destination URL so Google Analytics can connect the dots.
- Tiny or low-contrast print. A QR that is hard to scan suppresses your count and corrupts your data. Keep good contrast and a sensible size for the viewing distance.
- Reusing a campaign QR forever. Old scans from a finished campaign pollute the numbers of a new one. Use a fresh dynamic QR per campaign.
Frequently asked questions
Can I track a static QR?
No. Static encodes the destination directly, so the scan never touches a server. You need a dynamic QR.
What can I measure?
Scan count, daily trend, city, device (iOS, Android, desktop), and time of day. Add UTMs for Google Analytics.
Does it identify the person?
No. Coarse signals only: approximate city, device family, timestamp. No name, no number, no precise location.
How do I compare two flyers?
Give each its own dynamic QR pointing at the same page, then compare scans per rupee after a week.
Is tracking free?
Static is free to start; scan analytics are on the dynamic Pro feature. See the checkout page for current options.
Related: Static vs dynamic decision matrix · Dynamic QR explained (deep mechanics) · All free generators
Start measuring
See who scanned, from where, on what
Count, city, device, and time of day per QR. Free to start, analytics on Pro for the campaigns that need proof.
Open the analytics QR generator