Most QR campaigns fail at measurement long before they fail at design. Teams print thousands of codes, get scans, then have no honest answer for “did it work?” because the instrumentation was never wired up.
This guide is a step-by-step playbook for running a QR campaign you can actually evaluate. We’ll cover planning, design, print/distribution, attribution setup, and the post-launch review. Every step includes the specific decision that, when skipped, makes the campaign unmeasurable later.
Phase 1: Planning
Define the conversion before anything else
Don’t start with “we’ll use a QR code.” Start with: what does success look like? Concrete examples that count as a defined conversion:
- A signup completed (email captured, account created)
- A specific page visited past 50% scroll depth
- An app installed
- A coupon redeemed (online or in-store)
- A demo booked
Avoid: “more brand awareness,” “more traffic,” “more engagement.” These aren’t conversions; they’re vibes. You can’t tell whether your campaign worked from vibes.
Pick the right placement(s)
A QR’s effectiveness depends almost entirely on its placement context. Three useful axes:
- Time to scan: how long does the viewer have? A poster on the subway gives 30 seconds; a magazine in a waiting room gives 5 minutes; a seat-back menu gives all night.
- Scanner intent: are they bored (browsing), motivated (looking for help), or curious (saw something interesting)? Each has a different tolerance for friction.
- Distance: arm’s length (menu, business card), few feet (display, retail shelf), across a room (wall poster), across the street (out-of-home).
Match the QR size to the longest expected distance — 5 cm × 5 cm minimum for any wall-mounted asset, larger for outdoor.
Design the variant matrix
If you’re running more than one placement, treat them as separate variants. Each variant gets its own QR (so scans are countable per placement) and its own UTM utm_content (so conversions are countable per placement).
A simple example matrix for a coffee shop launch:
| Variant | Placement | QR slug | utm_content |
|---|---|---|---|
| Subway poster | Inbound train platforms | acme.li/sub | subway_poster |
| Cafe table | Tabletop tents in 12 cafes | acme.li/cafe | cafe_tabletop |
| Loyalty card | Direct mail to existing | acme.li/loyal | mail_loyalty |
| Sponsored bus | Bus shelter ads | acme.li/bus | bus_shelter |
Notice every variant gets a distinct slug and a distinct UTM. You need both — the slug lets the QR scan analytics differentiate placements; the UTM lets your destination analytics differentiate placements after the click. Without both, you have a campaign that “works” but you can’t tell which placement is doing the work.
Phase 2: Design
Branding and contrast
Three rules:
- Black QR on white is safest. If you must use brand colours, ensure ≥30% luminance contrast.
- Include a “scan me” affordance. First-time scanners (older audiences, less tech-fluent visitors) appreciate a visible cue. Qurly’s QR builder ships several frame styles; pick one and apply it consistently across all variants.
- Logo overlay maximum 25% of the QR area. Bigger eats into error correction and breaks scanning on older readers.
The CTA next to the QR is more important than the QR itself
A naked QR with no copy gets scanned roughly half as often as the same QR paired with a one-line CTA that names the value. Bad: “Scan me.” Good: “Scan to get the recipe that goes with this jar.”
For each placement, write a single line of CTA copy that:
- Starts with a verb (“Get,” “See,” “Save,” “Book”)
- Names a specific outcome (“the recipe,” “all colors in stock,” “your free month,” “15 minutes with the team”)
- Implies low friction (“60 seconds,” “no signup required,” “just one tap”)
We have a longer post on QR CTA patterns with examples by placement type if you want more.
Phase 3: Pre-print test
This is the step the most teams skip and the most teams later regret.
Print a single proof of every variant at the intended size. Tape it to a wall, lay it on a table, mount it on cardboard at the height it’ll appear in the wild. Then, with three different phones (iOS Camera, Android default, an older device — borrow from a teammate if you have to), scan each one from:
- The intended distance
- 1.5x the intended distance (some viewers will be further)
- An angled approach (they won’t always face the QR head-on)
Track scan success on a quick spreadsheet. If any variant fails on any device at the intended distance, fix it before mass-printing. Common fixes:
- Increase contrast
- Reduce logo overlay
- Increase size
- Add a frame
- Change error correction to level H
A 30-minute pre-print test routinely saves the entire campaign budget for one variant.
Phase 4: Distribution
Print, mount, ship — the operational details vary by placement type and we won’t cover them here.
Two things to do during distribution that pay off later:
- Photograph every placement after install. Date-stamped photos. You’ll thank yourself when, eight weeks later, you’re trying to reconstruct what was where.
- Note the install date for each variant. Scan trends are most interpretable when you know the launch date — both for assessing initial lift and for comparing variants whose distribution rolled out over different days.
Phase 5: Attribution setup (the part most teams skip)
Pure scan counts won’t tell you whether the campaign worked. You need to wire scan data to conversion data. Four things to do before the campaign launches:
1. Make sure each QR’s destination is itself instrumented
The destination page needs analytics — Google Analytics, your own product analytics, or a Qurly landing page (which is auto-instrumented). If the destination is a third-party page you don’t control, route through a Qurly landing page or a thank-you / step page you own.
2. Wire scan-to-conversion ratio per variant
In your destination analytics, the UTM-tagged variant becomes filterable. Make sure your dashboard can show conversion rate by utm_content. This is the headline metric — you’ll report on it for every variant.
3. Define the “scanned but didn’t convert” gap
iOS users especially scan, see the URL preview above the camera, and decide whether to tap. That’s the gap between “scan recorded” and “page view recorded.” Treat it as an expected baseline (typically 10-25%) and don’t panic when you see it.
4. Set a review date
Block 60 minutes on the calendar for two weeks after launch. Ideally also 30 minutes for the four-week mark. A campaign with no scheduled review becomes folklore — every team has a “we ran a poster campaign once and people seemed to like it” story; nobody has the data.
Phase 6: Launch and monitoring
Three windows of attention worth setting expectations on:
- First 48 hours: confirm scans are landing in analytics. If a variant has zero scans, investigate immediately — usually a misprint, a misplaced QR, or a destination URL that 404s. Catch this early; it’s far worse to discover at week three.
- First two weeks: watch the variant comparison. Big differences will be visible by day 5-7. If one variant is clearly underperforming, you have time to redirect budget.
- Lifetime of the campaign: track scan rate over time per variant. The shape of the curve is informative — sharp peaks indicate event-driven moments; long tails indicate evergreen placements. Plan the next campaign around the long tails.
Phase 7: The post-mortem
Two weeks after the campaign ends (or two months in for evergreen campaigns), do a written post-mortem. Format:
- What we shipped — the variant matrix and the conversion goal
- What we learned — the conversion rate per variant, the surprises
- What we’d do differently — design, placement, copy, instrumentation
- What we’d do again — the things that worked
File it somewhere your team will actually find it next time someone proposes “let’s do a QR campaign.” Most QR campaigns repeat patterns from previous QR campaigns; a written post-mortem is the cheapest way to compound learning.
The pre-launch checklist
Print this, tape it next to your monitor, don’t ship without all twelve:
- Conversion is defined as a specific user action, not “engagement”
- Each placement has its own QR slug
- Each placement has a distinct
utm_contentvalue - CTA copy starts with a verb and names a specific outcome
- CTA copy is one line and visible from the intended scanning distance
- Scan-tested on iOS, Android, and one older device, at intended distance and 1.5x
- Logo overlay (if used) is ≤25% of QR area; error correction set to H
- Destination is instrumented with analytics
- Conversion rate by
utm_contentis filterable in the dashboard - Two-week and four-week review dates on the calendar
- Photographs of every placement post-install, with dates
- A post-mortem template ready to fill in when the campaign ends
If you check all twelve, you’ve eliminated about 90% of the reasons QR campaigns produce ambiguous results. The other 10% is creative quality — and at least when the result is ambiguous because the creative was mid, you know that’s the lever to move next time.
The Qurly team
We write about the things we learn building Qurly — short links, QR codes, landing pages, and analytics. Subscribe to the changelog or follow along on the blog.