QR codes had their awkward phase. Remember 2012, when brands stuck them on billboards next to motorways and expected people to scan them at 70mph? That era deserved to die.
But QR codes are back, and this time they actually work. People scan them without thinking. Covid normalised pointing your phone camera at a square and trusting whatever pops up. So now every coffee shop loyalty card, product box, event flyer, and podcast merch table has a QR code on it.
The problem? Most of those codes point to a naked App Store link. Someone scans, downloads your app, maybe even buys something โ and you have no idea which QR code sent them. The flyer at the trade show? The insert in your packaging? The sticker on the till? Could be any of them. You're spending money printing these things and you're flying blind.
Why QR codes are a tracking blind spot
Web marketers solved this years ago with UTM parameters. Stick ?utm_source=flyer&utm_campaign=march on a URL and Google Analytics picks it up. Simple.
Apps don't work like that. When someone scans a QR code and lands on the App Store, Apple doesn't pass UTM parameters through to your app. The install happens in Apple's ecosystem, not yours. By the time the user opens your app, any context about where they came from is gone.
This is the same problem that plagues all mobile attribution, but QR codes make it worse because the whole point is offline-to-online tracking. You're trying to connect a physical thing (a flyer, a box, a poster) to a digital action (an in-app purchase). If you can't close that loop, QR codes are just fancy links with extra steps.
The redirect approach that actually works
The fix is simple: don't point your QR code at the App Store. Point it at a URL you control.
Here's the flow:
- You create a tracked link โ something like
linkowl.app/go/tradeshow-march - You generate a QR code from that link
- Someone scans it, hits your tracked URL
- Your server logs the click with all the context (which link, when, where, device type)
- The server redirects them to the App Store
- They install and open the app
- When they make a purchase, the attribution system matches it back to that click
The redirect happens in milliseconds. The user never notices. But now you have data connecting a physical QR code to an actual purchase.
One QR code per placement
This is where most people go wrong. They generate one QR code for "offline marketing" and slap it on everything. That's barely better than no tracking at all.
You want a separate tracked link โ and therefore a separate QR code โ for each placement:
- One for the flyer at the coffee shop
- One for the insert in your product packaging
- One for the banner at the trade show
- One for the poster in the co-working space
Yes, it means generating more QR codes. It takes about thirty seconds each. The payoff is knowing that your packaging insert drove twelve purchases last month and the coffee shop flyer drove zero. That's the difference between informed decisions and hope.
What to track beyond the scan
A scan count is nice but not enough. What you actually want to know:
Scans to installs. How many people who scanned the code actually downloaded the app? If you're getting 200 scans and 15 installs, your App Store listing might need work โ or the QR code is attracting the wrong audience.
Installs to purchases. This is the number that matters. Ten installs from a conference booth QR code that convert to three paying users is far more valuable than 100 installs from a generic flyer that convert to one.
Revenue per placement. When you can tie purchases back to specific QR codes, you can calculate the actual return on each physical placement. That conference booth cost ยฃ400 and the QR code there drove ยฃ180 in revenue? Now you know the real numbers for next time.
Printing considerations people forget
A few practical things that trip people up:
Test before you print. Generate the QR code, print a test copy, scan it with three different phones. I've seen QR codes that work perfectly on screen but fail when printed at certain sizes or on certain paper stocks. Test on the actual material you're using.
Size matters. A QR code needs to be at least 2cm ร 2cm to scan reliably. If it's going on a business card, that's fine. If it's going on a billboard people will scan from five metres away, make it bigger.
Don't use URL shorteners that might die. If you print 5,000 flyers with a bit.ly link and bit.ly goes down or rate-limits your link, those flyers are expensive recycling. Use a redirect URL on a domain you control.
Add a call to action. A QR code by itself converts terribly. "Scan to download" is better. "Scan for a free trial" or "Scan to get 20% off your first month" is better still. Tell people what they get.
Setting this up with LinkOwl
LinkOwl handles this flow out of the box. Create a tracked link for each placement, generate QR codes from those links, and LinkOwl tracks the full chain from scan through to purchase.
The setup:
- Sign up and register your app on LinkOwl
- Create a link for each QR code placement โ name them clearly (e.g., "March conference booth", "Product box insert v2")
- Generate QR codes from those links using any QR generator
- Print and place them
- LinkOwl tracks clicks, attributes installs, and when a purchase comes through via your RevenueCat or Superwall webhook, matches it back to the right link
You pay 5p per attributed purchase. No monthly fee, no minimum spend. If nobody buys, you pay nothing โ which is exactly how it should work for a channel you're still testing.
When QR codes make sense (and when they don't)
QR codes work well for:
- Product packaging. Your existing customers are holding your product. A QR code that leads to a companion app or premium upgrade is high-intent traffic.
- Events and conferences. People are already in discovery mode. A QR code on your booth or talk slides catches them while they're engaged.
- Retail partnerships. If your app complements a physical product sold in shops, a QR code on the shelf or packaging is a clean acquisition channel.
- Print media. Magazine ads, flyers, postcards โ anywhere you'd normally put a URL, a QR code is easier to act on.
QR codes work poorly for:
- Digital contexts. If someone's already on their phone, just give them a tappable link. A QR code in an email or on a website is pointless friction.
- Moving contexts. Billboards on motorways (we learned nothing from 2012), the sides of buses, anything people see for two seconds while moving.
- Uncontrolled environments. A QR code on a public poster that anyone could stick their own code over is a phishing risk, not a marketing channel.
The offline gap is a real gap
Most indie developers focus entirely on digital attribution โ which ad, which social post, which search keyword. That makes sense because digital channels are where most of the spend goes.
But if you're doing any offline marketing at all โ and more app developers are, whether it's events, partnerships, or physical products โ you're probably not tracking it properly. A QR code with a tracked link behind it takes five minutes to set up and closes a gap that would otherwise be completely invisible in your data.
You don't need to overcomplicate it. One tracked link per placement, a QR code generated from that link, and an attribution system that connects the dots to purchases. That's it. The rest is just printing.