Skip to content

Offline Marketing Attribution: How to Measure Ad Results

Offline marketing attribution made practical: funnel metrics, QR and promo codes, attribution models, control groups and a report template for city campaigns.

7 min readFortuners Team

Laptop showing an abstract campaign chart next to a broken fortune cookie and a smartphone on a bright desk

Offline marketing attribution works the same way as online tracking, except that you have to build the trail yourself. Before launch you set a goal and one primary metric, give every placement its own QR code or promo code, count each stage from materials handed out to paying customers, and compare the result with a period or an area without advertising. That tells you not only how many people responded, but also what each customer cost and which locations are worth repeating. Below you'll find the complete system: definitions, funnel metrics, tracking methods, attribution models, geo tests, formulas and a report template.

Effectiveness vs efficiency: what are you actually measuring?

The two words are often used interchangeably, but they answer different questions.

Advertising effectiveness tells you whether the campaign reached its goal. If a yoga studio wanted 80 people to book a trial class and 95 did, the campaign was effective.

Efficiency tells you what it cost to get there. The same 95 bookings can be an excellent result on a small budget and a weak one on a large budget.

Before you count anything, agree on a shared vocabulary. These terms come up throughout the article.

TermWhat it meansHow to count it
Reach (contacts)The number of people who had a real chance to see the adFlyers handed out, cookies served, estimated footfall past the placement
ScanA visit to the landing page after scanning a QR codeRedirect counter or landing page analytics
ConversionThe action you care about: a sign-up, a booking, a purchase, a redeemed codeForm, booking system, till, online shop
Conversion rateThe share of people from the previous stage who took the actionConversions ÷ people at the previous stage × 100%
CAC (customer acquisition cost)What one new customer cost youTotal campaign cost ÷ number of new customers
ROASRevenue generated per unit of currency spent on advertisingRevenue attributed to the campaign ÷ campaign cost
ROIReturn on investment once margin is taken into account(Profit from the campaign − campaign cost) ÷ campaign cost × 100%
Incremental liftHow many extra customers came because of the ad rather than by coincidenceChange in the test group minus change in the control group

A clearly defined goal and target audience do half of the measurement work for you.

Why offline advertising looks unmeasurable (and how to fix it)

Online ads leave a trail automatically: an impression, a click, a session. A poster, a flyer or a product sample handed out in a café has no "click here" button. That creates three typical problems.

  1. Exposure leaves no trace. You don't know who saw a poster until they do something you can record.
  2. Action is delayed. Someone picks up a flyer on Tuesday and signs up two weeks later after typing your brand name into Google. In your analytics, that looks like organic search traffic, not like the flyer.
  3. People measure what's easy. Reports show the number of printed materials instead of the number of customers, because that's the only figure anyone has to hand.

You can fix this with three rules applied at the planning stage.

  • Every placement gets its own trail. A separate QR code, promo code or URL for each location and each type of placement.
  • The offer requires a countable action. "First class free with this code" is far easier to measure than "Come and visit us".
  • You have a baseline. You compare the campaign result with the period before it, or with an area where it didn't run.

One honest caveat: not everything shows up in the numbers. Some people remember the brand and come back six months later, so direct measurement shows the lower bound of the effect, not the whole effect. That's still far better than guessing.

Funnel metrics: from first contact to paying customer

The simplest way to think about an offline campaign is as a funnel. People drop out at every stage, and your job is to find the stage where you lose the most of them.

StageMetricFormulaData source
1. ReachMaterials handed outUnits that actually reached people's hands (not units printed)Delivery notes, remaining stock at each location
2. InterestScan rateScans ÷ handed out × 100%QR code counter, website analytics
3. ActionScan-to-lead conversionSign-ups or bookings ÷ scans × 100%Form, booking system
4. CustomerCode redemption rateRedeemed codes ÷ handed out × 100%Till, online shop, front desk
5. ValueCAC, ROAS, repeat visitsFormulas from the glossary aboveSales data and customer history

Illustrative example (made-up numbers, not a benchmark): a pilates studio hands out 2,000 leaflets with a QR code in local cafés. 400 people scan the code, which is 20% of those handed out. 120 people book a trial class, 30% of those who scanned. 60 people redeem the code at the front desk: half of the bookings and 3% of everything handed out.

What does a funnel like that tell you? If there are plenty of scans but few sign-ups, the problem usually sits on the landing page: a form that's too long, an unclear offer, no available time slots. If there are plenty of sign-ups but few redeemed codes, look at reminders, scheduling or how the front desk handles the code. If scans are low, check whether the code is visible, whether the offer is attractive and whether the material is reaching the right people.

Indirect signals when there's no direct trail

