- Published on
QR codes on direct mail: a tracking setup that actually attributes
- Authors
- Name
- Direct Mail Growth
QR code direct mail tracking works when each mailed piece carries a unique, durable link tied to one CRM record. A scan should identify the piece, record the campaign and recipient, and send the visitor to a fast mobile page without exposing personal data in the URL.
That setup gives sales and marketing a usable signal. A shared QR code can count total scans, but it cannot tell you which account or contact responded. If attribution matters, generate a per-piece code, keep a short printed URL beside it, and pass every visit through a redirect service you control.
QR code direct mail tracking starts with link design
A QR code is only a picture of a URL. The attribution comes from the URL structure and the systems behind it.
Use a first-party tracking domain such as go.example.com. Give every mail piece a random token, for example go.example.com/r/7K4M2Q. Store that token before the piece goes to print. When someone scans, the redirect looks up the token, records the event, and forwards the visitor.
The token should be opaque. Do not put an email address, company name, CRM contact ID, or sequential database ID in the link. Those values expose data and make links easy to guess. A random token with enough possible combinations solves both problems.
Keep the redirect separate from the final page. If the offer changes or the destination moves, you can update the redirect. Printed QR codes cannot be patched after delivery.
A practical event record includes:
| Field | Example | Why it matters |
|---|---|---|
| Piece token | 7K4M2Q | Identifies the exact mailed piece without exposing the recipient |
| Campaign ID | FY26-Q3-ABM-POSTCARD | Groups scans, replies, meetings, and revenue under one campaign |
| CRM record ID | Internal contact or account key | Connects the scan to sales history and ownership |
| Creative version | postcard-benefit-a | Supports message and format comparisons |
| Scan timestamp | ISO 8601 time | Shows response delay and supports routing rules |
| Destination | Landing page URL | Documents what the recipient saw |
| User agent | Mobile browser string | Helps diagnose scanner and device problems |
Do not treat every redirect request as a human response. Link previews, security scanners, and internal tests can inflate the count. Keep raw events, then report both unique pieces scanned and total scans. Count one response per piece while preserving later activity in the event log.
Per-piece unique codes beat one shared code
One shared code can answer a narrow question: how many scans did this creative generate? It cannot identify the responding contact, account, list segment, or piece. The visitor must fill out a form before the team knows who responded.
Per-piece codes carry identity through the scan. If Maria at Northwind receives token 7K4M2Q, the redirect maps that token to her campaign-member record. The CRM can log engagement immediately, even if Maria reads the page without submitting a form. Sales gets an intent signal tied to the right account.
Use unique codes when the campaign targets named prospects, customers, or accounts. A shared code can be acceptable for unaddressed mail, broad geographic drops, event handouts, or low-cost tests where aggregate response is enough.
| Setup | What it measures | Best use | Main limit |
|---|---|---|---|
| One shared QR code | Aggregate scans by campaign or creative | Broad mail and early creative tests | Cannot identify a recipient before form submission |
| Unique code by segment | Scans by audience or offer group | Regional or industry comparisons | Cannot identify the person or exact piece |
| Unique code per piece | Recipient, account, piece, and campaign activity | B2B outbound, ABM, customer expansion | Requires token generation and CRM mapping |
Unique links require clean source data. If a token has the wrong address or owner, the scan event will inherit the error. Verify addresses and preserve the production campaign-member snapshot. Building a B2B direct mail list covers the upstream work.
Print a short URL as a fallback
Put a readable short URL near every QR code. Some recipients work from a desktop, block camera access, or prefer typing. Others receive a forwarded piece after the original contact changes roles. The fallback should lead through the same tracking system as the QR code.
For a unique piece, print a short path such as go.example.com/7K4M2Q. Keep it case-insensitive and avoid ambiguous characters such as 0, O, 1, I, and l. Six to eight friendly characters are easier to type than a long query string.
Do not print the final landing page URL with all UTM parameters. It looks untrustworthy, invites typing errors, and prevents later destination changes. The short path should resolve to the same campaign-member token and redirect used by the QR code.
Test both routes from the production artwork. Scan a printed proof with several native camera apps, then type the fallback URL on a phone and desktop. Leave clear space around the code, use strong contrast, and avoid folds or textured stock. For most postcards and letters, a code around 0.8 to 1 inch square gives cameras a reasonable target.
Use consistent UTM conventions
UTM parameters describe the visit to web analytics. The unique token identifies the mailed piece. Keep those jobs separate.
A redirect destination might look like this:
https://www.example.com/demo?utm_source=direct-mail&utm_medium=postcard&utm_campaign=fy26-q3-abm&utm_content=benefit-a
Choose a written naming convention before launch. Lowercase values and stable labels reduce split reporting. Avoid letting one campaign use direct-mail, another use Direct Mail, and a third use mail. Analytics tools will usually treat them as different values.
Use utm_source=direct-mail consistently. Let utm_medium describe the physical format, such as postcard, letter, or dimensional-mail. Use utm_campaign for the durable campaign name and utm_content for the message, offer, or creative version. If your analytics standard differs, follow it across every campaign.
Do not put recipient identity in a UTM. Analytics URLs can appear in browser history, referrer logs, screenshots, and shared links. The private mapping belongs in the redirect database and CRM.
Web analytics will miss some activity because of privacy controls and blocked scripts. Treat the redirect event as the primary scan record. Use UTMs to analyze behavior after the redirect. For a model that includes meetings, pipeline, and revenue, see how to measure direct mail ROI.
Design the landing page for mail traffic
Most scans open on a phone. The landing page must work on a narrow screen, load quickly over a cellular connection, and make the next step obvious without zooming.
Match the page to the piece. Repeat the same offer, headline idea, and visual cue so the recipient knows the scan worked. If the postcard promises a five-minute assessment, the page should open with that assessment. Sending everyone to the home page breaks message continuity and makes attribution harder.
Place the main action in the first screenful. That might be booking a meeting, choosing a gift, downloading a guide, or replying to a named rep. Keep secondary navigation quiet. A mail recipient has already crossed from a physical piece to a phone, so do not make them search again.
For known recipients, prefill only what is safe and helpful. Avoid displaying sensitive CRM fields. The page must still make sense when pieces get forwarded or links get shared.
Keep forms short. If the token already identifies the campaign member, do not ask for information you possess merely to complete attribution. Ask for fields needed to fulfill the request or confirm the person's identity. Explain what happens after submission.
Before launch, test page speed, forms, booking, and error states on current iOS and Android devices. Disable a tracking script and confirm the core action still works.
Connect every scan back to the CRM
Create the CRM mapping before generating artwork. Each production row should contain the account ID, campaign-member ID, piece token, offer, creative version, and destination. Export the QR image or URL from that controlled table.
When the redirect receives a scan, it should:
- Validate the token and reject malformed requests.
- Look up the campaign-member mapping.
- Write an immutable scan event with time and basic request data.
- Update the CRM campaign member or create an activity record.
- Notify the assigned owner when the routing rule calls for it.
- Redirect the visitor immediately, even if the CRM update must run in a queue.
The page load should never wait on a slow CRM request. Record the scan locally, redirect, then retry the CRM sync in the background. Use an idempotency key based on the scan event ID so a retry does not create duplicate activities.
Define the status change with sales. A scan may set a campaign member to Responded: QR scan, but it should not become a qualified opportunity. Many teams notify sales on the first human scan, then raise priority after a form submission or booked meeting.
Forwarded mail needs care. The token identifies the piece that was sent, not necessarily the person holding it. Phrase CRM activity as "piece assigned to Maria scanned" rather than "Maria scanned" unless a form, login, or other confirmation establishes identity. This distinction prevents false certainty in account history.
If lifecycle or sales activity triggers mail, use the same IDs at send time and response time. See triggered direct mail from CRM events for the workflow.
Avoid the mistakes that erase attribution
Generic codes are the most common failure. A code that points to the company home page may generate traffic, but it loses campaign identity and recipient mapping. Even a shared campaign page limits the team to aggregate counts.
Dead links erase the response. Domains expire, pages move, and temporary routes get removed. Use a domain the company controls, monitor redirect errors, and keep campaign links live while the mail can circulate. Physical pieces can sit on desks for months.
A desktop-first landing page wastes scans. Tiny text, wide forms, slow video, pop-ups, and hidden calls to action all create friction on phones. Test the real route by scanning the printed piece over a cellular connection. A desktop preview is not enough.
Other damaging mistakes include reusing tokens across recipients, placing personal data in URLs, counting test scans as responses, and failing to document campaign names. Seed the mailing with internal records, flag those tokens as tests, and exclude them from performance reporting.
Run an end-to-end check before releasing the print job. Sample each segment, scan the actual codes, confirm the page and offer, inspect analytics, and verify CRM activity on the expected record. After delivery starts, repeat the check outside the company network.
A practical launch checklist
Start with attribution requirements, not artwork. Decide whether the team needs campaign totals, segment results, or recipient-level signals. For named B2B mail, generate one opaque token per piece and map it to a campaign member.
Then verify the full path: printed QR code and short URL, controlled redirect, mobile landing page, event log, CRM update, and sales alert. Test forwarded links and duplicate scans. Document UTM names and response-status rules. Finally, keep the redirect domain active and watch for errors after delivery.
That chain turns a scan into evidence the team can use. If any link is missing, the QR code is only a convenient way to open a page.