Skip to content

Guide

QR Code Campaign Analytics: From Scan to Conversion

A scan is an intermediate action, not the business outcome. Useful QR analytics combines the physical placement, redirect data and the conversion that happens on the destination.

Decide what the number is for before you collect it

Most QR reporting fails at the first step, not the last. The dashboard gets built, the scans come in, and nobody can say what they would do differently at 400 scans versus 4,000.

Start from the decision instead. Which poster stays up next quarter. Whether the table tent or the window sticker earns its place. Which of two calls to action gets rolled out. Which location gets the budget. Every one of those implies a specific comparison, and the comparison tells you how to set the campaign up — usually that you need separate codes you would not otherwise have made.

A measurement you cannot act on is a cost, not an asset.

The funnel a QR campaign actually has

A scan is not a result. It sits in the middle of a chain, and each step loses people:

  • Exposure — how many people passed the placement at all. Usually unmeasured, and the reason raw scan counts mislead.
  • Scan — someone raised their phone. This is the only step the code itself reports.
  • Arrival — the destination actually loaded. A slow or broken page loses people between scan and arrival.
  • Engagement — they did something on the page rather than bouncing.
  • Conversion — the outcome you actually wanted.

Total scans, unique scans, and which to trust

Total scans counts every read. Unique scans estimates distinct people. The gap between them is the interesting part, and it is read differently depending on what the code does.

For a menu, repeat scans are normal and healthy — the same guest opens it again to check a price. For a one-off registration link, a high repeat rate usually means something went wrong: the page failed to load, the form lost their input, or they could not find what they came for and tried again.

Neither number means much in isolation. Total scans rise when footfall rises, which tells you about the day rather than the campaign.

One code per placement, decided before printing

This is the single highest-leverage decision in QR measurement, and it cannot be made retroactively.

Generate a separate code for every placement you might later want to compare: each poster site, each table, each window, each package variant, each city. They can all point at the same destination. The codes cost nothing; what they buy is the ability to answer questions you have not thought of yet.

One code across everything gives you a single number that goes up and down for reasons you cannot attribute. Twenty codes give you a ranking of what works.

Name things so they still make sense in six months

Naming feels like bureaucracy until you open the dashboard a quarter later and find fourteen entries called “poster” and “poster new final”.

Encode the physical context in the name, in a consistent order — what it is, where it is, when it started. Something like `window-krakow-main-2026-09` reads at a glance and sorts sensibly. Keep the vocabulary fixed: decide once whether it is `window` or `vitrine` and never mix them, because a dashboard cannot group two spellings of the same thing.

The same discipline applies to UTM parameters on the destination, which is what carries the context into your web analytics.

Connect the redirect to what happens after it

Scan data tells you the code was read. It cannot tell you whether anyone ordered, booked or signed up — that happens on the destination, in a different system.

Tag the destination URL with UTM parameters so your web analytics can attribute the session. A workable convention is the source naming the medium as physical (`qr`), the medium naming the surface (`poster`, `menu`, `packaging`), and the campaign matching the code name you already chose. Consistency matters far more than which convention you pick.

Once that is in place you can read the whole chain: scans from the code, sessions and events from analytics, conversions from wherever conversions live.

Reading the patterns that actually recur

A few shapes come up often enough to name.

High scans and low conversion almost always means a destination problem, not a placement problem — the poster did its job and the page did not. Check load time on mobile data rather than office Wi-Fi, and check that the page delivers what the call to action promised.

Low scans with good conversion means the placement is under-exposed or the code is hard to use: too small, badly lit, awkwardly positioned, or a call to action that does not say what opens. The people who get through are the right people; there are just too few of them.

A sharp spike with no conversion is usually not customers at all. It is staff testing, a bot following the link, or the code appearing in a photo online.

Traps that produce confident wrong answers

The errors below are common precisely because each one produces a clean-looking number.

  • Counting your own testing. Scan a code twenty times during setup and the first week is fiction. Note when the campaign genuinely went live and measure from there.
  • Comparing unlike periods. A Saturday against a Tuesday, or December against February, measures the calendar.
  • Treating scans as people. One enthusiastic guest can produce a dozen scans.
  • Ignoring exposure. The busiest location wins on raw scans by default; per-footfall is the comparison that means something.
  • Reading a single day. Daily numbers on a physical campaign are mostly noise — look at weeks.
  • Changing two things at once. A new creative and a new position tell you nothing about either.

A reporting rhythm worth keeping

Weekly, look at placement ranking and nothing else — which surfaces are pulling and which are dead. That is where the actionable signal is.

Monthly, look at the full chain, scan through to conversion, and at whether the destination is holding up. This is when you find that a page got slower or a link quietly broke.

Per campaign, write down what you expected before it launched. Comparing outcomes against a prediction you made in advance is the only reliable defence against explaining any result after the fact.

About the author

Andrii Petlovanyi

Builds Mosaqo across web, iOS and Android.

FAQ

Frequently asked questions

What is the difference between total and unique scans?

Total counts every read of the code; unique estimates how many distinct people did it. The gap is the useful part. Repeat scans are healthy for something like a menu that a guest reopens, and a warning sign for a one-off link, where they usually mean the destination failed and people tried again.

How do I track QR scans in Google Analytics?

The code itself reports scans, but your web analytics only sees the session that follows — so tag the destination URL with UTM parameters. Use them to carry the physical context: the medium naming the surface, the campaign matching the code name you already use. Then scan data and session data describe the same campaign and can be read together.

Should I use one QR code or several for the same campaign?

Several — one per placement you might ever want to compare. They can all point at the same destination and they cost nothing to create, but the split has to happen before printing. A single shared code produces one number that rises and falls for reasons you cannot attribute to any particular poster, table or city.

Why do I have lots of scans but no conversions?

That pattern points at the destination rather than the placement: the code and the poster did their job, and the page did not. Check load time on mobile data rather than office Wi-Fi, check that the page delivers what the call to action promised, and check it on a small screen. A sudden spike with no conversion at all is more often staff testing or a bot than customers.

How long should I wait before judging a QR campaign?

Weeks, not days. Daily counts on a physical placement are mostly noise, and the first days are usually contaminated by your own testing. Compare like periods — the same weekdays, a comparable season — and change only one variable at a time, or you will not know which one moved the number.

NEXT STEP

READY FOR YOUR FIRST QR?

Create a QR code and test it before print

The first Mosaqo release is free and requires no payment card.

Start free