Paid ads

Google Ads ROAS: how to calculate it correctly

The default ROAS column is not a profit number. The dashboard counts brand traffic as paid acquisition, ignores returns, and never sees the margin. Here is the math that actually maps to profit.

23 May 2026Updated 21 Sept 20264 min readMindScrollers

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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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.

Questions

What readers ask.

What is a 'good' ROAS in Google Ads?

There is no universal number. The right ROAS is the one where revenue minus all variable costs, including the ad spend itself, leaves a contribution margin you are happy with. For a 35% gross margin business, breakeven ROAS is 2.86. For an 80% software business, breakeven is 1.25.

Should we exclude brand search from Google Ads entirely?

Usually no. The right approach is to run brand search in its own campaign with a tight budget, exclude its conversions from the rest of the account's optimization, and measure its incrementality separately. Brand search has different math from acquisition search.

Does Performance Max count branded traffic as new acquisition?

It can, and branded conversions make a PMax ROAS look better than the acquisition it actually buys. Use the brand exclusion settings in PMax, plus a brand-only negative keyword list, to keep PMax out of branded traffic.