SmartQRCode
Pricing
  1. Home
  2. /Blog
  3. /QR campaign tracking by code, not people
business enterprise

QR campaign tracking by code, not people

SmartQRCode editorial · Updated October 2026

QR campaign tracking by code means each printed object gets its own hosted short code. Totals count scans, not people. Country and device come from headers. A Canva static file cannot answer how the flyer did, and it is still the right file when you will never edit or count.

How qr campaign tracking by code is counted

Keep one short code per object. Remember scans are not people. Read country from request headers. Classify device type from user agent.

The hop has to hit a server. Redirect and landing-page types do. Wi-Fi does not: it is not trackable and not editable after printing. If the campaign is a guest network card, you will not get a series.

Each scan is a row. The same thumb twice is two scans. That is D120 and it is the number merchandising usually wants, even when they say "people." Unique figures, where they exist, hash owner, IP, and user agent. They are not a CRM match. Privacy detail is QR analytics privacy scope.

UTMs belong on the hosted destination. They ride along after the 302. They do not densify the printed pattern. They also do not split this product's scan total by physical object. If the question is "which endcap," mint two codes. If the question is "which ad set in GA4," use a UTM QR code parameter plan. Smart routing can split one printed code by rule; that is a different lever, covered in enterprise QR smart routing.

Paid options are $1.99, $29, $97, and $197. We do not sell an unpaid tier. The generator faces are tracked QR codes, the website URL generator, and dynamic QR codes. Channel splits at launch sit under product launch placements.

How to give each placement its own short code

Name the physical object first. The code is a label for that object.

  1. List every distinct printed thing you need a number for: SKU, endcap, insert, vehicle, language.
  2. Create one hosted URL type per line. Do not reuse a short code across two objects you hope to compare.
  3. Put campaign parameters on the destination, not in a static payload, so the pattern stays short.
  4. Export SVG or 300 dpi PNG or PDF at the size it will appear. Do not screenshot /qr-preview.
  5. Print at least 2 cm across at 30 cm with a four-module quiet zone. Larger for aisle or pavement.
  6. Proof-scan each code. Confirm the destination and that a row appears.
  7. Keep a sheet that maps short code to object. Analytics will not infer "left endcap" from a colour.
  8. When the destination changes, edit the hosted URL. Reprint only if the encoded host must change.

one short code per object is the rule that makes the rest of the report intelligible.

What country and device actually mean

Country from request headers is a coarse geography. It is not a store visit and not a GPS trace. A VPN in another country is that other country. Do not brief a board with "shoppers in France" if you mean "requests whose edge header said FR."

Device type from user agent is mobile, tablet, or desktop as classified on the scan path. Tablets are not phones. A report that once called iPads mobile will not match a routing rule that says tablet. Trust one classifier.

Analytics cannot see the scanner's name or email. If a stakeholder asked for that, refuse the brief rather than stretching F63.

Unique scanners versus raw scans

Raw scans are the operational number: how often the hop ran. Unique scanners versus raw scans is a second number with a caveat. One office network can look like one visitor. One phone that changes network can look like two. Hashes are per owner, so the same phone on two tenants is two unrelated values.

Older rows without a hash cannot be backfilled into unique. A panel that says zero identified scans may mean the hash was not recorded yet, not that the campaign had no people.

Do not divide unique by raw and call it a "quality score." It is an approximation with those failure modes.

Tracking failures that mix two posters

Two codes in one camera frame: the reader typically returns one. Adjacent tent cards produce "it scanned the wrong campaign." Separate them.

Two designs of the same static URL: you cannot tell which design was scanned. D123 wants different hosted destinations or different codes.

Wi-Fi on the same job as a tracked URL: one is silent. The other is not. Do not average them.

A provider pause zeros new scans while the art still looks live. F91 is the outage mode for every hosted counter.

How to brief finance without promising people

Put two columns on the weekly sheet: scans, and a footnote that scans are hops. If someone wants unique, add a third column with the caveat about office NAT and missing hashes. Do not present unique divided by scans as engagement.

Name the object in the same sheet: short code, SKU, location, language. QR campaign tracking by code dies in meetings when the series is called "the QR" as if there were one.

