You run ads on two platforms. Both dashboards look great. But when you add up the reported conversions and compare them to what actually landed in your payment processor, the numbers don't match. Not by a little. By a lot.
This isn't a glitch. It's how ad platform reporting is designed to work. Understanding why it happens is the first step toward having numbers you can actually trust.
The core problem: every platform claims the same sale
Imagine a customer who sees one of your ads on Platform A on Monday and one of your ads on Platform B on Thursday. They buy on Friday.
Platform A records a conversion: within its attribution window, the customer was exposed to an ad before buying. Platform B records the same conversion: within its attribution window, the customer also saw an ad. Your payment processor records one sale.
Your platform dashboards now report two conversions. You made one sale. The over-reporting isn't fraud. It's overlap. Each platform is telling the truth about its own data. None of them can see what the others are doing.
How attribution windows make it worse
Every ad platform lets you set an attribution window: the period after a click (or a view) during which a conversion gets credited to that ad. Common windows are 7-day click, 28-day click, or 1-day view.
The longer the window, the more conversions get claimed. A 28-day click window means any purchase in the four weeks after someone clicked your ad gets attributed to that ad, even if the customer bought because of an email, a referral, or just decided the time was right three weeks later.
View-through attribution makes this even more aggressive. Some platforms will credit a conversion if someone saw your ad (without clicking) within a certain window. Because ad impressions are served broadly, this can claim credit for purchases that had no meaningful connection to the ad at all.
A note on view-through attribution
View-through attribution is not useless. There is real value in measuring brand awareness. But when it's mixed into the same conversion count as click-based attribution, it inflates the numbers in a way that's hard to untangle. If you're comparing platform ROAS against your actual revenue, make sure you understand which attribution model is being used.
Why your platform ROAS won't reconcile with your revenue
Platform ROAS is calculated as: conversions reported by the platform × average order value, divided by spend. If the platform over-reports conversions, the ROAS it shows you is inflated by the same amount.
This is why it's possible to see a 5× ROAS on every platform while your total revenue divided by total spend (your blended ROAS) is 2.5×. The platform numbers are real within their own measurement system. They just can't be compared to reality without adjusting for overlap.
If your platform ROAS is consistently higher than your blended ROAS, that gap is your overlap problem. The wider the gap, the more the platforms are double-counting.
The three numbers to compare
Rather than picking one metric, most businesses benefit from tracking all three together:
- Platform ROAS: What each individual ad platform reports. Useful for optimizing within a platform: bidding decisions, creative tests, audience comparisons. Not useful for comparing across platforms or judging overall marketing health.
- Blended ROAS / MER: Total revenue divided by total ad spend. This is your ground truth. It can't be over-reported because it uses actual payment data as the numerator. When it moves, something real changed. Use this for budget decisions and month-over-month comparisons.
- Attributed revenue per channel: With first-party tracking and a neutral attribution model, you can estimate how much of your blended revenue each channel contributed. This is harder to calculate accurately but gives you better channel mix decisions than either of the above alone.
What a neutral source of truth looks like
The fix is not to stop using ad platforms. It's to stop using ad platforms as your sole source of attribution data.
A neutral first-party system collects data that no platform can manipulate: the click that happened on your site, the lead that was created in your CRM, the payment that was recorded in your processor. When those three things are connected (click ID to lead to payment), you have attribution that isn't subject to platform window logic or impression over-counting.
This is how first-party pixels and server-side tracking work in practice: your system records the original click, carries the attribution through the funnel, and ties it to the payment when it happens. The platform dashboards keep reporting what they report. But now you have a parallel source of truth that you actually control.
A practical starting point
You don't need to overhaul everything at once. Start here:
- Calculate your blended ROAS monthly. Total revenue from your payment processor, divided by total ad spend. Do this in a spreadsheet if you have to. This number will tell you more about your marketing health than any platform dashboard.
- Compare it to platform-reported ROAS. The gap between the two is your over-reporting factor. If your blended ROAS is 2× and your platforms together show 6×, your platforms are collectively over-reporting by 3×.
- Look for which channels reconcile best. Some channels over-report more than others depending on their attribution settings. Channels where the gap is small are giving you more reliable data to work with.
- Invest in first-party tracking. Over time, the answer is to have click-to-payment attribution that you own and control, so the question “how much revenue did this campaign actually drive” has an answer that doesn't depend on a platform's self-reporting.
Where Cavor fits in
Cavor is built around this exact problem. It pulls spend data from your ad platforms and reconciles it against real payment data, giving you blended ROAS and actual attributed revenue that isn't inflated by platform over-counting. The first-party pixel captures your click data on your own terms, and the unified dashboard shows you all three numbers side by side so you can see exactly where the gaps are.