How do I calculate ROAS?
Divide the revenue your ads were credited with by what you spent on those ads. Then write down whose credit it is, which revenue you used and which window counted the sales, because each choice changes the answer.
By Joris van Huët, Founder & CEOUpdated 7 min read
Run the numbers for your store: the free break-even ROAS calculator.
ROAS is the revenue your ads were credited with, divided by what you spent on those ads. For example, €1,000 of spend credited with €4,000 of sales is a ROAS of 4x, or 400%. The division is the easy part. The revenue on top usually depends on which platform, window and model did the crediting.
The usual answer stops at the formula, as if ROAS were a fixed property of the ad. It is not. Every platform fills the top of the fraction with its own rules. Two people can calculate ROAS for the same campaign on the same day, get different answers, and both be right.
What one store's data shows
One store's anonymised GA4 export, 1 January 2024 to 21 August 2026. It holds shares of revenue only: no ad spend, no order counts.
| What the export shows | Value | Source cell |
|---|---|---|
| Touched view: every channel's credit, added up | 110.4% of revenue | Channels sheet, Touched column total |
| Direct, in last click, first click and touched views | 57.7% of revenue | Channels sheet, Direct row |
| Journeys with 1 touch (0.5 days to buy) | 79.5% of revenue | Journeys sheet, 1 touch row |
Start with the first row, because it is the numerator problem in a single cell. The touched view gives every channel the full value of each journey it touched. Added up, that column comes to 110.4% of revenue (Channels sheet). More credit than money: a journey that touched two channels counts twice.
That is what happens when you add up the ROAS of each ad platform. Each one counts the sales it touched, under its own rules. A sale that both touched sits in both numerators. The total looks like growth, and it is double counting.
The second row shows the opposite gap. Direct holds 57.7% of revenue in last click, first click and touched views alike (Channels sheet). By Google's rule, GA4's models give Direct credit only when the whole path is direct visits. So as far as GA4 can tell, no ad click sits on those journeys.
An ad platform can still claim some of them, because it counts by its own window. Meta's view-through setting counts purchases within 1 day of someone seeing an ad, no click needed. GA4 sees a typed address; Meta sees a sale near its ad. Both can end up in someone's ROAS.
The third row says the model matters less than the argument suggests. Journeys with one touch hold 79.5% of revenue and took 0.5 days to buy (Journeys sheet). With a single touch, last click, first click and data-driven all name the same channel. For most of this store's revenue, whose rules count the sale matters more than how a model splits it.
What the export cannot show is a ROAS. It holds no ad spend, so the bottom of the fraction is missing. It cannot say what any ad caused, either. Credit is bookkeeping; cause needs a test.
Why does the usual answer mislead?
Because the formula hides three choices, and each one moves the result.
Whose credit. Meta calculates Purchase ROAS as purchase conversion value divided by amount spent. The purchases in that value are the ones its attribution setting lets it claim. Click-through counts purchases within 1 or 7 days of a link click, and view-through within 1 day of an impression. Meta also offers incremental attribution, which uses models that predict whether the ad caused the conversion. Same ads, different numerator.
Google Ads is no simpler. Its conversion columns follow the attribution model set on each conversion action. Its Model comparison report shows Conv. value / cost for the same campaigns under two models, side by side. If ROAS changes when only the model changes, the campaign did not.
GA4 adds a third view. Its All channels report divides the revenue for the selected key events by your ad cost. Google's help says GA4 and Google Ads attribute key events differently, so the same dates can disagree.
Which revenue. Shopify's Net sales is gross sales minus discounts and sales reversals. Its Total sales adds taxes, duties, shipping charges and fees on top. Divide Total sales by spend and part of your ROAS belongs to the tax office. Check what value your purchase tag sends, too: if it includes tax and shipping, so does every platform's ROAS.
Which period. A sale can land days after the click. Google's Target ROAS help says to keep the most recent conversion delay out of any ROAS review. Judge yesterday's ads today and some of their sales have not arrived yet.
What can a ROAS number not tell you?
It cannot tell you whether the ads caused the sales. ROAS counts sales near an ad, not sales because of it. A buyer who searched your brand name and clicked the top ad may well have bought anyway. Only a holdout, with the ads off for some buyers, measures what they added. That is what incrementality testing is for.
It cannot tell you whether you made money. For illustration, a 4x ROAS loses money at a 20% margin and makes some at a 40% margin. Your line is 1 divided by your margin after costs, and the break-even ROAS calculator does that sum.
It cannot tell you what a customer is worth later. If buyers come back, ROAS on the first order undercounts what the ad started. A reorder that a platform claims can flatter the ad that merely reminded someone.
And it cannot be added across platforms, as the touched view above shows.
What to do this week
- Label every ROAS before anyone acts on it. Note the platform, the model or window, and the revenue definition next to each figure. In Google Ads, the model sits under Goals, then Summary: select your purchase conversion and choose Edit settings. Pass: every figure you report carries all three labels. Fail: a slide shows a ROAS and nobody can say whose rules made it.
- Price one campaign under two models. In Google Ads, open Goals, then Attribution, then Model comparison. Set Last click against Data-driven with the Compare and With menus, and read Conv. value / cost. Pass: your biggest campaign sits on the same side of your break-even line under both. Fail: the model alone moves it across, so test before you move budget.
- Hold the platforms' claims against Shopify. Add last month's purchase conversion value from Meta to the conversion value from Google Ads. In Shopify, go to Analytics, then Reports, filter the Category to Sales and open Total sales over time for the same month. Pass: the sum stays well below Total sales, leaving room for organic and Direct. Fail: it comes close to Total sales or beats it. Some sales sit in both claims, so report blended ROAS until a test settles who earned what.
Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework
Sources, 1 October 2026: Purchase ROAS (return on ad spend) (Meta Business Help Center); About attribution models and attribution settings (Meta Business Help Center); About attribution models (Google Ads Help); All channels performance report (Google Analytics Help); Get started with attribution (Google Analytics Help); Sales reports (Shopify Help Center); About Target ROAS bidding (Google Ads Help).
Related answers
Frequently asked questions
Should I calculate ROAS on revenue with or without tax?
Without, if you can, and the same way everywhere. Shopify's Net sales leaves out taxes, duties and shipping, while its Total sales includes them. If your purchase tag sends tax-inclusive values, every platform's ROAS carries the tax too. Pick one definition and write it next to the number.Is a 400% ROAS the same as a 4x ROAS?
Yes, both mean four of revenue for each one spent. Google Ads writes Target ROAS as a percentage, so you multiply its Conv. value/cost column by 100. Meta's Purchase ROAS is a plain ratio. Write the unit next to the number, so nobody compares a ratio with a percentage.Can I add up the ROAS from Meta and Google Ads?
No. Each platform credits itself under its own window, so a sale both touched can sit in both totals. Add the spend instead, take total revenue from Shopify and divide. That blended figure counts each sale once, though it cannot tell you which platform earned it.
Go deeper: Causal attribution, explained.
Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.
Keep reading
Terms in this article
- AttributionAttribution identifies user actions that contribute to a desired outcome and assigns value to each. It reveals which marketing touchpoints drive conversions.
- Attribution ModelAn Attribution Model defines how credit for conversions is assigned to marketing touchpoints. It dictates how marketing channels receive credit for sales.
- ConversionConversion is a specific, desired action a user takes in response to a marketing message, such as a purchase or a sign-up.
- Google AdsGoogle Ads is an online advertising platform where advertisers bid to display ads, service offerings, and product listings.
- Google AnalyticsGoogle Analytics is a web analytics service that tracks and reports website traffic.
- IncrementalityIncrementality measures the true causal impact of a marketing campaign. It quantifies the additional conversions or revenue directly from that activity.
- Incrementality TestingIncrementality Testing measures the additional impact of a marketing campaign. It compares exposed and control groups to determine causal effect.
- Return on Ad Spend (ROAS)Return On Ad Spend (ROAS) measures the total revenue generated for each dollar spent on advertising. It indicates campaign profitability and effectiveness.