How to Track QR Code Conversions From Scan to Real Revenue
Key Takeaways
- •Camera scans send no referrer, so untagged QR codes land as anonymous Direct traffic and lose credit for the sale.
- •Encoding UTM parameters into the QR link is what turns a blank Direct hit into a labeled, attributable source.
- •Give every flyer, product, booth, and campaign its own QR code so you can compare surfaces by revenue, not guesswork.
- •Cookie-based tracking usually dies in the days between the scan and the payment because of cookie loss, ad blockers, and iOS privacy.
- •Stamping the QR source onto the settled Stripe or RevenueCat charge ties each scan to revenue you actually kept, regardless of device or cookie.
Scan a QR code on a flyer, a product box, or a booth banner, and something quietly breaks. The scan works. The person lands on your site. But by the time they sign up or pay, that scan has vanished from your reports and shown up as anonymous Direct traffic. If you want to track QR code conversions all the way from the physical scan to real revenue you kept, you have to fight the way browsers, cookies, and analytics tools throw away the very context you printed on the page. This post walks through why the offline-to-online handoff leaks, and how to close the gap so every scan ties back to a settled Stripe or RevenueCat charge.
Why QR scans show up as anonymous Direct traffic
A QR code is just a URL wrapped in a square of pixels. When someone scans it, their phone camera opens that URL in a browser. The problem is what does not come along for the ride.
On the web, most attribution leans on the HTTP referrer header, which tells a site where a visitor came from. When you click a link on Twitter or Google, the browser usually sends along that source. But a camera scan is not a click on a web page. There is no referring page, so there is no referrer to send. The visitor arrives cold, and analytics tools file that arrival under Direct or Unknown, the same bucket as someone who typed your URL by hand.
This is why so much offline marketing attribution silently fails. A SaaS founder prints 5,000 conference flyers with a plain link. Two hundred people scan it, forty sign up, six upgrade to paid. In the dashboard, all of that looks like Direct traffic that appeared out of nowhere. The flyer worked, but the founder can never prove it, so next year the flyer budget gets cut in favor of channels that happen to report cleanly. The scan-to-sale connection was there in reality and absent in the data.
The fix starts with a simple idea: if the browser will not tell you where the visitor came from, you have to encode the source yourself, inside the link.
Encoding a source behind every QR code
The most durable way to attribute QR scans to revenue is to put the source directly into the destination URL using UTM parameters. UTM tags are query-string values appended to a link that survive the scan because they are part of the URL the camera opens.
A raw QR link might point to your homepage. A tracked one carries its origin with it:
yoursite.com/pricing?utm_source=flyer&utm_medium=print&utm_campaign=devconf-2026
Now the scan is no longer anonymous. The moment the page loads, your analytics can read utm_source=flyer and utm_campaign=devconf-2026 and know exactly which piece of print marketing sent this person. A UTM QR code turns a blank Direct hit into a labeled, countable event. If you are new to structuring these tags cleanly, the UTM tracking guide covers naming conventions that keep dozens of codes from turning into a mess.
Two practical notes matter here. First, keep your parameter values short and consistent, because you will be typing or generating a lot of them. Second, favor dynamic QR codes over static ones. A static QR encodes the final URL permanently in the pixels, so if you need to change the destination you have to reprint everything. A dynamic QR points at a short redirect link you control, so you can repoint it, add or fix UTM values, and read scan counts without touching the printed artifact. Dynamic QR attribution is what lets you run the same flyer for six months and still adjust the tracking behind it.
One code per flyer, product, booth, or campaign
The single biggest lever in print marketing attribution is granularity. One QR code for everything tells you almost nothing. A distinct code per surface tells you where your money actually works.
Give each physical placement its own source and campaign combination:
- A flyer at a specific conference gets utm_source=flyer and utm_campaign=devconf-2026
- A sticker on product packaging gets utm_source=packaging and utm_campaign=unboxing
- A booth banner gets utm_source=booth and utm_campaign=summit-hall-b
- A magazine ad gets utm_source=print-ad and utm_campaign=trade-mag-q3
An indie hacker selling a physical planner can put one code on the back cover and another on the insert card. When packaging QR revenue starts flowing, they can see that the insert card converts at triple the rate of the back cover, and design the next print run around that. That decision is only possible because each code was its own labeled channel from the start.
Here is how the same booth scan looks depending on how much source you carried into the link.
| What you encode | Report shows | Can you tie it to revenue |
|---|---|---|
| Plain URL, no tags | Direct / Unknown | No |
| UTM on a static QR | Named source, fixed forever | Partially, cannot repoint |
| UTM on a dynamic QR | Named source, editable | Yes, with the right backend |
| Encoded source stamped at sale | Source on the actual charge | Yes, survives cookie loss |
The last row is where most tools fall short, and it is the part worth understanding in detail.
Why the scan-to-sale gap breaks cookie tracking
Encoding UTMs into the QR link solves the arrival. It does not solve the sale. Between the scan and the payment, a gap opens that quietly destroys most QR code ROI reporting.
Here is the sequence. Someone scans your booth banner and lands with utm_source=booth. Standard analytics fires a pageview and records the source. Good so far. But that person rarely buys in the same breath. They browse, close the tab, and come back three days later on their laptop to actually pay. By then, several things have gone wrong:
- The UTM parameters only existed on that first landing URL. The return visit has no tags at all.
- The attribution cookie set on the first visit may be gone, wiped by Safari's short cookie lifetime, an ad blocker, or simply a different device.
- iOS privacy features and browser tracking prevention shorten or strip the identifiers that were supposed to carry the source forward.
So the sale, the thing you actually care about, arrives with no memory of the scan that started it. Pageview-based analytics tools stop at that first pageview. They can tell you a booth scan happened. They structurally cannot tell you that the booth scan became a 290 dollar annual subscription, because they never see the charge and the charge never sees the scan. The mechanics of why identifiers evaporate are worth reading in full in cookieless tracking explained.
This is the real reason offline marketing attribution has a bad reputation. It is not that QR codes are untrackable. It is that the tracking usually dies in the days between the scan and the settled payment.
Stamping the QR source onto the settled charge
The way to close the gap is to stop treating attribution as a pageview event and start treating it as something that gets welded onto the money itself.
When a visitor arrives with a QR source, Affiliateo captures that source as first-party data on your own domain, not through a third-party cookie that browsers are racing to kill. It ties the visitor to a durable first-party identity. Then, and this is the important part, when that visitor eventually converts, the platform stamps the original source onto the actual charge object at sale time.
Concretely, when the Stripe charge or the RevenueCat transaction settles, Affiliateo writes the ad_source and the campaign onto that specific payment record. The 290 dollar subscription now carries utm_source=booth on the charge itself. It does not matter that three days passed, that the cookie expired, that the person switched from phone to laptop, or that an ad blocker was running. The source is attached to the revenue, in your own data, at the moment the money is real.
That is the structural difference. GA4, Plausible, and privacy analytics tools are built to count pageviews. They stop at the visit and never reach the charge, so they can approximate that a channel drove traffic but can never confirm it drove dollars. Affiliateo joins the visitor to the exact Stripe or RevenueCat charge, which is what makes attribute QR scans to revenue an actual claim you can stand behind rather than a hopeful guess. If you want the deeper mechanics of connecting payments back to channels, attribute Stripe revenue to marketing channels and first-party ad attribution go under the hood.
Scans, conversions, and revenue per code
Once the source rides all the way to the charge, your QR reporting stops being a vanity scan counter and becomes a revenue ledger. For each code you can finally see the full funnel, not just the top of it.
- Scans, the raw count of people who opened the link
- Conversions, how many of those scans became signups or paid customers
- Revenue per code, the dollars actually collected and kept from each printed surface
That last metric changes how you spend. A code with 4,000 scans and 40 dollars of revenue is a poster that looks busy and earns nothing. A code with 300 scans and 2,100 dollars of revenue is a quiet insert card carrying your whole print program. Scan counts alone would rank those backwards. Revenue per code ranks them correctly, and the concept generalizes well beyond QR, which is why revenue per visitor explained is worth a read.
Because Affiliateo unifies web and mobile, this works whether the QR sends someone to a checkout page or into an app install that monetizes through RevenueCat. A creator putting a QR sticker on merch can watch a scan turn into an app subscriber weeks later and still see it credited to that sticker. Layer in conversion funnel tracking and you can see exactly where scanners drop off, whether it is the landing page, the signup, or the payment step, and fix the leak instead of guessing at it.
Attributing offline spend to online revenue
The whole point of tracking QR code conversions is to make print marketing accountable to the same standard as your paid ads. When a QR code carries an encoded source, and that source lands on the settled charge, offline spend finally sits in the same revenue-attributed view as your digital channels.
That means a flyer, a booth, and a Meta campaign can be compared on identical terms: dollars spent versus dollars earned. The same attribution spine that powers QR tracking also drives ad ROAS reporting across Meta ads, TikTok ads, and Apple Search Ads, so your printed square of pixels is not a second-class citizen in your dashboard. It is one more source that ties to real money, sitting next to every other source that ties to real money.
For a business running conferences, packaging, and paid acquisition at once, this is the difference between a defensible budget and a set of hunches. You stop arguing about whether the flyer worked and start reading exactly how much it earned.
Common QR tracking mistakes
A few avoidable errors quietly wreck QR attribution, and they are easy to fix once you know them.
- Using one QR code for every placement. You lose the ability to compare surfaces. Give each flyer, box, and booth its own campaign value.
- Shipping static QR codes when you might change anything. Once printed, a static code is frozen. Use dynamic QR codes pointing at a redirect you control so you can repoint and adjust tracking later.
- Stopping at scan counts. Scans feel like progress and prove nothing. Insist on conversions and revenue per code.
- Trusting cookie-based tracking to survive the scan-to-sale gap. It usually will not. Attribution has to attach to the charge, not to a cookie that Safari or an ad blocker can erase.
- Sending scanners to a slow or bloated landing page. Camera scans happen on mobile, often on conference or venue wifi. A heavy page bleeds conversions before your tracking ever matters.
- Forgetting the URL length tradeoff. Long UTM strings make denser, harder-to-scan codes. A short dynamic redirect keeps the printed code clean while still carrying full source data behind it.
Get these right and QR stops being a hopeful gimmick. It becomes one of the cleanest bridges you have from the physical world to revenue you can actually measure.
If you are ready to see every scan land on the real charge it produced, Affiliateo gives you first-party QR attribution that survives cookie loss, ad blockers, and iOS privacy, across both web and mobile. Encode a source behind your codes, let the platform stamp it onto the settled Stripe or RevenueCat payment, and watch your flyers, packaging, and booths finally report in dollars. Try Affiliateo and turn your next print run into revenue you can prove.
Written by Lena Whitfield
Lena is a growth strategist at Affiliateo. She specializes in community building and digital product launches.