Free tier, no card requiredDynamic QR codes that update after printGDPR-compliant scan analyticsBuilt for agencies, freelancers & in-house teamsFree tier, no card requiredDynamic QR codes that update after printGDPR-compliant scan analyticsBuilt for agencies, freelancers & in-house teamsFree tier, no card requiredDynamic QR codes that update after printGDPR-compliant scan analyticsBuilt for agencies, freelancers & in-house teamsFree tier, no card requiredDynamic QR codes that update after printGDPR-compliant scan analyticsBuilt for agencies, freelancers & in-house teams
All posts
Diagram of a QR code feeding a rising bar chart and trend line of scan analytics
Guide

QR code analytics: which scan metrics matter, and how to report them

QR code analytics are more than a scan count. Here is what each scan metric really means, which numbers drive decisions, how to connect scans to sales with UTM and GA4, and how to turn it into a client report that reads itself.

ScanKit

ScanKit · Organization

· 9 min read

Most QR code reports open with one number: total scans. It is the easiest figure to find and the least useful thing in the dashboard. On its own, a scan count tells a client that something happened, not whether it worked, where it worked, or what to do about it next. The useful story sits everywhere else: when the scans came, how one placement did against another, and whether the curve climbed or fell. This is a guide to reading all of it, and to turning it into a report a client actually wants to open.

A scan is a channel, not a vanity number

Every scan is a real person, holding a real phone, acting on something they saw in the physical world. They chose to point a camera at a printed square and follow it. That is a deliberate signal you collected yourself, and those are getting rarer as third-party cookies disappear. Treated with any care, scan data is one of the few clean bridges left between offline and online.

But only a dynamic QR code records any of it. A static code sends the phone straight to the destination with nothing in between, so there is nothing to count. A dynamic code runs each scan through a redirect you control (a /r/ URL in ScanKit), and that half-second hop is where every number in this article comes from. No redirect, no analytics.

So the first job is not reading the data. It is making sure there is data to read. After that, the discipline is resisting the pull to report the headline total and stop. "Twelve thousand scans" is a vanity number. What those scans were, when they arrived, and which piece earned them is where the value lives.

The five numbers that actually matter

Strip a scan dashboard back and five things carry almost all the meaning. The grand total is not one of them.

Total scans versus unique scans

Total scans count every scan, the same person twice included. Unique scans approximate how many distinct devices did the scanning. The gap between the two is the interesting part. When they sit close together, you are reaching a lot of people once each, which is what a poster or a billboard does for someone walking past. When total runs well ahead of unique, a smaller group is coming back again and again, which is the signature of a table tent, a menu, or a loyalty card. Same campaign, opposite behaviour, and the ratio is what tells them apart.

Neither pattern is the good one. They simply mean different things, and reading them the wrong way leads straight to bad advice. A high repeat rate on a billboard would be strange. On a restaurant table it is exactly what you hoped for.

When they scanned

Timing is usually the richest part of the whole dataset and the most ignored. The shape of the curve says what the total never can. A spike in the first few days means the creative caught attention fast. A low, steady trickle means the piece is living somewhere people return to. A line that lifts every weekend is telling you when this audience is actually out and paying attention, which is when the next push should land.

Timing also tells you when something is finished. A code still pulling steady scans weeks after launch is an evergreen worth keeping in print. One that flatlined on day three has said everything it is going to say.

Where they scanned

Most tools place a scan by city and country, worked out from the network it came in on. It is an estimate, not a pin on a map, and it is worth being plain with clients about that. What it is good for is spotting concentration. A regional flyer drop that lights up one city and stays dark in the others tells you where the audience really is. A national campaign scanning hard in three cities and nowhere else is quietly telling you where to spend next time.

Treat location as a broad brush. It answers "roughly where" well and "exactly where" not at all.

What they scanned with

Device and operating system, usually a split of iOS against Android with the odd desktop scan, is the quietest of the five. It earns its place in one specific way: it tells you what to build the landing page for. If nine in ten scans come from one platform, the page should be flawless there before anywhere else. A surprising share of desktop scans, incidentally, often means people are scanning the code off a screenshot or a shared photo, which is a small clue about how the piece is travelling beyond where you put it.

Which code did the work

The most underused number is the comparison between codes, and it only exists if you set it up. Put one code on the flyer, a different one on the poster, a third on the mailer, all pointing at the same page, and the analytics stop saying "the campaign got scans" and start saying "the poster pulled three times what the flyer did." That is the difference between a number and a decision. It is the whole point of tracking a print campaign properly, and it is worth building every campaign around.

