The ROAS the dashboard reports overstates the return, sometimes by a lot. An illustrative example with round numbers: the dashboard reports 4x. If 12% of that revenue is later refunded, the net is 3.52x. At a 40% contribution margin, each dollar of spend returns about 1.41 dollars of contribution, and that is before brand traffic is taken out.
This is not a Google bug. It is a chain of small reporting choices, each one defensible in isolation, that compound into a number nobody should be making decisions on. Here is the math, and how to fix it.
What the dashboard reports
Google Ads' default "Conv. value / cost" column is gross revenue attributed to a click, divided by ad spend. Three things are wrong with that number for almost every account:
- Branded traffic is included as acquisition. Someone Googles your brand name, clicks the paid ad above the organic result, converts. The dashboard counts that as paid acquisition, even though the user would have converted via the organic listing right below for free.
- Returns and refunds are not subtracted. Conv. value is what was checkout-completed, not what was actually delivered and kept. For ecommerce, returns can be a large share of gross, and the rate differs a lot by category.
- It is gross revenue, not margin. A 5x ROAS on a 20% gross margin product makes no money. A 2x ROAS on an 80% gross margin product is excellent.
Fix the three, then re-bid the account against the corrected number.
Fix 1: exclude branded traffic
The cheap fix is to add a brand-only negative keyword list to every non-brand campaign. The careful fix is to separate brand search into its own campaign and report on it separately.
- Create a Brand campaign that bids on exact-match variants of your brand name and any common misspellings.
- Add every variant as a negative keyword on every other campaign, including Performance Max via brand exclusions.
- In your reporting, subtract the Brand campaign's revenue and spend from the account-wide ROAS calculation. Report the rest as "acquisition ROAS" and the brand campaign as "brand defence" with its own math.
Brand defence is a real cost: if you do not bid on your brand, a competitor will. But it is a different problem from acquisition, and mixing them produces nonsense.
Fix 2: subtract returns and refunds
A returns rate is easy to ignore, because the dashboard does not surface it. The fix has two parts:
- Net revenue, not gross. Pull Shopify or WooCommerce data into a sheet, calculate net revenue by month (gross minus refunds minus discounts minus shipping refunds). This is what the ROAS calculation should use, not Conv. value.
- Offline conversion adjustments. Google Ads supports adjusting conversion values after the fact when a refund happens. Enable it, and pipe the refund data into the account so smart bidding optimises against net revenue rather than gross.
If 12% of checkout revenue is later refunded and nobody adjusts for it, every bid decision counts that 12% as if it had been kept. Compounded over a quarter of bid decisions, that can be the difference between a profitable account and a slow bleed.
Fix 3: report on contribution margin
The number that matters is contribution margin per dollar of ad spend. The formula is:
Contribution Margin per Order = Net Revenue - COGS - Fulfilment Cost - Payment Processing
Contribution-Margin ROAS = (Contribution Margin × Orders) / Ad Spend
This is the only ROAS that maps to profit. Everything else is a vanity metric, useful for sanity checks but not for bid decisions.
Build it into the dashboard:
- Pull COGS and fulfilment cost into a sheet or a BI tool that updates monthly.
- Calculate the per-order contribution margin for each SKU.
- Multiply by orders attributed to each campaign.
- Divide by spend.
Now you have a number you can act on.
What changes when ROAS is correct
What to expect when you correct it:
- The corrected number is lower than the reported one, and the gap depends on your brand share, your returns and your margin.
- Campaigns that lived on branded traffic can flip from "winning" to "losing" once that traffic is stripped out.
- Smart Bidding set against gross revenue needs new inputs: feed it net or margin-based conversion values, or bid to a target CPA set from your break-even acquisition cost.
- Spend may drop at first, as the unprofitable campaigns are cut, while the profit per dollar of spend goes up.
"Your real ROAS is lower than you thought" does not have to mean a smaller budget. The right response is to cut the unprofitable campaigns, then put the freed-up budget behind the profitable ones. Spend grows again where the corrected numbers show profit, and only there.
The reporting cadence
On a small account, daily ROAS is mostly noise and weekly is not much better. Monthly is the right cadence for bid decisions, with weekly reviews for trend-spotting and creative tests.
The monthly report should include:
- Gross ROAS (the dashboard number, for continuity)
- Net ROAS (after returns and refunds)
- Contribution-Margin ROAS (the number that matters)
- The delta between Gross and Contribution-Margin ROAS as a single percentage
- Brand search spend and revenue, isolated from acquisition
A team that reads this report every month makes different bid decisions from one that reads the dashboard.
What this looks like with us
How we build sets up the tracking before a campaign goes live, and defines every number in writing first. We do not change a single bid before the math is right.
If you want the corrected number rather than the method, the tracking and the ad build are part of Startup, the one package we sell, with the price and the timeline published.