Part of the effect will never pass through a code. So alongside the funnel, watch these indirect signals during and after the campaign:

  • branded search queries in Google Search Console (opens in a new tab) (the Performance report, filtered to queries containing your brand name),
  • direct and organic visits in your analytics, ideally broken down by city,
  • views and actions in your Google Business Profile, such as requests for directions,
  • answers to a "How did you hear about us?" question on your form or at the till.

These signals won't prove cause and effect, but they will show whether the campaign moved anything beyond the codes.

Offline attribution methods: unique QR codes, promo codes, vanity URLs and UTMs

No single method is perfect, which is why you combine them. The table below lays out the most common options.

MethodWhat it measuresStrengthsLimitations
Unique QR code (one per placement or location)Scans, location, day and timeInstant data, split by location; a dynamic code lets you change the landing page after printingA scan isn't a customer yet; someone can share a photo of the code with a friend
One promo code for the whole campaignRedemptions at the till or onlineLinks the ad to a transaction; easy to rememberLeaks to coupon sites; can't tell you the location if one code covers everything
Unique single-use codesRedemptions down to the individual unitPrecise, doesn't leakNeeds a system to generate and validate codes
Vanity URL or short linkVisits typed in by handWorks without a scanner; suits posters and radioMany people will just type your main domain
UTM parametersTraffic source in analyticsIndustry standard, free, easy to filterOnly work on a click or scan; declined cookie consent cuts the data
Dedicated booking line (call tracking)Calls generated by a placementCaptures people who prefer to callExtra cost and setup; harder with many placements
"How did you hear about us?" surveyCustomer self-reportsCheap; captures delayed effectsMemory is unreliable; staff must ask every time
Control group or geo testLift over what would have happened without the adShows the net effectNeeds comparable areas and several weeks
A café guest holding a smartphone in one hand and a paper slip from a broken fortune cookie in the other
The moment a guest reaches for their phone is the first point at which offline advertising can leave a measurable trace.

Your QR code should point to a URL with UTM parameters that record the source, the medium, the campaign and the specific location. For example:

https://www.example.com/autumn?utm_source=cafes&utm_medium=offline&utm_campaign=autumn-2026&utm_content=powisle-01

A few rules that will save you a lot of data clean-up:

  • write everything in lower case and without diacritics (so "srodmiescie", not "Śródmieście"), because analytics treats "Autumn" and "autumn" as two different values,
  • use utm_content for the location or placement, so you can compare locations with each other,
  • use dynamic QR codes when you want to be able to change the landing page without reprinting,
  • scan every code on a test print with several different phones before you approve the full print run,
  • print a short URL next to the code for people who don't want to scan.

Promo codes: one per campaign or one per location?

One code for the whole campaign is simple and easy to remember, but it won't tell you which location worked. A separate code for each location gives you the split, but it complicates things at the till. A sensible compromise: one promo code per campaign plus a separate QR code for each location. The QR code tells you where the interest came from, and the promo code confirms the purchase.

That is how measurement works in Fortuners campaigns. After the meal, a restaurant guest opens a fortune cookie and finds the brand's offer on the slip, together with a QR code assigned to that campaign and that specific venue. After scanning, they land on the offer page with a discount code. You can read more about the format in our guide to custom fortune cookie campaigns.

Yoga studio in Mokotów
Your fortune

This month you'll finally make time just for yourself.

Your first class is free.
Code CALM26.
Illustrative example

GDPR and cookies on the post-scan landing page

Measurement usually ends on a page where someone leaves their details. A few general rules here are easy to forget in a rushed launch:

  • Privacy notice. If you collect a name, an email address or booking details, people must receive the information the GDPR requires: who the controller is, the purpose and legal basis of processing, and how long you keep the data.
  • Data minimisation. Collect only what you genuinely need to fulfil the offer.
  • Separate marketing consent. Consent to a newsletter or text messages must not be a condition of receiving the code, and the box must not be ticked by default.
  • Cookies. Under EU rules, which apply in Poland too, analytics and marketing cookies generally need the user's consent. Some people will decline, so your analytics will undercount. That's why it pays to count scans on the server side as well, at the moment of the redirect, without identifying individuals.

Attribution models for offline conversions and their limits

Attribution is the way you assign credit for a conversion to the different contacts a person had with your brand. If someone saw a flyer, then a social media ad, and finally typed your brand name into Google, each model will split the credit differently.

ModelHow it assigns creditWhen it makes senseThe problem for offline campaigns
Last touchAll credit to the last contact before conversionQuick decisions, one main channelA flyer or poster is almost never the last click
First touchAll credit to the first contactEvaluating awareness-building channelsThe first offline contact usually isn't recorded
LinearEqual credit to every contactLonger decisions with many touchpointsContacts nobody can see get zero
Time decayMore credit to contacts closer to conversionCampaigns with a clear deadline, such as an end-of-month offerUndervalues materials handed out early on
Position-basedMost credit to the first and last contact, the rest shared equallyWhen both discovery and closing matterRequires a full path, which offline doesn't have
Data-drivenAn algorithm assigns credit based on conversion historyLarge accounts with plenty of conversionsThe algorithm only sees what was recorded

