GROWTH
Published on

How to track QR codes on direct mail

Authors
  • Name
    Direct Mail Growth
    Twitter

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.

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:

FieldExampleWhy it matters
Piece token7K4M2QIdentifies the exact mailed piece without exposing the recipient
Campaign IDFY26-Q3-ABM-POSTCARDGroups scans, replies, meetings, and revenue under one campaign
CRM record IDInternal contact or account keyConnects the scan to sales history and ownership
Creative versionpostcard-benefit-aSupports message and format comparisons
Scan timestampISO 8601 timeShows response delay and supports routing rules
DestinationLanding page URLDocuments what the recipient saw
User agentMobile browser stringHelps 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.

SetupWhat it measuresBest useMain limit
One shared QR codeAggregate scans by campaign or creativeBroad mail and early creative testsCannot identify a recipient before form submission
Unique code by segmentScans by audience or offer groupRegional or industry comparisonsCannot identify the person or exact piece
Unique code per pieceRecipient, account, piece, and campaign activityB2B outbound, ABM, customer expansionRequires 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.

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:

  1. Validate the token and reject malformed requests.
  2. Look up the campaign-member mapping.
  3. Write an immutable scan event with time and basic request data.
  4. Update the CRM campaign member or create an activity record.
  5. Notify the assigned owner when the routing rule calls for it.
  6. 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. I care about the phone experience because that is where the response actually happens, not in a tidy browser preview on a laptop. Tiny text, wide forms, slow video, pop-ups, or a call to action buried below the fold are enough to lose someone. Scan the printed piece yourself, over a cellular connection. The desktop preview proves very little.

I also refuse to reuse tokens across recipients or put personal data in a URL. Campaign names need documenting before production, too. For tests, seed the mailing with internal records and flag their tokens; otherwise those scans drift into the response numbers and somebody eventually presents them as genuine interest.

Before I release a print job, I take samples from every segment and follow the whole route. Actual codes from the production artwork. Correct page, correct offer, analytics firing, CRM activity landing on the record it belongs to. Once delivery begins, I do it again outside the company network. It is a slightly tedious check, which is still cheaper than discovering a broken campaign after the pieces land.

A practical launch checklist

Start with the attribution requirement, never the artwork. Does the team need campaign totals, segment results, or a recipient-level signal? Named B2B mail gets one opaque token per piece, mapped to the campaign member. I would not compromise on that just to make production easier.

My launch check is deliberately uneven because some parts deserve more attention than others:

  • The printed QR code and short URL both reach a redirect we control.
  • Mobile page, then event log, then the CRM record. I inspect each hop and make sure the sales alert reaches the right owner.
  • Forwarded links. Duplicate scans.
  • UTM names and response-status rules written down where the next campaign team can find them, not buried in somebody's notes.
  • Keep the redirect domain active after delivery, and watch the errors.

Frequently asked questions

How do you track QR code scans from direct mail?

Track direct mail QR scans by giving each piece an opaque token and sending every visit through a redirect you control. For example, go.example.com/r/7K4M2Q logs the piece, campaign, and time, then sends the reader to the mobile page quickly. The matching CRM record still needs updating, but I will not make the visitor wait for it. The redirect event is my source of truth. Analytics scripts get blocked, and preview tools generate requests that are not real responses.

Can a QR code tell you who scanned a mail piece?

No, a unique QR code tells you which mailed piece was scanned, not necessarily who held the phone. That distinction matters. If the piece was forwarded, I want a form, login, or some other confirmation before anyone claims we know the person.

How long should a direct mail QR code stay active?

A direct mail QR code should stay active for as long as the piece might realistically be sitting around or getting forwarded. Usually months, not the week the campaign is top of mind. I keep the domain under company control and leave the redirect in place, even if its destination changes later. Printed mail outlives the campaign calendar surprisingly often.

What should you measure besides total QR code scans?

Measure unique pieces scanned, then follow those responses through forms, meetings, pipeline, and revenue. Total scans are noisy. One interested person may scan three times; a security scanner or your own print test can masquerade as engagement. I keep the raw events, but reporting gets one response per piece. I have stopped letting inflated totals hijack campaign reviews because they never meant much in the first place.