How to check if a 3x ROAS is profitable, step by step
If your ads report 3x, read your margin per order in Shopify, take off card fees and multiply by three. Then split the value into new and returning buyers, check Meta's incremental view and price the next euro in the Google Ads simulator.
By Joris van Huët, Founder & CEOUpdated 7 min read
Run the numbers for your store: the free break-even ROAS calculator, or the free Shopify fee calculator.
If your ads report 3x, run four checks. Find your margin per order after card fees and multiply it by three. Split the result into new and returning buyers, ask Meta what share it thinks it caused, and price the next euro. If the profit per euro turns negative on any of them, it is not good yet.
Seven steps over one closed month. Most of the work happens in Shopify and Google Ads, with one stop in Meta Ads Manager. Every menu path below comes from the platform's own help page, read on 1 October 2026.
Step by step
- Read your margin per order. Shopify's Profit margin by order counts product costs plus the shipping costs, duties and import taxes your store paid. Profit only shows for products that had a Cost per item when they sold, so fill those in first. Menu path: Shopify admin > Analytics > Reports > Category filter > Profit Margin > Profit margin by order.
- Take off your card fees. The profit report does not list them. With Shopify Payments you pay the credit card rate and no extra transaction fee, and your rates sit under Standard rates. Menu path: Shopify admin > Settings > Payments > Shopify Payments > Manage > Standard rates.
- Turn the margin into profit per euro. Multiply three by your margin after fees, written as a decimal, then subtract 1. Above zero, each euro of ads leaves profit; below zero, each one costs you. The break-even ROAS calculator runs the same sum the other way round. Menu path: none, this step is arithmetic.
- Split the ratio into new and returning buyers. Google Ads can segment a campaign's conversion value by New vs. returning customers. The segment needs a customer lifecycle goal and a campaign that bids for purchases. Under Google's auto-detection, a buyer counts as new after no purchase in the last 540 days. A ratio made mostly of returning buyers is a weaker case than it looks. Menu path: Google Ads > Campaigns > Segment > New vs. returning customers.
- Ask Meta what it thinks it caused. Meta's incremental view counts only conversions its model considers caused by the ad. Standard attribution counts them all. Results start on 1 April 2025 at the earliest, and Meta warns against comparing ad sets on different attribution models in one table. Menu path: Ads Manager > Columns: Performance > Compare attribution models > Incremental > Apply.
- Price the next euro. Google's simulators estimate cost and conversion value at other bids, budgets or targets, using the last 7 days. Divide the extra value by the extra cost between two rows to get the return on the next euro. For Search and Performance Max, the estimates also count conversions still expected to arrive. Menu path: Google Ads > Campaigns > simulator icon in the Budget column.
- Decide campaign by campaign. Keep a campaign whose profit per euro stays positive on new buyers, on Meta's incremental view and at the margin. Fix one that passes on average but fails on the next euro. Test or cut one that fails on caused sales. Write the verdict next to each campaign name, so the next budget review starts there. Menu path: none, this step is the decision.
A worked example
For illustration, take one invented campaign in round numbers.
| Check | Where it comes from | For illustration |
|---|---|---|
| Reported ROAS | The platform's ROAS column | 3.0 |
| Margin per order | Profit margin by order | 38% |
| Card fees | Shopify Payments, Standard rates | 2% of each sale |
| Margin after fees | 38% minus 2% | 36% |
| Returning buyers' share of value | New vs. returning customers segment | 40% |
| Next €500 of spend | Simulator in the Budget column | €1,000 more value |
Say the campaign reports 3x and Profit margin by order shows 38%. If the card fees take another 2% of each sale, the margin after fees is 36%. For illustration, three times 0.36 is 1.08, so each euro of ads leaves eight cents.
Now the split. Suppose 40% of the value comes from returning buyers, and half of those sales would have happened anyway. In this worked example, the ratio on caused sales falls to 2.4x, and 2.4 times 0.36 is about 0.86. Each euro of ads now loses 14 cents, for illustration. On new buyers alone, the same worked example gives 1.8x.
Then the next euro. Say the next €500 of spend buys €1,000 more conversion value. In this worked example, that is 2x on the new money, and each extra euro loses 28 cents at a 36% margin.
One store's export holds the same line for a 40% margin: 2.5x on the Break-even sheet. At 36%, for illustration, 1 divided by 0.36 puts the line at about 2.8x. So the campaign clears the dashboard and misses on caused sales and on the next euro. The verdict from step 7 is fix or test, not scale.
What should I check when the numbers look wrong?
- The New vs. returning customers segment is missing. It only appears when a lifecycle goal is active and the campaign bids for purchases. Google also files some conversions as Unknown when it cannot tell new from returning.
- Meta's incremental column is empty. Choose dates from 1 April 2025 onwards. Meta shows no incremental results before then.
- The simulator icon is grey. Google names a few reasons. The campaign may lack data from the last 7 days, share a budget or run an experiment. Hitting its daily budget can block estimates too.
- The margin skips some products. Shopify asks you to edit each variant to add its Cost per item. Profit only counts items that had a cost when they sold, so check the variants of your best sellers first.
- Meta's incremental figure sits below its standard one. That is the design, not a fault. Standard attribution counts every conversion it can claim, and the incremental view keeps only the ones its model credits to the ad.
- Your fees run higher than the rates page. With a third-party payment provider, you pay that provider's card fees plus a transaction fee from Shopify. Take both off before step 3.
What to do this week
- Put your fee rate next to your margin. In Shopify, open Settings, then Payments, and read your Standard rates under Shopify Payments. Pass: you have one margin after fees for your main product group. Fail: you are still using a margin that pretends card fees are free.
- Switch on the new versus returning split. In Google Ads, open Campaigns, click Segment and choose New vs. returning customers for your main purchase campaign. Pass: you can see how much of the value came from new buyers. Fail: the segment is missing, so check whether a customer lifecycle goal is active on that campaign.
- Run one live budget step. Raise one campaign's budget by a fifth for two weeks, then compare the extra conversion value with the extra cost. Pass: the extra still clears your line. Fail: it does not, so put the budget back and keep the level that paid.
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: Profit reports (Shopify Help Center); Viewing your Shopify Payments payout fees (Shopify Help Center); Measure your lifecycle goals campaigns (Google Ads Help); About attribution models and attribution settings (Meta Business Help Center); How to view results for incremental attribution in Meta Ads Manager (Meta Business Help Center); Estimate your results with bid, budget, and target simulators (Google Ads Help).
Related answers
Frequently asked questions
How do I turn a 3x ROAS into profit per euro of ads?
Multiply 3 by your margin after costs and fees, written as a decimal, then subtract 1. For example, at a 45% margin, 3 times 0.45 is 1.35, so each euro of ads leaves 35 cents of gross profit. A negative result means the ads cost more than they earn.How does Google Ads decide a buyer is new?
Under auto-detection, a buyer counts as new after no purchase in the previous 540 days. Google also uses the existing customer list you give it and the new customer reporting tag. Some conversions show as Unknown when Google cannot tell, so read the split as an estimate.Can I trust Meta's incremental attribution numbers?
Treat them as Meta's model, not a measurement. Meta says incremental attribution uses models that predict whether an ad caused a conversion. It makes a useful second opinion on a ROAS, and a holdout test in your own regions is the referee.
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.
- 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.
- 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.