Basics
How to track QR code scans (and the honest catch)
9 min read · Updated 24 June 2026
First, the crucial bit of honesty. A static QR code encodes its destination directly in the image. When someone scans it, their phone goes straight to that URL — your device, the code and the website never report back to you. There is simply no mechanism for the code itself to count a scan. Any tool that claims to track a static code is, in reality, not tracking the code at all; it is tracking a link or a page. Understanding this is the foundation of static versus dynamic QR codes.
What 'tracking' actually means
You are never tracking the QR image. You are tracking what happens after the scan — a request to a server. That request can come from a redirect link (dynamic codes) or from analytics on the page itself. The QR code is just the doormat.
Why static codes can't be tracked
OpenQR, like any in-browser generator, creates static codes. The data you enter is baked into the pattern and the code points straight to it, free and forever. That permanence is a feature — it never expires and no third party can change it — but the flip side is that there is no server in the middle to log scans. We are upfront about this: OpenQR does not and cannot offer scan tracking, because tracking requires a routing layer that a static, in-browser tool does not have.
Option 1: a dynamic QR code
A dynamic QR code does not encode your real URL. Instead it encodes a short link that points to a provider's server, which then redirects the visitor to your destination. Because every scan passes through that server, it can be counted — and the provider can show you scan totals, times, rough locations and device types.
This is the only way to get tracking that sits with the code itself, and it brings a bonus: you can edit the destination later without reprinting. But there are real costs and caveats.
- It needs an account and usually a subscription — free tiers are limited and often expire
- It can stop working — if the provider folds, you stop paying, or the redirect is removed, the code dies (see do QR codes expire)
- You depend on a third party — your code's destination is controlled by their server, not by you
- It is more complex — overkill if you just want a quick code for a poster or business card
Dynamic codes can expire
Because a dynamic code relies on a provider's redirect, it is only alive as long as that link is. Static codes never expire. If you choose dynamic for tracking, make sure you understand the renewal terms before printing thousands of them.
Option 2: a trackable link in a static code (free)
Here is the part most generators will not tell you: you can get useful scan data from a free static code by making the link trackable rather than the code. The code stays simple and permanent; the measurement happens on the destination you already control.
Two free approaches, used together or separately.
- 1
Add UTM parameters to the URL
Append campaign tags to your link before generating the code, for example yoursite.com/menu?utm_source=qr&utm_medium=poster&utm_campaign=spring. When people scan, those tags flow into your website analytics, so any visit from that code is attributed to it.
- 2
Read it in your own analytics
If your destination is a page you own, your existing analytics (such as a privacy-friendly analytics tool, or your CMS stats) will already log the visits. The UTM tags let you filter to exactly the scans from that code.
- 3
Use a dedicated landing page
Point the code at a unique page or path used nowhere else. Every hit to that page is effectively a scan, so even basic server logs give you a count with no extra tooling.
- 4
Optionally add a free short link
A free link shortener that offers click stats can sit between the code and your page. You keep a static QR image, but you get a click counter. The trade-off is a dependency on that shortener staying online.
This approach keeps the benefits of a static code — free, no account, no expiry — while still answering 'how many people scanned this?'. The data is attributed to visits rather than raw scans, but for most campaigns that is exactly what you want to know anyway.
Comparing your options
| Approach | Cost | Tracks scans? | Editable later? | Can expire? |
|---|---|---|---|---|
| Plain static code | Free | No | No (reprint) | No |
| Static code + UTM tags | Free | Visits, via your analytics | No (reprint) | No |
| Static code + free short link | Free | Clicks, via shortener | Sometimes | If shortener closes |
| Dynamic code | Account / subscription | Yes, detailed | Yes | Yes |
Which should you choose?
If you mainly want to know whether a campaign is working and roughly how much traffic it drives, the free UTM approach is usually enough — and it never expires. If you need to edit destinations on the fly, run lots of campaigns, or want granular per-scan analytics with location and device data, a dynamic code earns its keep despite the cost and the expiry risk.
Decide before you print
Switching from static to dynamic (or back) means reprinting, because the encoded link is different. Choose your tracking approach before committing a code to thousands of flyers or a permanent sign.
What OpenQR does
OpenQR makes static codes in your browser, free and watermark-free, so it does not track scans — and we would rather say so than pretend otherwise. The practical recommendation: generate a static code pointing at a URL with UTM tags, and read the results in your own analytics. You get a permanent, free code and a sense of how it performs, with no account and no third party in the loop. For more on truly free generation, see our no-watermark generator guide.
Create a free static QR codeAdd UTM tags to your link, then measure scans in your own analytics. No account needed.