Track performance across placements using dynamic QR codes — and compare scan activity to see what's actually working.
Posters, packaging, business cards and in-store signage all generate real attention — but if every QR code points to the same untagged URL, you have no idea what worked. Per-placement QR codes turn each physical surface into a measurable channel.
Tracking is not magic. It's a discipline: you generate different QR codes for things you want to compare, route them through QRflows, and read the analytics per code. Then you compare what worked. Three steps — that's it.
Combine these methods depending on the campaign. Most teams start with per-placement QR + UTMs and add the rest as they scale.
One QR = one placement. Print a different code on each poster, store, or city so you know exactly where every scan came from.
Add your own UTM tags to the destination URL. Your web analytics (GA4, Plausible, etc.) will then see scans as a tracked source.
Change the link a printed QR points to without reprinting. Run different campaigns on the same physical asset over time.
Generate batches of unique dynamic QR codes from a CSV. Ideal for retail rollouts, multi-store campaigns, or per-unit tracking.
Split scans between two destinations and compare performance per QR code. Per-QR view only — not aggregated in the global dashboard.
Route the same QR to different destinations by device, time of day, language, or country. Powerful for routing — not for analytics attribution.
QRflows tracks scan events — not people, not purchases. Setting expectations early saves debugging time later.
QRflows tells you how many people scanned. To know how many bought, signed up, or opened your app, pair tracking with your existing web analytics.
QRflows shows scan volume per QR. Your web analytics shows what those visitors did next. The UTMs glue the two views together.
Set up trackable QR codes for every poster, store, and SKU — and let the dashboard tell you the truth.