How to Measure Direct Mail ROI: QR Codes, Unique Codes and Holdouts
The hard part of direct mail is not sending it, it is knowing what it earned. This guide covers the three pieces that make a postcard measurable, a unique code, a QR code and a holdout, and why only the last one tells you the truth.
By Hylke Reitsma, co-founder, TouchDrop
Last updated: 27 July 2026
Short answer: to measure direct mail ROI, give every recipient a unique discount code and a QR code so purchases link back to the individual, set an attribution window (60 days is sensible for physical mail), and hold out a random control group you do not mail. Your real ROI is the extra revenue from the mailed group over the held-out group, divided by campaign cost. Attributed revenue without a holdout always overstates the result.
Key takeaways
- Attribution tells you which orders are associated with a mailing; incrementality tells you which it actually caused. Only the second is ROI.
- A unique per-recipient discount code links a redemption to the exact person who received the card.
- A QR code widens the signal to scanners who do not redeem, and to buyers of a different product.
- An attribution window (60 days by default) sets how long a sale still counts; judge the campaign only after it elapses.
- A random holdout is the one thing that separates incremental revenue from sales that were already coming.
Attribution is not the same as incrementality
This is the distinction most direct-mail reporting skips. If you mail 5,000 lapsed customers and 200 of them buy using the card's code, attribution says the campaign drove 200 orders. But some of those customers were going to come back anyway, card or no card. Attributed revenue counts all 200; incremental revenue counts only the orders that would not have happened otherwise. The gap between the two is exactly the number a holdout measures, and it is usually large enough to change whether a campaign looks profitable.
The three things that make a postcard measurable
- A unique discount code. Minted for one recipient and tied to their customer record, so a redemption attributes to the individual, not just the campaign, and reconciles cleanly against a holdout.
- A QR code. Captures scans and visits that never redeem the code, and buyers who choose a different product, so you are not blind to response that the code alone would miss.
- A holdout. A random control group you deliberately do not mail, which turns association into cause. Without it, the first two only ever produce the flattering number.
The attribution window
Physical mail takes days to arrive and physical offers linger, on a fridge, a desk, a pinboard, far longer than an email. So the window in which a sale should still count is longer than the same-session logic used for paid ads. TouchDrop uses a 60-day default, and the important discipline is to read the result only once the window has fully elapsed, not while cards are still landing. Judging a campaign at day 10 makes a slow, healthy result look like a failure.
The holdout: the only honest ROI
A holdout is a random slice of your eligible audience that you do not mail. Because it is randomly chosen from the same segment, it behaves like the mailed group in every way except the card, so the difference in revenue between the two over the window is the lift the mail caused. Keep the split consistent between campaigns and you build a reliable baseline. The tradeoff is small: you give up mailing a few percent of the audience in exchange for knowing, campaign after campaign, what the channel is actually worth.
For context on what a well-run campaign can return, independent benchmarks show direct mail to an existing customer list roughly doubles the response of cold prospect mail (the ANA/DMA Response Rate Report, 2018, put house-list response at 9% against 4.9%), and a win-back campaign on the founders' own DTC brand returned 6.2x ROI measured this way. Your own holdout is what tells you where you land.
How to run a measured campaign
- Tag every recipient. Mint a unique discount code tied to each customer and a QR code on every card, so any resulting order links back to the individual, not just the campaign.
- Set the attribution window. Decide how long after delivery a sale still counts. Sixty days is a sensible default for physical mail, and you judge the campaign only after it elapses.
- Hold out a random control. Randomly withhold a slice of the eligible audience, large enough to read a difference, and keep the split consistent across campaigns.
- Mail the rest and wait. Send to everyone outside the holdout and let the attribution window run before drawing any conclusion.
- Compare and divide. Take the revenue-per-customer difference between the mailed and held-out groups, multiply by the mailed count, and divide by campaign cost. That ratio is your incremental ROI.
Frequently asked questions
How do you measure ROI on a direct mail campaign?
Give every recipient a way to be identified when they buy (a unique discount code and a QR code), decide how long after the mailing a sale still counts (the attribution window), and hold out a random slice of the audience as a control. Your ROI is the extra revenue from the mailed group over the held-out group, divided by what the campaign cost. Everything else is association, not proof.
What is the difference between attribution and incrementality?
Attribution tells you which orders are associated with a mailing, for example an order that used the card's discount code. Incrementality tells you which of those orders would not have happened without the card. Attribution alone always overstates the result, because some of those customers were going to buy anyway. A holdout is what turns attribution into incrementality.
What is a holdout and why does it matter?
A holdout is a random slice of your eligible audience that you deliberately do not mail, so it behaves like the mailed group in every way except the card. Comparing revenue between the two over the attribution window gives you the incremental lift the mail actually caused. Without a holdout you cannot separate the sales the card drove from the sales that were already coming.
How does a unique discount code attribute a sale?
Each card carries a discount code minted for one recipient and tied to their customer record, so when it is redeemed the order links back to the exact person who received the card, not just to the campaign. That per-recipient link is what lets you attribute at the individual level and reconcile against a holdout.
What does a QR code add over a discount code?
A QR code captures the customers who scan and visit but do not redeem the code, and those who buy a different product than the offer. It widens the signal beyond code redemptions, and paired with the unique code it gives you both a scan measure and a purchase measure for the same recipient.
What is a direct mail attribution window?
It is the period after a card is delivered during which a sale still counts toward the campaign. Mail takes days to arrive and physical offers sit on fridges and desks, so a sensible window is longer than for email. TouchDrop uses 60 days by default, and you should judge the campaign only once the window has fully elapsed.
Can you measure direct mail ROI without a holdout?
You can measure attributed revenue without one, but you cannot measure incremental ROI, and attributed revenue will always be the more flattering number. If you only ever mail everyone, you will never know how much of the result the mail actually caused. Even a small random holdout, held out consistently, is enough to keep the number honest.
Related reading
Measure the channel, not a guess.
Run a postcard campaign with per-recipient codes, a QR, and a holdout, and read the real number.
Get started free