Vanity metrics versus metrics you can act on

A number earns its place in a report only if it could change what you do next. That is the entire test. Run each one through a single question: if this doubled tomorrow, would I do anything differently? If the answer is no, it is decoration.

The grand total usually fails that test. Scans per placement passes it, because a clear winner tells you where the budget should go. The trend over time passes it, because a fading curve says refresh the creative or move on. Scan to conversion passes hardest of all, because it ties the whole thing to money. Lead with the numbers that pass. Keep the headline total as context, not as the point.

From scans to sales: closing the loop with UTM and GA4

Scan analytics stop at the scan. They can tell you someone arrived, but not what they did once the page loaded, because that happens on the destination site, past the redirect. To connect a scan to a sign-up or a sale you hand the baton to your web analytics, and the way you do that is UTM parameters.

UTM parameters are small tags you add to the destination URL. They ride along with the visitor onto the site, and Google Analytics 4 reads them to file the session under the right source. Leave them off and GA4 treats a QR visitor as if they typed the address in by hand, so the whole channel disappears into "direct." Add them and it shows up as its own line you can actually report on.

A tagged destination looks like this:

https://clientsite.com/spring?utm_source=flyer&utm_medium=qr&utm_campaign=spring-sale

Three tags do most of the work. utm_source is the specific piece, like flyer or poster. utm_medium marks it as a QR scan so the channel groups cleanly. utm_campaign is the campaign name so everything for one push reports together. Keep the values consistent and lower case, because GA4 reads Flyer and flyer as two different things.

Then in GA4 the scans turn into something you can see. Mark the actions that matter as key events, a purchase, a form submit, a sign-up. Open Reports, then Acquisition, then Traffic acquisition, and filter to your qr medium. Now you are looking at sessions, engagement, and conversions traced back to one printed piece. The scan count told you the flyer got noticed. GA4 tells you the flyer brought fifteen sign-ups.

Put the two together and you have the whole story. Scan analytics own the offline half, whether the printed piece got noticed, where, and when. GA4 owns the online half, whether that attention turned into anything. Either number on its own is half a sentence.

What scan data cannot tell you

Being straight about the limits is what keeps the good numbers believable. Four things a scan will never tell you:

  • Who did it. A scan is anonymous: a device and a rough location, never a name.
  • Whether it sold. The scan ends at the redirect, so proof of a sale lives in GA4 through the UTM link above, not in the count.
  • Exactly where they stood. Location is city level and estimated, not GPS.
  • Why they did it. Real interest, idle curiosity, and a misfire all look the same from this side.

None of this is a weakness to hide. Aggregate, anonymous, privacy-friendly measurement is increasingly the kind clients want their name next to. Say what the data is and is not up front, and you never have to walk a number back in a meeting later.

Turn it into a report that reads itself

A pile of accurate numbers is not a report. A report is a short argument that ends in a recommendation, and the numbers are the evidence. The structure that works almost every time is five lines:

  1. The headline: scans this period against last, in one sentence. Up, down, or flat, and by how much.
  2. The trend: what the shape of the curve did, and what it means. A launch spike, a slow burn, a weekend rhythm.
  3. The standouts: which placements led, and by how far. This is the comparison number doing its job.
  4. The conversions: what the scans became on the site, from GA4. The line about money.
  5. The recommendation: one concrete thing to do next, drawn from the four lines above. This is what the client is really paying for.

Notice the data is the smaller part. Clients do not buy numbers. They buy the sentence that starts "so next month we should." The numbers are there to make that sentence trustworthy.

All of this gets far easier when the work is organised before the data arrives. A workspace per client, a group per campaign, and codes named for the placement rather than "Code 47" means the analytics turn up already sorted the way the report needs them. Set the structure up once and most of the report assembles itself.

A rhythm worth keeping

Reporting stops being a monthly scramble once it runs on a loop. Set a code per placement and name it so it reads in a deck. Tag the destination so GA4 can see it. Glance at the scans weekly to catch anything odd early, a code that never fired, a placement running away with it, a drop worth asking about. Then report monthly, and end every report with a call: repoint, reprint, scale, or stop.

The headline scan count will always be the first number a client's eye lands on, and there is no harm in giving it to them. Just do not stop there. The comparison, the timing, and the conversion are where the real reading happens, and the recommendation you draw out of them is the only number that was ever going to change what happens next. Count every scan, keep the placements apart, close the loop with UTM, and hand over a decision instead of a dashboard.

Share

Keep reading