The measurement loop breaks in one specific place: the ad platform and your own tracking count different things, and nothing reconciles them.
DropCPL closes it by owning both ends. It creates the ads, so it knows the ad_id for every creative. It logs the clicks, so it knows the real leads. It reads spend per ad, so the CPL has a denominator you can defend.
Creating the ads
Ads are created through the Meta Marketing API from inside DropCPL: creative, copy, destination, ad set, campaign. Because DropCPL writes the ad, it also writes the destination URL — with the ad_id already in it — and stores the mapping between the creative and the Meta ad_id.
That mapping is the quiet foundation of everything else. When a human sets up ads by hand, the link between “this creative” and “this ad_id” lives in someone’s memory or in a UTM convention that eventually drifts. Here it is a database row.
Syncing spend
A scheduled job reads spend from the Meta Ads API per ad and stores it against the same ad_id. Spend is the one number that should come from Meta — it is Meta’s invoice, not an estimate.
Sending events back
Leads are reported to Meta through the Conversions API, server-side, with:
- the
fbclidand click identifiers captured at click time, - an
event_idso Meta can deduplicate the server event against the browser pixel event, - the lead event itself, so Meta’s optimiser can learn from real conversions rather than from modelled ones.
This is the part most setups get wrong. If you send the same conversion twice with no event_id, Meta counts it twice. If you send it only from the pixel, iOS restrictions decide whether it arrives.
Two numbers, one canonical
After this loop runs, you have two conversion counts:
| Source | Counts | Used for |
|---|---|---|
| Meta (modelled + CAPI) | what Meta believes converted | the platform’s optimiser |
| DropCPL (first-party) | clicks logged, forms received | the CPL you decide on |
DropCPL displays the second as your CPL and feeds the first back to Meta. It does not average them, and it does not quietly prefer the platform number when it looks better.
Related
- Creative attribution — where spend and leads meet
- First-party tracking — how the click identifiers are captured
- The AI agent — acting on Meta from a conversation