Skip to main content

QR Codes for Marketing Campaigns

Print is the one channel you can't A/B test the way you'd test a landing page or an email — once a flyer, a poster, or a product box is printed, the QR code on it is usually locked in for the whole run. A dynamic code changes that: the code stays fixed, but where it sends people doesn't have to.

Split traffic between two destinations, from one printed code

Every dynamic link can be given a second destination (Variant B) and a split percentage — set it to 50 and half of all scans get sent to your primary landing page, half to the variant, with the split enforced on the server for every single scan, not simulated client-side. Run two landing-page treatments, two offers, or two post-scan experiences against the exact same piece of physical media, and see which one the same audience actually responds to.

This works on any dynamic link, which means it stacks with the rest of what a dynamic code can do — set an expiration date so a campaign-specific code stops working when the campaign ends, or adjust the split mid-run if one variant is clearly ahead and you want to send it more of the remaining traffic.

What you'll actually see in the dashboard

Scan volume, unique visitors, geography, and device breakdown, comparable across 7/14/30/90-day windows — the full detail is on the analytics page. For a print or out-of-home campaign, that's usually the question that actually needed answering: is this placement getting scanned at all, and is volume trending up or down as the run continues.

Said plainly, because a marketer reading this page is the person most likely to assume otherwise: there's no UTM-parameter capture and no downstream conversion tracking built in. This won't tell you that Variant B converted better on your own site's checkout — it will tell you, reliably, how many scans each variant actually received. If you need to close that last loop, point each variant's destination URL at a landing page you've already tagged with your own UTM parameters or pixel setup on your side; the QR layer's job here is the split and the scan count, not full-funnel attribution.

Running this across a whole campaign, not one code

A single campaign is rarely one placement. Give each physical placement — each poster location, each product SKU, each direct-mail segment — its own dynamic code rather than reusing one code everywhere, and you can tell a placement or segment problem apart from a creative problem; see the multi-placement tracking guide for that workflow. Every code can carry its own split test, its own expiry, and its own scan history independently, which is what makes this workable at agency scale rather than a one-off trick for a single flyer.

Frequently asked questions

Is the traffic split really enforced per scan, or is it approximate?

Per scan, on the server, every time the code is scanned — not a client-side coin flip and not a periodic average. Set it to 50 and it tracks that split in practice, not just in theory.

Can I change the split percentage mid-campaign?

Yes — the split lives on the dynamic link, not the printed code, so you can adjust it at any point in the run without reprinting anything.

Does this connect to Google Analytics or my ad pixels?

Not directly through the QR layer itself. Point each variant at a landing page that already has your own analytics/pixel setup, and that page will fire normally once the visitor lands there.

Is A/B split routing available on every plan?

See the pricing page for exactly what's included at each tier, including the marketer and agency plans built for exactly this kind of multi-placement campaign work.