Back to Blog
QR Code Marketing9 min readJanuary 29, 2026

How to Track QR Code Scans and Measure ROI

Most QR codes are black holes: traffic arrives but you can't see where it came from. Learn how to track scans, connect them to revenue, and prove your offline marketing actually works.

How to Track QR Code Scans and Measure ROI

Here's the problem with most QR codes: they're black holes.

Traffic arrives at your website, but you have no idea where it came from. Was it the flyer you printed last month? The table tent at location #3? That direct mail campaign you spent $2,000 on? Without tracking, you're guessing.

The good news: QR codes can be one of the most measurable marketing channels you have. You can know exactly which code got scanned, when, from what device, and connect that scan all the way through to a sale.

This guide covers how tracking actually works, what data you can (and can't) collect, and how to calculate whether your QR campaigns are worth the investment.

Static vs. Dynamic: The Tracking Divide

The ability to track a QR code scan has nothing to do with the visual pattern. It comes down to one technical decision: static or dynamic.

Static codes can't be tracked

Static QR codes encode your destination URL directly into the pattern. When someone scans it, their phone reads the URL and opens the browser. That's it. There's no middleman, no server logging the scan, no data captured.

In Google Analytics, this traffic shows up as "Direct," lumped in with everyone who typed your URL manually. You can't distinguish between 100 scans from a flyer and 100 people who remembered your website.

Static codes also can't be changed after printing. If your URL breaks, your promotion ends, or you need to redirect somewhere new, every printed code becomes useless.

Dynamic codes capture every scan

Dynamic QR codes work differently. Instead of encoding your final URL, they encode a short redirect link (like qr.yourservice.com/abc123) managed by a tracking service.

When someone scans:

  1. Their phone hits the tracking server
  2. The server logs the scan (time, location, device)
  3. The server instantly redirects to your actual destination

This happens in under 200 milliseconds. Users don't notice the redirect. But now you have data.

Capability Static Dynamic
Edit destination after printing No Yes
Track total scans No Yes
See device/location data No Yes
Integrate with Google Analytics Only with UTMs Yes + UTMs
Typical cost Free $10-20/month

Bottom line: If you want to measure anything, you need dynamic codes.

What Data Can You Actually Collect?

When business owners ask "can I see who scanned my QR code?", they usually mean personal information like names, emails, or phone numbers.

The short answer: no, not automatically.

A QR scan is just an anonymous web request. Here's what you can and can't see:

What you CAN track

Data How It's Captured What You Learn
Total scans Server logs each hit Overall engagement
Unique scans Cookie/fingerprint deduplication Reach vs. repeat visitors
Time of scan Server timestamp When customers engage
Location (city level) IP address lookup Where scans happen
Device and OS User agent string iOS vs. Android split
Specific code Each code has unique ID Which placement performed

What you CANNOT track (without consent)

  • Personal identity: Name, email, phone number are not transmitted
  • Exact address: IP gives city/region, not street address
  • Demographics: Age, gender, income are not part of the scan
  • Behavior after leaving: Where they go next (unless you have tracking pixels)

To identify someone personally, your landing page needs a form where they voluntarily enter their information. The scan gets them there; the form captures the lead.

The UTM System: Connecting Scans to Revenue

Dynamic QR platforms show you scan counts. But to connect those scans to actual sales, you need UTM parameters in your destination URL.

UTMs are tags that tell Google Analytics exactly where traffic came from. Without them, your QR traffic shows up as "Direct" or gets attributed to your QR platform's domain.

The essential UTM tags

Add these to every QR destination URL:

  • utm_source: Where the code lives (table_tent, flyer_downtown, receipt)
  • utm_medium: The channel (always use qr or qr_code, pick one and stick with it)
  • utm_campaign: The initiative (summer_promo, menu_launch, review_request)
  • utm_content: Optional variant for A/B tests (design_blue, design_red)

Example URL:

https://yoursite.com/menu?utm_source=table_tent_05&utm_medium=qr&utm_campaign=lunch_special

Finding the data in GA4

Once your tagged URLs are live:

  1. Go to Reports > Acquisition > Traffic acquisition
  2. Change the dimension to Session source/medium
  3. Search for "qr"

You'll see exactly how many users came from QR codes, how long they stayed, and how much they spent. You can compare table_tent_05 against table_tent_12 to see which location drives more engagement.

Pro tip: Before printing 5,000 flyers, print one. Scan it. Check GA4's Realtime report to confirm your source appears correctly. Finding a broken UTM after the print run is expensive.

Practical Use Cases

Restaurant: Track which tables (or servers) drive reviews

Instead of one generic "Leave a Review" code, create unique codes per table or per server:

  • utm_source=table_01
  • utm_source=server_mike

Now you can see which tables get the most engagement (maybe tables by the window are "dead zones") and which staff members are successfully encouraging reviews.

Retail: A/B test placement effectiveness

You're debating between a big entrance poster and small checkout counter stickers. Test both:

  • Entrance: 500 scans, 10 conversions (2% rate)
  • Checkout: 100 scans, 40 conversions (40% rate)

Same cost per scan, but the checkout placement is 20x more efficient at driving action because customers are already in buying mode.

Direct mail: Prove offline campaigns work

Direct mail is notoriously hard to measure. With QR codes, you can:

  • Use unique codes per campaign (or even per recipient with variable printing)
  • Track scan-through rate against mail volume
  • Connect scans to purchases in GA4

Benchmarks show direct mail with QR codes achieves 4.5-6.4% engagement, well above the 1-2% of standard mail. Now you can prove it.

Staff attribution: Know who's driving results

Give each team member a personalized QR code (on a lanyard, business card, or name tag) tagged with their name. When customers scan, you know exactly who referred them.

This works for:

  • Review requests (who generates the most reviews?)
  • Lead capture (which salesperson converts?)
  • Referral programs (tracking word-of-mouth)

Calculating ROI

Vanity metrics ("we got 1,000 scans!") don't justify marketing spend. Here's how to calculate actual return.

The formula

ROI = (Revenue from QR - Campaign Cost) / Campaign Cost × 100

The variables

Revenue: In GA4, filter by utm_medium=qr and look at purchase revenue. For non-ecommerce goals (leads, signups), assign a value to each conversion.

Campaign Cost:

  • Printing (flyers, stickers, signage)
  • Distribution (postage, labor)
  • Tech (QR platform subscription, pro-rated)
  • Creative (design work)

Example: Coffee shop loyalty launch

Item Value
Investment $100 (500 stickers) + $15 (1 month platform) = $115
Total scans 800
App downloads 120 (15% conversion)
Lifetime value per app user $50
Projected revenue 120 × $50 = $6,000
ROI ($6,000 - $115) / $115 = 5,117%

Even with conservative conversion rates, QR campaigns often show massive returns because the costs are so low compared to paid advertising.

Watch the right metric

Don't optimize for scans. Optimize for conversions.

Campaign Cost Scans Cost/Scan Conversions Cost/Conversion
Billboard $1,000 2,000 $0.50 10 $100
In-store flyer $100 200 $0.50 50 $2

Same cost per scan, but the flyer is 50x more efficient at driving business results.

Common Tracking Mistakes

Using static codes for campaigns

Free static generators are fine for a permanent link on your business card. They're terrible for anything you want to measure or might need to update.

Forgetting UTM tags

Dynamic codes track scans at the platform level. But without UTMs, that traffic appears as "Direct" in GA4, making ROI calculation impossible. Tag every URL before generating the code.

Setting up tracking after printing

You can't retroactively track static codes, and you can't add UTMs to already-printed dynamic codes without updating the redirect (which some platforms charge extra for). Set up tracking first, print second.

Obsessing over scan counts

High scans with low conversions means you're attracting curiosity, not customers. A code with 100 scans and 50 conversions beats a code with 1,000 scans and 10 conversions.

A Note on Privacy

QR tracking collects anonymous, aggregate data. But regulations like GDPR and CCPA classify IP addresses as personal data.

Compliance basics:

  • Use platforms that anonymize IP addresses (hash them to get location, discard the raw IP)
  • Update your privacy policy to mention QR tracking
  • Don't promise "we track nothing" if you're using dynamic codes

Security concern: "Quishing" (QR phishing) involves bad actors placing stickers over your codes to redirect customers to malicious sites. Use branded codes with your logo (harder to fake) and periodically inspect your physical codes.

Key Takeaways

  1. Use dynamic codes. Static codes can't be tracked or updated. For $10-20/month, you get full analytics.

  2. Tag everything with UTMs. Without them, QR traffic disappears into "Direct" in Google Analytics.

  3. Track conversions, not scans. Scans measure attention. Conversions measure business impact.

  4. Set up tracking before printing. You can't retroactively add analytics to printed codes.

  5. Know the limits. You can see when, where, and what device. You can't see who without a form.

  6. Calculate actual ROI. Connect QR traffic to revenue in GA4, then compare against campaign costs.

The difference between "QR codes don't work" and "QR codes are our most measurable offline channel" is tracking. Set it up right, and you'll finally know which placements, campaigns, and team members are actually driving results.


RatesOnTap creates trackable QR codes with built-in attribution. Know exactly which team members, locations, and placements are driving your Google reviews.

Ready to get more Google reviews?

RatesOnTap makes it easy to ask for reviews with QR codes and track which team members are driving results.

Learn More