You printed a QR code on 2,000 flyers. Did anyone scan it? Twelve people? Twelve hundred? Without tracking, you genuinely cannot know — a standard QR code is just ink, and ink doesn't report back. This guide covers the three practical ways to track QR code scans, how to set each one up, and which metrics are actually worth your attention.
First, understand what's trackable
A QR scan happens between a phone camera and a printed image — no server sees it. Tracking only becomes possible when the scan triggers a web request you control. That gives you exactly three options: put a redirect in the middle (dynamic QR codes), tag the destination URL (UTM parameters), or run your own short link. Everything else sold as "QR tracking" is one of these three wearing a different hat.
Method 1: Dynamic QR codes (the purpose-built option)
A dynamic QR code encodes a short redirect URL instead of your real destination. Each scan hits the redirect server, gets logged, and forwards to your target page in a fraction of a second. The person scanning notices nothing.
Setup takes about two minutes:
- Create a dynamic QR code and paste in your destination URL.
- Customize the design if you want — logo, colors, theme — and download the PNG or SVG.
- Print it. Scans start appearing in your dashboard immediately.
What you get per code: total scans, plus breakdowns by country, device, and day. That's enough to answer the questions that actually matter: Is anyone scanning? When did scans spike? Are these mobile users local or tourists? Is the campaign decaying week over week?
Bonus: because the destination lives behind the redirect, you can also edit where the code points after printing — the tracking and the editability come from the same mechanism. (More on that trade-off in static vs dynamic QR codes.)
Cost: on QR Studio Lab the free plan includes 3 dynamic QR codes, which covers a small campaign or an A/B test of placements before you commit further.
Method 2: UTM parameters (tracking inside your analytics)
If you already run Google Analytics or a similar tool on your site, you can track QR traffic with a static code by appending UTM parameters to the URL before generating it:
https://yoursite.com/offer?utm_source=qr&utm_medium=print&utm_campaign=spring-flyer
Every visit through the code shows up in your analytics attributed to that source and campaign. Steps:
- Build the tagged URL (Google's Campaign URL Builder does this in 30 seconds).
- Generate a static QR code from the tagged URL with any free QR code generator.
- Use a distinct utm_campaign or utm_content value per placement — "window-poster" vs "counter-card" — so you can compare them.
Strengths: free, unlimited codes, and the data lands in the analytics tool you already use, alongside your other channels.
Weaknesses: you only see visits that fully load your page and its analytics script — ad blockers, slow connections, and instant bounces disappear from the numbers. The long tagged URL also makes the QR pattern denser. And the code is static: the URL, typos included, is permanent once printed.
Method 3: Self-hosted short links
Technically-minded teams sometimes run their own URL shortener (YOURLS, Shlink, or a few lines behind a reverse proxy) and generate static QR codes pointing at it. You own the logs, there's no third party, and redirects are editable.
Be honest about the cost, though: you're now maintaining a service that every printed code in the field depends on. If the server goes down or the domain lapses, every code dies at once. For most businesses, this is the right answer only if data ownership is a hard requirement.
Which method should you use?
| Dynamic QR | UTM + static | Self-hosted | |
|---|---|---|---|
| Setup effort | Minutes | Minutes | Hours + upkeep |
| Scan-level stats | Yes (country/device/day) | Page visits only | Yes, if you build it |
| Editable after print | Yes | No | Yes |
| Cost | Free tier, then paid | Free | Server + your time |
A reasonable default: dynamic codes for campaigns you'll measure and update, UTM-tagged static codes when you just want QR traffic visible inside your existing analytics, and both together when you want scan counts and on-site behavior for the same campaign — they don't conflict.
The metrics that actually matter
Once data flows in, resist staring at the total. These cuts are more useful:
- Scans per placement. Give each location its own code. If the shelf sticker gets 40 scans a week and the window poster gets 3, you've learned where attention lives — move the poster, not the budget.
- Scans over time. A launch spike followed by a fast decay is normal for flyers; a menu code should be flat and steady. A sudden drop to zero usually means the code got damaged, covered, or the link broke — check it before assuming interest died (see QR code not scanning?).
- Device split. Heavily iPhone or heavily Android audiences can inform which app stores, payment options, or page optimizations to prioritize.
- Country. Mostly relevant for tourism, hospitality, and export packaging — if 30% of menu scans are foreign, that's your sign to add an English version.
Three habits that make the data trustworthy
- One code per placement, always. A single code reused across five locations gives you one useless blended number.
- Scan your own codes after printing and exclude test days. Your ten test scans on day one aren't customer interest.
- Write down what's where. A simple list — code name, location, date deployed — turns raw scan counts into decisions six months later, when nobody remembers which code was on which flyer.
Tracking turns QR codes from decoration into a measurable channel. Start with one dynamic code on your next print run, give it a week, and you'll have your first real answer to "did anyone actually scan this?" — which is more than most printed campaigns ever get.