Back to Blog

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.

Karan Bhakuni
Karan Bhakuni
Founder, Flyn
StrategyMar 1, 202612 min readUpdated May 5, 2026
QR Codes in Your Marketing Strategy: A Playbook

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.

Pro tip

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.

PropertyStatic QR CodeDynamic QR Code
Destination URL encoded inThe dots themselves (permanent)A short link that redirects (changeable)
Editable after printing?No, reprint requiredYes, update destination instantly
Scan analytics?NoneFull per-scan analytics
Pattern density at same data sizeHigher (denser dots, smaller modules)Lower (cleaner, scans from further)
Cost on FlynN/AFree with every short link
Best used forOne-off, throwaway use, vCardsAnything 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.

Watch out

"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)".

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.

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.

Note

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

  1. Placement cost, what the surface cost (production + media + design amortisation).
  2. Scans, from Flyn analytics, filtered to the unique short link for that placement.
  3. Conversions, from GA4 or your conversion analytics, filtered to the UTM source/campaign for that placement.
  4. 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.

Pro tip

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?
No. Every modern smartphone camera (iOS 11+ and Android 9+) scans QR codes natively without any additional app. Open the camera, point it at the code, and a notification appears with a link to tap. This frictionless scanning is one reason consumer scan rates have grown from ~0.6% in 2019 to 3.5-4% of impressions in 2026, and why investing in a clean QR tracking workflow finally has the volume to justify it.
What is the difference between a dynamic and a static QR code?
A static QR code encodes the destination URL directly into the dots, once printed, it cannot change. A dynamic QR code encodes a short URL (like 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?
For arm's-length scanning, 2cm × 2cm is the minimum, though 4cm × 4cm is safer in production. For any other distance, use the 10:1 rule: the code's width should be at least 1/10 of the viewing distance. A code on a booth backdrop viewed from 2m needs to be 20cm wide; a billboard QR viewed from 10m needs to be at least 1m wide. Always test the actual printed size on at least three different phones (different OS versions and camera quality) before approving a print run.
How do I track how many times a QR code is scanned?
Point the QR code at a unique tracked short link, not directly at the destination URL. Every scan of that short link is recorded in Flyn's analytics with timestamp, device type, OS, browser, and approximate location. Use one short link per physical placement (one for the shelf-talker, one for the receipt, one for the postcard) so you can compare performance across surfaces. Add UTM parameters to the destination URL, build them with the free UTM Builder, to flow scan data into GA4 as a measurable channel.
Can I change where a QR code leads after it has been printed?
Yes, if it's a dynamic QR code (the kind Flyn generates by default). Open the link in your Flyn dashboard, edit the destination, save. The change takes effect on the next scan. The printed code itself never needs to change because it points to your short URL, not the underlying destination. This is the main reason every printed asset with a lifespan over 24 hours should use a dynamic code, see the dynamic vs static comparison for the full reasoning.
What's a realistic scan rate to expect from a QR code campaign?
It depends heavily on placement. Restaurant menu QRs hit 60-80% per cover because the scan is the only path to the menu. Trade-show booth QRs sit at 35-50% during sessions. Product packaging codes run 15-25% per unbox when there's a sharp call-to-action ("Scan for the setup guide"). Print magazine ads see 1.5-4% per impression. Out-of-home and billboards run 1-3%. TikTok creator-bio QRs average ~3.2% per impression. If a placement is far below these numbers, the usual culprits are missing CTA copy, low contrast, or a poor mobile lander.
How do I run A/B tests on QR codes without confounding the variables?
Test one layer at a time. For design tests, use two short links pointing to the same destination, with two different QR designs (different colours, logo placement, error correction). Print in matched-pair placements and compare scan rates. For destination tests, use one QR code and one short link, then split traffic at the redirect layer using Flyn's built-in A/B testing. This separates the visual-design variable from the landing-page variable so you can attribute lift cleanly.
Do QR codes work for offline-to-CRM attribution in B2B?
Yes, and this is where dynamic QR codes outperform every other offline channel. Put a unique short link on each conference badge, booth giveaway, or direct-mail piece. Tag the destination URL with UTMs that include the campaign and prospect identifier. Pipe Flyn click events into your CRM via the webhooks API. Sales reps get a real-time signal when a prospect from a specific event scans a code. This pattern is detailed further in the SaaS link-management playbook.

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
Karan Bhakuni· Founder, Flyn

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.