Introduction: if you can’t measure it, you can’t scale it
Direct mail has a reputation for being “hard to attribute.”
That’s only true when measurement is an afterthought.
In B2B, you can measure direct mail well enough to make confident decisions by combining:
- direct response tracking (QR codes, trackable URLs, PURLs)
- CRM matchbacks (pipeline outcomes by cohort)
- incrementality tests (holdouts and lift)
This guide is a B2B playbook you can implement without building a data warehouse first.

Step 1: build solid foundations (the boring part that matters)
Attribution falls apart when your data is fragmented.
Minimum foundation:
- a CRM that is the source of truth for pipeline
- a way to log mail touches (date, segment, template)
- a landing page / redirect system for QR and URL tracking
If you want a quick overview of tracking mechanisms, see: How to track direct mail marketing campaigns.
Step 2: decide what you’re trying to measure (B2B outcomes)
Pick 1–2 primary outcomes per motion.
Outbound / ABM:
- replies
- meetings booked
- opportunities created
- stage velocity
Customer programs:
- renewal saves
- expansion rate
- exec sponsor engagement
Define your event taxonomy (so reporting is consistent)
At minimum, standardize:
mail_campaign_id(one per motion/experiment)mail_template_id(creative/copy version)mail_segment(tier/persona/industry)mail_touch_date(when it was sent)
Optional but high value:
trigger_reason(demo completed, opp stalled, renewal window, event follow-up)holdout_group(test/control)
If those events start inside HubSpot or Salesforce, pair this taxonomy with the CRM-triggered direct mail workflow guide so the send trigger, campaign ID, and follow-up task use the same fields.
If you track events in analytics as well, use a simple schema:
{
"event": "direct_mail_sent",
"mail_campaign_id": "abm_tier1_q1_2026",
"mail_template_id": "note_v3",
"mail_segment": "tier1_cro",
"trigger_reason": "post_demo",
"contact_id": "crm_123",
"account_id": "crm_acc_987",
"sent_at": "2026-04-06"
}
Step 3: direct response tracking (QR codes and trackable URLs)
Trackable URLs (baseline)
Use a unique URL per campaign:
- include UTMs
- route through a redirect you control (so you can update destinations later)
QR codes (reduce friction)
QR codes improve response by:
- making the action easy on mobile
- creating a measurable “scan” event
Best practice:
- generate a unique QR per campaign (or per segment)
- use UTMs to label source/medium/campaign
Redirect links: keep control of destinations
Prefer QR/short links that go to a redirect you control, then forward to the final page.
Why:
- you can change landing pages later without reprinting
- you can log scans/visits consistently
- you can standardize UTMs even when teams forget
Example UTM convention:
utm_source=direct_mailutm_medium=handwritten(orprinted)- utm_campaign={{mail_campaign_id}}
- utm_content={{mail_template_id}}
Step 4: PURLs (personalized URLs) when you need identity
PURLs help when you want:
- a clean link between offline touch and a known contact
- personalized landing experiences
Common approach:
- example.com/{{slug}} routes to a landing page
- page recognizes the contact/account and can pre-fill forms
Trade-offs:
- requires careful privacy handling
- more implementation work than generic QR
A safer alternative to PURLs: “identify later”
In many B2B funnels, you don’t need identity at scan time.
You can:
- attribute scans/visits to a campaign/segment via UTMs
- capture identity when they book a meeting / fill a form
- match back to the mailed cohort using CRM records
This avoids overly “personal” URLs while still keeping measurement useful.

Step 5: matchbacks (pipeline-first attribution)
Not everyone scans a code.
In B2B, many of the best outcomes show up as:
- replies
- meetings booked
- stage movement
Matchbacks attribute impact by cohort:
- segment A received mail on date X
- segment B did not
- compare outcomes over an attribution window (e.g., 14/30/60 days)
This works best when you log mail touches in the CRM and keep your segmentation clean.
Matchback methodology (simple, defensible)
- Define a cohort: “accounts mailed between date A and date B”
- Define a comparison cohort: similar accounts not mailed in that window
- Choose an attribution window (14/30/60/90 days)
- Compare outcomes:
- meeting rate
- opp creation rate
- stage progression speed
- win rate (if cycle allows)
Keep the cohorts stable during the window—don’t change targeting rules mid-test.
Step 6: attribution windows (choose them intentionally)
Attribution windows depend on:
- your sales cycle length
- how quickly your audience typically responds
- the “shelf life” of your mail piece
Common B2B starting points:
- 14 days: replies and meeting booking lift
- 30 days: opportunity creation and stage movement
- 60–90 days: win rate and revenue impact (for longer cycles)
Step 7: incrementality (holdouts and lift)
If you want true confidence, use a holdout:
- randomly exclude a subset of accounts from receiving mail
- compare outcomes vs the mailed cohort
Holdouts are the closest thing to “proof” you’ll get in channel measurement.
Practical tips:
- hold out at the account level (not contact) for ABM
- keep criteria identical across cohorts
- run long enough to capture your outcome window
How to run a holdout without overcomplicating it
- Randomize within a segment (e.g., Tier 1 CRO persona)
- Start with a small holdout (10–20%) so sales still gets coverage
- Lock the rules for the duration of the test
- Use pipeline outcomes as the truth (not just scan metrics)
When you report results, separate:
- direct response (scans/visits)
- downstream impact (meetings, opps, wins)
Step 8: reporting (what to show weekly and monthly)
Weekly:
- mail sent volume by segment
- response signals (scans, landing visits)
- early funnel outcomes (replies, meetings)
Monthly:
- opportunity creation rate by cohort
- stage velocity
- win rate (if cycle allows)
- renewal/expansion lift (for customer programs)
A simple scoreboard template (example)
Track by segment and cohort:
- mailed accounts
- meetings booked rate
- opp creation rate
- pipeline created per account
- lift vs holdout (%)
Step 9: common attribution traps
- judging mail only by QR scans
- changing targeting mid-test
- no frequency caps (results get noisy)
- no control group (hard to prove lift)
- mismatched windows (declaring winners too early)
- “multi-touch” attribution without clear rules (creates false certainty)
Conclusion
B2B direct mail attribution doesn’t need to be perfect.
It needs to be good enough to answer the only question that matters: Is this creating incremental pipeline and revenue?
Build foundations, track direct response, measure pipeline matchbacks, and use holdouts when you need proof.
For the campaign workflow, review Scribeless as a measurable handwritten direct mail service.
Want help setting up tracking and lift measurement for your direct mail program? Book a campaign consult