If two agencies ran inserts in the same week, they need two codes. Sharing one "to keep the dashboard clean" mixes their invoices. Clean dashboards that lie are more expensive than extra rows.

UTMs on the destination answer a web-property question. They do not replace the short-code column. If finance lives in GA4, still keep the scan series. The 302 can fail while GA4 still receives other traffic from the same campaign name used on ads.

Wi-Fi cards in the same pack are a separate, silent channel. Label them so nobody asks why the network table tents have no chart.

Seasonal reprints should keep the same short code when the object is the same endcap with a new skin, if you want a continuous series. A new code for a new skin is correct when the question is which skin won. Write the choice. Defaulting to a new code every time fragments the chart until nobody trusts it.

If a third party hosts a microsite that 301s, your 302 still lands, then their 301 freezes. The scan row exists. The shopper may not. Debug destination cache before you blame the short code. QR campaign tracking by code measures hops you control, not every hop after you.

Keep a voided code in the lab that is never printed. Use it to train new staff on analytics without polluting a live SKU. Country from request headers on a lab scan from the office will look like the office country. Say that in the training so nobody thinks the campaign is only local.

A poster that sits next to a paid search ad with the same campaign name will mix in GA4 if UTMs collide. Give the printed object its own utm_content even when the short code already isolates the scan series. Two systems, two labels, one SKU map.

When an uncounted poster is honest

A one-night event, a personal project, a URL that will never move: Canva or another free static generator. QR campaign tracking by code would be a server you do not need.

A national insert with a finance meeting on Friday: mint one hosted code per object, size it, and keep the resolver up. Counts will be scans. They will not be names.

Questions this raises

Country is inferred from request headers, not from a GPS chip in the ink. Device type comes from the user agent. Neither is a name, email, or precise location.

Raw scans count every successful hop. The same person scanning twice is two scans. Unique figures, where they exist, are a keyed hash per owner, not a login.

When you will never change the URL and do not need a count. A Canva one-off is the right file. QR campaign tracking by code requires a hosted type.

No if you want to know which design was scanned. Print-run tests need different hosted codes, not two stylings of the same static URL.

UTMs on a hosted destination feed the same web property. They do not split scan totals by physical object. Use a second code when the question is which carton was scanned.

Keep going

The tools and playbooks this post refers to, one click away.

Generator

tracking generator

Open it
Generator

website generator

Open it
Generator

dynamic generator

Open it
Use case

product launches

Read the playbook
Guide

qr analytics privacy scope

Read it
Guide

utm qr code parameter plan

Read it

Make the code this post is about

$1.99 for 7 days, then a paid plan. Pick a type, brand it, and edit the destination whenever you like, even after it is printed.

Create a QR codeSee pricing
SmartQRCode

Dynamic QR codes you can edit after printing, with scan analytics on every one. From a single table tent to a warehouse of asset tags. Pay once or subscribe.

Create a QR codeTalk about Business

QR code types

  • Website QR code
  • Menu QR code
  • WiFi QR code
  • PDF QR code
  • Business card QR code
  • WhatsApp QR code
  • Google review QR code
  • Event QR code
  • Location QR code

More QR codes

  • Text QR code
  • Image QR code
  • Video QR code
  • Social media QR code
  • App download QR code
  • Google Form QR code
  • Business profile QR code
  • All QR code types

Features

  • Dynamic QR codes
  • QR codes with tracking
  • QR code with logo
  • Custom QR code design
  • QR codes that never expire
  • One-time payment QR code
  • No-subscription QR codes
  • Unlimited-scan QR codes

Business

  • QR codes for business
  • Bulk QR code generator
  • QR code API
  • QR code webhooks
  • Custom scan domains
  • White label QR codes
  • Team accounts and roles
  • QR code management platform

Solutions

  • Restaurants
  • Retail
  • Events
  • Healthcare
  • Real estate
  • Hotels
  • All use cases

Resources

  • Guides
  • Compare QR generators
  • Static vs dynamic
  • QR code cost
  • Buy a QR code
  • Cheap QR codes
  • Pricing
  • Help centre
  • About us
  • Contact us
GDPR compliantSSL securedPrivacy first
Terms of servicePrivacy policySecurity·© 2026 SmartQRCode

QR Code is a registered trademark of DENSO WAVE INCORPORATED.