How to Calculate ROAS (And the Three Things That Decide Whether the Number Means Anything)

ROAS is revenue attributed to ads, divided by what you spent on those ads. $20,000 in attributed revenue on $5,000 of spend is a 4x ROAS. That part takes one sentence and every page ranking for this search gets it right. What they skip is that “revenue attributed to ads” is doing three jobs at once — which revenue, attributed over what window, measured against what margin — and each one can move the final number without anything in the account actually changing.

I read the three top-ranking pages for this term before writing this: a comparison from BigCommerce, Shopify’s own blog post, and an agency explainer from Workshop Digital. All three give the formula. None of them say whether the revenue figure is gross or net of returns. None mention attribution windows. One mentions margin in passing and never shows the math. Here’s the formula, and then the three decisions that determine whether the result is useful or just a number.

What is ROAS and how do you calculate it?

ROAS equals the revenue attributed to an ad, ad group, campaign or account, divided by what was spent to generate it. Spend $5,000 and get $20,000 in attributed revenue back and your ROAS is 4, usually written 4x or 400%. That is the entire formula. It takes longer to read this paragraph than to do the division.

ROAS = attributed revenue ÷ ad spend. The two words doing all the work are “attributed” and “revenue,” and neither one is as fixed as the formula makes it look.

Why the same account can report three different ROAS numbers for the same week

Pull a ROAS number for the same campaign, the same week, from Google Ads, from GA4, and from your own store’s order data, and you will very likely get three different answers. None of them is wrong. Each one is answering a slightly different question, and the three places that question diverges are revenue definition, attribution window, and whether you’ve adjusted for margin at all. The rest of this post is those three.

Does gross revenue or net revenue go in the formula?

Net revenue, if you have a choice — and most platforms don’t give you one by default, which is the part worth checking. Shopify’s own developer documentation for its sales and revenue schema defines gross sales as revenue “before discounts and returns are taken out,” and net sales as gross sales minus discounts and minus returns (now called sales reversals). Refunds, cancellations and order edits reduce net sales. They never touch gross sales at all.

Most ad‑platform conversion tracking fires on checkout or order‑confirmation, which means it’s counting gross revenue by default — the sale as it happened at checkout, before anyone returns anything. For a category with a high return rate — apparel is the standard example — a ROAS built on that number is quietly overstated, and it stays overstated until someone reconciles ad‑platform revenue against the store’s own net sales figure for the same window.

What it includesWhere it usually comes from
Gross revenueThe sale as it happened at checkout. Discounts may or may not be subtracted depending on the platform.Default ad-platform conversion value, most order-confirmation pixels
Net revenueGross sales minus discounts and minus returns/refunds/cancellations.Your store’s own sales report, reconciled after the return window closes

Neither one is “the” right answer for every purpose. Gross revenue is closer to real‑time and fine for day‑to‑day bid management. Net revenue is the number that should show up anywhere you’re deciding whether a channel is actually profitable, because a channel can show a great gross ROAS and a mediocre net one if its buyers return the product at a higher rate than everyone else’s.

What attribution window are you actually measuring?

An attribution window decides how long after a click (or a view) a sale still counts as caused by that ad. Per Google’s own “About conversion windows” help page, the default click‑through conversion window is 30 days and the default view‑through window is 1 day, and either one can be set anywhere from 1 to 90 days. Shorten the window and conversions that happen further from the click stop counting. Lengthen it and more of them do. The ad account, the spend, and the actual buying behavior haven’t changed — only the setting has — and the reported ROAS moves anyway.

Different platforms default to different windows and different models, which is the real reason a campaign’s “ROAS” looks different depending on where you read it. Google Ads is measuring inside its own conversion window. Meta has its own ad‑set‑level attribution setting, separate from Google’s. GA4’s standard acquisition reports group revenue by last‑click, session‑scoped source/medium, which is a different mechanic from either ad platform’s own self‑reported number. None of these is the single source of truth; each is counting a slightly different thing, which is exactly why evaluating a platform’s performance from a different platform’s numbers produces the wrong answer — worth reading in full in how negative keywords actually interact with Shopping and Performance Max, where the same kind of platform‑specific behavior shows up again.

If two reports disagree on a campaign’s ROAS, check the attribution window and model on each one before assuming either number is wrong. They’re very often both correct, answering different questions.

Is a 4x ROAS good, or is it a loss?

Depends entirely on your margin, which is the part the standard “aim for 4x” advice skips. A 4x ROAS on a product with a 60% gross margin leaves real profit after the ad spend. A 4x ROAS on a product with a 15% margin can lose money once the ad cost is weighed against what the sale actually earns, because ROAS measures revenue, not profit, and never claims otherwise — the ranking pages that recommend a universal ROAS target are quietly assuming a margin that may not be yours. The same confusion shows up on the Amazon side under a different name; see ACoS is not your profit margin for the mirror-image version of this mistake.

