How to Track QR Codes in Google Analytics 4 (GA4): Complete UTM Setup Guide
Looking to build this now? Try our Dynamic QR Codes with UTM Tracking
Keep your UTM parameters intact with dynamic QR codes and compare scans with Google Analytics 4 visits.
1. How QR Code Tracking with Google Analytics Works
There are two separate things you can measure, and they come from two different tools:
- The scan: Happens on the phone, before your website loads. Google Analytics never sees it. Only the QR code's own service can count scans - which means you need a dynamic QR code, because static codes open your URL directly with no tracking step in between.
- The website visit: Happens when the visitor's browser loads your page and your GA4 tag runs. UTM parameters in the URL tell GA4 that the visit came from a QR code and which campaign it belongs to.
- What you do with each: Use scan analytics to see how many people engaged with the printed piece, where and on what device. Use GA4 to see what they did on your site - pages viewed, engagement time, sign-ups and purchases.
2. Step 1: Build a UTM Link for Your QR Code
Start with the page you want people to land on, then add UTM parameters. Google's free Campaign URL Builder can assemble the link for you, or you can type it by hand. A consistent naming scheme matters more than the exact values:
| Parameter | What It Tells GA4 | QR Convention | Example |
|---|---|---|---|
| utm_source | Where the code was placed | The physical placement | flyer, table_tent, packaging, billboard |
| utm_medium | The channel | Always the same for QR codes | qr_code |
| utm_campaign | The promotion | Campaign or offer name | spring_sale_2026 |
| utm_content | Which variation | Size, design or location of the piece | a5_blue, window_left |
| utm_term (optional) | Extra detail | Store, branch or segment | store_soho |
Create Your Custom QR Code
Generate static and dynamic QR codes tailored for your brand, with custom colors, embedded logos, and mobile-friendly microsites.
3. Step 2: Create the QR Code (Static or Dynamic)
Both static and dynamic QR codes can carry a UTM link, and GA4 will record the visits either way. The difference is what else you get:
| Static QR Code with UTMs | Dynamic QR Code with UTMs | |
|---|---|---|
| GA4 visit tracking | Yes | Yes |
| Scan counts, location, device | No | Yes - in your TryQRMint dashboard |
| Fix a wrong UTM after printing | No - reprint needed | Yes - edit the destination |
| Pattern density with a long URL | Higher - long UTM links make dense codes | Low - the code holds a short link |
| Cost on TryQRMint | Free account, up to 10 static codes | 7-day trial (2 codes), then Pro or Business |
- In the TryQRMint Studio: Pick the Website URL type, choose Static or Dynamic with the switch at the top, and paste your full UTM link into the URL field.
- Design and save: Customize colors, logo and frame, preview, then sign in to save. Name the code after its placement (e.g. 'Spring flyer') so TryQRMint's analytics and your GA4 utm_source match.
- One code per placement: If you want to compare a flyer with a poster, create separate codes with different utm_source or utm_content values. One shared code can't tell placements apart.
- Build it now: The Dynamic QR Code Generator is the quickest route if you want scan counts as well as GA4 data. If you only need GA4, a static website URL QR code works too.
4. Step 3: Test Your Tracking Before Printing
A five-minute test prevents a whole campaign of untracked visits:
- Scan the code with your phone and open your site. With a TryQRMint dynamic Website URL code, scanners first see a short page with your link and a 'Visit Website' button - tap it to continue.
- Check the address bar on your site: the utm_ parameters should still be in the URL. If they're gone, your site is dropping them during a redirect (see section 7).
- Open GA4's Realtime report. Within a minute or so your visit should appear, and the source, medium or campaign cards should show your UTM values.
- For dynamic codes, confirm the scan shows up in your TryQRMint dashboard too.
5. Step 4: Find QR Code Traffic in GA4 Reports
Standard GA4 reports usually take several hours to a day or two to fill in. Menu names change from time to time, but the path is typically:
- Step 1: Open your GA4 property and go to Reports > Acquisition > Traffic acquisition.
- Step 2: Change the table's main dimension to 'Session source / medium', or to 'Session campaign' to compare campaigns.
- Step 3: Type `qr_code` in the table's search box to show only QR traffic.
- Step 4: Review users, sessions, engaged sessions, engagement time and key events (conversions).
- Step 5: Add a secondary dimension such as 'Session manual ad content' (your utm_content) or 'Landing page' to compare placements and pages.
- Optional: In Explore, build a free-form report filtered to session medium = qr_code for a dashboard you can reuse. Admins and editors can also create a custom channel group (under Admin > Data display) so QR traffic gets its own channel.
6. Combining TryQRMint Scan Analytics with GA4
Used together, the two tools show the whole journey from printed code to sale. Think of it as a funnel:
- Scans (TryQRMint): How many times the code was scanned, unique scanners, scans over time, and the country, city, device, OS and browser of each scan.
- Visits (GA4): How many of those people reached your site and how engaged they were.
- Conversions (GA4): How many signed up, booked or bought - set these up as key events in GA4.
- Why scans are higher than GA4 sessions: Some people scan but don't tap through or close the page before it loads; visitors who decline analytics cookies or use tracking blockers aren't counted by GA4; and slow connections can drop visits before the tag fires. A gap of some size is normal.
- Why GA4 can be higher: People bookmark or share the tagged link, so later visits carry the same UTMs without a new scan.
- Reporting tip: Business plans can export TryQRMint scan data as CSV, so you can put scans next to GA4 sessions and conversions in one spreadsheet. Our QR code scan analytics guide explains each TryQRMint metric.
7. Troubleshooting: QR Visits Missing from Google Analytics
If scans are coming in but GA4 shows little or no QR traffic, check these causes in order:
- UTMs stripped by a redirect: Some sites redirect `/page` to `/page/`, or http to https, and lose the query string on the way. Open the tagged URL in a browser and confirm the parameters survive.
- Typos in parameter names: `utm-source` or `UTM_Source` won't be recognized. Parameter names must be exactly `utm_source`, `utm_medium` and `utm_campaign`.
- GA4 tag not on the landing page: Landing pages built on a separate tool or subdomain may not have your GA4 tag installed.
- Looking too early: Standard reports lag behind. Use Realtime for same-day checks.
- Consent mode: Where cookie banners are required, visitors who decline analytics may be missing or modeled in reports.
- Extra hops: Avoid chaining your QR code through another link shortener before your site. Each extra redirect adds delay and another chance to lose parameters.
- Wrong code printed: If you used a dynamic code, you can fix a bad destination from your dashboard. A static code with a wrong link has to be reprinted.
Final Takeaway
Tracking QR codes in Google Analytics comes down to three habits: tag every destination with consistent UTM parameters, use one code per placement, and test the full path before printing. Add a dynamic QR code from the Dynamic QR Code Generator when you also want scan counts, locations and devices, and you'll see the full journey from printed piece to conversion. If your printed campaign also collects enquiries, see our guide to lead capture QR codes for flyers and direct mail.
Related Guides & Tutorials
Social Media QR Code: Put Multiple Social Profiles in One QR
Make one QR code for all your social media: Instagram, Facebook, X, LinkedIn, YouTube and TikTok on one page. Setup steps, tips, fixes. Free 7-day trial.
10 QR Code Marketing Best Practices to Double Your Scan Rates
10 proven tactics to increase QR code scans on flyers, packaging, and posters. Master contrast, sizing, calls-to-action, and mobile page optimization.
How to Create a Google Review QR Code: Step-by-Step Guide (2026)
Make it easier for customers to leave reviews on Google. Learn how to generate branded review QR codes, find your direct review short link, and collect honest customer feedback.
Frequently Asked Questions
Find immediate answers regarding dynamic QR codes, analytics, formats, and commercial usage.
Add UTM parameters to the URL in your QR code - for example `utm_source=flyer&utm_medium=qr_code&utm_campaign=spring_sale`. When people scan and visit, GA4 records the visit with those values. View it under Reports > Acquisition > Traffic acquisition with 'Session source / medium' as the dimension and filter for qr_code.
Not directly. GA4 only measures visits to your website after the page loads. To count scans, including people who never reach your site, use a dynamic QR code. TryQRMint's dynamic codes record total and unique scans, location, device, OS, browser and referrer.
No. A static QR code containing your UTM link works with GA4, and TryQRMint lets free accounts save up to 10 static codes. A dynamic code adds scan analytics, lets you fix the UTM link after printing, and keeps the pattern simple even when the URL is long.
Scans are counted as soon as the code is opened, while GA4 only counts visits where your page loads and the analytics tag runs. People who don't tap through, leave early, block trackers or decline cookies show up as scans but not as GA4 sessions.
Pick one value, such as `qr_code`, and use it on every QR code in every campaign. That way all QR traffic groups together in GA4 and you can compare placements with utm_source and utm_content.
No integration is needed. Your UTM parameters travel inside the destination URL, and your website's existing GA4 tag reads them. TryQRMint's own scan analytics sit alongside GA4 in your dashboard.
Ready to Supercharge Your QR Campaigns?
Create a free account to design branded QR codes, launch dynamic redirects you can edit anytime, and track scans in real time.