QR Code Tracking: How to Measure Scan Data & ROI
QR code tracking is what turns a printed code from a guess into a measurable channel. Without tracking, you print 10,000 flyers with a QR code and hope people scan it. With tracking, you know exactly how many scanned, where they were, what device they used, and what they did after landing on your site. The tools are straightforward — UTM parameters, a dynamic redirect, and Google Analytics — but the setup details matter. Get them right and every QR campaign becomes measurable.
This guide covers the three layers of QR code tracking and how to calculate ROI from the data.
The Three Layers of QR Code Tracking
QR code tracking works at three levels, each adding more detail:
- Dynamic redirect — a short URL that forwards to your destination and logs each scan
- UTM parameters — tags appended to the destination URL so analytics attributes the visit
- On-site analytics — Google Analytics (or equivalent) tracks what visitors do after arriving
Layer one tells you the code was scanned. Layer two tells you which campaign drove the visit. Layer three tells you whether the visit converted. You need all three for real ROI measurement.
Layer 1: Dynamic QR Codes for Scan Data
A dynamic QR code stores a short redirect URL instead of the final destination. Each scan passes through a server that logs the event before forwarding the user. The data you get includes:
- Total scans and unique visitors
- Time and date of each scan
- Location (country, region, city)
- Device and operating system (iOS, Android)
- Repeat vs first-time scanners
This is the baseline. Without a dynamic redirect, you get zero scan data — a static code is a black box. For the tradeoffs, see our dynamic vs static QR codes guide.
Layer 2: UTM Parameters
UTM parameters are tags you append to a URL so Google Analytics knows where the traffic came from. A tracked QR code URL looks like this:
https://example.com/landing?utm_source=qr&utm_medium=print&utm_campaign=summer_flyer
The three tags that matter for QR codes:
- utm_source —
qr(the channel) - utm_medium —
print,packaging,poster,business_card(the placement) - utm_campaign —
summer_flyer,product_launch,event_2026(the specific campaign)
Use a unique UTM string for every physical placement. If you print the same campaign on flyers, posters, and packaging, give each a different utm_medium so you can compare which placement drove the most scans.
Layer 3: Google Analytics Integration
Once UTM-tagged traffic lands on your site, Google Analytics attributes it automatically. In GA4, find QR traffic under Reports → Acquisition → Traffic Acquisition and filter by utm_source = qr.
What to track after the scan:
- Landing page bounce rate — high bounce means the page didn't match expectations
- Conversion events — form fills, purchases, sign-ups
- Session duration — how long QR visitors stay
- Pages per session — whether they explore beyond the landing page
Compare QR traffic against other channels. If QR visitors convert at 8% and your average is 3%, print more codes. If they bounce at 90%, fix the landing page before reprinting.
What Scan Data Tells You
The combination of dynamic redirect data and on-site analytics answers the questions that matter:
- Which placement performs best? Compare
utm_mediumvalues - When do people scan? Time-of-day data reveals peak windows
- Where are scanners located? Geographic data validates distribution
- What device do they use? iOS vs Android split informs design choices
- Do they convert? On-site analytics closes the loop
Measuring QR Code ROI
ROI for a QR campaign is straightforward once you have tracking in place:
ROI = (Revenue from QR conversions - Campaign cost) / Campaign cost × 100
Campaign cost includes design, printing, and any dynamic QR service fees. Revenue from QR conversions is the total value of conversions attributed to utm_source = qr in analytics.
Example: you spend $2,000 printing flyers with tracked QR codes. The codes drive 1,200 scans, 480 landing page visits, and 36 purchases at $50 each ($1,800 revenue).
ROI = ($1,800 - $2,000) / $2,000 × 100 = -10%
Negative ROI — but now you know. Next iteration, you test a better landing page or a different placement and measure again. Without tracking, you'd have no idea.
Setting Up Tracking Step by Step
- Create a dynamic QR code with our QR code generator
- Build your destination URL with UTM parameters
- Set the dynamic redirect to point to the UTM-tagged URL
- Confirm Google Analytics is receiving
utm_source = qrtraffic - Set up conversion events for your key actions
- Print and deploy
- Review data weekly during the campaign
For URL-specific setup tips, see our URL QR code generator guide.
Common Tracking Mistakes
- Using a static code for a trackable campaign — no data, ever
- Reusing the same UTM string across placements — can't compare performance
- Forgetting utm_source — traffic shows up as "direct" and you lose attribution
- Not setting up conversions — you see scans but not whether they bought
- Pointing all codes to the homepage — no landing page to measure against
Related Resources
- QR Code Generator — create trackable dynamic codes
- URL QR Code Generator Guide — URL setup with UTMs
- Dynamic vs Static QR Codes — when tracking justifies the cost
- QR Code Types Explained — choosing the right payload
For the official UTM parameter reference, Google's Campaign URL Builder guide defines each tag, and GA4 acquisition reports documentation covers where to find channel attribution data.



