Learn · QR codes · Updated 2026-08-14

How to make a QR code that tracks scans

A QR code only tracks scans if it points to a link with analytics behind it, such as a link-in-bio page or a dynamic redirect. Generate the code from that trackable link, tag it with UTM parameters, and scans show up as clicks with device, timing, and location data.

  1. Choose a destination that already has analytics
    Decide the code will send people to a URL that logs hits, such as a link-in-bio page or a dynamic redirect, before you generate anything.
  2. Tag the destination with a UTM parameter
    Add a distinct utm_source and utm_medium to the URL before generating the code, so this placement's scans report separately from every other one.
  3. Generate the QR code from the tagged link, not the bare one
    Create the QR image from the full tagged URL, not the untagged version, so the tracking is baked in from the first scan.
  4. Pick a format built for how you will use it
    Download a vector file for anything printed larger than a business card, and a high-resolution PNG for screens or small print.
  5. Test the code yourself before it goes live
    Scan it with your own phone camera to confirm it opens the tagged link correctly and the tag shows up in analytics.
  6. Watch scans in your click analytics, not a separate QR dashboard
    Check the destination link's own analytics for scan data, since there is usually no independent QR-only dashboard.
  7. Check performance by source, not just by total
    Compare scans by the UTM tag you set, not the overall count, to see which placement is actually working.

Most QR generators hand you an image and call it done. That image will scan fine, but unless the link behind it was built for tracking before you generated the code, nothing will ever tell you how many people tapped it, when, or from where. The tracking has to be designed in at the source, not added after the fact.

Why a lot of "free QR code generators" do not actually track anything

Type "free QR code generator" into a search bar and you will find dozens of tools that convert any text into a scannable pattern in one click. Most of them do exactly that and nothing more. You paste a URL, they hand you a PNG, and the moment someone scans it, the pattern decodes to that URL locally on the phone. No server sees the scan happen. No count increments anywhere. The tool did its job, it just was never built to log anything.

A QR code with analytics behind it works differently. It encodes a link that passes through a server first, either a redirect service or a page you host, and that server records the hit before sending the visitor onward. That one choice, redirect versus direct encode, decides whether the code can be measured at all.

What you need before you generate anything

Two things have to exist before the code itself matters: a destination with analytics wired up, and a plan for telling one placement's scans apart from another's. Skip either one and you will get a scan count with no way to act on it.

A trackable destination is either a dynamic QR redirect service, or a page you already control that logs visits, such as a link-in-bio profile. If you have not decided between those two approaches yet, the difference between dynamic and static QR codes is worth five minutes before you commit to one.

ApproachTracks scansCampaign-level breakdownEdit destination after printingCost to start
Bare URL pasted into a generic QR generatorNoNoNo, must reprintFree
Dedicated dynamic QR platformYesOnly if you tag the URL yourselfYesFree to paid, scan limits vary
Link-in-bio page with a built-in QR codeYes, as a page visitYes, per UTM-tagged linkYes, edit the pageFree tier available
QR tool bundled into a POS or card-printing appSometimesRarelyDepends on the vendorUsually bundled into a paid plan

How to make a QR code that tracks scans, step by step

Choose a destination that already has analytics

Decide where the code will send people before you touch a generator. It needs to be a URL sitting behind something that logs hits, a link-in-bio page, a dynamic QR redirect, or a tracked short link. A plain website homepage with no tracking layer will not tell you anything about the scan itself, only whatever your general site analytics happen to catch.

Tag the destination with a UTM parameter

This is the step almost everyone skips, and it is the one that turns a scan count into something you can actually use. Before generating the code, add a distinct utm_source and utm_medium to the destination URL using the UTM builder, so a scan from the storefront window reports separately from a scan on a flyer or a business card. See what UTM parameters are if you have not tagged a link before. Without this, every version of the code you print funnels into one undifferentiated total, and you lose the ability to say which placement earned its spot.

Generate the QR code from the tagged link, not the bare one

