Qranite

How to Track QR Code Scans: UTM Tags vs Dynamic Analytics

The Qranite team · June 11, 2026

There are two reliable ways to track QR code scans. Free: append UTM parameters to your URL, encode that URL in a static QR code, and read the results in Google Analytics. Easier: use a dynamic QR code, which counts every scan and breaks it down by day, country, and device. Exact steps for both are below.

Can a QR code track scans by itself?

No. A QR code is a picture of data — usually a URL. The image has no memory, no server, no counter. It cannot know it was scanned, any more than a printed phone number knows it was dialed.

Tracking happens in one of two places. Either the destination page records the visit, which is what UTM parameters enable. Or the code points at a short redirect link, and the redirect server counts each hit before passing the visitor along. That second approach is what a dynamic code is. The distinction matters for cost, accuracy, and what happens after you print. More on that split in static vs dynamic QR codes.

How do I track QR code scans for free?

Use UTM parameters. These are tags you add to the end of your URL. Your analytics tool reads them and tells you the visit came from your QR code. It costs nothing and works with any static code from any generator.

Here is the full process:

  • Start with your destination URL, e.g. example.com/menu.
  • Append UTM tags: example.com/menu?utm_source=qr-code&utm_medium=print&utm_campaign=table-tents.
  • Use a different utm_campaign value for each placement — table-tents, window-poster, flyer — so you can compare them.
  • Paste the full tagged URL into the free generator and download the code. No account needed.
  • Scan it once yourself to confirm the page loads with the parameters intact.
  • In Google Analytics 4, open Reports, then Acquisition, then Traffic acquisition. Filter by session source = qr-code. Each session is a scan that reached your page.

When do UTM parameters fall short?

UTMs only count visits that load your page with your analytics script running. Several things slip through that net.

They require a website you control with analytics installed. A QR code pointing to a WhatsApp chat, an app store listing, a hosted PDF, or a Google review page gives you nowhere to put the script. WiFi and vCard codes contain no URL at all, so they cannot be tracked by anyone — us included.

They also undercount. Ad blockers, slow connections, and people who close the tab before the page loads all vanish from your numbers. And the tags are baked into the printed code. If you reorganize your site, the old tagged URL breaks, which is the most common reason a QR code stops working.

How do dynamic QR codes track scans?

A dynamic code points at a short redirect link — ours look like qranite.com/r/xxx. The redirect server counts the scan before sending the visitor to your destination. Every scan registers, even if the destination page never loads, because the count happens at the redirect, not on your site.

You get scans by day, by country, and by device type, with no analytics setup on the destination. You can also re-point the link after printing, so a reorganized website or a new menu PDF does not strand your printed codes.

On Qranite, a free account includes 2 dynamic codes with unlimited scans, no ads, and a 7-day analytics window. Pro is $9 a month for 50 codes and 365-day analytics; there is also a $79 lifetime option for 10 codes. Details on pricing. One policy worth stating plainly: if you stop paying, your codes keep redirecting forever. You lose editing and the longer analytics window, not the codes.

UTM tracking vs dynamic analytics: which should you use?

Use UTMs when the destination is your own website, volume is modest, and you will not need to change the URL after printing. Use a dynamic code when the destination is not yours, when you need per-placement counts without GA gymnastics, or when the printed code must outlive the URL behind it.

UTM + static codeDynamic code
CostFree, no accountFree for 2 codes; paid above that
What gets countedSessions that load your pageEvery scan, at the redirect
Works for non-website destinationsNoYes
Requires Google AnalyticsYesNo
Country and device breakdownYes, in GAYes, built in
Change destination after printingNoYes
Depends on a third-party serverNoYes — read the provider's policy

What about the free tracking other generators offer?

Read the terms before you print. Most free dynamic tiers are structured to fail after your codes are on paper.

Per their support docs, dynamic codes made in qr-code-generator.com's 14-day trial are deactivated when the trial ends, and scans then land on their upsell page. QR Tiger's free dynamic codes stop after 500 scans each, and per their own policy all dynamic codes stop working if your plan lapses. ME-QR's free codes show full-screen interstitial ads to the person scanning; removing ads from all your codes costs $27.99 a month. QRFY pauses codes 7 days after creation unless you subscribe, per their pricing page.

None of this applies to static codes, which never expire from any generator — the image is just data. If a printed code died on you, the redirect link inside it was switched off. We wrote up the mechanics in do QR codes expire.

A practical recommendation

Start with the free UTM method. It answers the basic question — are people scanning this — at zero cost and with zero dependency on anyone's servers. Tag each placement separately and check GA after a week.

Move a code to dynamic when one of three things becomes true: the destination is not a site you control, you need scan counts the moment they happen rather than page-load counts, or the printed run is large enough that a dead URL would cost real money. Two dynamic codes are free to try, which covers most small deployments outright.

Quick answers

Can I add tracking to a QR code I already printed?

Only if it was dynamic, or if its destination is a page where you can install analytics. A printed static code's URL is fixed, so you cannot insert UTM tags or a redirect after the fact.

Does Google Analytics count every scan?

No. It counts sessions where your page loaded and the script ran. Ad blockers, abandoned loads, and dead spots are missed. Dynamic codes count at the redirect, so they catch every scan.

Can I see who scanned my QR code?

No tool shows identities. Scan analytics are aggregate: how many scans, on which days, from which countries, on which device types. Nothing personally identifying is available to you or to us.

Is QR code scan tracking free on Qranite?

Two dynamic codes are free with an account: unlimited scans, no ads shown to scanners, and a 7-day analytics window. Pro extends that to 50 codes and 365 days for $9 a month.

Do my tracked codes stop working if I cancel?

Not on Qranite. If you stop paying, your dynamic codes keep redirecting forever. You lose editing and extended analytics, never the redirect. Several competitors disable lapsed codes; check any provider's policy before printing.

Make a QR code that never expires — free, no signup.

Open the generator