If you've ever had Ads Manager and the finance report open on the same screen, you know the scene: the platform says the campaign delivered 42 conversions and a 9x ROAS; finance found 11 sales in the whole month. Is someone lying? No. Both numbers are right, but they answer different questions.
The two counts measure different things
The media platform measures what it was able to observe. It records a conversion event fired on your site, credits that event to the ad the person saw or clicked within a time window, and reports the result. It's an honest estimate made with the information it has: plenty about the click and almost nothing about what happened afterwards.
Your bank account measures money that came in. Contract signed, invoice cleared, order approved, with no attribution window, modelling or estimate.
Where the gap comes from, in practice
1. A conversion is not a sale
In most operations, the conversion event configured is "lead": form submitted, WhatsApp clicked, sign-up completed. The platform does its job correctly and reports 42 leads. But 42 leads are not 42 sales, and a ROAS calculated on an estimated lead value has nothing to do with revenue.
2. The attribution window doesn't know your cycle
The 7-day post-click default works well for impulse purchases. If your average cycle is 45 days, as in real estate, B2B or high-ticket services, every sale that closes on day 46 doesn't exist as far as the platform is concerned. The ad that brings your most valuable customer may be the very one that looks worst in the dashboard.
3. Two platforms claim the same sale
The user saw the ad on Instagram, searched the brand on Google, clicked the search ad and bought. Meta credits the sale. Google credits the sale. Add the two dashboards up and you "sold" twice. The bank recorded one.
4. Refunds and cancellations don't come back
The conversion fired on purchase. The refund happened twelve days later. The platform never found out, and the dashboard keeps counting that revenue forever.
Why this costs money
While the two counts coexist without talking to each other, the budget decision is made on the wrong one. You scale the campaign with the best dashboard ROAS, which is often the one bringing the cheapest, least qualified lead, and cut back the one that was bringing the customer who closes. The dashboard stays green while revenue falls.
That's why "cost per lead" is a treacherous metric when used alone: it rewards volume, and volume doesn't always turn into money.
How to close the circuit
No configuration tweak solves this inside the media platform, because the missing information isn't there. It's in your CRM, your checkout, your calendar. Closing the circuit means three things:
- Carry the source along with the lead. Channel, campaign, ad set and ad need to travel with the contact all the way to the CRM. If the source is lost along the way, nothing after that is recoverable.
- Bring the sale back. When the deal is marked as won, the real value has to come back and be credited to the source that generated that lead, with refunds already deducted.
- Use your funnel's window. If the average cycle is 45 days, the reading has to follow 45 days. Copying the platform's default means assuming a cycle that isn't yours.
Once that's done, you have two readings coexisting with clear roles: the platform's, to optimize delivery and creative day to day; and revenue's, to decide where budget goes. The first serves day-to-day operations, and the second is the one you take into the meeting.
What to say when the client asks
"The dashboard says 9x and you're showing me 3x. Which is the right number?" Both are right, each for a different question. The 9x says the ad is delivering and converting well at the top. The 3x says how much money came in per unit invested. Next month's budget is decided by the second.