“Meta already reports conversions.”
Partly modelled, and based on events fired on your site rather than the invoice. This is an observed count from files you can open.
For Meta Ads
Export your lead ads, match them against closed sales, and find out which campaigns produced customers rather than contact details.
No API key Nothing to install in Meta AdsNothing to install No card requiredNo card
Meta Ads sits on the lead side in CloseRev: export the leads its instant forms produced — each carries the name, phone and email the person submitted — and match them against closed sales from whichever system holds them. Meta reports the lead it collected and, increasingly, a modelled estimate of what happened next; neither is the invoice. Revenue with no traceable lead is reported as Direct / Unknown.
Last checked against Meta Ads's own documentation on September 24, 2026.
The gap
Instant forms produce leads at a price nothing else can match, and the sales team has a word for most of them.
What was sold, to whom, and for how much.
The click, the keyword, the call, and what each one cost.
The file
Three things carry the match: who, how much, and when. Anything else is optional and only changes how the report can be sliced.
On the lead export. Instant forms pre-fill from the profile, so the details are complete and sometimes stale — both matter for matching.
The three levels where the differences actually live. Creative is worth keeping: in this channel it moves lead quality more than targeting does.
When the form was submitted, which anchors the window.
Which form produced the lead and whether it asked qualifying questions. This is the single biggest lever on quality in the channel.
Step by step
Written for somebody with Meta Ads open in the next tab. Report names vary by edition, so each step says what to look for.
One row per lead with the contact details submitted, the campaign, the ad set and the date.
Two ad sets with identical targeting and different forms routinely produce different businesses. Without those columns the report cannot show it.
Contact detail, amount, date, from whichever system holds them.
Meta leads are often produced at a much earlier stage of intent than search leads, so a window that works for search will usually understate them.
The join runs on the phone and the email, normalised, and unmatched leads stay visible rather than being discarded.
What comes back
Revenue by channel, the count of sales behind each figure, and an honest bucket for the ones nobody could trace. Sample figures, from the worked example on the Med Spas & Dermatology page — not from a Meta Ads account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Meta Ads | 96 | $78,200 | |
| Google Ads | 61 | $55,200 | |
| Email marketing | 44 | $32,200 | |
| Direct / Unknown | 79 | $64,400 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
A pre-filled form submitted in two taps costs very little and commits the person to very little. That is the trade, and it is a reasonable one.
What it means is that cost per lead is close to meaningless as a comparison against channels where somebody typed their number deliberately.
The only comparison that survives is revenue per lead, and running it usually produces a number an order of magnitude apart from the cost-per-lead ranking.
Campaigns that add a qualifying question, or use a higher-intent form, produce fewer and more expensive leads. Whether that is better is exactly what the ledger answers.
Since signal loss on mobile platforms, a meaningful share of the conversions attributed in-platform are statistical estimates rather than observed events.
That is a legitimate engineering response to a real problem. It is not a thing to run a budget on without a check outside the platform.
Matching leads to invoices gives an observed count from files you can open. Where it disagrees with the platform's number, the difference is worth knowing rather than reconciling away.
Nothing here says the platform's estimate is wrong. It says it is an estimate, and that a business making six-figure budget decisions should have one observed number beside it.
In search the query carries the intent. On a feed, the advert creates it, so what the creative promised determines who submits the form.
An advert leading with a price produces price-led leads. One leading with a problem produces people with that problem. Both report the same cost per lead.
Where the export carries the creative or ad name, the report splits revenue on it, and the spread between creatives is usually wider than the spread between ad sets.
That is an unusually actionable finding, because changing creative is cheap and changing a targeting strategy is not.
Lead ads produce people who tapped an advert while doing something else. Reaching them quickly matters more here than in any other channel in this catalogue.
A campaign that closes nothing may be producing perfectly good leads that nobody called back for two days, and cutting it would be the wrong fix.
Because the report keeps the lead date and the sale date, the pattern is visible: leads that closed and leads that did not, against when each arrived.
That distinction — a buying problem or an operations problem — is the one most often got wrong when a channel is judged on revenue alone.
Fair questions
Partly modelled, and based on events fired on your site rather than the invoice. This is an observed count from files you can open.
It usually is. The question the ledger answers is what those leads were worth once somebody called them.
Good — then the export already exists, and closing the loop is two files rather than an integration.
No. Two exported files are the whole mechanism, and your ad account is never touched.
Leads with the submitted contact details, the campaign and ad set, and the date; closed sales with a contact detail, an amount and a date.
Yes, and it is usually the most useful split available: a qualifying question changes who submits.
Yes, where the export names them, and the spread between creatives is often wider than between ad sets.
A share of them are modelled estimates. They are a reasonable planning input and not an observed count.
One that fits your purchase, applied to every campaign. Meta leads are usually earlier-stage than search leads, so a search window understates them.
They stay in the file. A channel judged without them is being credited for your follow-up rather than its own quality.
Profile-filled details can be stale. Both phone and email are matched, and anything that does not join is reported rather than dropped.
Yes, and it is easier: the CRM export is already the lead file.
Yes, and the overlap is shown rather than assigned silently.
A contact detail, a campaign and a date on one side; a contact detail, an amount and a date on the other. No audiences, no pixel data, no creative assets. Encrypted in transit and at rest and deleted with the import.
Closed revenue per campaign, ad set and creative, beside what each produced in leads, with everything unmatched kept visible.
By trade
What the report looks like once the export is in, written for each one.
Other systems
Running more than one system, or comparing? The method is the same and the columns are not.
Meta Ads and the other product names and logos on this page belong to their owners and are shown to identify the software a file comes from. CloseRev is not affiliated with or endorsed by them, and connects to none of them: it reads a file you export.
Start today
Nothing to install in Meta Ads, no API key, and no need to have been tracking anything until now. Last year works as well as this month.