How to calculate your breakeven ROAS

Breakeven ROAS is the point where the gross profit from the sale exactly equals the ad spend that generated it — no profit, no loss, before any other cost. The formula:

Breakeven ROAS = 1 ÷ gross margin (as a decimal).

Say your gross margin — revenue minus cost of goods, shipping and payment processing, before ad spend — is 40%, or 0.40. Breakeven ROAS = 1 ÷ 0.40 = 2.5x. Spend $1,000 and get back $2,500 in revenue at that margin, and the gross profit on that $2,500 ($1,000) exactly covers the $1,000 spent to get it. Below 2.5x, that channel is losing money on a gross‑margin basis even though the ROAS number is still positive and still above 1.

Gross marginBreakeven ROASWhat a 4x ROAS actually returns
20%5.0x4x is below breakeven — losing money
30%3.3x4x clears breakeven by a thin margin
40%2.5x4x clears breakeven comfortably
60%1.7x4x returns well past breakeven

To target an actual profit rather than just breakeven, go one step further: Target ROAS = 1 ÷ (gross margin − target profit margin). At a 40% gross margin wanting a 10% net profit margin on top of ad spend, target ROAS = 1 ÷ (0.40 − 0.10) = 1 ÷ 0.30 = 3.3x. Set the target lower than that and you’re accepting a thinner margin than you meant to; set it based on the generic “4x is good” advice without checking it against your own margin and you may be doing either one by accident.

A full worked example

A store sells a product for $50 with a $20 cost of goods, $4 shipping, and $1.50 payment processing — a gross margin of (50 − 20 − 4 − 1.50) ÷ 50 = 49%. Breakeven ROAS = 1 ÷ 0.49 ≈ 2.04x. The store spends $4,000 on ads in a month and its ad platform reports $18,000 in attributed gross revenue — a reported 4.5x ROAS. But the store’s net sales for that cohort, once returns from that period are in, come to $16,200 — a 10% return rate is typical for the category. Net ROAS is $16,200 ÷ $4,000 = 4.05x. Still comfortably above the 2.04x breakeven, which is the number that actually mattered: the campaign is profitable on a gross‑margin basis even after returns, and the gap between 4.5x reported and 4.05x real would have gone unnoticed by anyone only checking the ad platform’s own dashboard.

What to check before you trust a ROAS number

  1. Confirm whether the revenue figure is gross or net of returns, and reconcile it against your store’s own sales report for a category with any meaningful return rate.
  2. Check the attribution window and model on each platform you’re pulling a ROAS number from, before comparing numbers across platforms as if they measured the same thing.
  3. Calculate your breakeven ROAS from your actual gross margin, not a generic 4x target borrowed from a different business with a different margin.
  4. Set a target ROAS above breakeven, by the profit margin you actually want, using the formula above rather than a round number.

The formula was never the hard part. Whether the result means anything comes down to those four checks, and skipping them is how a business ends up optimizing a number that looks healthy and isn’t.

Questions people ask

What is the formula for ROAS?
ROAS equals revenue attributed to advertising divided by the amount spent on that advertising. $20,000 in attributed revenue on $5,000 of spend is a ROAS of 4, written 4x or 400%.
What is a good ROAS?
It depends entirely on your gross margin, not on a universal number. Breakeven ROAS equals 1 divided by your gross margin as a decimal — at a 40% margin, breakeven is 2.5x, meaning a 4x ROAS clears breakeven comfortably, while the same 4x could be a loss at a 20% margin, where breakeven is 5x.
Does ROAS account for profit margin?
No. ROAS compares revenue to ad spend and says nothing about cost of goods, shipping, or payment processing on its own. A positive ROAS can still be unprofitable once those costs are included, which is why breakeven ROAS (1 divided by gross margin) matters more than the raw ROAS number.
Why is my ROAS different in Google Ads than in GA4?
Each platform attributes revenue differently. Google Ads measures inside its own conversion window (30 days click-through by default, 1 day view-through), while GA4’s standard reports group revenue by last-click, session-scoped source/medium. Both numbers can be correct and still disagree, because they’re each answering a slightly different question about the same sales.

Want this run properly?

I am Greg Asuncion, an ecommerce paid media consultant. I run Google Ads, Meta, Amazon and Microsoft for direct‑to‑consumer brands on Shopify — one person, published pricing, and a free audit after a call. Here is how I set up measurement that survives this kind of question.