Why is my ROAS high but I am not profitable?
Usually because ROAS divides the sales a platform credits to itself by ad spend. Tax and refunds hide inside those sales. Product, shipping and fixed costs sit outside the ratio. And some orders are claimed by two platforms, or were coming anyway.
By Joris van Huët, Founder & CEOUpdated 7 min read
Run the numbers for your store: the free break-even ROAS calculator.
Usually because ROAS counts sales, not profit. It divides the sales an ad platform credits to itself by ad spend. Product cost, shipping, fees, refunds and fixed costs never enter it. If two platforms claim the same order, or the buyer was coming anyway, the ratio looks even better while your bank balance does not.
The usual answer is that your margins are too thin. Sometimes they are. But a thin margin explains low profit, not a glowing ROAS sitting next to a loss. For that you need to know which money sits inside the ratio, and which sits outside it.
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 |
|---|---|---|
| Break-even ROAS at a 40% margin (1 divided by 0.40) | 2.5x | Break-even sheet, 40% margin row |
| Touched view, all channels added together | 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 |
The first row is the only one about ROAS, and it is plain arithmetic. On the Break-even sheet, a 40% margin needs 2.5x, because 1 divided by 0.40 is 2.5. That line pays back the ad and nothing else. Wages, rent and software queue up behind it.
The second row is the one to tape above your desk. In the export's touched view, every channel gets full credit for each journey it touched, so the column adds up to 110.4% (Channels sheet). Nothing is broken: a journey that touched two channels counts twice. Ad platforms keep score much the same way, each in its own account. None of them checks whether another already claimed the order.
Direct holds 57.7% of revenue in the export, in last click, first click and touched views alike (Channels sheet). So more than half the money arrived with no campaign attached, as far as GA4 could tell. An ad platform can still claim some of those buyers. It counts people who clicked or saw its ads, however they came back to buy.
Then the speed. Journeys with one touch hold 79.5% of revenue in this one store, and those buyers took 0.5 days (Journeys sheet). A quick, one-visit buyer is the easiest sale for an ad to claim. Whatever stood last in line, a retargeting ad or a brand-name search ad, books the whole order.
What the export cannot show is the part your question is about. It has no spend, so it gives no ROAS. It has no costs, so it gives no profit. And it has no holdout, so it cannot say which of these sales any ad caused.
Where does the money go between ROAS and profit?
Money that was never yours. On Shopify, the Facebook & Instagram app reports an order's total price to Meta, including duties and taxes. The Google & YouTube app sends Google the same order without shipping or tax. One order, two sizes, and the bigger one sits in Meta's ROAS. Refunds leak too. Google's list of the events that app sends has no refund event. If it is your only feed into GA4, a refunded order stays in GA4's revenue.
Costs the ratio never sees. ROAS divides by ad spend and stops there. Product cost, the shipping you pay, card fees and packaging all come out of each sale first. Discounts hit twice: they can lift sales and ROAS while shrinking what each sale leaves. Shopify's own help page shows it. A $20 T-shirt that cost $10 shows a 50% margin; sold 25% off at $15, it shows 33%. Run 1 divided by the margin and break-even moves from 2x to 3x.
Then come the fixed costs. For illustration, say a month brings €50,000 of net sales at a 40% margin, which leaves €20,000. Say the ads cost €12,500: a ROAS of 4x, far above the 2.5x line. For illustration, that leaves €7,500 for wages, rent and software. If the three of them cost €10,000, the month loses €2,500 at a 4x ROAS.
Sales counted twice. Meta's standard settings count a purchase up to 1 or 7 days after a link click, or 1 day after a view. Google Ads counts a conversion for 30 days after a click unless you change the window. A buyer who clicked both before ordering sits in both ROAS figures. Add the claims up and they can pass your real sales, just like the touched column on one store's Channels sheet. Meta's own pages disagree on its default, which this answer on Meta's setting untangles.
Sales that were coming anyway. The highest ratios often sit on retargeting and brand-name search. Those ads reach people who already know you and were halfway to the checkout. The ad books the sale; the sale did not need the ad. A high ROAS there can just mean the ad is good at standing near the till.
Why does a stricter ROAS target not fix it?
The reflex is to raise the target. Google's Target ROAS help warns that the target you set may influence the total conversion value you get. A stricter target buys fewer, surer sales, and the surest buyers are often the ones who needed the ad least. So the ratio climbs, total sales stall, and the fixed costs stay exactly where they were.
The useful question is different. Did the ads add sales that pay for themselves and for a share of the fixed costs? A holdout test, with some buyers kept away from the ads, answers the first half. Your books answer the second.
What to do this week
- Add up what the platforms claim. Take last month's purchases conversion value from Meta, take the tax out, and add Google Ads' Conv. value. Compare the sum with Net sales in Shopify's Finance Summary, under Analytics > Reports > Category filter > Finances. Pass: the claims sit clearly below net sales, leaving room for email, organic and Direct. Fail: they reach or pass it, so platforms are counting the same orders.
- See how much of your sales carry a cost. In the same Finance Summary, read the Gross profit breakdown card. Pass: Net sales without cost recorded is close to nothing, so gross profit covers your whole range. Fail: a big slice has no cost, so your margin, and every break-even line built on it, is a guess.
- Write the one-line profit check. Take gross profit and subtract card fees from the Shopify Payments activity report, under Finance > Documents. Then subtract ad spend and fixed costs. Pass: the result stays positive at your current ROAS. Fail: it does not, so the ROAS was never the problem; the costs around it are.
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: Facebook data sharing (Shopify Help Center); Shopify event parameters (Google for Developers); Profit reports (Shopify Help Center); Finance reports (Shopify Help Center); About attribution models and attribution settings (Meta Business Help Center); Results (Meta Business Help Center); Ad Account Insights reference (Meta for Developers); About conversion windows (Google Ads Help); About Target ROAS bidding (Google Ads Help).
Related answers
Frequently asked questions
Why do Meta and Google Ads together claim more sales than I made?
Because each one counts a sale it touched in full, under its own window, and neither checks the other. A buyer who clicked both shows up twice. On Shopify, Meta's purchase value also includes tax. Treat Shopify's net sales as the ceiling for all the claims together.Is a high ROAS on retargeting a good sign?
Not on its own. Retargeting reaches people who already visited your store, and many were on their way back anyway. Its ROAS shows how much credit it collects, not how many sales it added. A holdout test, with some visitors kept out of the ads, shows the difference.What costs does break-even ROAS leave out?
Everything after the order. Break-even ROAS, 1 divided by your margin, only pays back the ad itself. Wages, rent, software, agency and creator fees still need covering from what is left. Set your target far enough above break-even to pay for them.
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.
- Holdout TestA holdout test is an experiment where a portion of the audience does not see a campaign. This measures the campaign's true incremental impact.
- 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.
- Profit MarginProfit margin measures profitability, calculated as net income divided by revenue and expressed as a percentage.
- RetargetingRetargeting is online advertising that targets users who have previously interacted with your website or content. Attribution analysis shows the causal role of retargeting in driving conversions and improving ad spend.