Why your ad platform numbers will never match your CRM
The reason your ad platform and your CRM never agree is that they are not actually counting the same thing, even though both of them call it a conversion. The platform counts against the click or impression, inside its own attribution window, resolved through its logged-in identity graph, topped up with modeled estimates for the conversions it cannot directly see, and dated to the click rather than to the event. Your CRM counts the events that genuinely landed in your systems, keyed to your own records, and dated to when they actually happened. Because the two definitions differ on several axes at once, the totals were never going to reconcile to the dollar, and the effort people pour into forcing an exact match is spent against an outcome that was never available in the first place.
The more useful way to hold it is to stop treating the gap as an error in the data and start treating it as a structural property of two systems that were built for genuinely different purposes, which means the job in front of you is not to eliminate the gap but to understand it well enough to decide which of the two numbers is allowed to govern which decision.
The platform and the CRM are built for different jobs
When a platform reports a thousand conversions and the CRM shows six hundred, the natural reaction is to assume one of them is broken, and in our experience almost neither of them ever is. The platform is reporting against a deliberately generous question, something close to "of all the conversions that happened, how many can I plausibly claim a hand in, given everything I know about who saw the ads", and it is engineered to answer generously because the bidding algorithm needs the widest defensible signal it can get in order to optimize against it. The CRM is reporting against a deliberately narrow question, closer to "what actually happened, to which record, on what date", because that number feeds billing, underwriting and finance, and none of those functions have any appetite for modeled estimates. Each number is correct for the question it was built to answer, and the divergence between them is a direct and predictable consequence of those questions being different rather than any sign that a system is misbehaving.
Where the gap actually comes from
In practice almost every discrepancy we have had to trace back resolves into one of five causes, and identifying which one you are looking at is most of the work, because a gap you can attribute to attribution windows or to deduplication is a gap you can reason about and act on rather than one that just sits in the report looking vaguely wrong.
Attribution windows. A platform crediting a conversion on a seven-day click and one-day view window will quite legitimately count a sale that closed six days after the click, and if your CRM report is grouped on a different window, or on no window at all, that same sale lands in a different bucket or a different week. On considered purchases this single mechanism can account for a large share of the whole gap, and insurance, where people deliberate for days or weeks, is about as considered as a purchase gets.
View-through and modeled conversions. Platforms increasingly count conversions that nobody clicked, attributing them to an ad that was merely seen, and they increasingly estimate conversions they cannot observe at all because consent and device limits have cut off the signal, which means a growing share of the platform number is modeled rather than measured. None of that is visible to your CRM, because no click or identifier ever reached your systems to be recorded, and this is both the fastest-growing part of the gap over the last few years and the part most teams understand least.
Identity resolution. The platform matches conversions through a logged-in graph, recognising the same person across phone and laptop because they are signed in on both, whereas your CRM can only match on whatever survived the round trip, which might be a cookie, a click ID, an email or a UTM string, and every hop in that chain loses some matches. A cross-device journey the platform stitches together with confidence frequently shows up in your CRM as two unrelated strangers, or as a single anonymous session that never resolves to a person at all.
The clock. Platforms generally credit a conversion to the date of the click or impression that earned it, while your CRM records it on the date the event itself occurred, and for a same-afternoon funnel the difference is negligible. For insurance, where days or weeks routinely separate the first click from the bound policy, the same conversions get smeared across different time periods in the two systems, which is enough to make any single-week comparison misleading even on the occasions when the running totals are fairly close.
Deduplication across platforms. Run three platforms at once and a sale that was touched by all three will be claimed by all three, because each platform sees the world through its own pixel and counts the conversion it believes it helped cause, so if you simply sum the platform-reported numbers you can comfortably exceed your actual sales, sometimes by a wide margin. Your CRM, holding the single underlying source record, counts that sale exactly once.
Where pixel and CAPI fit in
All five of those causes depend on how the conversion signal physically reaches the platform in the first place, and that is where the distinction between the browser pixel and the conversions API earns its place in the reconciliation rather than being a separate topic. The pixel fires client-side, from the user's own device, and it leaks events to ad blockers, browser privacy controls, consent rejections and the general erosion of third-party signal, while the conversions API, which is what Meta calls CAPI and other platforms call something similar, sends the same event from your own server and can carry stronger identifiers because it includes hashed data you already hold. Most serious setups now run both at the same time, and that is exactly the configuration that turns deduplication from a theoretical concern into a live one.
The platform is supposed to recognise that a given pixel event and a given CAPI event describe one and the same conversion and count it only once, and it does that by matching on a shared event ID that you are responsible for stamping identically onto both paths, so when the IDs line up the dedup works quietly and correctly, and when they drift apart, whether through a site change, a tagging bug or two different teams owning the two paths without talking to each other, the platform counts the same sale twice and your platform number inflates against the CRM for a reason that has nothing to do with marketing performance.
What makes this genuinely confusing in practice is that the effect runs in both directions at once, because CAPI tends to recover real conversions the pixel lost, which pulls the platform number back toward the CRM on the events you both see, while broken deduplication double-counts, which pushes it the other way, and you can easily have both happening simultaneously and partly cancelling out. The practical takeaway is that your server-side conversion configuration is one more thing quietly moving the platform-to-CRM ratio around, so it belongs near the top of the list of suspects the moment that ratio shifts, and a dedup break is in fact one of the most common and most easily missed triggers of the kind of alarm we describe further down, precisely because nothing on the page looks obviously broken when it happens.
Why this matters more in insurance than in retail
A retailer running a same-session checkout lives with a small gap, because the funnel is short, the identity mostly holds across a single visit, and the click and the purchase happen on the same afternoon, whereas insurance violates all three of those comfortable conditions at the same time. The funnel runs long, often weeks from first touch to bound policy, so the clock and window effects that a retailer barely notices become large and persistent; the journey crosses devices and channels repeatedly over that period, so the identity loss is heavy rather than marginal; and the thing we loosely call a conversion is really a chain of lead, then quote, then bind, and only much later the renewal and claims experience that ultimately determine whether the customer was worth acquiring at all. That chain is the same unit-economics problem we work through in The Seduction of CPL as a Metric, and the reconciliation problem and the economics problem are really two views of one underlying fact, which is that we cannot honestly price a policyholder we cannot reliably count.
The operating posture
The way out is to stop trying to force the two systems into agreement and instead adopt a small number of standing rules about how each number is used.
Pick one system of record for money. Your CRM or warehouse is the source of truth for any decision that touches budget, allowable CAC or profitability, and the platform numbers simply do not get a vote on those decisions, because they carry modeled estimates that your finance team cannot and should not be asked to defend.
Let the platform optimize against its own number. The bidding algorithm responds to the platform's own pixel and CAPI signal, so the right thing to do is feed it clean, well-configured conversion data and then judge in-platform changes on the platform's own in-platform metrics, which is not a contradiction of the previous rule so much as an acknowledgement that the optimization number and the reporting number are allowed to be two different numbers doing two different jobs.
Reconcile the gap rather than chase it to zero. Build a single view that decomposes the discrepancy into the five causes above, accept from the outset that it will never reach zero, and aim instead for a gap whose shape is stable and explainable, where you can say roughly how much comes from windows, how much from modeling and how much from identity, because a gap whose composition holds steady over months is a gap you understand, and one that suddenly shifts is a signal that tracking has broken, consent has changed or a feed has silently stopped.
Watching the ratio over time
Once that decomposition exists, the ratio of platform-reported conversions to CRM-confirmed conversions, tracked per channel, turns out to be one of the more useful health metrics you can keep. If paid social has historically reported something like 1.6x what the CRM later confirms while search reports closer to 1.15x, those multiples are not a problem in themselves as long as they hold over time, because they are effectively the known exchange rate between the two currencies and you can translate either way in your head once you trust them.
The value shows up on the day paid social moves from its usual 1.6x to something like 2.4x without any matching change in spend or strategy, because that is the point at which you know something underneath has changed, whether a pixel started firing twice after a site deploy, a consent banner began silently blocking the callback, or a modeled-conversion setting was altered under you, and the ratio surfaces it well before any single absolute number in the report looks wrong enough to investigate on its own.
We would rather be honest about the limits of this than oversell it. The ratio reliably tells you that the relationship between the two systems has moved, but it does not, on its own, always tell you why, and separating a genuine change in performance from a change in measurement still takes real investigation every single time it happens. And anyone trying to sell you a tool that promises to unify the platform and CRM numbers into a single true figure is, at best, quietly choosing a set of assumptions on your behalf and then hiding them from you, because the assumptions that create the gap do not disappear just because a dashboard has stopped displaying them.
What to do differently
A realistic sequence, in rough order of effort:
- This week. Stop placing platform-reported conversions and CRM-confirmed conversions in the same table as though they ought to be equal, and instead label each one explicitly by its source and by the question it answers, because a surprising amount of the confusion in most marketing reporting is really two incompatible numbers sharing a single column header.
- This month. Decide which system is the record for money, then say so plainly and in writing to everyone who reads the reports, since most reconciliation arguments are at bottom unresolved disputes about which number is permitted to govern a given decision.
- This quarter. Build the five-cause decomposition for your two or three largest channels and start logging the platform-to-CRM ratio per channel so that you have a baseline stable enough to alarm against later.
- Ongoing. Treat a moving ratio, rather than the mere existence of the gap, as the thing worth your attention, and put your investigation into the shifts rather than into the permanent and entirely expected difference in levels.
None of this is glamorous and none of it produces the single clean number that executives keep asking for, but the honest answer to "why don't these two numbers match" is that they were built to measure different things, on different clocks, for different purposes, and the teams that genuinely internalise that stop burning their best analysts on a reconciliation that was never going to close and start spending that time on questions that actually move the business. The clean joins you need underneath all of this, the ones that let the CRM side of the comparison mean anything in the first place, come from disciplined tracking upstream, which is a whole field report of its own in UTM hygiene at 80 campaigns.
Frequently asked questions
Why do Facebook or Google conversion counts differ from my CRM?
Because they are not counting the same thing, even though both call it a conversion. The platform counts against the click or impression, inside its own attribution window, resolved through its logged-in identity graph, topped up with modeled estimates for what it cannot directly observe, and dated to the click. Your CRM counts the events that genuinely reached your systems, keyed to your own records, dated to when they happened. Those definitions differ on several axes at once, which is why the totals diverge, usually with the platform reporting the larger number.
Which number should I trust, the platform or the CRM?
Use the CRM or warehouse as the system of record for anything involving money, meaning budget, allowable CAC and profitability, because it is the only one your finance team can stand behind. Use the platform numbers for in-platform optimization, because that is the signal the platform's own bidding responds to. The two are doing different jobs, and the mistake is asking one of them to do the other's.
Can I make the two systems reconcile exactly?
No, and the attempt usually wastes your best analysts. The realistic goal is a reconciliation that explains the gap, attributing it to attribution windows, view-through, modeled conversions, identity loss and timing, so that once each component is understood and reasonably stable, the residual becomes a monitored ratio rather than a recurring mystery.
How do the pixel and the conversions API (CAPI) affect the gap?
The browser pixel fires client-side and loses events to ad blockers, privacy controls and consent rejections, while CAPI sends the same event server-side with stronger identifiers and recovers much of that loss. Running both is now standard, but it makes deduplication critical, because the platform has to match the pixel and CAPI events by a shared event ID and count them once. When that matching breaks the platform double-counts and its number inflates against the CRM, so server-side conversion configuration is one of the first things to check whenever the platform-to-CRM ratio moves.