Almost every advertiser hits this. The number in Ads Manager and the number of people who actually contacted you do not match, often by a factor of three. Here is what causes the gap, and which number is telling the truth.
They are rarely one problem. Usually several of these are running at once, which is why the gap is hard to reason about from Ads Manager alone.
When the platform cannot observe a conversion directly — an iOS user who opted out of tracking, for instance — it estimates one statistically. Those estimates are counted in your reported total. They are not fabricated, but they are not individual people you can call either.
A default window credits a conversion to an ad someone clicked up to seven days earlier, or merely saw up to a day earlier. A lead attributed to Monday's spend may have arrived on Friday, which makes any day-by-day comparison misleading.
A visitor who submits a form, then calls, then fills in a second form is one customer and potentially three conversion events. Without deduplication against a real contact record, the reported count inflates.
Bots, competitors, mistyped numbers and your own test fills all count as conversions on the platform side. They never count as leads on yours.
Running the browser pixel and a server-side Conversions API feed without matched event IDs means the same submission is reported twice. This one is common and quietly doubles the number.
Your CRM count is the one to run the business on, because every row in it is a real person with a real phone number. The platform's number is still useful — it is directionally right about which campaigns and audiences are working, and it is what the algorithm optimises against — but it should never be the figure you use to calculate cost per lead.
The failure mode worth avoiding is optimising toward the platform's count. Tell Meta a conversion is a form fill and it will find you the people most likely to fill in forms, which is a different group from the people most likely to buy. Feed real outcomes back instead and the optimisation target changes to something that pays you.
A gap is normal. A gap you cannot explain is the problem. If you can account for the difference — modelled conversions, duplicates, junk — you can work with it. If the two numbers simply disagree and nobody knows why, every budget decision downstream is being made on a number nobody trusts.
Send a shared event ID with both the browser pixel and the Conversions API so the platform can recognise them as one event rather than two.
Pick the CRM as the single source of the lead count and reconcile everything against it. Two systems each holding a partial truth is how the disagreement started.
Bot filtering and validation on the form keep test and spam submissions out of both the CRM and the conversion feed.
Once closed revenue is attributed back to campaigns, the lead-count discrepancy stops mattering — you are comparing money in against money out, and neither number is modelled.
Book a demo and we'll compare your Ads Manager numbers against what actually reached you.