How to track QR code scans: count them, and see which poster worked
You printed a QR code on a flyer, a menu or a conference badge, and now you'd like to know whether anyone scanned it. A plain QR code can't tell you: the link is stored in the black and white squares themselves, and a phone opens it without asking anyone. To count scans, something has to sit between the code and the page, or the page has to recognise the visit when it arrives.
Two ways to count scans
- Point the code at a short link that counts. The code opens a short link, the short link records the scan and sends the visitor on in a fraction of a second. You get a number per day and per country without touching your website.
- Tag the link so your analytics recognises it. Add UTM tags such as
utm_source=qrandutm_medium=offlineto the link inside the code. Every scan then shows up in your analytics as its own source instead of "direct", and you can follow what those visitors did next.
They answer different questions. The short link counts scans even if the page is slow or the visitor leaves at once. The UTM tags tell you whether scanners went on to sign up or buy. Using both is the most complete picture.
Doing it with the free generator
The QR code generator has both options as checkboxes. Tick Count scans and the code points to a short link with a free stats page of scans per day and country. Tick Tag the link and it adds utm_source=qr, utm_medium=offline and your campaign name. It also takes your logo and colours and downloads PNG or SVG.
One trade-off to know before printing: a code made with Count scans without an account relies on a short link that lasts 30 days. Signed in, the short link doesn't expire. A plain code with only UTM tags works forever, because nothing sits in between.
Compare flyers, not just totals
The number that changes decisions is the comparison. Give each placement its own campaign name (flyer-library, table-card, poster-station) and its own code. A week later you'll know which spot earned its print run, instead of a single total that mixes them all.
Tips that save a reprint
- Scan the printed proof with two different phones before the full print run.
- Link to the final address. If your page redirects, check that the tags survive it: a redirect that drops the query string makes every scan look like direct traffic. The UTM link checker opens the link and tells you.
- Keep it dark on light and at least 2 cm (about 0.8 in) wide; bigger if people scan from across a room.
- Use a short link inside the code when you can. Shorter links make simpler codes that scan faster.
Reading the results
A scan count tells you reach; what matters is what came next. In measuremy.site, scans tagged with a campaign show up as their own source, so you can open it and see pages viewed and signups from that flyer, or ask your coding agent "how did the October flyers do?". Whatever tool you use, the habit is the same: one code per placement, tags on every code, and a check before it goes to print.
See it on your own site
measuremy.site is cookieless analytics your coding agent can read. 30-day free trial, no card. Plans from $9/month.
Start free trial See the live demoAdd measuremy.site analytics to this project: connect the measuremy.site MCP server at https://a.measuremy.site/mcp (it signs in with OAuth, no key), then tell me how to sign in. Details: measuremy.site/llms.txt
Free tools
- QR code generator: QR codes with your logo, colours and scan counts.
- Link shortener with click tracking: Short links with a click count by day and country.
- Free UTM link builder: Add utm_source, medium and campaign to any link.
More from the blog
- How to calculate your website conversion rate, and what to compare it to
- Is my A/B test result significant? A plain-English guide with a worked example
- What is bounce rate, how is it calculated, and is yours a problem?
- How to add a visitor counter to your website or GitHub README
- How much traffic does a website get? How to estimate any site's visits
- How to see how many people clicked your link (without a paid shortener)
- How to check if your Google Analytics 4 tag is installed (and only counting once)
- Why GA4 shows your campaign traffic as Unassigned (and how to fix the links)
- Does your redirect keep your UTM tags? How to check before a campaign goes out
- How I built a self-hosted analytics MCP server on Cloudflare Workers and D1
- UTM tracking explained: what the parameters mean and how to use them
- Conversion funnel analysis for small sites: a practical guide
- Sudden drop in website traffic? A checklist for finding the cause
- What is an MCP server? A plain-English guide for people who run websites
- What Is the Urchin Tracking Module?
- What Microsoft MCP servers actually do
- UTM parameters for email newsletters
- Track Button Clicks Without Google Tag Manager
- How to track the results of a social media post without cookies
- How to track traffic from a GitHub README
- How to measure a product launch without guessing