QR Codes in Your Marketing Strategy: A Playbook
Your latest billboard, packaging insert, or trade-show booth probably had a QR code on it. Did it record a single trackable scan? This is the playbook for making every QR code in your marketing mix a measurable channel.

Why Most QR Codes in 2026 Are Still Wasted
The hardest thing to admit about your last print campaign is that the QR code probably worked, visitors scanned it, hit your site, maybe even converted, and none of that is in your analytics. The campaign report calls it "(direct) traffic" and someone on the team takes credit for the lift without any way to defend the line item next quarter.
This isn't a bot-traffic problem or a tracking-prevention problem. It's a workflow problem. The design agency drops a static QR into the artwork. It encodes https://yoursite.com/spring-promo directly into the dots. The page goes live for six weeks, then quietly redirects somewhere else, then 404s. Every scan after that is a frustrated customer and zero analytics.
The fix is mechanical, not strategic: every QR code you ship to print should resolve to a dynamic short link with a unique slug per placement. That single rule unlocks the rest of this playbook.
The QR scanning behavior has changed, your tracking should too
Since iOS 11 and Android 9, every native camera app scans QR codes by default. There's no "install a QR reader" step anymore. The result: QR scan rates on consumer-facing print rose from roughly 0.6% of impressions in 2019 to 3.5-4% in 2026. TikTok's QR scan rate on creator bios is around 3.2% per impression. Restaurant menu QRs sit closer to 60-80% per cover. The volume is there; what's usually missing is the attribution layer.
Where QR Codes Earn Their Keep
Not every surface deserves a QR code. The good placements share three traits: the audience has a phone out, the context creates a reason to scan, and the destination is genuinely better than typing a URL.
High-intent placements that consistently work
- Product packaging, setup guides, registration, warranty activation, recipe ideas, replacement-cartridge ordering. Scan rate often 15-25% of unboxings when the call-to-action is sharp.
- Event materials and booth signage, schedules, speaker bios, demo signups, free trial activation. Trade-show codes regularly hit 35-50% scan rates during session breaks.
- Direct mail and out-of-home, billboards, transit, postcards. Lower scan rate (1-3%) but a measurable bridge from offline spend to digital sessions.
- Retail shelf-talkers and POS displays, comparison pages, reviews, in-store-only promos.
- Business cards and conference badges, replace static contact details with a dynamic profile page you can update without reprinting cards.
- TV and pre-roll video, connected-TV ads now show QR overlays for 5-8 seconds; effective for app installs and direct-response offers.
Placements where QR codes underperform
QRs on moving objects (delivery trucks at speed, bus exteriors) almost never produce scans. QRs on website pages are pointless, anyone reading the page is already on a device that could click a link. QRs without a call-to-action have scan rates 70% lower than the same code with "Scan to get 15% off" or "Scan for the recipe" underneath.
For any placement going to print, run the destination URL through the QR Destination Audit first. It catches redirect chains, mixed HTTP/HTTPS, mobile-broken pages, and pages that load slower than 3 seconds on 4G, the four things most likely to silently kill your scan-to-conversion rate.
Dynamic vs Static QR Codes: Pick the Right One in 30 Seconds
This is the most consequential decision in any QR project, and it's almost always made by accident. Most "QR code generators" online produce static codes by default because they're free and require no infrastructure. The hidden cost shows up the first time you need to change the destination.
| Property | Static QR Code | Dynamic QR Code |
|---|---|---|
| Destination URL encoded in | The dots themselves (permanent) | A short link that redirects (changeable) |
| Editable after printing? | No, reprint required | Yes, update destination instantly |
| Scan analytics? | None | Full per-scan analytics |
| Pattern density at same data size | Higher (denser dots, smaller modules) | Lower (cleaner, scans from further) |
| Cost on Flyn | N/A | Free with every short link |
| Best used for | One-off, throwaway use, vCards | Anything with a lifespan > 24 hours |
For a deep dive on why dynamic codes solve the reprint problem and how to set them up across formats, see our companion post on dynamic QR codes for print and digital.
The one exception: vCard contact codes
If you're encoding a vCard (contact details) directly into a code on a paper business card and you never expect to change your phone number, a static code is fine. Everything else, every campaign, packaging insert, retail asset, event badge, print ad, should be dynamic.
"Free QR code generator" websites often produce dynamic-looking codes that route through their own redirect domain. Read the terms: many revoke the redirect (or paywall it) after 30-60 days, breaking every code you printed. If the platform's name appears in the short URL of your test scan, you don't own the code. Flyn dynamic QR codes route through your domain or flyn.to, and never expire.
The Tracking Stack: From Scan to Conversion
A trackable QR code involves three layers stitched together. Get all three right and offline spend becomes attributable to the same dashboards as your paid social. Skip one and you're back to "(direct)".
Layer 1, One unique short link per placement
The single biggest mistake teams make is using the same QR code on every surface in a campaign. The shelf-talker, the receipt, the postcard, and the print ad all route to flyn.to/spring-promo. Now you have a single click number with no idea which surface produced it.
Fix it by creating one short link per physical placement: flyn.to/spring-shelf, flyn.to/spring-receipt, flyn.to/spring-postcard, flyn.to/spring-print. Each gets its own QR. Tag them with the placement name in your dashboard so you can filter analytics by physical surface.
Layer 2, UTMs on the destination URL
The short link records the scan. UTMs on the destination URL carry channel information into GA4, Mixpanel, or whatever analytics you use downstream. Build them with the free UTM Builder, it blocks the common typos that fragment your data.
A trackable QR destination looks like:
https://yoursite.com/promo?utm_source=billboard-sf&utm_medium=offline&utm_campaign=spring-2026
The Flyn dashboard appends UTMs automatically when you fill in the campaign fields on link creation, you never type them by hand. Need to validate an existing tagged URL? Run it through the UTM Parser.
Layer 3, Conversion tracking downstream
Scans tell you the QR is working. Conversions tell you the campaign is working. Drop the UTM-tagged destination URL into a landing page with a clear conversion event (form submit, demo booking, purchase). GA4, Mixpanel, or PostHog will attribute the conversion back to the UTM source.
The teams with the cleanest offline attribution don't have better analytics tools, they just have the discipline to give every printed surface its own short link, its own UTMs, and its own conversion event before the artwork goes to the printer.
Design Rules That Get Your Code Scanned
A code that doesn't scan reliably is worse than no code at all, every failed scan is a customer who blames your brand for a broken experience. After watching thousands of codes in market, these are the rules that hold up.
Size, distance, and the 10:1 rule
The minimum scannable QR code size is 2cm × 2cm at arm's length. For any other viewing distance, use the 10:1 rule: the code's width should be at least 1/10 of the expected viewing distance.
- Arm's length (~50cm) → 5cm × 5cm minimum (we recommend 4cm × 4cm in practice on packaging)
- Conference booth signage (~2m viewing) → 20cm × 20cm
- Billboard (~10m viewing) → 1m × 1m minimum
- Trade show backdrop (~5m viewing) → 50cm × 50cm
Quiet zone, contrast, and orientation
Leave a "quiet zone", empty whitespace, around the code equal to at least 4 modules (the small squares making up the code). Crowding the code with text or graphics inside the quiet zone breaks scanning on older phones. When a code refuses to scan, the cause is almost always one of a handful of physical issues, our guide to why QR codes don't scan walks through the fixes in order.
Contrast matters more than aesthetics. Dark code on light background is the safe default. Reversed (light code on dark) works on newer phones but fails on roughly 15% of older Android cameras. Coloured codes (brand-coloured dots on white) are fine if the contrast ratio against the background is at least 4:1.
Call-to-action language that lifts scan rates
"Scan me" is the worst CTA. It tells the user nothing about the payoff. The CTAs that lift scan rates have two parts: the action and the immediate reward.
- Strong: "Scan for 15% off" / "Scan for the recipe" / "Scan to track your order" / "Scan to download the show notes"
- Weak: "Scan to learn more" / "Visit our website" / "Open in browser"
Test a control vs experimental CTA with two short links pointing to the same destination, same QR design, different printed CTAs. The CTA copy alone often shifts scan rates by 40-80%.
Channel-Specific Strategies
Generic QR-code advice gets you a code that scans. Channel-specific advice gets you a campaign that performs. Below are the patterns that consistently outperform on the platforms where QR codes intersect with social, paid, and creator distribution.
Instagram and TikTok bios
Many creators are switching from link-in-bio tools to a single branded short link with a QR code overlay on stories and Reels. Why: viewers can scan from another phone or save the QR code as a screenshot and scan later, neither works with a tap-to-open link-in-bio. Use an Instagram short link with a QR overlay on your bio screenshot, or a TikTok short link with a QR card pinned to your profile.
Pinterest pin overlays
Pinterest's image-first format makes it one of the best QR distribution surfaces on the social web, users save pins to physical mood boards, then scan months later. A Pinterest short link with QR baked into the pin image consistently produces scans for 6-12 months after the original pin date.
Print magazine ads
Magazines have a 2-8 week reader window per issue and a long tail on doctor's office tables. Pair a magazine QR with an offer that includes the issue name in the UTM (utm_source=wired-may-2026), you'll be able to attribute late scans correctly even when the issue has been off newsstands for months.
Out-of-home (OOH) and transit
OOH scan rates run 1-3% of impressions. That sounds low until you realise a single transit panel may get 50,000 impressions per week, so 500-1,500 scans a week from one panel is realistic. Use distinct short links per panel location to compare media vendors.
Direct mail with personalised QR codes
Variable-data printing lets you put a unique QR code on every mailer, different short link per recipient. Tag each link with the recipient ID and you've turned cold direct mail into a fully attributable channel. Combine with SaaS-style link management to keep the data tidy at volume.
If you're producing thousands of variable-data QR codes for a mailer, use Flyn's bulk CSV import to generate the short links and QR images programmatically. Manual creation breaks down past 50-100 codes, and you'll want consistent UTM tagging across the whole run, the API docs have a working example.
Measuring ROI: From Scan Volume to Real Revenue
Scan counts are vanity metrics until you connect them to revenue. The framework below works across packaging, OOH, and event channels, adjust the cost basis and the conversion event to match your business.
The four-line QR ROI formula
- Placement cost, what the surface cost (production + media + design amortisation).
- Scans, from Flyn analytics, filtered to the unique short link for that placement.
- Conversions, from GA4 or your conversion analytics, filtered to the UTM source/campaign for that placement.
- Cost per scan = placement cost ÷ scans. Cost per conversion = placement cost ÷ conversions.
Compare cost-per-conversion across placements as if they were paid-ads channels. A $4,000 billboard producing 600 scans and 12 conversions has a cost-per-conversion of $333, directly comparable to your LinkedIn Ads CAC. Suddenly OOH stops being an unmeasurable awareness play.
Time-of-day and weekday analysis
Pull scan timestamps from the Flyn analytics export and bucket by hour and weekday. A restaurant menu QR with peaks at 12:00 and 19:00 tells you what you already know. The same chart on a transit poster might reveal commute-peak scanning, useful for scheduling matched paid social.
Geographic clustering and unexpected audiences
Even a single physical placement produces a geographic distribution of scans (people scan, move, and Wi-Fi connect from new locations). Clusters far from the placement reveal sharing patterns: people who scanned the code, screenshotted it, and sent it to a friend. That's a powerful audience-discovery signal that's almost impossible to get from any other channel.
A/B Testing QR Code Designs and Destinations
QR codes have two testable layers: the visual code itself, and the page it points to. Treat them as separate experiments, don't change both at once or you can't attribute the lift.
Visual design tests
Create two short links pointing to the same destination. Generate two QR codes with different visual treatments: one with your logo embedded, one without; one with branded colours, one black-and-white; one square, one rounded. Print them in matched-pair placements (same store, same shelf, same week) and compare scan rates after 2 weeks.
Destination page tests
One QR code, one short link, two destination variants. A/B test the destinations at the redirect layer using Flyn's built-in split testing, half of scanners see variant A, half see variant B. No JavaScript on the landing page, no Google Optimize, no cookie consent gymnastics.
Statistical significance thresholds
QR-code tests run on smaller volumes than digital ads, so plan for longer test windows. Wait for at least 1,000 scans total or 14 days, whichever comes first. Don't call a winner with fewer than 300 scans per variant, the confidence interval is too wide.
Document your hypothesis before each QR test and store it in the link's "note" field in Flyn. "I expect the orange-coded variant to lift scans by 20% because of higher contrast against the white packaging", written down before the test starts, is what turns "we tried some QR designs" into a real experimentation programme.
Operational Hygiene: Naming, Auditing, and Lifecycle
The hardest part of QR code marketing isn't the first campaign, it's the 50th. Without operational hygiene, you end up with dozens of legacy short links, no idea which printed assets are still in market, and broken landing pages embarrassing the brand months after launch.
Slug naming convention
Use a structured slug pattern: <campaign>-<placement>-<year>. Examples: spring-promo-shelf-2026, conf-saastr-badge-2026, oh-billboard-sf-2026. Pair that with consistent tags in your dashboard so you can filter by campaign, by placement type, or by quarter.
Quarterly QR audit
Once a quarter, export your active links list and run every destination URL through the QR Destination Audit, and spot-check a printed sample with the QR Code Reader. The audit catches:
- Pages that 404 or redirect to a different domain (most common failure mode for codes printed 6+ months ago)
- HTTPS certificate issues
- Slow mobile load times (mostly Cloudflare worker cold starts and image optimisation issues)
- Pages that have lost their UTM tagging because someone rebuilt the lander
Bulk-check thousands of links at once with the bulk health checker, feed it a CSV from your Flyn export and it returns a report of every dead or compromised link.
End-of-life vs reroute
When a campaign wraps, decide for each printed surface: is the material still in market? If yes, reroute the short link to a graceful evergreen page ("This promotion has ended, explore our products"). If the material is fully retired, set the link to 410 Gone so search engines de-index it. Don't leave campaign URLs pointing at expired promo pages, you'll dilute the customer trust the dynamic code was supposed to protect.
Frequently Asked Questions
Do I need a special app to scan QR codes in 2026?
What is the difference between a dynamic and a static QR code?
flyn.to/promo) that redirects to your real destination, which you can update from your dashboard at any time. Dynamic codes also produce scan analytics (timestamp, device, location) because the redirect server records every hit. Flyn generates dynamic QR codes for every short link at no extra cost, see our dynamic QR codes guide for the full breakdown.How small can a QR code be and still scan reliably?
How do I track how many times a QR code is scanned?
Can I change where a QR code leads after it has been printed?
What's a realistic scan rate to expect from a QR code campaign?
How do I run A/B tests on QR codes without confounding the variables?
Do QR codes work for offline-to-CRM attribution in B2B?
Free tools for this
Three Flyn tools that pair well with the strategy in this article, all free, no signup needed.
UTM Builder
Build campaign-tracked URLs in seconds.
Open Graph Checker
Preview how URLs unfurl on social.
Broken Link Checker
Scan any page for dead links and 404s.
Keep reading
Three related deep-dives from the Flyn blog.

Short Links in SMS Marketing: The Complete Guide
11 min read

Geo-Targeting Links by Country: One URL, Every Market
11 min read

Link-in-Bio Strategy for Creators: Beyond Linktree
13 min read
Ready to try Flyn?
Free plan includes 25 links/month, full analytics, and access to all 30+ free tools above. No credit card required.
Already a member? Log in

Karan Bhakuni is the founder of Flyn. He writes about branded links, click analytics, and the link-management tooling growth teams and creators actually need, drawn from building Flyn and reading a lot of user feedback.