In 2023 Google retired the first-click, linear, time-decay and position-based models (opens in a new tab) in GA4 and Google Ads, leaving data-driven and last-click attribution. For offline advertising, that matters. Both remaining models only see the path recorded in analytics, so contact with a printed piece that didn't end in a scan simply doesn't exist for them.

Three-layer attribution

Instead of searching for one perfect model, report three layers separately, and never add them together:

  1. Hard data. Scans and redeemed codes tied to the campaign and the location. This is a reliable lower bound of the effect.
  2. Self-reports. Answers to "How did you hear about us?". They capture people who came without a code, but they are less precise.
  3. Incremental lift. The difference between an area or period with the campaign and one without it. It shows the net effect, including people who left no trail at all.

Before launch, also set an attribution window: how long after contact you still credit a conversion to the campaign. The simplest option is to tie it to the validity of the code, for example 30 days after the campaign ends.

Where marketing mix modelling and offline conversion imports fit

Marketing mix modelling (MMM) estimates each channel's contribution statistically from long series of spend and sales data, so it needs many months of history and sizeable budgets across several channels. Offline conversion imports send till or CRM conversions back into ad platforms such as Google Ads, but only for people who interacted with a digital ad first. For a local campaign in a handful of neighbourhoods, codes, surveys and a geo test tell you more for far less effort.

Control groups and geo tests: measuring incremental lift

A control group is a set of people, or an area, that didn't see the advertising but is otherwise similar to the group that did. If sales rise in both groups, it's probably the season or the weather. If they rise only where the ad ran, the difference is the effect of the campaign.

In local marketing the easiest way to do this is geographically, because the campaign runs in specific districts anyway.

A geo test, step by step

  1. Choose two similar areas. For example, two districts that have so far brought you a similar number of customers.
  2. Measure the baseline. Check how many new customers each area brought in during the weeks before the campaign. Record the district or postcode when you register a new customer.
  3. Run the campaign in one area only. Change nothing in the other: no extra promotions, no new posters, no special events.
  4. Compare the change, not the result. What counts is the difference between growth in the test area and growth in the control area.
  5. Log disruptions. Roadworks, a street festival, unusual weather or a competitor's promotion can all skew the result.

Illustrative example (made-up numbers): a studio has averaged 40 new customers a month from Praga and 40 from Mokotów. In the month the campaign ran only in Praga, 58 new customers came from Praga and 46 from Mokotów. That's growth of 18 in Praga and 6 in Mokotów, so the lift you can attribute to the campaign is roughly 12 people. If 9 people redeemed the promo code, you know the codes captured most of the effect, but not all of it.

With small numbers, it's easy to mistake chance for an effect. When the groups differ by a handful of people, treat the result as a sign of direction, not proof. The bigger the campaign and the longer the test, the firmer the conclusion.

Campaigns in restaurants and cafés lend themselves well to this kind of test, because a venue has a fixed location and a stable guest profile. For more on choosing venues, read our guide to advertising in restaurants, and for planning activity district by district, see our local marketing strategy guide.

Customer acquisition cost, ROAS and ROI

The funnel shows where you lose people. Customer acquisition cost and return on the campaign show whether it pays off.

  • CAC = total campaign cost ÷ number of new customers. Include everything in the cost: production, distribution, your team's time and the value of the discounts you gave away.
  • ROAS = revenue attributed to the campaign ÷ campaign cost. A ROAS of 2 means PLN 2 in revenue for every PLN 1 spent.
  • ROI = (profit from the campaign − campaign cost) ÷ campaign cost × 100%. Calculate profit from your margin, not from revenue, because part of the revenue covers the cost of delivering the service.

Illustrative example (made-up numbers): a campaign costs PLN 12,000 and brings in 60 new customers who redeemed the code. CAC is PLN 200. A first visit generates PLN 150 in revenue on average, so first visits bring in PLN 9,000 and first-visit ROAS is 0.75. That looks like a loss. But if the average customer stays for six months and spends PLN 600 over that time, revenue rises to PLN 36,000 and ROAS to 3. At a 50% margin, profit is PLN 18,000, and ROI after deducting the campaign cost is 50%.

This example shows the most common mistake in evaluating campaigns for service businesses: counting only the first transaction. If your customers come back, judge the campaign by customer value over a realistic horizon, such as 3, 6 or 12 months.

It also helps to run the calculation in reverse before launch: maximum acceptable CAC = average customer value × margin. If a customer brings in PLN 600 of revenue over six months and your margin is 50%, one customer can cost at most PLN 300 for the campaign to break even.

