Ask two systems how many leads you got last month and you will get two numbers. This is not a bug in either of them. It is the direct consequence of two systems measuring different things.
What each number is
The platform number (Meta, in the reporting you see in Ads Manager) is the result of an attribution model. It counts a conversion when its model decides a click or view deserves credit, within a window it defines, and it includes conversions it modelled — statistically inferred for users it could not track directly after iOS restrictions.
The first-party number is a count of events you observed: a click logged on your tracking domain, a form submission received by your server. Nothing is inferred.
| Platform CPL | First-party CPL | |
|---|---|---|
| Source | the ad platform | your own tracking |
| Method | modelled attribution | counted events |
| Attribution window | platform-defined (often 7-day click, 1-day view) | whatever you log |
| Includes view-through | yes | no |
| Includes modelled conversions | yes | no |
| Reproducible by you | no | yes |
Why they diverge
Four mechanisms, in order of how much of the gap they usually explain:
1. Modelled conversions. After iOS restrictions, Meta cannot observe every conversion directly, so it estimates a share of them. Those estimates are counted in its reporting. Your server only counts what arrived.
2. Attribution windows and view-through. Meta may credit a conversion to a click from seven days ago, or to a view with no click at all. Your tracking attributes the lead to the click that actually landed on your page — which may be a later, different click.
3. Lost clicks. Some clicks never arrive: ad blockers, browser privacy features, a user who closes the tab before the page loads. The platform counted the click; your server never saw it.
4. Duplicate or missing events on the way back. If conversion events are sent to the platform without a deduplication ID, they can be double counted. This one is a configuration error, not a modelling difference, and it is worth checking first.
Why the gap is not the interesting part
Chasing the exact size of the discrepancy is a trap. The number is not stable: it moves with iOS adoption, with your audience, with the campaign’s mix of view-through and click conversions.
What matters is whether the gap is explained. Two rules keep it manageable:
- Never average the two. An average of a modelled number and a counted number is precise about nothing, and it hides which of the two moved.
- Feed the platform, decide on the first-party number. Meta’s optimiser needs its own signal, sent properly through the Conversions API with deduplication. Your budget decisions need the number that is reproducible.
The practical setup
- Track clicks first-party, server-side, on a domain you control — see tracking after iOS.
- Send lead events back to Meta through the Conversions API, with an
event_idfor deduplication. - Display the first-party CPL as your CPL. Keep the platform number visible as a secondary column, for diagnostics, not for decisions.
- When the gap widens, look for a cause (a broken deduplication, a campaign that switched to view-heavy placements), not for a correction factor.
Related
- Tracking after iOS — how the click is kept alive
- CPL by creative — applying this at the ad level
- What is creative attribution — the definition this rests on
- CPL vs CPQL calculator — run the two numbers on your own campaigns