How to Track QR Code Scans, Complete Guide
How to track QR code scans: native platform analytics, UTM parameters + GA4, and what data you actually get. No guesswork.

This article was written by the QR Nova team. We build QR code software, which may inform our perspective.
Most articles about tracking QR code scans describe the feature as if it's a simple checkbox, "use a dynamic code" and you're done. What they skip is the actual data gap: by default, GA4 classifies QR code traffic as "direct," which means your scan traffic is invisible in acquisition reports. Here's what tracking actually requires. Real QR code scan tracking needs two layers: native platform analytics for scan-level data (device, location, count), and UTM parameters for behavioral data (what visitors do after they scan). One without the other gives you an incomplete picture.
TL;DR
- Static QR codes cannot be tracked, no redirect server, no scan data. Dynamic codes required.
- GA4 treats QR scan traffic as "direct" unless you add UTM parameters to the destination URL.
- Use utm_medium=qr_code and a unique utm_source per physical placement to distinguish locations.
- Native platform analytics (scan count, device, city) and GA4 UTM data are complementary, use both.
Can you track QR code scans?
Try it now — no sign-up needed
Get startedYes, but only if the QR code routes through a redirect server. A dynamic QR code encodes a short URL that points to the platform's redirect infrastructure. Every time someone scans the code, their phone requests that short URL. The server logs the request (timestamp, device OS, IP-based location), then redirects to the destination. That log is your scan analytics data.
A static QR code encodes the destination URL directly. There is no server request, the phone reads the URL out of the pixel pattern and opens it. Nothing is logged. No scan data of any kind is available from a static code. For a full breakdown of these two types, see our guide on static vs dynamic QR codes.
The second tracking layer, behavioral data, comes from UTM parameters. When visitors land on your website via a UTM-tagged URL, GA4 captures the source, medium, and campaign and attributes that session to your QR code. This gives you post-scan behavior: pages visited, time on site, conversion events. The QR platform's native analytics tell you about the scan event itself; GA4 tells you what happened after.
What data does QR code tracking provide?
Native platform analytics (scan-level data)
When you use a dynamic QR code platform, the analytics dashboard typically shows:
- Total scans: every scan event, including repeat scans from the same device
- Unique scans: first-time scans from previously unseen devices (tracked by cookie or device fingerprint)
- Scan timestamp: exact time and date of each scan, allowing time-of-day and day-of-week analysis
- Device OS: iOS vs Android (and sometimes browser type)
- Geographic location: country, region, and city-level location derived from the scanner's IP address. Resolution is typically to the city or metropolitan area, not the specific venue
What native analytics cannot tell you: who the individual scanner is, their name or contact details, or any persistent information about them across sessions. This is a deliberate privacy design aligned with GDPR and CCPA requirements, not a technical limitation.
GA4 utm tracking (behavioral data)
UTM parameters are tags appended to your destination URL before generating the QR code. When a scanner reaches your site, GA4 reads the tags and records them against the session. Standard UTM parameters for QR tracking:
- utm_source: where the code is placed (e.g.,
conference-badge,store-window,product-packaging) - utm_medium=qr_code: consistent medium identifier across all QR campaigns
- utm_campaign: the campaign name (e.g.,
spring-2026,restaurant-relaunch) - utm_content: specific variant identifier when A/B testing QR code placements on the same material
With these in place, GA4's Traffic Acquisition report shows QR code traffic as a distinct channel, not buried in "direct." You can then apply GA4's standard behavioral analysis: bounce rate, engagement rate, average session duration, conversion events, and goal completions attributed to QR scans.
How to set up utm tracking for QR codes — step by step
Step 1: build your utm URL
Start with your destination URL. Append the UTM parameters as query string parameters. Example for a restaurant table card campaign:
https://yourrestaurant.com/menu?utm_source=table-card&utm_medium=qr_code&utm_campaign=dine-in-2026
Use Google's Campaign URL Builder (ga-dev-tools.google.com/campaign-url-builder) to generate UTM URLs without typos. Consistent formatting matters, qr_code vs QR Code vs qr-code are three separate medium values in GA4.
Step 2: establish naming conventions before you generate any codes
This is the step most teams skip and regret. Once you have a dozen QR codes in the wild with inconsistent UTM naming, your GA4 data becomes fragmented and hard to segment. Decide upfront:
- Always use
utm_medium=qr_code(underscore, lowercase) for all QR codes - Use a consistent format for utm_source:
placement-location(e.g.,store-chicago-north,packaging-v2) - Document every QR code, its UTM values, and its physical placement in a shared spreadsheet
Step 3: shorten the utm URL before encoding it
Long URLs produce dense, complex QR codes, more modules, more data density, higher chance of scan failures in sub-optimal conditions. A UTM-tagged URL with four parameters can easily exceed 150 characters. Shorten it with a URL shortener or use a dynamic QR code platform that handles the redirect internally (the QR code encodes the short URL, and the platform appends UTM parameters server-side during the redirect).
Step 4: generate the QR code pointing to the utm URL
Create a dynamic QR code using the UTM-tagged destination URL. In the QR Nova URL generator, paste the full UTM URL as the destination. The QR code encodes the redirect short URL, and the redirect destination is your UTM-tagged page. When the scanner arrives at your page, GA4 captures the UTM data.
Step 5: verify the tracking before printing
Before printing anything, verify end-to-end tracking:
- Scan the QR code with your phone.
- Confirm the redirect lands on the correct page with UTM parameters visible in the URL bar.
- In GA4, go to Reports > Realtime and verify a new session appears attributed to your UTM source and medium.
- Check the QR platform's dashboard to verify the scan was logged with correct device and location data.
This test takes 5 minutes and prevents weeks of missing data from a misconfigured tracking setup you only discover when reviewing campaign performance. For broader guidance on QR code deployment, our QR code best practices guide covers sizing, contrast, and placement alongside tracking.
Three levels of QR code tracking complexity
Not every use case needs the same level of tracking infrastructure. Here's how to match the setup to the actual need:
Low complexity: single-location, single-purpose
A local business puts one QR code on a window cling pointing to their booking page. The goal is to know whether anyone scans it. Setup: dynamic QR code with the native platform dashboard. Metrics that matter: total scan count, rough geographic confirmation (are the scans coming from the right city?), and time-of-day patterns (when are people scanning, does it correlate with foot traffic?). UTM tracking not required unless the booking page already has GA4 installed and you want conversion attribution.
Mid complexity: multi-placement campaign
A regional brand places QR codes on table tents in 15 restaurant locations for a loyalty program launch. The goal: which locations have the highest participation rate? Setup: one QR code per location, each with a unique utm_source (e.g., location-id-001 through location-id-015), all with utm_medium=qr_code and utm_campaign=loyalty-launch-q2-2026. Report in GA4 by filtering on utm_medium=qr_code and breaking down by utm_source. This reveals which locations are driving sign-ups without relying on restaurant staff to track manually.
High complexity: enterprise product packaging
A consumer goods company embeds QR codes on product packaging across 3 product lines, 8 regional variants, and a 2-year print run. Requirements: track scan volume by SKU and region, update destination URLs post-print (redirect expired promotion pages to current offers), measure post-scan conversion, and maintain scan history for the full product lifecycle.
This requires: dynamic QR codes with redirect management, structured UTM taxonomy (utm_source=sku-id, utm_campaign=region-variant), GA4 event tracking for specific conversion actions (purchase, subscription, registration), and a QR platform with API access for programmatic URL updates. The critical procurement question: does the platform's SLA guarantee redirect uptime for the full 2-year packaging cycle? Data portability, can you export redirect rules and migrate if the vendor is acquired or changes pricing?, should be in the contract.
When QR code tracking won't give you what you expect
Several scenarios produce misleading or incomplete tracking data. Knowing these limits prevents false confidence in your metrics.
IP-based location is approximate
QR platforms derive location from the scanner's IP address. Cellular data users are typically geolocated to the nearest cell tower's exchange point, often a city or regional center, not the actual scan location. A code scanned inside a Chicago retail store might show the scanner as being in a Chicago suburb if the carrier's exchange is there. City-level location is reliable; neighborhood-level is not.
VPN and corporate network users appear as one location
If a scanner is using a VPN or is on a corporate network with a centralized internet gateway, their IP shows as the VPN server or gateway location, which could be anywhere in the world. Enterprise event QR codes sometimes show a cluster of scans from an unexpected city because the venue's WiFi routes through a datacenter in another region.
Unique scan counts overcount across devices
If the same person scans your code on their iPhone at 10am and then on their work laptop's webcam at 2pm, that registers as two unique scans. There's no cross-device identity matching in standard QR analytics. For in-person events where you want accurate attendee headcounts, unique scan counts will overcount by 10–20%.
GA4 utm data requires the user to reach the destination page
If the destination URL loads slowly and the user bounces before the GA4 tracking pixel fires, the scan is counted by the QR platform (the redirect was made) but not by GA4 (the page didn't load far enough to send the event). In high-latency mobile environments, conference venues with poor WiFi, outdoor events, this discrepancy can be meaningful. Keep landing pages fast and minimize render-blocking resources.
How QR nova handles scan analytics
QR Nova's analytics dashboard provides scan-level data for all dynamic codes: total scans, unique scans, device OS breakdown, scan timestamps, and geographic data. The data is available in the dashboard without a minimum scan threshold, even one scan shows up immediately.
For UTM tracking: QR Nova's dynamic URL generator accepts any destination URL, including URLs with UTM parameters pre-appended. The platform encodes your UTM-tagged URL as the redirect destination, so every scan delivers both native platform analytics and GA4 UTM attribution simultaneously.
Unlike platforms that cap scan analytics on lower tiers, QR Nova provides full scan history without scan count limits. You can also export raw scan data, if you switch platforms later, your historical analytics go with you.
Create a trackable dynamic QR code free at QR Nova, no credit card, no subscription required to get started.
Frequently asked questions
Can you track who scanned a QR code?
You can track device type (iOS/Android), approximate location (city-level based on IP), scan time, and whether the scan was unique or a repeat. You cannot identify individual people, QR scan analytics are aggregate data, not personal identification. GDPR and CCPA restrict scan tracking to non-PII aggregates.
Can you track static QR code scans?
No. Static QR codes encode the destination URL directly in the image, there's no redirect layer, so no server ever sees the scan. To track scans, you need a dynamic QR code (which routes through a redirect server that logs scans) or UTM parameters on the destination URL (which GA4 captures when the visitor lands on your page).
What data does QR code scan tracking provide?
Native QR platform analytics typically provide: total scan count, unique scan count, scan timestamp, device operating system (iOS vs Android), approximate location (country, region, city), and browser type. UTM tracking via GA4 adds: post-scan behavior (pages visited, session duration, goal completions, and conversions).
How do I track QR code scans in Google Analytics?
Add UTM parameters to your destination URL before generating the QR code. Use utm_source to identify the physical placement (e.g., 'conference-badge'), utm_medium=qr_code, and utm_campaign for the campaign name. GA4 captures these parameters automatically when visitors land on your page and attributes the session to the QR code traffic.
What is the difference between a scan and a unique scan in QR analytics?
A scan is any time the code is scanned, including repeat scans from the same device. A unique scan is a first scan from a device not previously seen (tracked by a cookie or device fingerprint). For engagement metrics, unique scans are more meaningful, they measure reach. Total scans measure engagement intensity.
Do I need a paid plan to track QR code scans?
With UTM parameters and GA4, you can track post-scan behavior for free using Google Analytics 4. Native scan analytics (scan count, device, location) require a dynamic QR code platform, which typically costs $7–$30/month depending on the provider. QR Nova's analytics dashboard is included with dynamic codes.
How do I track which physical location generated the most scans?
Create a separate QR code for each physical location with a unique utm_content or utm_source value per placement. For example: utm_source=store-chicago vs utm_source=store-nyc. This lets GA4 (or your QR platform's dashboard) break down scan traffic by location without requiring separate dynamic codes for each placement.
Related articles
QR Code Analytics: What Data You Can Actually See
A QR code shows scans, location, device and time — but only if it's dynamic. Here's the exact data you can and can't see. Free, no account.
Static vs Dynamic QR Codes: Complete Guide
Static vs dynamic QR code, the real difference, which one you need, and how to avoid paying for features that lock you out. Full guide.
Why Do QR Codes Expire? The Real Causes
Why do qr codes expire? It's not the code itself — it's the redirect server behind it. Learn the 4 causes and how to avoid codes that die on you.
Try it now — no sign-up needed
Get started