Does QR Code Analytics Count Unique Visitors or Every Scan?
Most QR dashboards count every scan as a total, then estimate unique visitors by device, IP or browser. The unique figure is a guess, not a headcount.
QR code analytics counts every scan, and most dashboards then show a second, smaller number that tries to count each person once. The first number, total scans, is a real count of requests that hit the redirect. The second, unique scans or unique visitors, is an estimate built from the phone’s device, browser or IP address, and every tool builds it a little differently.
How a scan gets counted at all
A dynamic QR code holds a short link, not your final page. When a phone opens that link, the request goes to a redirect server, which logs it and forwards the phone to your destination. That logged request is one scan. (How to track how many people scanned your QR code covers the redirect in more detail.)
Every request counts toward the total. A customer who scans the menu code on their table, closes the tab and scans again five minutes later has produced two scans. So has the owner who tested the code twice before opening.
How “unique” is decided
This is where tools split. The redirect server never learns who you are. It sees only what the phone sends with the request, and guesses from that.
- Device. As of October 2026, QRCodeChimp’s help page defines unique scans as “the number of scans performed with unique devices” and gives the example of a code scanned ten times by eight different devices: 10 total, 8 unique.
- IP address plus browser string. ShopSavvy’s stats page spells its rule out: “A unique scan = one IP-and-user-agent pair within a rolling 24-hour window.” Scan again the next day from the same phone and you’re unique again.
- A cookie or stored ID in the browser. Web analytics works this way. Google Analytics stores a client ID in a first-party cookie named
_ga, and doesn’t store it when analytics storage is turned off through Consent Mode.
The browser string in the second method is the User-Agent header. MDN describes it as a string that lets servers identify “the application, operating system, vendor, and/or version” of the browser. It describes the software, not the person, and lots of people run the same software.
Hovercode, another QR tool, is unusually blunt about it in its help article: unique scans are “just an estimate,” and a person who scans “with two different devices or from a different browser” counts as two.
Where the unique number goes wrong
It drifts in both directions.
It overcounts when one person looks like several. Someone scans your real estate flyer in the iPhone camera, then again inside a messaging app’s built-in browser. Different browser string, maybe a different stored ID, so that’s two “unique” visitors. Waiting more than a day can do it too, under a time-window rule like the one above.
It undercounts when several people look like one. Twenty guests at a wedding all scan the photo-sharing code on the venue Wi-Fi. They share one public IP address. If a lot of them use the same phone model and OS version, an IP-plus-browser rule can fold them into a handful of uniques. Mobile networks make this worse: RFC 6888 defines carrier-grade NAT as a function “used to share the same IPv4 address among several subscribers.” And MaxMind notes that a cellular IP address “may move between users who are hundreds of kilometers away from each other” over “even a few minutes.”
Previews and bots add requests nobody made on purpose. If you paste the short link into a chat, the app may fetch it to build a preview. BL.INK’s documentation says “Link previews or prefetch clicks from an iOS device are reported the same way that a regular click is.” It filters out systems that “self-identify as a bot,” but a preview fetch doesn’t always announce itself. For a printed QR code this is minor, since scans come from cameras, not pasted links. It matters if you also share the same link online.
Which number to trust for which question
| Question you’re asking | Use | Why |
|---|---|---|
| Is this placement getting attention at all? | Total scans | It’s a direct count of requests. |
| Which of two posters did better? | Total scans, per code | Same counting rule on both sides, so the comparison is fair. |
| Roughly how many people saw the offer? | Unique scans | Best available estimate, with a wide margin. |
| How many people bought something? | Neither | That happens on your site, not at the redirect. |
For the last row, add UTM parameters and read conversions in your web analytics. Which UTM parameters to use for a QR code covers the naming, and tracking QR scans in GA4 explains why that report will show fewer visits than your scan counter.
My take: report total scans as the number and treat unique scans as context, never as a headcount. Totals are boring, but they mean the same thing in every tool. If a client compares your “unique visitors” with a figure from a different platform, you’re comparing two different guesses.
A real example: the restaurant table test
Say a restaurant prints a separate code for each table tent, and table 4’s code shows 10 total scans and 8 unique scans over an evening. That isn’t 8 diners. It’s roughly 8 distinct phone-and-browser combinations. Most of the gap is people scanning twice, because someone reopens the menu for dessert. Comparing table 4 with table 9 by total scans tells you something real. Treating the 8 as covers doesn’t.
How QRAnalytica handles it
QRAnalytica’s dynamic codes run through its own redirect servers, which is what makes scan counts possible, and the Professional plan has unlimited scans. The dashboard shows scans by country, city, device and hour. Scan data is collected without cookies or stored personal information, which keeps things simpler under GDPR (more on that in GDPR-compliant QR code analytics).
The cost of that choice: without a cookie, nothing can follow a phone from one day to the next, so QRAnalytica’s repeat-visitor view is an estimate too. And since counting happens on QRAnalytica’s servers, the counts depend on that service staying up. If you need logged-in, person-level numbers, those come from your own site, using GA4 or your own accounts, not from the QR code.
You can try the counting yourself with the dynamic QR code generator: scan your test code twice on one phone, once on another, and watch how the two numbers move.
Common mistakes
- Adding unique scans across codes. A person who scanned the poster and the flyer is unique on each, so the sum overcounts people.
- Comparing uniques across tools. Device-based and IP-based rules give different numbers from the same traffic.
- Forgetting your own test scans. Every test before launch is in the total.
- Expecting names. A scan counter can’t tell you who scanned. Can you see who scanned your QR code? goes through what is and isn’t visible.
FAQ
Does scanning my own QR code count as a scan?
Yes. The redirect can’t tell you from a customer, so every test scan adds to the total. On the same phone it usually adds to the unique count only once.
Why is my unique scan count higher than the number of customers I had?
Unique counts are estimated from the device, browser or IP address. One person who scans on two phones, or in two different apps, can be counted as two unique scans.
Why is my unique scan count lower than I expected?
Several people can share one IP address, for example on the same office Wi-Fi or behind a mobile carrier’s shared address. A tool that groups scans by IP and browser can merge them into one unique scan.
Which number should I report to my client or boss?
Report total scans as the measured figure and unique scans as an estimate, and say which one you used. If you compare placements, compare the same metric for each.
Do link previews count as scans?
They can. One link platform says iOS link previews and prefetch clicks are reported the same way as a regular click, so a preview can look like a visit.
Sources
- Hovercode: What are unique scans vs total scans?
- QRCodeChimp: What is the difference between Total Scans and Unique Scans?
- ShopSavvy: QR Code Analytics, Scan Tracking & Stats
- BL.INK: Tracking Clicks and Understanding Analytics in Enterprise
- MDN: User-Agent header
- RFC 6888: Common Requirements for Carrier-Grade NATs
- Google Analytics Help: Cookie usage on websites
- MaxMind: IP Geolocation Accuracy