Tracking & Attribution

What Is a Good Match Rate for Conversion Tracking?

Match rate is the share of conversions you can tie back to a tracked session. What counts as good, why it's not EMQ, and why it gates every other metric.

Quick answer

Match rate is the share of your conversions that can be tied back to a tracked visitor session. It is the metric that decides whether every other attribution number is trustworthy, because an unmatched purchase has no source, no campaign and no journey — it is revenue your reporting cannot explain. Match rate is not Event Match Quality: match rate is measured in your own data, EMQ is the ad platform's score for how well it can resolve an event to a user.

Tell us what's broken. We'll fix your tracking — free.

Describe the tracking/attribution problem you're stuck on and we'll map it to a fix: server-side conversions to Meta, Google, TikTok and Pinterest, plus first-party tracking that survives Safari. No code required.

Match rate is the share of your conversions that can be tied back to a tracked visitor session. If 100 orders come in and 82 of them can be connected to a visitor whose journey you recorded, your match rate is 82%.

It is the single most load-bearing number in attribution, and almost nobody reports it. An unmatched purchase has no source, no campaign and no journey — it is revenue your reporting cannot explain. Every channel breakdown you look at is computed on the matched portion only, which means match rate silently determines how much of your business your dashboard is actually describing.


What does match rate actually measure?

It measures the join between two datasets you already have: conversions on one side, tracked sessions on the other.

A conversion arrives from your commerce system — a Shopify order, a Stripe charge, a CRM deal marked won. It carries an email, maybe a phone number, an order ID and an amount. Separately, your tracking has recorded sessions: visits carrying a source, a campaign, a landing page, sometimes a click ID.

Matching is the act of deciding that this order belongs to that visitor. When the join succeeds, the purchase inherits a journey and the revenue becomes attributable. When it fails, the order is still real and the money is still real — but it lands in your reporting as revenue from nowhere.

Three things make the join fail: the buyer converted on a device or session your tracking never saw, the identifiers don’t agree between systems (a work email at checkout, a personal one at signup), or the session data expired before the purchase happened.


Is match rate the same as Event Match Quality?

No, and conflating the two is the most common confusion on this topic.

Match rate Event Match Quality
What it measures Conversions you can tie to a tracked session How well the ad platform can resolve an event to a user
Whose data Yours Meta’s
Where you see it Your own attribution reporting Meta Events Manager
Scale A percentage of conversions A score from 0 to 10
What fixes it Identity resolution and capture coverage The match parameters your payload carries

They can move independently. You can have a superb Event Match Quality score of 9.5 — meaning Meta resolves your events beautifully — while your own match rate sits at 55%, because nearly half your orders never got connected to a session in the first place. The events you did send were excellent; you just didn’t send events for a lot of the business.

The relationship runs one way. Match rate is upstream: a conversion you can’t match is a conversion you can’t enrich with identifiers, so poor match rate eventually drags EMQ down too. Fixing EMQ does nothing for match rate.


Why does match rate gate every other metric?

Because every attribution number you read is computed on the matched subset, and almost no dashboard tells you how big that subset is.

Consider a month with $500,000 in revenue and a 60% match rate. Your channels table shows Google Ads at $120,000, Meta at $90,000, organic at $70,000 and so on — and every one of those figures is drawn from the $300,000 that matched. The other $200,000 isn’t wrong, isn’t missing from your bank account, and isn’t in the report.

Now the problem: the unmatched portion is not a random sample. It is systematically biased toward exactly the journeys that are hardest to track — cross-device buyers, long consideration cycles, privacy-restricted browsers, people who first arrived months ago. Those are disproportionately the journeys that start on paid channels and finish somewhere else. Scaling decisions made on the matched 60% are made on a sample that under-represents the channels most likely to be opening journeys.

This is why a reported ROAS can be confidently precise and still wrong. Precision describes the matched set; accuracy depends on what got left out.

The practical consequence: a channel report without a match rate beside it is uninterpretable. Two agencies can hand you attribution decks with identical channel splits, one computed on 90% of revenue and one on 45%, and nothing on the page distinguishes them.

Total revenue split into the portion matched back to tracked sessions and the portion that arrives with no session to explain it


What counts as a good match rate?

It depends far more on your business model than on your tracking quality, which is why a single industry benchmark would be misleading.

Four factors set your realistic ceiling:

How the purchase happens. A same-session ecommerce checkout is the easiest case — the buyer converts in the browser you were already tracking. A B2B deal closed by a salesperson three weeks after a whitepaper download is the hardest, because the conversion event happens in a CRM with no browser involved at all.

