What is a good ROAS?
Anything above your break-even, and your break-even depends on your gross margin.
A shop that keeps 60% of every order can live on a return that would sink a shop keeping 20%. The second thing that moves it is what you count as revenue. The conversion value an ad platform reports and the revenue in your order system rarely agree.
Break-even ROAS
Break-even ROAS = 1 ÷ gross margin
Gross margin is revenue minus the cost of goods sold, as a fraction of revenue (see the gross margin formula). At break-even, the gross profit on the sales your ads drove is exactly what you spent on the ads. Nothing is left.
In Google Sheets, with gross margin as a decimal in B2:
=IF(B2=0, "", 1/B2)
| Gross margin | Break-even ROAS | Revenue needed per £1,000 of ad spend |
|---|---|---|
| 20% | 5.00 | 5,000.00 |
| 40% | 2.50 | 2,500.00 |
| 60% | 1.67 | 1,666.67 |
Take the 40% row. £2,500 of revenue at a 40% margin is £1,000 of gross profit, which is exactly the £1,000 you spent on ads. A ROAS of 2.50 there leaves nothing. Everything you want for overheads and profit has to come from above that line, so a target sits at break-even plus a cushion. At a 40% margin, a target of 3.00 leaves £200 on every £1,000 spent: £3,000 of revenue, £1,200 of gross profit, less the £1,000 of ads.
A stricter version uses contribution margin instead, so shipping, payment fees and returns come out before the ads have to pay for themselves. The break-even figure goes up, and it is the more honest one. See the contribution margin formula.
Published benchmarks
Surveys of advertiser accounts report ROAS by platform and by industry. The figures below are the two largest recent ones, and they come from different kinds of panel: one is an agency's own client accounts, the other a software platform's ecommerce brands. Treat either as a rough reference.
| Reported ROAS | Context | Source |
|---|---|---|
| 3.52 average | Google Ads, all campaign types | Focus Digital, study of 5,000+ accounts, March 2024 to April 2025, agency-compiled |
| 5.17 median | Google Search | Focus Digital, 2025 |
| 2.88 median | Google Shopping | Focus Digital, 2025 |
| 2.21 average | Meta Ads, same study | Focus Digital, 2025 |
| 2.04 median | Ecommerce brands, all paid channels | Triple Whale, 2024 |
Search sits highest in every study, because someone typing the product's name was already most of the way to buying. Shopping and paid social sit lower for the opposite reason. Display is lowest of all, at 0.12 in the same Focus Digital study, which is the figure for ads shown to people who were doing something else.
Why benchmarks mislead
The benchmark doesn't know your margin. A ROAS of 4.00 is comfortable at a 60% margin and a loss at 20%, and the same number sits in both accounts.
A figure averaged across insurance and furniture describes neither industry.
Attribution differs between accounts. One counts a sale if the customer clicked an ad in the last 30 days; another counts it only if the click was the last thing before the purchase. Both report a ROAS and they are not the same number.
Tracking differs too. Consent banners and offline sales mean some accounts see a fraction of their real revenue, so their ROAS reads low for reasons that have nothing to do with the ads.
The sample is also skewed by who is left in it. The accounts in a benchmark are the ones still advertising. The ones whose ROAS fell below break-even stopped and left the sample.
Find your own baseline
Take three to six months of your own spend and revenue, by month, and divide the total revenue by the total spend. Never average the monthly figures (see never average ROAS). With spend in column B and revenue in column C:
=IF(SUM(B2:B7)=0, "", SUM(C2:C7)/SUM(B2:B7))
Put your gross margin in E2 and the break-even beside it as =1/E2. The gap between the two numbers is the baseline that matters. The ROAS calculator does the same sum for a single campaign.
Keeping it current
A scheduled Fresh Sheets report can keep the inputs fresh in their own tabs: Cost and Conversion value from Google Ads in one, and orders from Shopify in another, so revenue comes from the till rather than from the ad platform.
Fresh Sheets replaces each tab's contents on every refresh, so keep your formulas on a separate tab. This version finds the columns by heading, so it still works when a field is added and the columns move. Net payment is what the store received after refunds:
=SUM(INDEX('Shopify'!A:Z, 0, MATCH("Net payment", 'Shopify'!1:1, 0))) / SUM(INDEX('Google Ads'!A:Z, 0, MATCH("Cost", 'Google Ads'!1:1, 0)))
If you also advertise on Meta Ads, add its spend to the bottom of the fraction: a SUM over a Meta Ads tab's "Amount spent" column.