Growth MatterZ
๐Ÿ›๏ธE-Commerce & Branding

QR Code + UTM Tracking for Offline Marketing

A

Aviral Shukla

Sep 2, 20265 min read14 views
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_offer

You 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.

Image

Image

Image

Image

Image

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/product

A tracked URL could look like:

https://example.com/product
?utm_source=flyer
&utm_medium=qr
&utm_campaign=summer_sale

The 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

utm_source

Where traffic came from

flyer

utm_medium

Marketing channel/type

qr

utm_campaign

Campaign name

summer_sale

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_booth

For QR campaigns, I recommend making the source describe the physical placement.

For example:

utm_source=restaurant_menu

is more useful than:

utm_source=offline

because it gives you more information.


2. utm_medium

This answers:

What type of marketing channel generated the visit?

For example:

utm_medium=qr

or:

utm_medium=offline

The important thing isn't finding one magical value.

The important thing is consistency.

If you use:

qr

for one campaign and:

qr_code

for another, your reporting can become fragmented.


3. utm_campaign

This identifies the specific marketing campaign.

Example:

utm_campaign=summer_sale

Other examples:

utm_campaign=diwali_offer
utm_campaign=new_menu
utm_campaign=product_launch
utm_campaign=event_registration

What 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=entrance

versus:

utm_source=poster
utm_medium=qr
utm_campaign=summer_sale
utm_content=cash_counter

Now 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=menu

Entrance

utm_source=entrance
utm_medium=qr
utm_campaign=menu

Takeaway packaging

utm_source=packaging
utm_medium=qr
utm_campaign=menu

All three belong to the same campaign:

menu

But 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=flyer

Poster

utm_source=poster

Menu

utm_source=menu

Now 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-offer

Don'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_sale

The final URL becomes:

https://example.com/special-offer?utm_source=poster&utm_medium=qr&utm_campaign=summer_sale

You 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-offer

Generate it from:

https://example.com/special-offer?utm_source=poster&utm_medium=qr&utm_campaign=summer_sale

The 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:

  1. Does the QR code scan?

  2. Does the correct page open?

  3. Does the URL contain your UTM parameters?

  4. Does the website load properly on mobile?

  5. Does GA4 receive the visit?

  6. 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_offer

Storefront

?utm_source=storefront
&utm_medium=qr
&utm_campaign=first_visit_offer

Business card

?utm_source=business_card
&utm_medium=qr
&utm_campaign=first_visit_offer

Now 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
FaceBook

These 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 Sale

use:

summer_sale

Instead of:

Restaurant Menu

use:

restaurant_menu

A Simple Naming Framework

Use:

source = physical placement
medium = qr
campaign = marketing campaign
content = optional variation

For example:

utm_source=window
utm_medium=qr
utm_campaign=diwali_offer
utm_content=version_a

This 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/offer

doesn't tell GA4 that the visitor scanned your poster.

Use:

example.com/offer?utm_source=poster&utm_medium=qr&utm_campaign=offer

Mistake #3: Changing capitalization

Don't randomly use:

Poster
poster
POSTER

Use one convention.

I'd choose:

poster

Mistake #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/offer

If 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=flyer

tells 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 customers

Now 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_campaign

You can add:

utm_content

when 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=qr

can 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_sale

Can I track multiple QR codes separately?

Yes.

Give each QR code a distinct campaign parameter or source/content value.

For example:

utm_source=poster

and:

utm_source=flyer

Can 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_sale

rather than mixing:

Summer_Sale
summer-sale
SUMMER_SALE

Google 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
       โ†“
Conversions

If 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=storefront

Then 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.


Did you enjoy this article?

Comments0

You must be logged in to join the discussion.

No comments yet. Be the first to start the discussion!