Once the link is tagged, generate the QR image from that full tagged URL. If you generate the code first and add tags afterward, you have to regenerate and reprint, so do this step last in the setup, first in the actual creation. A link-in-bio tool that produces the QR code straight from the profile's own URL saves a step here, since the tracking is already attached to the page rather than bolted on through a separate redirect.

Pick a format built for how you will use it

Download a vector file, SVG or EPS, for anything that will be printed larger than a business card, and a high-resolution PNG for screens or small print. A raster image scaled up from a small export pixelates and can fail to scan at larger sizes. If the code is heading to print, the sizing and resolution rules matter more than most people expect, covered in full in QR code best practices for print.

Test the code yourself before it goes live

Scan it with your own phone camera, not a QR scanning app, since that is what most real visitors will use. Confirm it opens the tagged link and that the tag shows up correctly once it lands. This is also the moment to catch a typo in the UTM string, which is far cheaper to fix now than after a print run.

Watch scans in your click analytics, not a separate QR dashboard

Once the code is live, the data appears wherever the destination's own analytics live. There is no independent "QR analytics" panel to check if the destination is a tracked link or a link-in-bio page, the scan is just a click that happened to arrive via camera instead of a tap.

Check performance by source, not just by total

The number that matters is not the overall scan count, it is the count broken down by the UTM tag you set in step two. That is what tells you the flyer outperformed the poster, or that nobody has scanned the code on the back of the receipt in three weeks. A single lump-sum total cannot answer either question.

The gap between "trackable" and "free" that most guides skip

A lot of tools marketed as a free trackable QR code will show you a scan counter and stop there. That counter tells you a number went up, and not much else. It usually will not tell you which of your five placements produced which scans, because that requires campaign tagging, which most free QR-only tools do not build in. The generator handled the code. It never touched the link's source data.

This is where a link-in-bio page earns its keep over a code-only tool. Raydar generates a QR code straight from a profile's own URL, and because that profile already carries UTM capture, referrer data, and first-touch and last-touch attribution, tagging each printed placement with its own source turns a bare scan count into something you can actually compare across campaigns, at no cost on the free plan.

What scan tracking will not tell you, even set up correctly

Be realistic about the ceiling here. A well-built trackable QR code gives you a timestamp, a device type, a browser, and country and city level location in most cases. It will not give you a name, an email address, or proof of exactly who held the phone, and no vendor claiming otherwise from a scan alone is being straight with you. If you need identity, that has to come from something on the landing page itself, a form or a login, not from the QR layer. And once someone leaves your page for a third-party site, whatever they do there is invisible to your QR or link tracking entirely. That is a different category of tracking than a single tracked link can ever provide.

Common mistakes that quietly break tracking

  • Generating the code before adding UTM tags, then reprinting everything once someone asks which placement is working.
  • Reusing one tagged link across several unrelated placements, which merges scans that should have stayed separate.
  • Assuming a "dynamic" QR code automatically means campaign-level tracking. Dynamic only means the redirect is editable, not that it reports by source unless you tagged the destination yourself.
  • Checking a QR-only dashboard for scan data when the destination is actually a link-in-bio page, and missing where the real numbers live.
  • Downloading a low-resolution export meant for a screen, then printing it three times larger than its native size.

Common questions

Is it possible to get a free trackable QR code?
Yes. A free-tier link-in-bio page or the free tier of a dynamic QR platform will log scans as ordinary link clicks, including device and country, at no cost.

Do I need a dynamic QR code to track scans, or will any QR code do?
You need the destination to be trackable, which usually means dynamic, but a static code pointing at a page you already control and track, like a link-in-bio profile, works the same way without a separate redirect service.

Can I add tracking to a QR code that is already printed?
Only if the printed code encodes a redirect or a page URL you control, since you can update what that link does. A code with the final destination baked directly into the pattern cannot be retrofitted.

Why does my QR code show scans but no useful detail about them?
This usually means the destination logs a raw hit count but was never tagged with UTM parameters, so every placement's scans land in one undifferentiated total instead of being broken out by source.

Related: QR code best practices for print · What is a QR code scan? · How to add UTM parameters to a link · UTM naming conventions that hold up after six months