How to Track QR Code Campaigns with UTM Parameters

Knowing how to track QR code campaigns with UTM parameters comes down to one thing: reading the numbers each code produces after people scan it. The UTM tags carry campaign data from an offline scan into your analytics, so every poster, package, or flyer reports its own sessions, conversions, and revenue. This guide focuses on the measurement and reporting side. For the build steps that get a tagged code live, follow the workflow in how to track QR code scans.
Measurement only works on codes that record data. A printed QR code that points straight at a raw URL gives you nothing to report. A dynamic QR code routed through a redirect, carrying UTM parameters, is what feeds the metrics below.
What QR Campaign Metrics Reveal
Start with the four numbers that tell you whether a campaign earned its print budget:
- Scan-to-session rate: Sessions in analytics divided by raw scans. A gap means people scanned but never landed, often a slow page or a broken redirect.
- Conversion rate: Conversions divided by sessions from the code. Compare it against your site average to judge scan quality, not just scan volume.
- Revenue per scan: Total attributed revenue divided by scans. This is the single cleanest way to rank physical placements.
- Cost per scan: Print and placement cost divided by scans. Pair it with revenue per scan to see real margin.
Volume alone misleads. A billboard can pull 5,000 scans at a 0.4% conversion rate while a checkout-counter card pulls 300 scans at 9%. Revenue per scan exposes which one to reprint.
Reading QR Performance by Placement
Segment every report by placement, not just by campaign. The utm_content value is what makes this possible. Give each physical location its own utm_content tag while keeping source, medium, and campaign identical:
https://example.com/sale?utm_source=qr&utm_medium=print&utm_campaign=spring_launch&utm_content=lobby_poster
https://example.com/sale?utm_source=qr&utm_medium=print&utm_campaign=spring_launch&utm_content=table_tent
In GA4, open the Traffic acquisition report and add Session manual ad content as a secondary dimension. Now lobby_poster and table_tent sit on separate rows with their own conversions and revenue. The same structure lets you compare two creative versions of one flyer, two cities, or two events side by side. Without distinct content tags, every scan collapses into one undifferentiated line.
Attributing Revenue to QR Scans
QR scans often start a journey that finishes days later, so the attribution model you pick changes the verdict. A scan at a trade show might lead to a purchase the following week from a different device. Last-click attribution will credit whatever channel closed the sale and undervalue the QR code that opened it.
For physical campaigns, favor a first-touch or data-driven model when judging whether the print spend works. Set a realistic conversion window too. A 30-day window suits considered purchases; a same-session window suits an in-store scan-and-buy. Report both the assisted and last-click numbers so a code that consistently initiates revenue is not quietly written off.
Building a QR Campaign Performance Report
Pull a single view that ranks placements by outcome, not by clicks. A useful report holds these columns:
- Placement (
utm_content) - Scans (from your QR platform)
- Sessions (from GA4)
- Conversions and conversion rate
- Revenue and revenue per scan
- Print or placement cost
Build it as a GA4 Exploration with utm_content as the row dimension and sessions, key events, and revenue as values, then drop in scan and cost figures from your QR platform and budget sheet. Refresh it on the same cadence as the campaign, weekly for short runs. The point is a ranked table you can act on: reprint the top rows, kill the bottom rows.
Measurement Pitfalls That Distort QR Reporting
These errors do not stop tracking. They quietly skew the numbers you report:
- Counting preview scans as people. Some camera apps and link previewers ping the redirect without a human ever landing. Trust sessions over raw scan counts when revenue is on the line.
- Comparing across mismatched windows. A code live for 3 days cannot be ranked against one live for 3 weeks on total revenue. Normalize to revenue per scan or per day.
- Letting static codes pollute the set. Static codes report nothing, so a campaign mixing both looks worse than it performed. Track only the dynamic codes and note the gap.
- Reading scans as unique users. One curious person can scan a poster five times. Use sessions and users in analytics for audience size, not the scan tally.
Frequently Asked Questions
How do you measure the ROI of a QR code campaign?
Divide the revenue attributed to the code’s UTM tags by the campaign’s print and placement cost. Track revenue in GA4 through the conversions tied to each utm_content placement, then subtract production cost. Revenue per scan against cost per scan gives you margin at a glance. Pick an attribution window that matches your buying cycle so later conversions are not lost.
What is a good scan-to-conversion rate for QR codes?
There is no universal benchmark, so compare each code against your own site’s conversion rate for the same offer. A QR placement converting near or above your site average is performing well, since scanners arrived with intent. A rate far below average usually points to a mismatched landing page rather than a tracking fault.
Which QR code metric matters most?
Revenue per scan is the most decisive single metric for paid print campaigns. It folds scan volume and conversion quality into one comparable number, so you can rank placements directly. Use conversion rate alongside it to understand why a placement wins or loses.
How do you compare two QR code placements?
Give each placement a unique utm_content value while keeping the other UTM parameters identical, then segment your analytics report by that dimension. This isolates sessions, conversions, and revenue per placement on separate rows. Normalize by scans or by days live so a longer run does not unfairly outrank a shorter one.
How long should a QR code campaign run before judging results?
Wait until each placement has enough scans to clear normal day-to-day noise, often a week for active locations and longer for low-traffic ones. Judging after two or three days risks reacting to randomness. Match the review point to your conversion window so delayed purchases are counted.
Tag every code with consistent parameters using the free QR code UTM builder at linkutm, so the placement data lines up cleanly in every report.