Every ad platform reports a return. Google Ads calls it conversion value per cost, Meta calls it ROAS, and both numbers are produced by the platform that also sells you the clicks. ROI is a different animal: it is what is left for the business after the deals close and the costs are paid. The two metrics share a word and almost nothing else, and the gap between them is where a lot of ad budget quietly disappears.
Two formulas, one difference
ROAS (return on ad spend) divides the revenue attributed to the ads by what the ads cost:
ROAS = revenue from ads ÷ ad spend
A ROAS of 3× means three dollars of revenue for every dollar of spend.
ROI (return on investment) starts from profit, not revenue, and counts every cost the campaign drags in:
ROI = (profit from ads − total cost) ÷ total cost
Total cost is the ad spend plus everything else it took to turn clicks into money: the cost of delivering the product or service, agency or tool fees, the time of the people who worked the leads.
So ROAS answers "how much revenue did the ads touch?", and ROI answers "did we make money?". A campaign can have an excellent answer to the first question and a terrible answer to the second.
Why ROAS flatters
ROAS looks generous for four reasons, and all four come from where the number is made.
The revenue is the platform's estimate, not yours. For an online store the platform sees the order value from a purchase pixel. For a services or B2B company it sees a form submission or a call, and the "value" is whatever someone typed into the conversion settings. Fifty dollars per lead is a guess that becomes a revenue figure.
Leads are not deals. A platform counts a conversion the moment the form is sent. Whether that lead was qualified, whether it bought, and for how much, happens later in the CRM, which the platform never sees unless you send the data back.
Attribution windows are wide and self-serving. A click-through window of 30 days and a view-through window of one day means the platform claims any purchase in that period after an ad was shown. Two platforms will happily claim the same deal.
There is no margin in it. ROAS of 2× on a product with a 30% gross margin is a loss. The formula cannot tell you that, because the formula never asks what the revenue cost you.
One campaign, two verdicts
Say a search campaign spends $5,000 in a month. The platform reports 40 conversions and, with a value of $400 set per lead, a conversion value of $16,000. Platform ROAS: 3.2×. By that number, the campaign deserves more budget.
Now look at the CRM. Of those 40 leads, 6 became closed-won deals at an average of $1,250. Real revenue: $7,500. ROAS on closed deals: 1.5×. Still positive, but less than half of what the platform showed.
Then add the margin. If the gross margin on that service is 40%, the deals produced $3,000 of gross profit against $5,000 of ad spend. ROI: (3,000 − 5,000) ÷ 5,000 = −40%. The campaign loses forty cents on every dollar, and the platform's dashboard says 3.2×.
Nothing in this example is unusual. The numbers are illustrative, but the shape is what we see whenever a company puts CRM revenue next to platform ROAS for the first time: the ranking of campaigns changes, and the campaign the platform liked most is rarely the one that made the most money.
When ROAS is the right number
ROAS is not useless. It is the right metric when:
- you are comparing ad sets or creatives inside one platform over a short period, where the revenue estimate is equally wrong for all of them;
- the sale happens online and the platform sees the real order value;
- you need a signal today and the deals will not close for six weeks.
Used that way it is a tactical dial: turn budget toward the ad set with the better ROAS, check again next week. The mistake is promoting it to a business verdict, or comparing it across platforms with different attribution rules.
What you need before ROI exists
ROI for a lead-generation business cannot be computed from the ad platform at all. It needs four things that live elsewhere:
- Closed-won amounts in the CRM. Not pipeline value, not estimated deal size: the amount on the deal when it was marked won.
- An exact link from each deal to its campaign. The deal has to carry the campaign identifier (the gclid, the UTM campaign, the Meta ad id) from the first click through lead to deal. A link guessed from the lead source name is not a link.
- A period rule. Revenue belongs to the month the deal closed, not the month the ad ran. Otherwise last month's campaign looks terrible until its deals close, and this month's looks great for spend that has not produced anything yet.
- A margin. Even a rough gross margin per product line turns revenue into profit and ROAS into ROI.
With those four, the calculation is trivial. Without them, every ROI figure is a ROAS figure with a different label.
Three mistakes that make ROAS lie
Counting unknown as zero. When a deal has no campaign link, some dashboards drop it and some assign it to "direct". Either way a campaign's revenue is understated and the comparison between campaigns is wrong. The honest answer is a separate "unlinked" bucket that is shown, not hidden.
Comparing platform ROAS across platforms. Google's and Meta's numbers are produced by different attribution models on different windows. A 4× on one and a 3× on the other says nothing about which channel is better.
Reading ROAS by click date for a long sales cycle. If deals close 30–60 days after the first contact, a campaign evaluated two weeks after launch will always look like a failure, and the one you paused last quarter will keep "earning" for months.
How this looks in Adepth
Adepth is built around the CRM number. It pulls spend from Google Ads and Meta, pulls deals from the CRM (Bitrix24 today, HubSpot and Pipedrive next), and links a deal to a campaign only when the identifiers match exactly. Every campaign row shows spend, requests, deals, won deals and revenue, and the ROAS is computed on closed-won revenue by close date, not on the platform's conversion value. When a deal cannot be linked, it is shown as unlinked rather than silently counted as zero.
The product calls its headline return Real ROI: closed-won revenue from the CRM minus ad spend, divided by ad spend. "Real" refers to the revenue, which comes from closed deals instead of the platform's estimate; it does not subtract your delivery costs, because the product does not know them. Margin enters in a different place: you set the ROAS thresholds for your own margins, and every ROAS in the product is coloured against those thresholds, so a 2× that is a loss for a 30% margin business shows up as one.
If you run ads for a company that sells through a sales team, closed-won revenue by campaign is the number that should decide next month's budget.
FAQ
Only in relation to your margin. With a 25% gross margin, 4× is the break-even point before any other costs. With a 70% margin it is comfortably profitable. There is no universal "good" ROAS.
Yes, if every closed deal carries its campaign identifier and the CRM stores the won amount. Then revenue, gross profit and ROI roll up per campaign the same way spend does.
No. Keep it for daily decisions inside a platform, and stop using it to compare channels or to judge whether a campaign pays off. For those two questions use revenue from the CRM.