How to Track Offline Marketing Campaigns with QR Codes and Short Links
Bridge the gap between print and digital by tracking offline campaigns with QR codes, short links, and real attribution data.

You printed 10,000 flyers. They went out in three neighborhoods. Your website traffic went up that week. But which neighborhood drove the visits? Which flyer design worked better? Did people scan the QR code, or did they type in the URL?
Most marketers treat offline campaigns like a black box. Money goes in, and maybe results come out. That's a problem, because print, signage, packaging, and event materials still take up a real share of many marketing budgets. The good news is that with the right setup, offline marketing tracking can get close to what you'd expect from digital.
Here's how to build that tracking system using QR codes and short links.
Why Offline Campaigns Are So Hard to Measure
Digital campaigns come with tracking baked in. Someone clicks a Facebook ad, and you know which ad, audience, and creative drove the conversion. Offline doesn't work that way.
A billboard can't tell you who looked at it. A business card doesn't report back when someone visits your site. The moment a person moves from a physical object to a digital action, the attribution trail goes cold, unless you've built a bridge between the two.
That bridge is what this post is about.
The trick is giving every offline touchpoint its own trackable URL. When someone scans a QR code on your trade show banner or types a short link from your direct mail piece, you capture which asset sent them. Suddenly your print campaign analytics look a lot like your digital ones.
Step 1: Create Unique Short Links for Every Touchpoint
The foundation of offline campaign measurement is simple. Never use your raw website URL on printed materials.
Instead, create a dedicated short link for each offline placement. This means:
- Your trade show booth banner gets its own link, for example
go.example.com/expo26 - Each direct mail variant gets a different link, one for design A and another for design B
- Your restaurant menu gets a link separate from your window decal
- The podcast ad you're running uses a different link than your radio spot
Every link becomes a data collection point. When someone uses it, you know which physical asset sent them your way.
Short links also solve a practical problem. Nobody wants to type example.com/spring-promotion-2026?utm_source=flyer&utm_medium=print from a poster. A clean go.example.com/spring is something people will actually use. And with a custom domain, that link carries your brand instead of looking like a random string.
If you need many links at once, you can import a CSV with a url column, plus optional title, alias and tags columns, and Acturity creates one short link per row.
Step 2: Attach UTM Parameters to Every Link
A short link tells you that someone clicked. UTM parameters tell you where they came from and why. For offline to online attribution, the difference matters.
Before creating your links, decide on a consistent UTM structure. This framework works well for print campaigns.
utm_sourceis the physical medium (flyer, billboard, packaging, business-card)utm_mediumis always something likeprintoroffline, so you can filter easilyutm_campaignis the campaign name (spring-sale-2026, product-launch, grand-opening)utm_contentis the specific variant or placement (design-a, downtown-location, page-3)
Your destination URL might look like example.com/promo?utm_source=flyer&utm_medium=print&utm_campaign=spring-sale&utm_content=design-a. That's ugly on a poster, so keep it off the poster. What you print is the short link. Visitors scan or type go.example.com/spring, and your analytics platform sees every parameter once they land.
If UTM tagging is new to you, our guide to UTM parameters covers naming conventions and common mistakes in detail, and the UTM naming conventions guide offers a scheme you can copy. Getting the structure right upfront saves you from messy data later.
The QR window in Acturity can also add tracking parameters to the code's address for you. You can turn on UTM attribution there, which marks the visit as coming from a scan, and optionally name the campaign. Use it when you want scans labelled in your web analytics without editing every destination by hand. Leave this switch on. It is also how Acturity tells a scan from a typed or clicked visit, and with it off, scans are counted as ordinary clicks. Its tracking values reach your web analytics only when the destination and the link's campaign set no UTM value under the same names. If they do, theirs win, and Acturity still counts the visit as a scan.
Step 3: Generate QR Codes That Get Scanned
QR codes are having a genuine moment. People know what they are now, and most smartphone cameras scan them automatically. For offline marketing tracking, they're the fastest path from physical to digital.
But there's a difference between slapping a QR code on a flyer and creating one that drives results. A few things matter more than you'd think.
- Size and placement. A QR code buried in the corner of a poster at 1 cm by 1 cm won't get scanned. As a rule of thumb it should be at least 2 cm by 2 cm, and ideally placed near a clear call to action.
- The call to action itself. "Scan for 20% off" gives people a reason to pull out their phone. A naked QR code with no context doesn't.
- Customization builds trust. A branded QR code with your colors and logo looks intentional. A plain black-and-white grid could link anywhere, and that makes people hesitate.
- Test before printing. This sounds obvious, and it gets skipped constantly. Print a test at actual size, scan it with three different phones, and check that the destination loads.
With Acturity's QR code generator, each code encodes a short link, so every scan is recorded alongside your other link data. With the UTM attribution switch in the QR window left on (it is on by default), scans are stored separately from ordinary clicks, so you can tell the person who scanned from the person who typed the printed link.
To build the code itself, follow our step-by-step guide to creating QR codes, and for how scans are measured, read our guide to QR code tracking.
Step 4: Organize Links into Campaigns
Once you've created links for a dozen different placements, things get chaotic fast. You've got flyers, posters, packaging inserts, event badges, and maybe a vehicle wrap, each with its own link and QR code.
This is where campaign grouping becomes essential. Instead of checking links one by one, you group the links that belong together and open one campaign view. It shows total clicks, performance over time, a chart that compares the links inside the campaign, and breakdowns by country, device and browser.
There's one detail to plan for. A campaign in Acturity has its own UTM values, and every link in it gets them added as it redirects, replacing any parameter of the same name in the destination. So set up one campaign per physical medium. A "spring flyers" campaign has utm_source=flyer and utm_medium=print, and a "spring packaging" campaign has utm_source=packaging. Use utm_content in each link's own destination to tell designs apart, because the campaign doesn't set that one.
Grouping makes reporting much easier. When your CEO asks "how did the spring campaign do?" you pull up a few campaign views, not fifteen separate link reports.
Think of it like organizing receipts. You could throw them all in a shoebox and sort through them at tax time. Or you could file them by project as they come in. Same data, very different experience when you need answers.
Step 5: Read the Data and Adjust
This is where offline campaign measurement gets interesting. With your links and QR codes in place, the analytics dashboard starts to show you what print marketers have historically never had.
You'll be able to see:
- Which physical placements drive the most traffic, and at what times
- How many visits came from QR scans and how many from people typing the link
- Where the visits came from by country and, where available, city, so you can spot geographic clusters
- The mix of mobile and desktop visitors
Location comes from the visitor's IP address, so treat it as a rough guide to the area and not a street-level map. If you want to compare neighborhoods, give each neighborhood its own link and compare the links.
Some of these insights are immediately useful. Say your downtown flyers generate four times the scans of your suburban ones. You know where to focus the next print run. Say most scans happen between 7 and 9 AM. Your audience is commuting, and that changes how you think about your creative. (Those numbers are made up for the example.)
The metrics that matter most for offline campaigns aren't always the same as digital. We wrote about which analytics metrics actually matter and how to avoid drowning in vanity numbers.
Running A/B Tests on Physical Materials
Yes, you can A/B test print. It's not as fast as testing digital ads, but the method is straightforward.
Print two versions of your flyer, with a different headline, offer, or design. Give each version its own short link or QR code. Distribute them evenly across the same area, or assign each version to a different location if you want to test geography.
After a set period, compare the click data. Acturity's A/B testing tools can also split traffic on the destination side. Even if both QR codes point to the same short link, you can serve different landing pages and see which converts better.
This approach turns print from a guessing game into something closer to a controlled experiment. It won't be as statistically clean as a large digital test, but it beats printing 10,000 copies and hoping for the best.
Our post on A/B testing best practices covers how to design tests that produce reliable results.
Common Mistakes to Avoid
A few pitfalls show up again and again when teams start tracking offline campaigns.
Using one link for everything. If your QR code on the trade show banner uses the same link as your direct mail piece, you can't tell which one is working. Unique links per placement, always.
Forgetting to test QR codes at print size. A QR code that works on your monitor might not scan when it's printed at 1.5 cm on a business card. Print, scan, verify.
Inconsistent UTM naming. utm_source=Flyer and utm_source=flyer are two different sources in most analytics tools. Pick a convention (lowercase, hyphens) and document it for your team.
Not setting a baseline. Check your organic traffic trends before the offline campaign launches. Otherwise you won't know how much of the uptick comes from your print effort and how much is normal fluctuation.
Linking to your homepage. Send people to a specific landing page, not your homepage. A targeted page converts better and makes attribution cleaner, because if someone hits your dedicated landing page, you know how they got there.
Setting an expiry date on a printed link. Once the date passes, people who scan the code no longer reach your page. If the material will be out in the world for months, leave the expiry date empty.
FAQ
Can I track QR code scans the same way I track link clicks?
Mostly. When your QR code points to a short link, which it should, every scan is recorded with device, location and timestamp data. With the UTM attribution switch left on, Acturity stores scans separately from ordinary clicks, so you can report on them on their own or together.
How many unique links do I need for an offline campaign?
One per distinct placement or variant. If you have three flyer designs going to five locations, that's fifteen links. It sounds like a lot, but creating them takes minutes, and a CSV import creates them in one go. The attribution data is worth it.
What happens if someone scans a QR code months after the campaign ends?
The code keeps working for as long as the short link behind it exists and has no expiry date. Late scans are recorded just like day-one scans, which tells you how long your physical materials stay in circulation. If you've set an expiry date on the link, scans after that date won't reach your page, so leave it empty for anything printed.
Closing the Offline Attribution Gap
The gap between offline spend and online measurement has always been marketing's biggest blind spot. You can't eliminate it entirely. You'll never know everyone who saw your billboard but didn't scan the code. But you can build a system where every person who acts on a physical touchpoint is tracked the same way as a paid click.
It starts with unique links, consistent UTM parameters, and well-designed QR codes. Acturity brings all three together in one place, so your offline campaigns get the same analytical treatment as everything else in your marketing mix.