ROAS vs ROI: how to calculate both, step by step
You need three numbers: ad spend, the revenue credited to those ads and your gross margin. ROAS is revenue divided by spend. Ad ROI is gross profit minus spend, divided by spend. Google Ads, GA4 and Shopify give you all three.
By Joris van Huët, Founder & CEOUpdated 7 min read
Run the numbers for your store: the free marketing ROI calculator.
You usually need three numbers: ad spend, the revenue your ads were credited with, and your gross margin. ROAS is that revenue divided by spend. Ad ROI is the gross profit on that revenue, minus spend, divided by spend. Google Ads or GA4 gives you the first two, and Shopify's profit reports give you the margin.
Step by step
- Pick one closed month. Use a calendar month that ended a few weeks ago, so late conversions have landed. Google Ads' own Target ROAS guidance agrees: keep the latest conversion delay out of the window you judge. In GA4, select the date picker in the top right of a report and choose a custom range.
- Read ROAS in Google Ads. Open the Columns drop-down, select Modify columns and add Conv. value/cost from the Conversions list. That column is ROAS as a ratio, and it only works if your conversions carry values. Google multiplies it by 100 to express Target ROAS as a percent.
- Read ROAS in GA4 too. Click Advertising on the left, then Planning > All channels, and pick your purchase key event at the top left. GA4's Return on ad spend is the revenue for the selected key events divided by your total ads cost. An empty Ads cost column means GA4 has nothing to divide by, and the checks below explain why.
- Record product costs in Shopify. Go to Products, open a product and click Cost per item in the Price section. Enter the cost, click Save and repeat for each variant. Shopify's help says to enter what you paid the manufacturer if you resell, or your labour and material costs if you make it.
- Read your gross margin. Go to Analytics > Reports, click the Category filter and choose Profit Margin. Open Gross profit by product: Shopify's Gross margin is net sales minus cost, divided by net sales. For a fuller picture, the Profit margin by order report also counts the shipping costs, duties and import taxes your store paid.
- Turn the margin into break-even ROAS. Divide 1 by your margin as a decimal to get the ROAS where gross profit just covers the ads. For example, a 50% margin puts the line at 2x, and a 25% margin puts it at 4x. The break-even ROAS calculator does the sum if you would rather not.
- Work out ad ROI. Multiply ROAS by your margin and subtract 1. Above zero, the ads earned back their cost after product costs; below zero, they did not, however good the ROAS looked. Keep both numbers: ROAS for whoever runs the ads, ROI for whoever signs the budget and checks it against the books.
A worked example
For illustration, here is one invented month in round numbers. None of it comes from a real store.
| Line | Where it comes from | For illustration |
|---|---|---|
| Ad spend | Google Ads, spend for the month | €2,000 |
| Revenue credited to the ads | Google Ads, conversion value | €8,000 |
| ROAS | €8,000 divided by €2,000 | 4x |
| Gross margin | Shopify, Gross profit by product | 40% |
| Gross profit on that revenue | €8,000 times 0.40 | €3,200 |
| Ad ROI | (€3,200 minus €2,000) divided by €2,000 | 60% |
| Break-even ROAS | 1 divided by 0.40 | 2.5x |
In this worked example, Google Ads shows a 4x ROAS and a 60% ad ROI, well above the 2.5x break-even line. Google's ROI glossary divides by all costs instead, goods and ads together. For illustration, the goods cost €4,800 here, because 60% of €8,000 is €4,800. Add €2,000 of ads and costs reach €6,800, which leaves €1,200 of profit in this worked example. Divide by all costs, as Google's glossary does, and this worked example's ROI is about 18%. Both ROIs are right. They answer different questions, so label the one you report.
Margin moves the line as well. For illustration, if a sale week cuts the margin to 30%, the same 4x ROAS gives an ad ROI of 20%. Break-even ROAS at that margin rises to about 3.3x in the same worked example.
Now suppose GA4's All channels report credits the same campaigns with €4,000 for that month. If the GA4 figure is right, ROAS is 2x, under the 2.5x line, and ad ROI is minus 20%. Same spend, same month, and in this worked example ROI flips from plus 60% to minus 20%. The only thing that changed is which report you believe. So the next move is not a budget cut. It is finding out which revenue figure is closer to what the ads really did.
One store's export carries a Break-even sheet that does the same sum: at a 40% margin, break-even ROAS is 2.5x. That is arithmetic, not a ROAS the store hit, because its export holds no ad spend. Its Journeys sheet shows why the month matters: journeys with two or three touches took 12.5 days to buy. Judge a campaign three days after the spend, and those buyers are not in your ROAS yet.
What should I check when the numbers disagree?
Google Ads and GA4 show different ROAS. That is normal. Google's help says the two products attribute key events differently, so the same date range can give different results. Pick one as the source for ROI and say which.
GA4 shows no ads cost. The All channels report needs a linked, spending Google Ads account or campaign data brought in through Data Import. Without cost, GA4 has no ROAS to show. Spend from Meta or TikTok only appears once you bring it in through Data Import as well.
Shopify's margin looks off. Discounts and refunds move it. Shopify's own example shows a T-shirt at a 50% margin on its product page and 33% in the profit report after a 25% discount. That moves break-even ROAS from 2x to about 3x.
Profit rows are missing. Shopify reports profit only for products that had a cost recorded when they sold. Fill in Cost per item before the month you want to analyse, not after.
ROAS dropped and nothing changed. Check whether your range runs up to yesterday. Conversions that take a few days have not all arrived, so the newest days look worse than they will. Move the end date back and compare again before anyone touches a budget.
What to do this week
- Fill in Cost per item for your ten best-sellers. In Shopify, open each product and use the Price section. Pass: each one shows a Gross margin in Gross profit by product. Fail: some are missing, and their profit never reaches the report.
- Add Conv. value/cost to your main Google Ads view. Use Columns, then Modify columns, then the Conversions list. Pass: last month's ROAS is readable at a glance. Fail: the column is empty, which usually means your conversions carry no values yet.
- Put ad ROI next to ROAS in your weekly report. Use ROAS times margin, minus 1, on Google Ads revenue and on GA4 revenue. Pass: ROI has the same sign on both. Fail: it flips, so agree on one source of revenue before you raise budgets.
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: About Target ROAS bidding (Google); All channels performance report (Google); Profit reports (Shopify); Return on investment (ROI) (Google); Change and compare date ranges in reports (Google).
Related answers
Frequently asked questions
Can ROAS be good while ROI is negative?
Yes. ROAS divides revenue by ad spend and ignores product, shipping and payment costs. A campaign can return more revenue than it spends and still lose money once those costs come off. Check ROI with the costs included before you scale it.Why is my Shopify gross margin lower than the margin on the product page?
Discounts and refunds. The product page uses the full price. The Gross margin in Shopify's profit reports uses net sales, after that period's discounts and refunds. Use the report's figure when you work out break-even ROAS.Should ad ROI include salaries and software?
Not when you judge a campaign: use product costs and ad spend, so the number moves with the ads. Include overheads when you judge the business as a whole, and label which version you are showing.
Go deeper: Causal attribution, explained.
Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.
Keep reading
Terms in this article
- AnalyticsAnalytics is the systematic computational analysis of data. It reveals customer behavior and measures campaign performance.
- AttributionAttribution identifies user actions that contribute to a desired outcome and assigns value to each. It reveals which marketing touchpoints drive conversions.
- CausalityCausality is the relationship where one event directly causes another, essential for identifying specific actions that drive desired outcomes in marketing.
- 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.
- Product PageProduct Page is a webpage dedicated to a single product. It includes images, descriptions, pricing, and purchase options.
- Profit MarginProfit margin measures profitability, calculated as net income divided by revenue and expressed as a percentage.
- Return on Investment (ROI)Return on Investment (ROI) is a ratio between net income and investment. It evaluates the efficiency of an investment.