What you collect, and when. Matching runs on identifiers. If your form captures email and phone and your checkout captures the same email, the join is straightforward. If the visitor browses anonymously and only supplies an email at the payment step, you have one identifier and one chance.

Consideration length. Every day between first touch and purchase is another day for a cookie to expire, a device to change, or a browser to clear storage.

Device split. Mobile-first audiences convert across devices more often, and cross-device is the join that most tracking setups simply cannot make.

So rather than chasing a number, judge match rate three ways. Compare it to itself over time — a stable rate that drops ten points in a month is a signal something broke, and that’s worth more than any benchmark. Compare it across your own segments — if Shopify traffic matches at 85% and your lead-gen funnel matches at 40%, the gap tells you where to look. And ask what the unmatched revenue has in common, because the answer is usually a specific, fixable pattern rather than diffuse loss.

What is not good is a match rate you can’t see. The failure mode here isn’t a low number; it’s not knowing the number.


How do you raise it?

Five things, in descending order of impact.

1. Collect a second identifier. Email alone gives you one chance to join. Email plus phone gives you two, and they fail in different situations — people use work and personal email addresses across contexts far more often than they use two phone numbers.

2. Capture before the conversion, not at it. If the only identifier you ever see arrives at checkout, every pre-purchase session is anonymous and can only be joined backwards. Capturing an identifier earlier in the funnel means the journey is already attached to a person by the time they buy.

3. Make the visitor ID survive. Much matching depends on recognising a returning browser. A visitor ID written by JavaScript is capped at seven days in Safari; one set by the server as a first-party cookie is not. That difference alone decides whether a three-week consideration cycle can be matched.

4. Normalise identifiers on both sides. John.Smith@Gmail.com and johnsmith@gmail.com are the same mailbox and will not join as strings. Phone numbers arrive in half a dozen formats for the same number. Normalising to a canonical form before comparing — lowercase and trim for email, E.164 for phone — recovers matches that were always there.

5. Keep unmatched conversions instead of discarding them. A purchase that can’t be matched today can often be matched later, when the same person returns and identifies themselves. Systems that drop unmatched conversions throw away the evidence permanently.


How does PartialLeads measure and raise match rate?

By reporting it as a headline number rather than burying it, and by matching on a tiered ladder of identifiers rather than a single join key.

Match Rate is a KPI, not a footnote. It sits in the Attribution Report’s KPI strip alongside attributed revenue, attributed purchases, time to purchase and recovered revenue — each with a comparison against the prior period. The number that tells you how much of your business the report covers is displayed with the report, not buried in a settings page.

Unmatched revenue is displayed, not hidden. A Revenue by Match Quality donut splits total net revenue three ways: partial-captured, submit-completed, and unmatched. The third slice is the honest one — the report shows you its own blind spot, and its size, every time you open it.

Matching runs on a confidence-ranked ladder. Every incoming purchase is matched against sessions in tiers: a visitor-ID echo carries the highest confidence, then email, then phone, then IP. The first tier that resolves wins, so a strong signal is never displaced by a weak one, and a weak signal is still better than no match at all.

Identity clustering gives the join more than one chance. Sessions are unioned into one person across six tiers — visitor ID, email, phone, IP and user agent, device fingerprint, and click ID. A purchase matched to any session in a cluster inherits the whole cluster’s journey, which is what makes cross-device and multi-session matching possible rather than aspirational.

Identifiers are normalised before comparison. Email is lowercased and trimmed, phone is converted to E.164 with a country-code fallback derived from session geography. This is unglamorous and it recovers a real share of joins that would otherwise fail on formatting alone.

The visitor ID is built to survive. Stored in localStorage with a first-party cookie backup, and the cookie is set by the server rather than by script — so Safari’s seven-day cap on script-written cookies doesn’t apply. Long consideration cycles stay matchable.

Unmatched purchases are retained and recoverable. They land as anonymous rather than being discarded, and become matchable later when identity arrives. There’s a manual re-match interface for the cases a human can resolve and an algorithm can’t.

Honest boundaries. Match rate has a ceiling that no tool sets. A buyer who researches on a phone you never saw, buys on a laptop in a private window, and uses a different email at checkout is unmatchable by any method that respects the data available — and pretending otherwise would require guessing. A high match rate also doesn’t mean the attribution is right, only that a join was made; the quality of that join depends on which tier resolved it. And the tiers are deliberately confidence-ranked rather than permissive, because a wrong match is worse than an honest blank.

