The Ecomm Analyst

Growing stores, one honest take at a time.

How to measure direct mail campaigns on Shopify

Direct mail is the channel where pixels help the least. A postcard has no click. Someone sees it on the counter, remembers your name a week later, and searches for you or types your URL. The order lands in branded search, organic or direct, and your attribution tool gives the postcard nothing. Meanwhile the mail vendor sends a report claiming hundreds of orders. Neither number is the one you should budget on.

Why mail breaks normal attribution

Most vendor reports are matchbacks. The vendor takes the list of households it mailed, compares it to your orders over a window, often 30 to 60 days, and credits every match to the mailer. That counts customers who were going to buy anyway. It gets worse when the audience is past customers or recent site visitors, because those people already had a high chance of ordering. Mailing a postcard to someone who abandoned a cart yesterday and then counting their order as a postcard sale is the same trap as trusting retargeting ROAS on Meta.

Your attribution tool has the opposite problem. Without a click or a tagged visit, it can only credit the touch it saw, which is usually a branded search or a direct visit. Mail ends up looking worthless, and branded search looks better than it is.

Start with a holdout

The cleanest read on mail is a holdout group. Before the drop, split the audience at random, mail most of it and hold back 10 to 20 percent. After the window closes, compare the order rate of the mailed group to the held-back group. The gap is what the mail actually did. Ask any vendor, whether that is PostPilot or a local print house, if they can hold out a random slice and report matchbacks for both groups. If they can’t, split the list yourself before you upload it and run the comparison from your Shopify orders export.

Holdouts need volume. A few hundred postcards won’t produce a difference you can trust. If your drops are small, run the same test across several drops and add the results together. I covered the general approach in what incrementality testing is and the lighter version in a cheap geo holdout to sanity check a channel.

Give mail its own trackable path

Put a QR code on every piece and point it at a URL with UTM parameters. Add a short vanity URL that redirects with the same parameters for people who would rather type. Keep the structure consistent so mail shows up as one line in every tool, something like utm_source=postcard, utm_medium=direct_mail and a campaign name per drop. The structure I use is in UTM parameter structure for Shopify.

Treat these numbers as a floor. Plenty of people will ignore the QR code and search your brand name instead. A unique discount code per drop helps a little, but codes leak to coupon sites and get used by people who never saw the card, so don’t let code redemptions stand in for the whole response.

Ask buyers where they heard about you

A post-purchase survey with “postcard or mail” in the answer list catches the people who saw the card and then searched. It is the only tool here that picks up that path directly. Show the question on first orders only, keep the answer list short and randomize the order. Fairing’s App Store listing shows a free plan up to 200 orders a month and $49 a month for 201 to 500 orders. If your mail program is large, watch the survey share in the weeks after each drop. A bump in “postcard” answers that lines up with the drop dates is good evidence the mail is being noticed.

Where ThoughtMetric fits

ThoughtMetric combines multi-touch attribution from its own pixel with post-purchase survey answers in the same reports, so a buyer who says “postcard” but arrived through branded search doesn’t simply disappear into search. (Disclosure: ThoughtMetric sponsors this site.) It also supports custom channels, which is useful for giving direct mail its own line instead of leaving it scattered across referral and direct. Pricing is based on monthly pageviews, starting at $99 a month for 50,000 pageviews, with every feature on every plan and a 14-day free trial. It will not tell you incremental lift on its own. You still need the holdout for that.

Putting the numbers together

Say you mail 20,000 postcards at $0.80 each, so $16,000 all in. The vendor’s matchback shows 420 orders, which works out to about $38 per order and looks great. Your holdout tells a different story. The mailed group ordered at 2.1 percent over 30 days and the held-back group ordered at 1.6 percent. The real lift is half a percentage point, or 100 incremental orders, which puts the cost per incremental order at $160.

Whether $160 is good depends on margin and on who you mailed. If those 100 orders are new customers with strong repeat rates, it may be a bargain. If they are lapsed customers buying a discounted reorder, probably not. Use the holdout for the budget decision, the survey for a running read between tests, and the UTM numbers to compare creative and offers across drops.

Picking an approach

  • Spending real money on mail? Run a holdout on every drop before you trust any other number.
  • Mailing past customers or site visitors? Discount the vendor’s matchback heavily, because those people were likely to buy anyway.
  • Want an ongoing read between tests? Add “postcard or mail” to a post-purchase survey.
  • Comparing creative or offers? Use QR codes and vanity URLs with consistent UTMs.
  • Want mail, survey answers and your other channels in one report? ThoughtMetric (our sponsor) covers that, alongside a holdout for lift.

Leave a Reply

Navigation

About

Six years in e-commerce. Three Shopify stores across different niches, one scaled past seven figures. I’ve tested hundreds of ad creatives, obsessed over email flows, and learned more from my failures than my wins.

Now I focus on conversion optimization, retention marketing, and the analytics behind it all. This blog is where I share what actually works, backed by real numbers. No fluff, no guru energy.