Return on ad spend. Four words, one formula, and an entire industry built on reporting it dishonestly. Your agency says your ROAS is 4x. Facebook says it's 5.2x. Google says it's 3.8x. Your CFO says the math doesn't add up because revenue is flat. Somebody is wrong — and it's probably not your CFO.
ROAS sounds simple — it's not
The formula is revenue divided by ad spend. Simple enough on a whiteboard. In practice, it breaks apart almost immediately. Which revenue? Gross or net? Does it include returns and chargebacks? Over what time window — the day of the click, the week, the 30-day attribution window that the platform defaults to? And which ad spend — just media cost, or do you include agency fees, creative production, and the salary of the person managing the campaigns?
Platform-reported ROAS is almost always inflated. Facebook and Google both have financial incentives to make your ads look effective. They use generous attribution windows, count view-through conversions that may have happened organically, and take credit for purchases that were going to happen anyway. The number in your ads dashboard is a marketing number, not a finance number.
The attribution problem
A customer sees your Facebook ad on Monday. Googles your brand name on Wednesday. Clicks an email on Friday. Buys on Saturday through a direct visit. Who gets credit? In last-click attribution, the email gets 100% of the credit. Facebook gets nothing, even though it introduced the customer. In first-click, Facebook gets everything and the email gets nothing. Both models are wrong. Both are commonly used.
The real picture requires multi-touch attribution, which assigns weighted credit across the entire journey. It's harder to implement, harder to explain, and harder to game — which is exactly why most agencies avoid it. A multi-touch model might show that your Facebook ROAS is actually 2.1x instead of the 4.8x the platform reports. That's an uncomfortable conversation, but it's the one that leads to better budget allocation.
Building honest ROAS tracking
Step one: connect your ad platforms to your CRM with server-side tracking. Not UTM parameters alone — those break, get stripped, and lose data at every redirect. Use server-side APIs (Facebook Conversions API, Google Enhanced Conversions) to send actual purchase data back to the platforms. This gives you platform-side data that's grounded in reality instead of modeled estimates.
Step two: build a unified reporting layer that pulls cost data from ad platforms and revenue data from your CRM into one view. BigQuery is ideal for this if you have the technical resources. Looker Studio connected to your CRM works for simpler setups. The point is one number, calculated one way, that everyone in the company agrees on.
Step three: define your attribution model and stick with it. Linear attribution (equal credit to all touchpoints) is a reasonable starting point. Time-decay (more credit to recent touchpoints) is better for short sales cycles. Data-driven attribution (if your platform supports it) is best. The specific model matters less than consistency — pick one, apply it everywhere, and stop letting each platform tell its own story.
What good ROAS actually looks like
There's no universal benchmark. A 2x ROAS on a SaaS product with 80% gross margins and high lifetime value might be excellent. A 5x ROAS on an e-commerce product with 20% margins might be barely profitable after fulfillment and returns. The number that matters isn't ROAS in isolation — it's ROAS relative to your unit economics.
As a rough guide: for B2B services with high contract values, a true (not platform-reported) ROAS of 3-5x is strong. For e-commerce, you need 4-8x depending on margins. For lead generation where the sale happens offline, you need to track all the way to closed revenue, not just cost per lead. A $12 lead with a 1% close rate is far more expensive than a $80 lead with a 15% close rate.
This is the kind of honest tracking we build at Impact Solution Labs. Every client gets ROAS calculated from actual revenue data, not platform estimates. We connect the ad click to the closed deal and show you exactly what your marketing spend is producing — no inflation, no cherry-picked attribution, no comfortable lies. Because you can't optimize what you can't honestly measure.