ROAS Calculator
Compute Return On Ad Spend from revenue + spend, and instantly see your break-even ROAS based on gross margin.
Your gross profit per dollar of revenue. Drives the break-even ROAS.
Result
Above your 1.67x break-even — every additional ad dollar is profitable.
The ROAS you need just to not lose money. Anything above this is profit.
Revenue × gross margin minus ad spend. Excludes operational costs.
How ROAS is calculated
ROAS = revenue from ads ÷ ad spend. A 4.0 means $4 of revenue per $1 of spend; a 1.0 means you broke even on revenue (but not on margin).
Why break-even ROAS matters more than absolute ROAS
A 5.0 ROAS sounds amazing — until you remember that an ecommerce store with 25% gross margins needs a 4.0 ROAS just to break even. The relevant question is always: are you above your break-even?
Break-even ROAS = 1 / gross margin %. So:
- 20% margin → 5.00x break-even
- 40% margin → 2.50x break-even
- 60% margin → 1.67x break-even
- 80% margin → 1.25x break-even
Why ROAS alone misleads
High-funnel campaigns (display, awareness video) have terrible attributed ROAS but lift everything else. If you only optimize for ROAS, you’ll cut these and watch direct traffic + branded search collapse 6 weeks later. Use ROAS for performance campaigns; use marketing-mix or geo-experiment data for awareness.
FAQ
What is ROAS?⌄
ROAS = Return On Ad Spend = revenue generated by ads ÷ ad spend. A 4.0 ROAS means $4 of revenue for every $1 of spend.
What's a good ROAS?⌄
It depends entirely on your gross margin. A 2.0 ROAS is a runaway hit for a 70%-margin SaaS business and a money-losing disaster for a 30%-margin ecommerce store. Always benchmark against your break-even ROAS, which is 1 ÷ gross-margin %.
ROAS vs ROI — which should I track?⌄
ROAS = revenue / ad spend. ROI (or marketing ROI) = (revenue × margin − ad spend) / ad spend. ROI accounts for cost of goods. Use ROAS for in-channel optimization (it updates daily). Use ROI for board-level decisions (it tells you if marketing is actually profitable).
My ROAS dropped overnight — what do I check first?⌄
Three things in order: 1) New negative keyword conflict (Optmyzr/Opteo/MarqOps all detect this); 2) A campaign budget cap that triggered after-hours; 3) A Google policy disapproval that paused your ads silently. The MarqOps anomaly digest catches all three within 24 hours.
Related
Want this monitored automatically?
Inside MarqOps you set targets per brand, get alerted when actuals drift, and ship branded weekly reports to clients.
Get started free