ROAS hides product cost, fees, shipping and refunds. Set your margin, then optionally import your account — it runs your real campaigns through that margin and tells you which ones actually profit.
Step 1 — set your margin
What you charge per sale
Your typical order value. Used for the single-sale check, and as order value if an imported file has no revenue column.
What the product costs you
Don't know the exact cost? Use the markup you sell at — most people know that.
What you pay in ads per sale
Your cost per purchase (CPA). Only used for the single-sale check below — the import uses your file's real spend.
Payment fees
Shipping you absorb per order
Refund / discount allowance
Step 2 — import your account (optional)
Drop a performance report here
A performance report (Cost, Conversions, ideally Conv. value). Add a GA4/analytics revenue export and it uses your true revenue instead of the ad platform's; add a bulksheet and it flags which losers are on autopilot. Matched by campaign name.
Performance report — Google Ads
Performance report — Meta Ads (if you run Meta)
True revenue — GA4
Bulksheet — Google Ads Editor (optional)
Files are matched by campaign name, so the names need to line up across files — your Google Ads campaign name should match GA4's Session Google Ads campaign, and a Meta campaign matches GA4's Session campaign via your UTM. Paths follow the current interfaces; if something's moved, search the platform's own help.
This only stitches if your campaign names match across Google Ads, GA4 and Meta — and in real accounts they often don't: UTMs, renames, and inconsistent naming leave your revenue stranded from your spend. Mapping it back to the right campaigns is fiddly, one-off work.
I can clean and align your exports so they stitch correctly — a quick paid data-prep job. Send me what you've got.
Get your data alignedDM @AdSpendAutopsy
| What | How it's worked out |
|---|---|
| Your margin | From the markup (cost = price ÷ markup, so 2× = 50%) or your exact cost, minus payment fees, refund allowance and shipping. |
| Profit per sale | price × margin − your CPA. Break-even ROAS = price ÷ (price × margin). |
| Revenue used (import) | Your GA4 / analytics export first (matched by campaign name), then the ad platform's Conv. value, then orders × your price. |
| True profit per campaign | revenue × your margin − shipping × orders − ad spend. |
| ROAS mirage | Flagged when ROAS looks positive but true profit is negative — i.e. ROAS sits below your break-even ROAS. |
| Revenue gap | When both analytics and ad-platform revenue are present, shows how far the platform over- or under-reports — the attribution gap behind an inflated ROAS. |
| Privacy | Everything is computed in your browser from the numbers you enter and the files you pick. Nothing is uploaded. |
This tells you which campaigns lose money after real costs. It won't tell you why, or how to get them under break-even without killing the volume that works.
That's a 30-minute teardown with someone who's run accounts for 14 years. Send your numbers and I'll show you where the room is.
Get a teardownDM @AdSpendAutopsy
A high ROAS can still lose money. This free Google Ads break-even calculator applies your real margin — after product cost, payment fees, shipping and refunds — to show which campaigns actually profit, and the break-even ROAS each one needs to clear. Start with a simple “I sell at ~2× cost” input, then import your Google Ads performance and GA4 revenue to see true profit per campaign.
Because the maths runs entirely in your browser, nothing is uploaded. Use it to catch the “looks fine on ROAS, loses money” campaigns before they drain the budget.