How It Works 2026-02-26 6 min By Cornelious Fazal

QR Code Tracking: How to Measure Every Scan for Free

Quick Answer

Track QR code scans with UTM parameters and Google Analytics for free - or use dynamic QR codes for raw scan data. Step-by-step setup, GA4 navigation, and a decision table.

Every QR code scan is a data point - a person choosing to act on your print material, product packaging, or event signage. Whether that data reaches you or disappears into the physical world depends on one decision made before generating the code: how you plan to set up QR code tracking.

This guide covers the two tracking methods available for QR codes, how to set up UTM parameter tracking in Google Analytics for free with static codes, how to read the results in GA4, and when dynamic QR code tracking is worth paying for.

Two Tracking Methods - Which One Do You Need?

QR code tracking works through one of two mechanisms, and choosing the right one before generating the code saves significant effort later.

UTM parameter tracking - you add tracking parameters to the destination URL before generating the QR code. When a user scans and the destination page loads, Google Analytics receives the UTM data and attributes the session to the correct campaign, source, and placement. No subscription required. Works with any free static QR code. Limitation: tracking only fires when the destination page loads - it cannot capture a scan that does not complete to a full page load.

Dynamic QR code tracking - the code links to a short URL on the dynamic platform's servers. Every scan hits that server first, which logs the scan event (device type, time, approximate location), then redirects to your destination. The platform provides a scan dashboard regardless of whether the destination page loaded. Requires a subscription ($10-30/month). You can change the destination URL without reprinting the code.

For most marketing campaigns, UTM tracking in GA4 is sufficient. Dynamic tracking adds value when you need raw scan counts before page load, device or location breakdowns, or a redirect URL that you can update for existing printed materials.

Method 1 - UTM Parameter Tracking (Free, Works Today)

UTM parameters are tags appended to the end of a destination URL. When the URL loads in a browser, Google Analytics reads the tags and attributes the session to the correct campaign and placement.

ParameterWhat it identifiesQR code example value
utm_sourceWhere the scan came fromposter, magazine, direct-mail
utm_mediumThe channel typeqr-code
utm_campaignThe campaign namesummer-sale-2026
utm_contentThe specific placementbus-shelter-main-st, postcard-a
utm_termOptional keyword (rarely used for QR) -

To build a UTM-tagged URL: use Google's Campaign URL Builder (ga-dev-tools.google/campaign-url-builder) to construct the URL without typing errors. Paste the completed URL into the free QR code generator URL tab and generate the code.

Three-placement example - one campaign, three separate QR codes:

Placementutm_sourceutm_content
Bus shelter posterposterbus-shelter-main-st
Magazine insertmagazinetech-mag-june
Direct mail postcarddirect-mailpostcard-a

All three codes link to the identical destination page. The UTM parameters differentiate them in Google Analytics so you can compare performance per placement.

Reading QR Code Results in Google Analytics 4

After deploying UTM-tagged QR codes, find campaign results in GA4 through this path:

Reports → Acquisition → Traffic acquisition → set primary dimension to Session source / medium → filter for your utm_medium value (e.g., “qr-code”)

What the report shows:

  • Sessions - how many times the destination page loaded after a scan
  • Engaged sessions - sessions lasting more than 10 seconds or triggering a key event, indicating meaningful visits rather than immediate exits
  • Conversions - if a GA4 conversion event is configured (form submission, purchase, add to cart), how many QR code sessions resulted in that conversion
  • Per-placement breakdown - add utm_content as a secondary dimension to compare bus shelter vs magazine vs postcard performance directly in the same report

Technical limitation: UTM tracking fires when the destination page loads in the browser. A scan that does not complete to a full page load - because the user closed the tab, or scanned in a low-signal area - is not recorded in GA4. In practice, this loss is typically 1-5% for fast-loading destination pages in connected locations, which is acceptable for most campaign reporting.

Per-Placement Tracking - One Code Per Location

The most actionable use of QR code analytics is per-placement attribution: knowing exactly which physical touchpoint drove each session and each conversion. Generate a separate QR code for each placement, each with its own UTM-tagged URL using a unique utm_content value.

Placementutm_sourceutm_contentSessionsConversions
Poster - Main Stpostermain-st-shelter24118
Poster - Park Aveposterpark-ave-shelter874
Direct mail - Version Adirect-mailpostcard-a63271
Direct mail - Version Bdirect-mailpostcard-b58862
In-store receiptin-storedigital-receipt442

