How to measure how many people scanned your QR Code
Date Published
The first thing to understand is that a QR Code counts nothing. It is a static drawing with text inside; it has no counter, communicates with nobody and does not know how many times it has been photographed. Any measurement happens on the other side: at the destination it points to.
That means only codes leading to a web address can be measured. Wi-Fi, contact, phone and text codes work offline and are, by nature, uncountable.
Method 1: UTM parameters
The simplest and most widely used approach. You append parameters to the URL identifying where the visit came from, and your Google Analytics separates that traffic automatically.
Instead of generating the code for yoursite.com/promo, generate it for yoursite.com/promo?utm_source=qrcode&utm_medium=poster&utm_campaign=winter2026
- utm_source — the origin. Use "qrcode".
- utm_medium — the physical material: poster, packaging, menu, badge.
- utm_campaign — the campaign or period.
With different pieces using different utm_medium values, you discover which material actually brought visits — the answer is often surprising.
The hidden cost of UTM
Parameters make the URL long, and a long URL produces a denser, harder-to-scan code. A 150-character URL can push the code into a much larger version. The solution is combining it with the next method.
Method 2: a redirect on your own domain
The most complete method, and it solves two problems at once: it keeps the code short and lets you change the destination later without reprinting.
- Create a short address on your domain, for example yoursite.com/c1.
- Configure it to redirect to the real destination, with the full UTM parameters.
- Generate the QR Code pointing to yoursite.com/c1.
The code stays clean, the customer sees your domain, you count visits on your own server and you can still change the destination whenever you want. One short address per piece of material gives precise measurement per channel.
If your site runs WordPress, a redirect plugin handles it in minutes. On a custom site, it is one line of configuration.
Method 3: a dedicated landing page
When you want precision rather than just a count, point the code at a page built for that audience, with specific content. Besides measuring, it lets you adapt the message for people arriving from physical material — and conversions usually rise.
What the numbers actually mean
Interpret with care. What you measure is not exactly "scans":
- One person scanning twice counts as two visits.
- Someone who scans and closes before loading may not be counted at all.
- People who type the address instead of scanning land in the same count, if you used a published short address.
- Tracking blockers leave part of the traffic invisible to Analytics — your server logs are more faithful.
Treat the numbers as an order of magnitude and a relative comparison between channels, not an exact count.
What to do with the data
- Compare materials. If the shop window poster brings five times more visits than the flyer, the next investment pays for itself.
- Look at the time of day. Peaks reveal when your audience really engages.
- Check device type. If almost nobody arrives on iPhone, there may be a scanning problem on iOS.
- Watch the decay over time. Old material keeps getting scanned; this shows how long a piece stays useful.
- Measure what happens next. Visits without conversion point to a problem on the landing page, not the code.
What if I cannot measure?
For offline codes — Wi-Fi, contact, phone — there are indirect measures: asking "how did you find us", using a phone number unique to that material, or offering a specific promo code. It is not precise, but it beats nothing.
Worth remembering that dynamic QR Code services sell exactly this counting as their differentiator. As shown in the article on static and dynamic, the same result comes from a redirect on your own domain — with no monthly fee and without handing your customers’ data to a third party.