You printed 500 flyers with a QR Code and wondered: did anyone scan it? How many? Where did those people come from? If your answer is "I don't know," you're wasting money on media you can't measure. Knowing how many materials you printed is different from knowing how many of them worked.

Static QR Codes don't track anything on their own. They simply redirect to a fixed URL. If you don't prepare that URL with tracking parameters — and use a dynamic QR on top of it — you're flying blind. In this tutorial you'll learn how to build the right URL, generate a trackable QR, and read the data in GA4.


What UTM parameters are

UTM (Urchin Tracking Module) are parameters added to your website URL that Google Analytics uses to identify the source of each visit. They don't affect the user experience — they're invisible to whoever scans.

There are five parameters, but three are essential:

Parameter What it identifies Example
utm_source Where the traffic came from flyer, outdoor, embalagem
utm_medium The channel/media type qr-code, print, offline
utm_campaign The specific campaign lancamento-junho, black-friday

A URL with UTM looks like this:

https://seusite.com.br/oferta?utm_source=flyer&utm_medium=qr-code&utm_campaign=lancamento-junho

Another example, for a QR on a product package:

https://seusite.com.br/produto/xpto?utm_source=embalagem&utm_medium=qr-code&utm_campaign=produto-xpto-2026

This full URL is what goes inside your QR Code — not the clean URL.


Step by step

1 🔗 Build the URL with UTM

Define the three parameters before anything else. Be consistent: always use lowercase, no spaces (use hyphens), no special characters.

Use the Google Campaign URL Builder or build it manually:

https://seusite.com.br/landing?utm_source=outdoor&utm_medium=qr-code&utm_campaign=verao-2026

Test the URL in your browser before moving on. It needs to open the correct page.

2 📱 Generate the dynamic QR Code

Here's the critical point: don't use a static generator. If you generate a static QR with the UTM URL, it will work — but you won't be able to change the destination later, and you won't have consolidated scan data in a dashboard.

With a dynamic QR Code, you can:

  • Shorten the URL (the QR has fewer modules and is easier to scan)
  • Change the destination without reprinting the material
  • See how many scans happened, at what time and in which city

In Code2Scan, paste the URL with UTM in the destination field and generate the dynamic QR. The short link generated by Code2Scan will redirect to your URL with the UTM intact.

Learn more about how the redirect works in the article complete guide to dynamic QR Code.

3 📊 View the data in GA4

After publishing the material and collecting some scans, go to Google Analytics 4:

  1. Go to Reports → Acquisition → Traffic acquisition
  2. In the primary dimension selector, choose Session source/medium
  3. Look for the combination flyer / qr-code (or whatever you configured)
  4. To view by campaign, change the dimension to Campaign

You'll see sessions, users, conversions and much more — all separated by each QR Code you created with different UTMs.

Tip: wait at least 24 hours for data to appear in the standard report. For real-time data, go to Reports → Real-time.


Static vs dynamic for tracking

If you've already read about static vs dynamic QR, you know the difference goes beyond tracking. But when it comes to measuring results, the difference is stark:

Static QR Dynamic QR
UTM parameters in URL Yes (but fixed) Yes (and editable)
Own scan dashboard No Yes
Can change destination No Yes
Short URL in QR No Yes
Data in GA4 Only if UTM is in the URL Yes + dashboard data

Direct conclusion: to truly track, use a dynamic QR with a destination URL containing UTMs. You get two data points: the Code2Scan dashboard (total scans) and GA4 (behavior after the click).


Campaign naming best practices

Inconsistent naming is the most common mistake. If you use BlackFriday on one QR and black_friday on another, GA4 will split them as two different campaigns.

Follow these simple rules:

  • Always lowercase: black-friday, not Black-Friday
  • Hyphen as separator: lancamento-produto, not lancamento_produto or lancamentoProduto
  • No special characters: promocao, not promoção
  • Specific enough: flyer-junho-sp is better than just flyer
  • Document in a spreadsheet: note each UTM combination and where the QR was placed

Common mistakes

❌ Inconsistent UTM across materials

Using utm_source=Flyer in one place and utm_source=flyer in another splits the data in GA4. Create a standard and stick to it across all materials. See more mistakes in the article common QR Code mistakes.

❌ Using a static QR Code and expecting tracking

A static QR with UTM in the URL does send data to GA4 — but you can't fix the URL later, you have no scan dashboard, and the QR has more modules (harder to scan in smaller prints). Always use the dynamic QR.

❌ Forgetting to test before printing

Before sending to the printer, scan the QR with at least two different phones (Android and iPhone). Confirm the page opens and that the UTM parameters appear in the browser URL bar. A QR with a wrong URL in a batch of 1,000 flyers is money thrown away.

❌ Not using QR in conditional redirect campaigns

If you want to show different content by time, location, or device, see how to set up conditional redirects in QR Code — and combine with UTMs to track each variation.

❌ Ignoring the Code2Scan dashboard

GA4 measures what happens on the site after the scan. The Code2Scan dashboard measures the scan itself — including device, time, and approximate location. Use both together for the complete picture.


When to use in marketing materials

Trackable QR with UTM works on any physical or digital material where you can't click a link:

  • Flyers and leaflets — see the guide on QR Code in marketing flyers
  • Product packaging
  • Billboards and banners
  • Business cards
  • Printed presentations
  • PDF emails

For surveys and forms, you can combine UTM with QR Code for Google Forms and know exactly which material each response came from.


Summary

  1. Define the UTM parameters before creating the QR (utm_source, utm_medium, utm_campaign)
  2. Build the destination URL with UTMs and test it in your browser
  3. Generate a dynamic QR Code using the URL with UTM as the destination
  4. Follow a naming convention: lowercase, hyphens, no special characters
  5. Test the QR on two different phones before printing
  6. After publishing, track data in GA4 → Acquisition → Traffic acquisition
  7. Use the Code2Scan dashboard for scan data + GA4 for on-site behavior

Create a dynamic, trackable QR Code — set your UTM URL as the destination and start measuring every scan today.