A confidence-ranked ladder of match tiers — visitor ID first, then email, then phone, then IP address — with each rung weaker than the one above and an honest no-match outcome at the bottom

Problem PartialLeads mechanism Where you see it working
Nobody reports match rate at all Match Rate in the KPI strip, with a vs-prior comparison Attribution Report header
Unmatched revenue is invisible Revenue by Match Quality donut, unmatched as its own slice Attribution Report, every view
One identifier, one chance to join Tiered matching: visitor ID, then email, then phone, then IP Confidence tier recorded per matched purchase
Cross-device buyers never join Six-tier identity cluster, purchase inherits the cluster journey Journey ribbon on the leads list
Formatting breaks otherwise-valid joins Email lowercased and trimmed, phone normalised to E.164 Matches that would have failed on string comparison
Long consideration cycles expire Server-set, ITP-durable visitor cookie Same visitor recognised weeks later
Unmatched conversions are lost forever Retained as anonymous, re-matchable later, manual re-match UI Purchases ledger, matched/unmatched wedge

Tell us what's broken. We'll fix your tracking — free.

Describe the tracking/attribution problem you're stuck on and we'll map it to a fix: server-side conversions to Meta, Google, TikTok and Pinterest, plus first-party tracking that survives Safari. No code required.

Sources

  1. Meta for Developers — Customer information parameters: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters
  2. Meta for Developers — Conversions API best practices: https://developers.facebook.com/docs/marketing-api/conversions-api/best-practices
  3. Google Analytics Help — [GA4] Understand (direct) / (none) traffic: https://support.google.com/analytics/answer/15258820
  4. WebKit — Tracking Prevention in WebKit: https://webkit.org/tracking-prevention/
  5. Wikipedia — E.164 international telephone numbering plan: https://en.wikipedia.org/wiki/E.164

Frequently asked questions

QWhat's the difference between match rate and attribution rate?
Match rate is whether a conversion can be tied to a tracked session at all. Attribution rate, where people use the term, usually means the share of conversions assigned to a specific channel. Match rate comes first and constrains the second — you cannot attribute a conversion to a channel if you don't know which visitor made it. A tool reporting high attribution without reporting match rate is describing a subset of unknown size.
QIs a 100% match rate possible?
Not honestly. Some buyers research on one device and purchase on another, in a private window, using an identifier they've never given you before. There is no signal connecting those two events, and any tool reporting 100% is either guessing or defining "matched" loosely enough to include guesses. A wrong match is more damaging than an acknowledged blank, because it produces confident numbers pointing the wrong way.
QWhy did my match rate suddenly drop?
A sharp drop is almost always structural rather than gradual decay. The common causes: a change to your checkout or form that stopped collecting an identifier, a tracking script that stopped loading on some pages, a browser update tightening storage rules, or a new traffic source skewed toward a device or browser that matches poorly. Compare the unmatched conversions before and after the drop — they usually share an obvious property.
QDoes a low match rate mean my tracking is broken?
Not necessarily. Some business models have a genuinely lower ceiling — long B2B cycles, phone-closed sales, marketplaces where the purchase happens off your domain. What matters is whether your rate is stable and explainable. A steady 65% for a business with a six-week consideration cycle may be near its realistic maximum; a 65% that was 85% last month is a fault.
QHow does match rate affect my Meta Event Match Quality?
Indirectly but meaningfully. Conversions you can't match are conversions you can't enrich with identifiers before sending them, so they either don't get sent or get sent with thin match data. Both outcomes drag EMQ down. The reverse isn't true — improving your payload for the events you do send won't help you match the ones you never connected in the first place.
QShould I use IP address matching to raise my match rate?
As a lowest-confidence tier, with care. Shared networks — offices, households, mobile carrier ranges — mean IP alone can join two genuinely different people. It's useful as a last resort behind stronger identifiers and within a tight time window, which is how confidence-ranked matching treats it. Using IP as a primary key inflates your match rate while quietly corrupting your attribution.
QWhere do I even find my match rate?
Most analytics tools don't report it, which is the core problem — they show you the matched data without telling you what fraction of the whole it represents. If yours doesn't, you can approximate it: take total orders from your commerce platform for a period, take the number of conversions your attribution tool has a session for over the same period, and divide. The gap between those two numbers is the part of your business your reporting can't see.

Find the qualified leads your forms are currently throwing away.

Install PartialLeads on one landing page, send traffic, and compare what your CRM captured against what PartialLeads recovered and qualified.