QR code direct mail is the cheapest measurement you can bolt onto a postcard. It costs nothing to print a code, and it turns a channel most owners describe with a shrug into a channel with a number next to it. The catch is that a QR code only counts scans, and scans are not calls. Most codes on mail fail for boring physical reasons: too small, too little contrast, pointed at a homepage, or printed without anyone testing the thing on an actual phone. Here is how to do it properly, and what the numbers will and will not tell you.
The short version: Use a dynamic code so you can count scans and fix a bad link after printing. Print it at least one inch square with a clear margin, dark on light, on the same panel as the offer. Send it to a page built for that one offer with a tap-to-call button, tag the URL so your analytics can separate it, and use a different code or URL per route so you learn which streets respond. Pair it with a tracking phone number, because most people will still call.
What QR code direct mail can and cannot tell you
A QR code answers one question well: how many people took their phone out because of this card. That is a real signal, and it arrives without anyone at your shop remembering to ask "how did you hear about us."
What it will not tell you is total response. Plenty of homeowners read the card, put it on the counter, and call the number three weeks later when the pipe leaks. That call is a mail response with no scan attached to it. So treat scans as a floor, not a total. If you get 12 scans and 9 calls on the tracking number, your drop produced at least 21 responses, and you should not average those two numbers into one.
Set expectations before you print. Scan counts on consumer mail usually land in the low single digits as a percentage of the pieces delivered, and often below one percent. That is not a failure. A 2,500-piece drop at a one percent scan rate is 25 people who pulled out a phone with your offer in front of them, which is a warmer audience than 25 clicks from a cold ad. Log your own number on drop one and compare drop two against it. Your own baseline is worth more than any benchmark you read.
Build the code so it works
There are two kinds of QR code, and the difference matters.
- Static. The URL is baked into the pattern. Free to make, but you cannot change the destination or count scans in the code itself, and a long URL makes a dense pattern that scans poorly.
- Dynamic. The code points at a short redirect you control. You get a scan count, and you can repoint it if the offer expires or the landing page breaks. Worth the few dollars a month for anything you print in the thousands.
Keep the encoded URL short either way. Fewer characters means fewer modules, a chunkier pattern, and a faster read in a dim entryway. A short branded link like your-domain.com/fall beats a URL with 60 characters of tracking string hanging off it. Put the long tracking string on the destination page instead, using the redirect.
Size, contrast, placement
- One inch square, minimum. Codes are readable smaller in theory, but a person holding a 9x12 card at arm's length in a hallway is not the ideal case. One inch is a safe floor, and 1.25 inches is better.
- Leave the quiet zone. Scanners need clear space around the pattern, roughly an eighth of an inch. Do not tuck the code against a photo edge, a border, or the fold.
- Dark on light. Black or your darkest brand color on white or a very light tint. Inverted codes and low-contrast pairings fail on a lot of phones.
- Same panel as the offer. A code on the back while the offer is on the front makes people flip and lose interest. Put it next to the offer and the phone number.
- Tell people why. Four words above it. "Scan for the $89 tune-up." A bare code gets ignored, since nobody scans out of curiosity anymore.
Then test it as a printed object, not on a screen. Print the proof at full size, scan it with an iPhone camera and an Android camera, from about 18 inches, in a dim room, and after the piece has been in a bag and creased once. Also confirm the destination loads on a phone in under three seconds. A code that resolves to a slow page is a code that produced nothing.
Point it somewhere built for the job
The most common mistake is sending a scan to your homepage. Someone standing in their kitchen with a specific offer in hand now has to hunt for it, and most will not. Build one page per campaign, with four things on it: the same offer in the same words as the card, a tap-to-call button above the fold, three lines of proof, and a short form. Nothing else.
Tag the destination so your analytics can separate it. A simple scheme works forever: source is the mailer, medium is postcard, campaign is the drop, and content is the route. Something like utm_source=eddm and utm_medium=postcard and utm_campaign=fall-2026 and utm_content=route-c012. Keep the tags on the redirect target, not in the printed code.
That last piece is the one owners skip and later wish they had. Give each carrier route its own code or its own short link. When drop one comes back, you can see that the Nabnasset routes scanned at three times the rate of the routes across town, and route selection on drop two stops being a guess. If you need a refresher on how routes are chosen in the first place, our guide to how the shared mailer works covers the per-household math behind them.
Read it monthly, then act
Put four numbers on one sheet after every drop: pieces delivered, scans, calls to the mail tracking number, and jobs booked from either. Divide jobs booked into the cost of the drop and you have a cost per job for that channel, which is the only number worth arguing about. Compare it to your cost per job from paid search and from referrals. Then move budget toward whichever one wins, and re-check next season, because these numbers drift.
One more leak to close. A scan at 8pm often becomes a phone call, and a call that hits voicemail is a job you paid postage to lose. If the phone is not covered outside business hours, that is where your next fix belongs, ahead of any change to the card. The AI Blueprint lays out where an answering agent or a follow-up automation actually earns its keep, and where it just adds cost.
A QR code will not make a weak card work. What it will do is end the argument about whether the mail did anything, and tell you which streets to mail again. Print it big, point it at a real page, tag it by route, and read the sheet.
Want the tracking set up before your next drop?
Book a quick intro call and we will map the code, the landing page, and the tracking number so drop one comes back with numbers you can use. Every card on our shared mailer includes QR tracking and a free professional design. You can also see how EDDM works first.
Book the intro call →