Determine the exact Return on Ad Spend needed to cover your costs.
Please check your inputs. Selling Price must be greater than Product Cost.
$
$
$
%
Breakeven ROAS0.00
(0%)
Breakeven CPA$0.00
Profit Margin (Pre-Ad)0%
Total Fees & Costs$0.00
Net Profit (If ROAS Met)$0.00
Understanding Breakeven ROAS
For eCommerce businesses and digital marketers, understanding your numbers is the difference between scaling a profitable campaign and burning through cash. The Breakeven ROAS (Return on Ad Spend) is arguably the most critical metric to monitor.
Breakeven ROAS represents the specific ROAS value where your revenue exactly covers your Cost of Goods Sold (COGS), shipping, transaction fees, and ad spend. At this point, your net profit is $0. Any ROAS achieved above this number is pure profit; anything below it indicates a loss.
How to Calculate Breakeven ROAS
To calculate your Breakeven ROAS, you first need to understand your Profit Margin before ad spend. The formula is derived from the relationship between your selling price and your profit margin.
Let's say you run a Shopify store selling a premium backpack. Here is a realistic breakdown:
Selling Price: $120.00
Manufacturing Cost (COGS): $40.00
Shipping to Customer: $15.00
Payment Fees (Stripe/PayPal): $4.00
First, we calculate total costs (excluding ads): $40 + $15 + $4 = $59.00.
Next, we calculate the profit per unit before ads: $120 – $59 = $61.00. Profit Margin: $61 / $120 = 50.8%.
Finally, the Breakeven ROAS: 1 / 0.508 = 1.97
This means for every $1 you spend on Facebook or Google Ads, you must generate $1.97 in revenue just to break even. If your dashboard shows a ROAS of 3.0, you are profitable. If it shows 1.5, you are losing money on every sale.
What is Breakeven CPA?
While ROAS focuses on the return multiplier, Breakeven CPA (Cost Per Acquisition) focuses on the dollar amount you can afford to spend to acquire a single customer. In the calculator above, the Breakeven CPA is equal to your profit margin per unit ($61.00 in the example). If your cost to acquire a customer is lower than this number, you are profitable.
Why This Matters for Scaling
Many dropshippers and brand owners mistakenly aim for an arbitrary ROAS (like 4.0) without knowing their floor. If you have a high-margin product (e.g., supplements with 80% margin), your breakeven ROAS might be as low as 1.25. Knowing this allows you to bid more aggressively and scale faster than competitors who are scared of lower ROAS numbers.
function calculateBreakeven() {
// 1. Get input elements
var sellingPriceInput = document.getElementById("sellingPrice");
var cogsInput = document.getElementById("cogs");
var shippingInput = document.getElementById("shippingCost");
var feesPercentInput = document.getElementById("feesPercent");
// 2. Parse values (handle empty inputs as 0)
var price = parseFloat(sellingPriceInput.value);
var cogs = parseFloat(cogsInput.value) || 0;
var shipping = parseFloat(shippingInput.value) || 0;
var feesPct = parseFloat(feesPercentInput.value) || 0;
// 3. Elements for displaying results
var resultContainer = document.getElementById("resultContainer");
var errorMsg = document.getElementById("errorMsg");
var breakevenDisplay = document.getElementById("breakevenResult");
var breakevenPercentDisplay = document.getElementById("breakevenPercent");
var cpaDisplay = document.getElementById("cpaResult");
var marginDisplay = document.getElementById("marginResult");
var totalCostDisplay = document.getElementById("totalCostResult");
// 4. Input Validation
if (isNaN(price) || price = price) {
errorMsg.style.display = "block";
errorMsg.innerText = "Total costs exceed the Selling Price. This product has a negative margin.";
resultContainer.style.display = "none";
return;
} else {
errorMsg.style.display = "none";
}
// 8. Core Calculations
var profitPreAd = price – totalCosts; // This is the Breakeven CPA
var marginDecimal = profitPreAd / price;
var marginPercent = marginDecimal * 100;
// Breakeven ROAS Formula: 1 / Margin%
var breakevenROAS = 1 / marginDecimal;
// 9. Display Results
resultContainer.style.display = "block";
// Update HTML content
breakevenDisplay.innerText = breakevenROAS.toFixed(2);
breakevenPercentDisplay.innerText = "(" + (breakevenROAS * 100).toFixed(0) + "%)";
cpaDisplay.innerText = "$" + profitPreAd.toFixed(2);
marginDisplay.innerText = marginPercent.toFixed(2) + "%";
totalCostDisplay.innerText = "$" + totalCosts.toFixed(2);
}