Direct mail ROI made simple: track postcard advertising results with QR codes, call tracking, and promo codes, then prove the return so advertisers renew.
The single biggest objection I hear from local businesses thinking about a slot is some version of "how will I know if it actually worked?" And the #1 thing that kills renewals is the same problem from the other side: the advertiser paid $500, the card went to 5,000 homes, and three months later they have no clue what it did. For decades, direct mail ROI was guesswork. Not anymore. With QR codes, tracked phone numbers, promo codes, and simple landing pages, you can track postcard advertising results down to the individual customer and prove them to your advertisers so they renew for card #2.
This is the post to bookmark for the next time an advertiser asks "so what did my ad actually do?" You don't need a data scientist. You need four simple tracking tools, one formula, a one-page report, and the discipline to set it all up before every card prints. Let me walk you through it.
Direct mail ROI is the return a mail campaign produces compared to what it cost, shown as a percentage or a multiple. In plain English: did the card make the advertiser more money than they paid for it, and by how much?
The basic formula:
Direct mail ROI = (Revenue from campaign − Cost of campaign) / Cost of campaign × 100
Say a roofer pays $500 for a 9x12 slot, and that slot drives 2 closed jobs at $12,000 each ($24,000 total). The math:
($24,000 − $500) / $500 × 100 = 4,700% ROI
That's not a typo. That's why high-ticket service businesses are such a good fit for a $500 slot. Even ONE closed customer covers the ad many times over.
Ten years ago you mailed and hoped. Now every phone camera scans QR codes (iPhones have done it natively since 2017), tracked phone numbers are cheap, and every scan or call is a data point. The tools are all there. The only question is whether you set them up, and most operators don't. That's why "direct mail doesn't work" is still a myth people repeat.
Before the how, let me drive home the why, because this one habit separates operators who run one card ever from operators who build a real recurring business.
Renewals live and die on proof. If an advertiser can see your card drove 14 calls, 23 QR scans, and a few closed jobs, they pay for the next card without flinching. If they can't, your renewal pitch becomes a prayer. Michael runs quarterly cards, and roughly 75% of his advertisers renew. His habit: a short results recap the moment feedback starts coming in. One of his painters wrote back after the first card asking when the summer edition started and when to pay for the quarter, because they'd "had many calls." That's what happens when results are visible. The advertiser starts the renewal for you.
Raising your price requires proof. Want to go from $500 to $600 on your next card? "Our last card drove X calls for our advertisers" is how you justify the bump without losing anyone.
You stop guessing. Which routes worked? Which designs pulled? Which industries got the most calls? Without tracking, you're flying blind. With it, every card makes you smarter.
Your card becomes media, not junk mail. Businesses pay more for things they can measure. Once your card has tracking built in, you're not competing with "throwaway mail." You're competing with Google and Facebook ads, and you're way cheaper per home.
Advertisers don't renew on hope. They renew on data. Build the data into every card from day one.
If you're wondering how to track direct mail without a marketing degree, these four cover it. The best cards use more than one per ad so nothing falls through the cracks.
QR codes are the easiest, cheapest, most-used tracking tool on a 9x12. Every advertiser should have one, and it has to be their own code, so you know exactly which business on the card got which scans.
Here's the thing though. A plain static QR code pointing at a homepage gives you zero data. You need a dynamic code that logs every scan.
That's why we built ScanLab. You create a code per advertiser, it logs every scan with a timestamp, city-level location, and device, and it organizes everything into a dashboard per client plus a branded PDF report you can send in one click. It's free for community members (here's the full ScanLab walkthrough). Any QR generator with basic analytics will also get you scan counts.
What to track:
Total scans per slot
When scans happen (the evening the card lands, weekends, and so on)
Where they come from, as a sanity check that the card landed where you mailed it
How many scans turned into an action (a call, a booking, a form)
To turn scans into a rough lead count, use the advertiser's own close rate. Don't borrow someone else's.
Most service businesses (roofers, HVAC, plumbers, dentists, auto repair) get their leads by phone. If you want to prove the card worked for them, count the calls.
Each advertiser gets a phone number that only appears on the card and forwards to their real line. Every call on that number came from the mailer. If you're handy, a Twilio number costs about a dollar a month plus per-minute fees. CallRail costs more but gives you a clean dashboard and call recordings.
What to track:
Total calls per slot
Call length (longer calls usually mean a real prospect)
The caller's area code
Recordings, with the proper announcement, so the business can hear how their staff handled the calls
For higher-ticket businesses this is close to mandatory. Picture a roofer who gets 8 calls off your card, traces them to closed jobs, and tells you the card made him $45,000. That advertiser never leaves.
Some advertisers want people to fill out a quote form, book online, or grab a deal with their email. For them, a dedicated landing page blows away a homepage. A homepage has 50 distractions. A landing page has one job.
Add UTM tags to the link so their Google Analytics separates postcard traffic from everything else:
Now you can see how many people came from the card, how long they stayed, how many filled out the form, and what percentage converted. 9x12 Sites builds these pages for postcard businesses with tracking baked in, or you can use any landing page builder.
For businesses where customers buy in person (restaurants, retailers, auto shops, med spas), a promo code that only appears on the card is the cleanest tracking there is. Every redemption is a confirmed customer from the postcard.
Examples:
"Mention POSTCARD20 for $20 off any meal over $60"
"Use code SPRING9X12 at checkout"
"Show this card for $50 off your first service"
Best practices:
Keep the code short and easy to type (6 characters or fewer)
Tie it to a real offer. "$20 off" beats "5% off anything"
Ask the business to train staff to log every use, because this is where promo tracking breaks
Get the tally from each advertiser at the end of the cycle, plus their average order size
If you want to know how to track postcard results without scrambling after the fact, it all happens before print. Tracking has to be on the ad BEFORE it goes to the printer. Here's the process for every card.
Sell your 16 slots and collect payment up front, like always.
For each advertiser, decide which methods apply. Every ad gets a QR code at minimum. Service businesses also get a tracked number. Restaurants and retail get a promo code. Businesses with online funnels get a landing page.
Create one QR code per advertiser in ScanLab (or your QR tool) and name each one after the business so reporting stays clean.
If you're using landing pages, build one per advertiser and point their QR code at it.
If you're using tracked numbers, buy them and set up forwarding to each business's real line.
Send every URL, number, and promo code to your designer so each ad has its tracking baked in.
Send the card to print through 9x12 Method Printing. Tracking starts the day it hits mailboxes.
Check the dashboards weekly for the first 30 days, then send each advertiser a results report.
Looks like a lot. Once you've done it once, it's about 2 hours per card.
Here's the full postcard ROI formula, then three examples.
Revenue = Closed customers × Average customer value (or lifetime value)
Cost = Slot price + design fee + any other campaign costs
ROI = (Revenue − Cost) / Cost × 100
One honest note. Revenue ROI makes every card look amazing. If the advertiser will share their margin, run it on profit too. That's the number that actually tells them whether the card made money.
These examples use made-up round numbers to show the math. They're not promises or averages, so always plug in your advertiser's real numbers.
A roofer pays $500 for a 9x12 slot plus $25 for design. Over 60 days after the card mails, they get 47 QR scans, 12 calls on the tracked number, and 4 form fills: about 63 inquiries. They close about 10% of inquiries, so 6 jobs at $12,000 each.
$72,000 (6 jobs × $12K)
Revenue from postcard
$525
Cost (slot + design)
~$28,800 (40% margin)
Profit after job costs
5,386%
ROI on profit
This is why roofers keep buying slots all year once they've seen one card work.
A pizza place pays $250 for a community card slot with "$5 off any large pizza." Over 60 days, 38 people redeem the code with an average order of $32, and about 11 of them become regulars worth around $300 a year.
A family dentist pays $500 for a slot offering a "$59 New Patient Special: exam, X-rays, cleaning." Over 90 days, 22 new patients book the special and 18 stick around as regular patients worth about $2,500 each over 5 years.
$1,298 (22 × $59)
Special-only revenue
$45,000 (18 × $2,500)
New patient lifetime value
$46,298
Total lifetime revenue
$500
Cost (slot)
9,160%
ROI on $500 spent
The point isn't the specific numbers. It's the framework. For high-ticket service businesses, one closed customer almost always pays for the whole ad. The question usually isn't whether direct mail ROI is positive. It's how positive.
Want to show a prospect this math before they buy? The free postcard ad payback calculator turns their numbers into a one-page sheet with your brand on it.
This is where most operators drop the ball. The card mails, the operator goes quiet, and at renewal time the advertiser has no proof the first card did anything.
Start the habit before the card even lands. John tells every advertiser up front that they'll be kept informed every step of the way. Keep that going the day the cards drop with something like: "Cards dropped at the post office today, here's a photo. You should hear from neighbors over the next 7 to 14 days, please tell me what you hear."
Then, about 30 days after the card mails, send every advertiser a one-page results report. If you use ScanLab, its branded PDF does most of the work. If not, an email like this does the job:
Subject: Your card results, 30 days in
Hey [Name], here's what your ad did on the [month] card.
Homes mailed: 5,000. Mailed on: [date].
QR scans: [X]. Calls to your tracked number: [Y]. Form fills: [Z]. Promo codes redeemed: [N].
That's [total] people who saw your ad and took action in 30 days. At your usual close rate, that's roughly [estimate] new customers, or about $[estimate] from a $500 slot.
Card #2 mails on [date], and your slot is held until [date]. Want to keep it?
That's it. Real data, real dollar values, and a direct ask. It turns your renewal call from "will you pay again?" into "here's what your $500 did, want another?"
Then follow up within 48 hours. The report opens the door. The follow-up closes it, same as your original outreach.
Sometimes the data comes back ugly, or an advertiser says "we didn't get any customers from it." Don't panic. Diagnose.
Check the data first. If ScanLab shows 22 scans and the tracked line shows 8 calls, people absolutely engaged. Maybe the business didn't close those leads. That's a sales problem, not a card problem.
Show the leading indicators. "You got 22 scans and 8 calls. That's 30 people who actively engaged with your ad. People often need to see an ad 5 or 6 times before they act, and card #2 is when it starts compounding."
Then work through the usual suspects:
Was the design good? Bad ad design kills response even on great routes. Was the headline an offer or just the business name? Was the QR code easy to find?
Was the offer real? "Free quote" rarely moves anyone. "$500 off a new roof through May 31" does.
Were the routes right? A roofer mailing lower-income routes will struggle no matter how good the ad is. Pick better routes for card #2.
Did they answer the phone? Sometimes the card produced 30 inquiries and the business called back three days later. Slow follow-up kills conversion.
Was 30 days too short? Some people hang on to the card for weeks before acting. Check in again at 60 days.
If the slot genuinely underperformed, be straight with them. Offer card #2 at $400 instead of $500 with a landing page this time, so you can track conversions better. And if they still pass, move on. Some businesses are bad at sales and will blame the card no matter what. Fill the slot with someone who'll work it.
Once the basics are running, two extra plays can make your tracking (and your offer) a lot stronger.
A Facebook pixel on the landing page. Put the advertiser's pixel on their dedicated page, and everyone who scans and leaves becomes a retargeting audience. The business can run a small Facebook campaign that follows up with exactly the people who saw the postcard. That's a natural upsell: the card plus a 30-day retargeting campaign as one package.
Call recordings. With the right announcement, recordings let the advertiser hear how their staff handles calls from the card. Some realize their front desk is losing leads and fix it. When results improve, they credit your card.
Full transparency, you don't need any paid tools for direct mail tracking. A free QR generator plus a Google Sheet where you log calls and redemptions gets you most of the way there. The paid tools just save time and keep everything in one place once you're running multiple cards.
Here's the bigger picture. Tracking isn't really about proving one card worked. It's about what happens on cards #2, #3, and beyond.
Card #1: You sell 16 slots at $500. Revenue is $8,000, and after $2,999 All Inclusive printing you keep $5,001.
Card #2: Because you sent results reports, most advertisers come back. If you match Michael's roughly 75% on quarterly cards, that's 12 of 16. You only prospect for 4 new slots instead of 16, and the profit is still $5,001.
Card #3 and beyond: With most of the card renewing, your selling time drops so much you can run a second card, then a third. Two to three cards a month is $10,002 to $15,003 in profit.
One honest caveat. Monthly cards churn more than quarterly ones, so expect fewer renewals per card if you mail every month. It levels off once you have a group of advertisers rotating on and off.
None of that works without tracking.Advertiser renewals are what turn this from a nice side hustle into a real business. Renewals need proof. Proof needs tracking.
Use this formula: ROI = (Revenue − Cost) / Cost × 100. If a $500 postcard slot produces $24,000 in closed business, ROI = ($24,000 − $500) / $500 × 100 = 4,700%. Count the slot price plus any design or tracking fees as the cost. For revenue, count closed customers and, for repeat businesses, their lifetime value. If the advertiser shares their margin, run it on profit too, because that's the honest number.
If you calculate it on profit, anything above 0% means the card made the advertiser money. Beyond that, there's no honest universal benchmark, because a $59 dental special and a $12,000 roof are completely different math. For high-ticket service businesses, one closed customer usually covers a $500 slot many times over. Lower-ticket businesses like restaurants need repeat customers to get there, which is why lifetime value matters so much for them.
Give every advertiser their own trackable QR code, then add the method that fits their business: a tracked phone number for service businesses, a promo code for restaurants and retail, and a dedicated landing page with UTM tags for businesses with online forms. Set it all up before the card goes to print. A tool like ScanLab logs every scan per advertiser and builds the report you send them about 30 days after the card mails.
In our community's experience, the first calls and scans usually start 7 to 14 days after mailing, then trickle in for weeks as people act on a card they kept. USPS doesn't guarantee a delivery window for Marketing Mail, so the clock really starts when the cards land. Send your first results report around 30 days after mailing, and check again at 60 to 90 days for the fuller picture.
Not one we'd stand behind. Response depends on the routes, the offer, the design, the industry, and how fast the business follows up, and there's no reliable published benchmark for shared postcards. That's exactly why you track. After one or two cards, your own QR scans, calls, and redemptions become the baseline that matters, and they're what your advertisers care about anyway.
It's your call. Some operators include a basic QR code in the standard $500 slot and sell a dedicated landing page plus call tracking as a $100 upgrade, making it a $600 slot. Others include everything at $500. I'd start with everything included while you learn the workflow, then offer paid upgrades to your highest-value advertisers once it's second nature.
That's direct mail ROI in 2026. It's measurable, it's simple to calculate, and for high-ticket service businesses it beats most ad channels on return per dollar. If you only do one thing from this post, put a trackable QR code on every single ad. Your advertisers will stop treating your card like junk mail and start treating it like a real media channel, and renewals get a whole lot easier from there.
As always, I'm rooting for you. Peace.
Ready to run your own card?
Get the course, scripts, tools, and weekly coaching inside the 9x12 Method community.