Offline campaign report template

A good report fits on two pages and ends with a decision. You can copy the template below into a spreadsheet or a document.

Report sectionWhat to includeExample entry
1. Goal and primary metricThe one-sentence goal from the brief and the target number100 trial class bookings in 4 weeks
2. ScopeDates, city and districts, placements or venues, volume4 weeks, 6 cafés in 3 districts
3. FunnelHanded out, scans, sign-ups, redeemed codes and the rates between stagesStage table with percentages
4. Results by locationRanking of locations by scans, codes and cost per customerBest and weakest location, with a comment
5. TimingDays of the week and hours of scansScans peak at lunchtime
6. Cost and efficiencyTotal cost, CAC, ROAS, ROI over the chosen horizonCAC and ROAS at 30 days and at 6 months
7. Incremental liftResult of the comparison with a control group or baseline periodDifference in growth between districts
8. Customer self-reportsAnswers to "How did you hear about us?"Number of people naming the campaign without using a code
9. Data qualityAnything that may have skewed the resultDeclined cookie consent, leaked code, a public holiday mid-campaign
10. DecisionsWhat to repeat, what to switch off, what to testKeep 4 venues, test a new offer in two

Section 4 is easiest to keep as a separate table, with one row per location:

LocationHanded outScansScan rateSign-upsRedeemed codesCost per customer
Café A
Breakfast bar B
Campaign total

In Fortuners campaigns, most of this data collects itself. In the partner panel you can see cookies handed out, scans day by day, redeemed codes, each venue's results on a map and peak hours, and the final report arrives as a PDF. You can try it on sample data in the panel demo, and the whole process is laid out in the How it works section.

Common mistakes when measuring offline marketing

  • One code for every placement. You know the campaign did something, but not what to switch off.
  • No baseline. Without pre-campaign data, every increase looks like a success and every dip like a failure.
  • Counting printed instead of handed out. A box of flyers in the storeroom isn't reach.
  • Treating a scan as a customer. A campaign with fewer scans but better conversion can be the more effective one.
  • A measurement window that's too short. A report closed the day after the campaign ends misses everyone who acts with a delay.
  • The till or front desk doesn't record codes. If staff apply the discount on request without logging the code, you lose the most important stage of the funnel.
  • Changing several things at once. A new offer, new locations and a new landing page in one campaign make it impossible to identify the cause.
  • Adding attribution layers together. A customer who used a code and also ticked "flyer" in the survey is one customer, not two.
  • Drawing conclusions from a handful of cases. A difference of three customers between locations is usually just chance.

Measurement ready before campaign launch

  • Goal and primary metric written down in one sentence
  • Baseline from several weeks before the campaign
  • A separate QR code for each placement or location, tested on a print proof
  • Promo code with an expiry date and a way to record it at the till
  • Links with UTM parameters and consistent naming
  • Landing page with a privacy notice and separate consent boxes
  • “How did you hear about us?” question on the form or at the till
  • Control area or period with no other promotions running
  • Attribution window agreed before launch
  • Report template with the date of the first review

Measuring offline advertising doesn't require an analytics department. It requires three decisions made before anything goes to print: what the goal is, what trail each placement will leave and what you'll compare the result with. Settle those, and after the campaign you won't be guessing, just choosing what to repeat.

Frequently asked questions

  • How do you measure offline marketing without an analytics team?

    You need three things: a separate QR code or promo code for every placement, a spreadsheet tracking materials handed out, scans, sign-ups and redeemed codes, and a comparison with the period before the campaign or with an area that saw no advertising. Everything else comes down to simple formulas for customer acquisition cost and campaign return.

  • Are QR code scans a good measure of offline ad performance?

    Scans show interest, not sales. Treat them as a middle stage of the funnel and always report them alongside sign-ups and redeemed codes. A campaign with fewer scans but a higher scan-to-customer conversion rate can be the more effective one.

  • What is a control group in an advertising campaign?

    It is a group of people or an area that did not see the advertising but is otherwise similar to the group that did. By comparing how sales changed in both, you separate the effect of the campaign from seasonality, weather and everything else going on at the time.

  • Which attribution model should you use for offline campaigns?

    For small and mid-sized businesses a layered approach works best: hard data from codes as the lower bound of the effect, customer self-reports as a supplement and a control-group test to estimate incremental lift. Web analytics models cannot see anyone who picked up a flyer or looked at a poster, so on their own they undercount offline results.

  • How long should you track results after an offline campaign ends?

    At least for as long as the offer code is valid, plus a few weeks after the campaign, because some people act with a delay. Set the measurement window before launch and stick to it in the report, so that comparisons between campaigns stay fair.

All articles