QR Code + UTM Tracking for Offline Marketing
How to Track QR Code Scans in Google Analytics 4: Complete UTM Guide
Published: September 2026 Reading time: 8โ10 minutes
You put a QR code on a flyer.
Someone scans it.
They visit your website.
Maybe they buy something.
But there is a problem:
How do you know that the visitor actually came from the flyer?
Without proper campaign tracking, offline marketing can become a black hole in your analytics.
You may know that your website received 500 visitors, but you might not know whether they came from:
a restaurant menu
a business card
a poster
a newspaper advertisement
product packaging
a trade-show stand
a flyer
a physical store
or another QR code campaign.
The solution is surprisingly simple:
Combine a QR code with UTM parameters and Google Analytics 4 (GA4).
Google's documentation explains that UTM parameters allow Analytics to identify campaigns that refer traffic, with parameters such as utm_source, utm_medium and utm_campaign. (Google Help)
This guide shows you exactly how to build that system.
Quick Answer: Can You Track QR Code Scans in GA4?
Yes โ but there is an important distinction.
A QR code itself isn't what GA4 analyzes.
Instead, you create a URL containing UTM parameters, for example:
https://example.com/menu
?utm_source=restaurant_menu
&utm_medium=qr
&utm_campaign=summer_offerYou then convert that URL into a QR code.
When someone scans it and visits your website, GA4 can associate the visit with the campaign parameters.
Google specifically recommends using campaign parameters such as utm_source, utm_medium and utm_campaign when tagging campaign URLs. (Google Help)
The Basic System
Think of the process like this:
Printed material โ QR Code โ UTM URL โ Website โ GA4 โ Campaign Report
For example:
Restaurant table tent
โ
QR code
โ
example.com/menu?utm_source=table_tent&utm_medium=qr&utm_campaign=summer_menu
โ
Customer visits website
โ
GA4 records campaign information
โ
You can analyze the campaign.
What Are UTM Parameters?
UTM stands for Urchin Tracking Module.
UTM parameters are pieces of information added to a URL so analytics software can understand where traffic originated.
A typical URL might look like:
https://example.com/productA tracked URL could look like:
https://example.com/product
?utm_source=flyer
&utm_medium=qr
&utm_campaign=summer_saleThe website destination hasn't changed.
You've simply attached campaign information to the URL.
The 3 Most Important UTM Parameters
For most QR campaigns, start with these three.
Parameter | Purpose | Example |
|---|---|---|
| Where traffic came from |
|
| Marketing channel/type |
|
| Campaign name |
|
Google's current Analytics documentation recommends using utm_source, utm_medium and utm_campaign when adding campaign parameters. (Google Help)
1. utm_source
This answers:
Where did the visitor come from?
Examples:
flyer
poster
restaurant_menu
business_card
packaging
storefront
event_boothFor QR campaigns, I recommend making the source describe the physical placement.
For example:
utm_source=restaurant_menuis more useful than:
utm_source=offlinebecause it gives you more information.
2. utm_medium
This answers:
What type of marketing channel generated the visit?
For example:
utm_medium=qror:
utm_medium=offlineThe important thing isn't finding one magical value.
The important thing is consistency.
If you use:
qrfor one campaign and:
qr_codefor another, your reporting can become fragmented.
3. utm_campaign
This identifies the specific marketing campaign.
Example:
utm_campaign=summer_saleOther examples:
utm_campaign=diwali_offer
utm_campaign=new_menu
utm_campaign=product_launch
utm_campaign=event_registrationWhat About utm_content?
This is where QR tracking becomes much more powerful.
Suppose you're running the same promotion using:
a poster
a flyer
a table tent
a product package
You can use utm_content to distinguish different versions or placements.
For example:
utm_source=poster
utm_medium=qr
utm_campaign=summer_sale
utm_content=entranceversus:
utm_source=poster
utm_medium=qr
utm_campaign=summer_sale
utm_content=cash_counterNow you can potentially compare the two placements.
Google describes utm_content as a way to differentiate creatives or links within the same campaign. (Google Help)
A Real Example: Tracking a Restaurant's QR Codes
Imagine a restaurant wants customers to scan QR codes and view its online menu.
The restaurant places QR codes in three locations:
Table
utm_source=table
utm_medium=qr
utm_campaign=menuEntrance
utm_source=entrance
utm_medium=qr
utm_campaign=menuTakeaway packaging
utm_source=packaging
utm_medium=qr
utm_campaign=menuAll three belong to the same campaign:
menuBut the sources are different.
This means you can potentially determine which physical placement generated more traffic.
Why This Is Better Than Using One QR Code Everywhere
This is one of the biggest mistakes businesses make.
Suppose you use exactly the same QR code on:
1,000 flyers
500 posters
200 menus
You might see:
1,700 scans
But you won't necessarily know which physical marketing asset generated those visits.
Instead, create separate tracking URLs.
Flyer
utm_source=flyerPoster
utm_source=posterMenu
utm_source=menuNow your analytics has a much better chance of answering:
Which physical marketing asset is actually working?
This approach is consistent with the broader principle of using distinct campaign parameters to prevent traffic attribution from being lumped together. (Google Help)
Step-by-Step: Create a QR Code Tracking Campaign
Step 1: Choose the destination page
First decide where the QR code should send users.
For example:
https://example.com/special-offerDon't automatically send every QR code to your homepage.
Send visitors to the page that matches the physical marketing material.
For example:
Restaurant poster โ special offer page
Product packaging โ product support page
Business card โ contact page
Event banner โ registration page
Step 2: Add UTM parameters
Start with:
https://example.com/special-offer
?utm_source=poster
&utm_medium=qr
&utm_campaign=summer_saleThe final URL becomes:
https://example.com/special-offer?utm_source=poster&utm_medium=qr&utm_campaign=summer_saleYou can create these URLs manually or use Google's campaign URL-building tools. (Google Help)
Step 3: Convert the URL Into a QR Code
Now take the complete tracked URL and generate a QR code from it.
Important:
Don't generate a QR code from:
https://example.com/special-offerGenerate it from:
https://example.com/special-offer?utm_source=poster&utm_medium=qr&utm_campaign=summer_saleThe UTM information needs to travel with the visitor.
Step 4: Test the QR Code
Before printing 10,000 flyers, test it.
Seriously.
Use at least two phones if possible.
Check:
Does the QR code scan?
Does the correct page open?
Does the URL contain your UTM parameters?
Does the website load properly on mobile?
Does GA4 receive the visit?
Does the campaign appear correctly in your reports?
This five-minute test can save an entire printing campaign.
Step 5: Check GA4
After traffic starts arriving, open Google Analytics.
Look under the acquisition reports for campaign-related dimensions such as:
Session source
Session medium
Session campaign
Google documents these campaign dimensions under its acquisition reporting. (Google Help)
For example, you may eventually see something similar to:
Source | Medium | Campaign | Sessions |
|---|---|---|---|
poster | qr | summer_sale | 184 |
flyer | qr | summer_sale | 97 |
packaging | qr | summer_sale | 421 |
menu | qr | summer_sale | 256 |
Now your offline campaign has become measurable.
The Secret: Don't Just Track Scans
Here's where many QR-code articles stop.
But traffic isn't the real goal.
Imagine:
Poster: 1,000 visits Flyer: 300 visits
At first glance, the poster looks better.
But now suppose:
Poster: 1,000 visits โ 8 purchases
Flyer: 300 visits โ 25 purchases
The flyer generated fewer visitors but substantially more purchases.
That's why your QR campaign should ultimately connect to a business outcome.
Depending on your business, that might be:
purchases
form submissions
WhatsApp conversations
phone calls
bookings
registrations
downloads
coupon redemptions
quote requests
QR Code Tracking Example for a Local Business
Imagine a salon runs an offer:
20% off your first appointment
It prints QR codes on:
flyers
storefront posters
business cards
Instead of using one URL, create three.
Flyer
?utm_source=flyer
&utm_medium=qr
&utm_campaign=first_visit_offerStorefront
?utm_source=storefront
&utm_medium=qr
&utm_campaign=first_visit_offerBusiness card
?utm_source=business_card
&utm_medium=qr
&utm_campaign=first_visit_offerNow the business can compare the campaign sources.
Even better, add a conversion event when someone completes the booking.
The real question becomes:
Which QR placement generated customers?
That's much more valuable than:
Which QR code got the most scans?
QR Code UTM Naming Convention I Recommend
One of the easiest ways to destroy analytics data is inconsistent naming.
For example:
Facebook
facebook
FB
fb
FaceBookThese may represent the same platform but appear as different values.
Google explicitly notes that UTM values are case-sensitive and recommends consistent naming conventions. (Google Help)
Use a simple rule:
Lowercase everything.
Instead of:
Summer Saleuse:
summer_saleInstead of:
Restaurant Menuuse:
restaurant_menuA Simple Naming Framework
Use:
source = physical placement
medium = qr
campaign = marketing campaign
content = optional variationFor example:
utm_source=window
utm_medium=qr
utm_campaign=diwali_offer
utm_content=version_aThis creates a clean structure that can scale.
Common QR Tracking Mistakes
Mistake #1: Using the same QR code everywhere
This destroys placement-level attribution.
Better: Create separate tracked URLs.
Mistake #2: Forgetting UTM parameters
A normal URL:
example.com/offerdoesn't tell GA4 that the visitor scanned your poster.
Use:
example.com/offer?utm_source=poster&utm_medium=qr&utm_campaign=offerMistake #3: Changing capitalization
Don't randomly use:
Poster
poster
POSTERUse one convention.
I'd choose:
posterMistake #4: Making the QR destination unnecessarily complicated
Don't send:
Restaurant poster โ homepage โ menu โ offer
when you could send:
Restaurant poster โ offer
Every unnecessary step adds friction.
Mistake #5: Tracking visits but not conversions
A campaign generating 10,000 visitors isn't automatically successful.
Revenue and meaningful actions matter.
Mistake #6: Not testing before printing
Always scan the final QR code from the actual printed material if possible.
QR codes can fail because of:
poor contrast
insufficient size
damaged printing
excessive styling
low resolution
difficult placement
poor scanning distance
Static vs Dynamic QR Codes
This distinction is important.
Static QR code
The QR code directly contains the destination URL.
Example:
QR โ https://example.com/offerIf you later need to change the destination, you generally need a new QR code.
Dynamic QR code
The QR code typically points through a redirect controlled by a QR service.
That can provide additional management and analytics capabilities depending on the service.
For a simple UTM campaign, you don't necessarily need an expensive dynamic QR platform.
If you control your website and analytics setup, a tracked URL can be enough for many campaigns.
Can You Track the Exact Person Who Scanned the QR Code?
Not simply from the QR code itself.
UTM parameters primarily identify campaign information such as source, medium and campaign.
They aren't a magic mechanism for identifying an individual person.
For example:
utm_source=flyertells you about the campaign source.
It doesn't inherently tell you:
"Aviral scanned this QR code at 4:32 PM."
That would require additional analytics, authentication or consent-based mechanisms depending on the use case.
For normal marketing, focus on aggregate campaign performance.
How QR Codes Can Become an Offline Attribution System
Here's the bigger opportunity.
You can create a unique tracking URL for almost every physical marketing surface.
Restaurant
menu
table tent
receipt
storefront
takeaway box
Retail store
shelf
packaging
window
counter
loyalty card
Real estate
property board
brochure
newspaper
business card
property flyer
Events
entrance banner
speaker slide
printed badge
brochure
booth
E-commerce
package insert
product box
thank-you card
warranty card
Instead of treating QR codes as simple shortcuts, you're turning them into offline attribution points.
A More Advanced Campaign Structure
Suppose a company launches:
Diwali Sale 2026
It has four physical placements.
Placement | Source | Medium | Campaign |
|---|---|---|---|
Flyer | flyer | qr | diwali_sale_2026 |
Poster | poster | qr | diwali_sale_2026 |
Packaging | packaging | qr | diwali_sale_2026 |
Storefront | storefront | qr | diwali_sale_2026 |
The campaign stays consistent.
Only the source changes.
That gives you a much cleaner comparison.
What Should You Track Beyond QR Scans?
If you want serious marketing analytics, build a simple funnel:
QR scan
โ
Landing page visit
โ
CTA click
โ
Lead/product interaction
โ
Conversion
โ
Revenue
For example:
10,000 scans
โ
7,200 website sessions
โ
2,100 offer-page interactions
โ
420 leads
โ
85 customersNow you're no longer measuring QR codes.
You're measuring marketing performance.
Free Tools You Can Use
Google Analytics
Use GA4 to analyze campaign traffic and acquisition data.
Google Analytics campaign URL documentation
Google Search Central
For the SEO side of your website, Google's Search Central documentation recommends creating helpful, reliable, people-first content and making links, images and page structure understandable to search engines. (Google for Developers)
UTM + QR tools
There are already dedicated tools that combine UTM generation and QR-code creation, which demonstrates that this is a real standalone use case rather than a purely theoretical topic. (Qreator)
Frequently Asked Questions
Does Google Analytics automatically track QR code scans?
Not as a special "QR scan" metric simply because a QR code was used.
The useful approach is to send visitors through a URL containing campaign parameters so GA4 can attribute the resulting traffic.
What UTM parameters should I use for QR codes?
A practical starting point is:
utm_source
utm_medium
utm_campaignYou can add:
utm_contentwhen you need to distinguish different placements or creative variations. (Google Help)
What should I use as utm_medium for QR codes?
There isn't one universal value you must use for every situation.
The important thing is to establish a consistent naming system.
For example:
utm_medium=qrcan be used consistently for your QR campaigns.
Can I track QR codes on flyers?
Yes.
Create a dedicated UTM URL for the flyer and convert that URL into a QR code.
Example:
?utm_source=flyer&utm_medium=qr&utm_campaign=summer_saleCan I track multiple QR codes separately?
Yes.
Give each QR code a distinct campaign parameter or source/content value.
For example:
utm_source=posterand:
utm_source=flyerCan QR codes track conversions?
The QR code itself doesn't magically track a purchase.
The QR code brings the visitor to your website. Your analytics setup then needs to measure the relevant conversion event.
Should UTM parameters be uppercase or lowercase?
Either can technically be used, but consistency matters.
A lowercase convention is generally easier to maintain:
summer_salerather than mixing:
Summer_Sale
summer-sale
SUMMER_SALEGoogle notes that UTM values are case-sensitive. (Google Help)
Final Takeaway
QR codes are easy to generate.
Knowing which QR code actually generated business is the difficult part.
A simple UTM structure solves much of that problem:
Physical marketing
โ
QR Code
โ
UTM URL
โ
Website
โ
GA4
โ
Campaign attribution
โ
ConversionsIf you're running offline marketing, don't print the same generic QR code everywhere.
Instead, create campaign-specific tracking URLs.
For example:
Flyer
โ utm_source=flyer
Poster
โ utm_source=poster
Packaging
โ utm_source=packaging
Storefront
โ utm_source=storefrontThen you can move from simply asking:
"How many people scanned my QR code?"
to the much more valuable question:
"Which physical marketing asset actually generated customers?"
That's where QR-code tracking becomes genuinely useful.


Comments0
You must be logged in to join the discussion.
No comments yet. Be the first to start the discussion!