Most QR campaigns report one number: scans. But scans are a vanity metric. A poster can rack up thousands of scans and sell nothing, while a single product insert quietly drives repeat orders. To know which of your campaigns actually paid off, you need to connect scans to conversions and conversions to money. This guide is a practical framework for measuring — and proving — the ROI of a QR code campaign.
Why scans alone lie
A scan tells you someone pointed a camera at your code. It says nothing about whether they landed, stayed, or bought. Two campaigns with identical scan counts can have wildly different returns. The job of measurement is to move down the funnel — from scans, to visits, to conversions, to revenue — and then set that against what the campaign cost you.
This is only possible with dynamic QR codes. A static code encodes the destination directly and can't count scans; a dynamic code routes through a redirect that logs each scan and lets you tag the destination for downstream analytics.
The metrics that matter
ROI isn't a single number you read off a dashboard — it's built from a short chain of metrics. These are the ones worth tracking for every campaign:
| Metric | What it tells you | How to get it |
|---|---|---|
| Total scans | Raw reach of a placement | Dynamic QR scan analytics |
| Unique scanners | Actual people reached (strips repeat scans) | Dynamic QR scan analytics |
| Scan-to-conversion rate | How persuasive the landing page + offer are | Scans ÷ conversions (UTM + GA4/checkout) |
| Cost per scan | Efficiency of the placement | Campaign cost ÷ scans |
| Cost per acquisition (CPA) | What each conversion cost you | Campaign cost ÷ conversions |
| ROI | Whether the campaign made money | (Net return − cost) ÷ cost |
The measurement stack
You need three layers working together. Each one answers a different question:
1. Dynamic QR code
Counts scans and unique scanners, and lets you edit the destination. One code per placement so you can tell them apart.
2. UTM parameters
Tag the destination so your web analytics attribute the visit to the right campaign and placement. Full setup guide →
3. Conversion tracking
A goal in GA4, your checkout, or a unique discount code ties the visit to real revenue — the number ROI is built on.
A worked example
Numbers make it concrete. Here's an illustrative campaign — swap in your own figures, especially your real margin.
A homeware brand prints a dynamic QR code on 5,000 product inserts, each pointing to a reorder landing page with the code SAVE15. The destination URL carries ?utm_source=qr&utm_medium=insert&utm_campaign=reorder, and orders are tracked in the checkout.
The calculation
From the same data you also get cost per scan (£155 ÷ 820 ≈ £0.19), CPA (£155 ÷ 96 ≈ £1.61), and a scan-to-order rate of 96 ÷ 820 ≈ 11.7%. Those are the numbers you compare across placements to decide where next quarter's print budget goes.
The honesty check: measure ROI on contribution, not gross revenue. Multiplying revenue by your margin (and subtracting any discount you gave away) is the difference between a number you can defend to finance and one that falls apart under scrutiny.
A/B test without reprinting
The quiet superpower of a dynamic QR code is that the destination is editable after it's printed. That turns physical media into something you can optimise:
- Test landing pages. Point the code at page A for two weeks, switch to page B, and compare scan-to-conversion rates. No reprint, no new code.
- Test offers. Swap 10% off for free shipping mid-campaign and see which lifts conversions.
- Fix mistakes live. A broken or outdated landing page can be repointed in seconds instead of becoming 5,000 dead inserts.
For a true split test, run two dynamic codes on different placements (poster vs flyer) and compare their rates directly — because each code tracks its own scans.
Common mistakes that wreck attribution
Don't
- Use one QR code across every placement — you lose all attribution
- Report scans as if they were results
- Skip UTMs, so QR traffic shows up as "direct"
- Ignore print and discount costs in the ROI maths
- Compare total scans instead of unique scanners
Do
- Give every placement its own dynamic code + UTM
- Track to a conversion (goal, checkout, or discount code)
- Measure ROI on contribution, not gross revenue
- Compare placements against your own baseline
- Review scan-time and geography to refine timing and location
How LinkScan fits in
LinkScan is built for exactly this loop. Dynamic QR codes are free to create, and you can edit the destination at any time — so A/B testing and live fixes cost nothing. The Advanced plan ($5/month) adds the scan analytics that feed the top of your ROI calculation: total scans, unique visitors, device breakdown (iOS, Android, desktop), browser, geography, and daily trends. Add UTM parameters to each destination and your downstream conversions flow into GA4 or your checkout, closing the loop from scan to revenue. Custom branded short links keep the destination on-brand across placements.
Frequently asked questions
How do I calculate the ROI of a QR code campaign?
Use (net return − campaign cost) ÷ campaign cost. Net return is the contribution from attributed conversions — revenue × margin, after any discount — not gross revenue. Campaign cost includes design, print, distribution, and your QR platform fee. In the example above, £1,642 of contribution at a £155 cost is roughly a 960% ROI.
Do I need a dynamic QR code to measure ROI?
Effectively yes. A static code can't record scans and can't be changed, so you're left with downstream web analytics and no scan count. A dynamic code logs every scan, accepts UTM parameters, and lets you edit the destination — which is what makes attribution and A/B testing possible.
Can I A/B test a QR code?
Yes, with a dynamic code. Because the destination is editable, you can point the same printed code at landing page A, switch it to B, and compare conversion rates without reprinting. For a cleaner split, use two dynamic codes on different placements.
What is a good QR code scan-to-conversion rate?
There's no universal benchmark — it depends on placement, offer, and audience. Measure your own baseline and compare campaigns and placements against it rather than chasing an industry average.