1. Scope
Converts ad spend, impressions, clicks, and conversions into ROAS, break-even ROAS, profit after spend, and the conversion rate required to hit a target. It does not include platform fees, incrementality adjustments, or multi-touch attribution.
2. Inputs and outputs
Inputs
- adSpend number (currency)
- clicks number
- conversionRate percent
- averageOrderValue number (currency)
- grossMargin percent default: 60
Outputs
- conversions
clicks × conversionRate.
- revenue
conversions × averageOrderValue.
- roas
revenue / adSpend.
- breakevenRoas
1 / grossMargin.
- profit
revenue × grossMargin − adSpend.
Engine source: src/lib/ad-spend-roas-calculator/engine.ts
3. Formula / scoring logic
roas = revenue / ad_spend
breakeven_roas = 1 / gross_margin
profit = revenue * gross_margin - ad_spend
target_cvr = (ad_spend * target_roas) / (clicks * aov) 4. Assumptions
- Every reported conversion is incremental. In reality, branded search and retargeting cannibalise organic — the tool overstates ROAS for those campaigns.
- Gross margin is the product-level margin, not a channel blended margin.
- Platform fees, ad agency fees, and returns are assumed to be zero or already netted.
5. Data sources
6. Known limitations
- ROAS is not profit. A 4:1 ROAS at 25% margin breaks even; at 60% margin, it's highly profitable. Always check against breakeven ROAS.
- Incrementality requires a hold-out test (geo-split or audience hold-out). Without it, reported ROAS can overstate channel value meaningfully.
7. Reproducibility
Input
spend = $5,000, clicks = 5,000, cvr = 2%, aov = $75, grossMargin = 60%.
Expected output
conversions = 100, revenue = $7,500, roas = 1.5×, breakeven_roas ≈ 1.67×, profit = -$500 (loss).
8. Change log
- 2026-04-24 methodology page first published.