How to track QR code scans
A QR code cannot report anything on its own. It is ink. When a phone reads it, no message goes back to whoever printed it, which is also why static codes are so private. To know how many people scanned, something on the way from the code to the destination has to count them, and that something is a redirect.
How tracking actually works
A tracked code does not contain your destination. It contains a short address on the tracking service, for example qrcodeforge.com/r/menu7k. When a phone scans it:
- The phone opens the short address.
- The service records that a visit happened, and forwards the phone to your real destination.
- The phone lands where you wanted, a fraction of a second later.
This is what a dynamic code is. The counting and the ability to change the destination later are the same mechanism seen from two sides: because the code points at the service rather than at you, the service can both count and redirect.
The consequence is that tracking is impossible to add to a code that is already printed as a static code. If the poster is up and the code holds your web address directly, nothing can count it except analytics on the destination page itself. Decide before printing.
What you can learn
A redirect sees an ordinary web request, so it can record what any website sees:
- When the scan happened, which tells you hours of the day, days of the week, and whether a campaign is alive or dead.
- Roughly where, at country or city level, from the network address. Not the exact spot; a phone does not send its location to a website it is merely redirected through.
- How many scans in total and, roughly, how many distinct visitors.
- Which code, if you made a separate code for each poster, table, or packaging line.
That last point is the useful one. Make one code per placement, not one code for the campaign, and the redirect tells you which placement earns its space. A café with a code on each table learns which tables order from the menu online. A brand with a code on each of three product sizes learns which size gets scanned. The data is only as interesting as the way you split the codes.
What you cannot learn
Honest limits, because tracking is often oversold:
- Who scanned. A redirect sees a network address and a browser, not a name, phone number or email. Nobody gets identified by scanning your code.
- Whether they bought. The redirect knows they arrived at the destination, not what they did there. Connect that with the destination’s own analytics if you need it, by adding a campaign tag to the destination URL.
- Precise location. Country is reliable, city is approximate, anything finer is a guess.
- Scans that never reached the redirect. A phone with no signal, or a person who read the code preview and decided not to tap, leaves no trace.
Setting it up on QRCodeForge
- Make the code as usual and switch it to dynamic before downloading. You get the short address and a management link. Keep the management link; it is your key to the code.
- Print the code. Its content never changes again, whatever you do to the destination.
- Open the management page to see scans as they arrive, change where the code points, pause it, or schedule a switch, for example sending scans to a different page after a date or to a different language version by the visitor’s country.
Each code is free, and the count is kept as long as the code exists. For a campaign with many placements, bulk generation from a spreadsheet makes a distinct code per row, each tracked separately.
Reading the numbers
Some patterns that come up repeatedly:
- A burst on day one, then nothing. The people who saw the code first were staff, friends or the people who put it up. Judge the campaign from week two.
- Scans at strange hours from far away. Usually a bot, a link preview, or a security scanner that follows every address it sees. A small steady background of these is normal. Look at the trend, not single visits.
- A placement with zero. Before concluding nobody cares, check that it scans. Bad lighting, glass glare and a code printed too small are common, and our guide to why a code isn’t scanning lists the rest.
- Scans that stop suddenly. Someone took the poster down, or the destination broke and people stopped telling their friends. Scan the code yourself.
Privacy, briefly
Tracking a code means running a redirect that logs visits. That is a modest amount of data, and it is the same data the destination website was going to receive anyway. Do not add more than you need, say plainly on the destination that the visit came through a tracked code if your audience would care, and do not use tracking for anything you would be uncomfortable printing beside the code. Counting how many people scanned a poster is fine. Working out which individual did is neither possible from a redirect nor a good idea to attempt.
Make a free QR code with QRCodeForge — every format free, no signup, and every code checked before you download it.