This table - built entirely from free UTM tracking in GA4 - shows which poster location outperforms the other, which postcard version converted better, and that receipt QR codes generate minimal traffic compared to direct mail. No paid subscription required to reach those conclusions.

See the marketing campaign QR code guide for the full UTM setup process applied to specific campaign types including print, retail, and event campaigns.

Method 2 - Dynamic QR Code Tracking

Dynamic QR code platforms - Bitly, Uniqode, QR TIGER, and others - track scans at the moment the code is scanned, before the destination page loads, because every scan routes through their server first.

What dynamic tracking provides that UTM cannot:

  • Raw scan count - total scans regardless of whether the destination page loaded (offline environment, browser closed before load, slow connection)
  • Device type - iOS vs Android breakdown, useful for confirming the destination is optimized for your audience's majority device
  • Scan time - time-of-day and day-of-week patterns, useful for understanding when your audience most often engages with a specific physical placement
  • Approximate location - country, region, or city level based on IP address at scan time
  • Scan-to-visit ratio - comparing the dynamic platform's raw scan count to the GA4 session count reveals what percentage of scans are failing to complete to a page load

The scan-to-visit ratio is the metric that makes dynamic tracking analytically compelling. If your dynamic dashboard shows 500 scans but GA4 records 270 sessions from the same code, approximately 46% of scans are not completing to a page load. That gap typically reveals a slow-loading destination page, a login wall, or a poor-signal physical location - each fixable once the data surfaces the problem.

See the static vs dynamic QR code guide for a full cost-benefit comparison and guidance on when the subscription is justified.

UTM vs Dynamic - Which Do You Actually Need?

CapabilityUTM tracking (free)Dynamic ($10-30/month)
Campaign attribution in Google Analytics
Per-placement session and conversion data
Raw scan count before page load
Device type breakdown (iOS vs Android)
Scan time and day-of-week patterns
Approximate scan location
Scan-to-visit ratio
Update destination URL after printing
CostFree$10-30/month

If your primary question is which print placements are driving web traffic and conversions, UTM tracking in GA4 answers it completely for free. If your primary question is how many people physically scanned the code, what device they use, when and where they scanned, or what percentage of scans are failing to reach your page - dynamic tracking is the only option that provides those answers.

Start with the free approach: go to the free QR code generator, build your UTM-tagged URL using Google's Campaign URL Builder, paste it into the URL tab, generate a separate code for each placement, and download as SVG. Your first campaign scan data arrives in GA4 within hours of deployment - at no cost.

Frequently Asked Questions

Yes. Add UTM parameters to the QR code's destination URL before generating the code, then read the results in Google Analytics 4. When a user scans the code and the destination page loads, GA4 records the session and attributes it to the correct UTM source, medium, campaign, and content. This approach is free and works with any static QR code. The only limitation is that tracking fires at page load - a scan that does not complete to a full page load is not recorded.

A scan is the physical act of a phone camera reading the QR code. A session in Google Analytics is recorded when the destination page loads successfully in the user's browser. These two numbers can differ: if a user scans but closes the browser tab before the page loads, or scans from a location with no signal, the scan occurs but no GA4 session is recorded. With UTM-only tracking, you measure sessions - not raw scans. Dynamic QR code platforms measure raw scans at their server, which is why comparing the two numbers reveals the scan-to-visit ratio and shows how many scans are failing to reach your page.

Yes. Each QR code is generated from a specific URL. To track placements separately, each placement needs its own UTM-tagged URL with a unique utm_content or utm_source value - which means a separate QR code generated from that URL. All codes can point to the same destination page. Using the same QR code across multiple placements gives you combined data that cannot be separated after the codes are deployed.

Use utm_medium set to qr-code consistently across all QR campaigns - this lets you filter all QR code traffic in GA4 with one filter. Use utm_source for the channel (poster, magazine, direct-mail, in-store). Use utm_campaign for the campaign name. Use utm_content to identify the specific placement within a channel (bus-shelter-main-st, postcard-a). Consistent utm_medium and specific utm_content values give you the most actionable per-placement breakdown in the GA4 Traffic Acquisition report.

No. Once a static QR code is printed, the encoded URL is fixed and cannot be changed. UTM parameters must be built into the destination URL before the QR code is generated. For future print runs, build the UTM-tagged URL first, verify it in a browser, then generate the QR code from that URL. If you need the ability to change the destination URL - including UTM parameters - after printing, use a dynamic QR code platform that allows URL updates without reprinting the physical code.