Guide

Real CPL vs platform CPL

Meta reports conversions through its own model. Your tracking counts clicks and forms. Both are real, they never match, and one has to be canonical.

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 CPLFirst-party CPL
Sourcethe ad platformyour own tracking
Methodmodelled attributioncounted events
Attribution windowplatform-defined (often 7-day click, 1-day view)whatever you log
Includes view-throughyesno
Includes modelled conversionsyesno
Reproducible by younoyes

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

  1. Track clicks first-party, server-side, on a domain you control — see tracking after iOS.
  2. Send lead events back to Meta through the Conversions API, with an event_id for deduplication.
  3. Display the first-party CPL as your CPL. Keep the platform number visible as a secondary column, for diagnostics, not for decisions.
  4. When the gap widens, look for a cause (a broken deduplication, a campaign that switched to view-heavy placements), not for a correction factor.

Last updated: 2026-09-21

FAQ

Which CPL is right?+

They answer different questions. The platform CPL is what the ad platform believes, and it is what its optimiser learns from. The first-party CPL is what you actually observed: clicks you logged and forms you received. For budget decisions, the second is the defensible one.

A 20-30% discrepancy is normal?+

Yes, and it can be larger. Differences come from attribution windows, modelled conversions, view-through credit, and clicks that were never delivered. A gap is expected; an unexplained gap is the problem.

Ready to find out what
converts, for real?

Free to start.

Start free →