Business Break-Even Calculator

Calculate break-even point from fixed costs, variable cost per unit, and selling price.
Returns break-even units, revenue, and months to profitability.

Your data stays in your browser. We do not store, collect, or transmit any information you enter.
Break-Even Timeline
  • Math.round(v).toLocaleString(); }; // Per-unit figures are pennies-sensitive: fmt() rounds $1.50 to $2 and made the // margin line read ‘$5 − $2 = $4’ against inputs of $5.00 and $1.50. var cents = function(v) { return '

if (monthlyProfit <= 0) { document.getElementById(‘result-main-value’).textContent = ‘Not achievable’; document.getElementById(‘result-main-detail’).innerHTML = ‘Monthly revenue (’ + fmt(revenue) + ‘) does not exceed monthly costs (’ + fmt(fixed + variable) + ‘).’ + ‘
Monthly loss: ’ + fmt(Math.abs(monthlyProfit)) + ‘’ + ‘

You need to increase revenue or reduce costs to reach break-even.’; document.getElementById(‘result-main’).classList.add(‘is-visible’); return; }

var months = Math.ceil(startup / monthlyProfit); var years = Math.floor(months / 12); var remainMonths = months % 12; // “1 year 1 months” was the old output. var plural = function(n, word) { return n + ’ ’ + word + (n === 1 ? ’’ : ’s’); }; var timeStr = months === 0 ? ‘Profitable from month one’ : years > 0 ? plural(years, ‘year’) + (remainMonths > 0 ? ’ ’ + plural(remainMonths, ‘month’) : ‘’) : plural(months, ‘month’);

var annualProfit = monthlyProfit * 12; // Dividing by a zero startup cost returned “Infinity% per year”. var roi = startup > 0 ? (annualProfit / startup) * 100 : null;

// The description and the body both promise a per-unit break-even and there // were no per-unit inputs at all. var price = parseFloat(document.getElementById(‘biz-price’).value); var unitCost = parseFloat(document.getElementById(‘biz-unitcost’).value); var unitBlock = ‘’; if (!isNaN(price) && price > 0 && !isNaN(unitCost) && unitCost >= 0) { var cm = price - unitCost; if (cm <= 0) { unitBlock = ‘

Your price of ’ + fmt(price) + ’ does not cover the ’ + fmt(unitCost) + ’ it costs to make each unit. ’ + ‘No volume fixes that, only a higher price or a lower unit cost.’; } else { var beUnits = Math.ceil(fixed / cm); var unitsForRevenue = price > 0 ? Math.round(revenue / price) : 0; unitBlock = ‘

Per-unit break-even
’ + ‘Contribution margin: ’ + cents(price) + ’ − ’ + cents(unitCost) + ’ = ’ + cents(cm) + ‘ per unit (’ + (cm / price * 100).toFixed(0) + ‘% of the price)
’ + ‘Units needed each month to cover ’ + fmt(fixed) + ’ of fixed costs: ’ + beUnits.toLocaleString() + ‘
’ + ‘That is ’ + fmt(beUnits * price) + ’ of monthly revenue, against the ’ + fmt(revenue) + ’ you entered’ + (revenue >= beUnits * price ? ‘, so you clear it with ’ + fmt(revenue - beUnits * price) + ’ to spare.’ : ‘, which leaves you ’ + fmt(beUnits * price - revenue) + ’ short.’) + ‘
’ + ‘At ’ + fmt(price) + ’ a unit your stated revenue implies about ’ + unitsForRevenue.toLocaleString() + ’ sales a month. Every unit past the ’ + beUnits.toLocaleString() + ’th adds ’ + fmt(cm) + ’ of profit.’; } } else { unitBlock = ‘

Add your price and variable cost per unit above and this will also show how many units a month you need to sell.’; }

document.getElementById(‘result-main-value’).textContent = months === 0 ? timeStr : timeStr + ’ to break even’; document.getElementById(‘result-main-detail’).innerHTML = ‘Startup costs: ’ + fmt(startup) + ‘’ + ‘
Monthly revenue: ’ + fmt(revenue) + ‘’ + ‘
Monthly costs: ’ + fmt(fixed + variable) + ‘ (fixed: ’ + fmt(fixed) + ’ + variable: ’ + fmt(variable) + ‘)’ + ‘
Monthly profit: ’ + fmt(monthlyProfit) + ‘ (’ + (monthlyProfit / revenue * 100).toFixed(1) + ‘% margin)’ + ‘
Annual profit: ’ + fmt(annualProfit) + ‘’ + (roi !== null ? ‘
ROI on startup: ’ + roi.toFixed(1) + ‘% per year’ : ‘
ROI on startup: not applicable with no startup cost, since there is nothing to earn back’) + ‘

After break-even, you earn ’ + fmt(monthlyProfit) + ‘/month in profit.’ + (months > 24 ? ‘
Past 24 months is slow. Most small businesses break even inside 18 to 24 months; restaurants take two to three years.’ : ‘’) + unitBlock; document.getElementById(‘result-main’).classList.add(‘is-visible’);

function _loadChartJs(cb) { if (window.Chart) { cb(); return; } var s = document.createElement(‘script’); s.src = ‘https://cdn.jsdelivr.net/npm/[email protected]/dist/chart.umd.min.js'; s.onload = cb; document.head.appendChild(s); } _loadChartJs(function() { var wrap = document.getElementById(‘calc-chart-wrap’); if (!wrap) return; wrap.classList.add(‘is-visible’); var canvas = document.getElementById(‘calc-chart’); if (!canvas) return; if (window._bizBeChart) { window._bizBeChart.destroy(); window._bizBeChart = null; } var primary = getComputedStyle(document.documentElement).getPropertyValue(’–color-primary’).trim() || ‘#2d9b6e’; var totalMonths = months + 6; var step = Math.max(1, Math.ceil(totalMonths / 30)); var labels = [], cumProfit = [], startupLine = []; for (var mo = 0; mo <= totalMonths; mo += step) { labels.push(‘Mo ’ + mo); cumProfit.push(parseFloat((monthlyProfit * mo - startup).toFixed(2))); startupLine.push(0); } window._bizBeChart = new Chart(canvas, { type: ’line’, data: { labels: labels, datasets: [ { label: ‘Cumulative Profit/Loss’, data: cumProfit, borderColor: primary, backgroundColor: primary + ‘33’, fill: true, tension: 0.4, pointRadius: 2 }, { label: ‘Break-Even Line’, data: startupLine, borderColor: ‘#e74c3c’, backgroundColor: ’transparent’, fill: false, tension: 0, pointRadius: 0, borderDash: [6,4] } ] }, options: { responsive: true, maintainAspectRatio: true, animation: { duration: 800, easing: ’easeInOutQuart’ }, plugins: { legend: { position: ’top’ }, tooltip: { backgroundColor: ‘rgba(0,0,0,0.75)’, callbacks: { label: function(c) { return c.dataset.label + ‘: $’ + c.raw.toLocaleString(); } } } }, scales: { x: { ticks: { maxTicksLimit: 8 } }, y: { title: { display: true, text: ‘Profit/Loss ($)’ } } } } }); }); }

  • v.toLocaleString(’en-US’, { minimumFractionDigits: 2, maximumFractionDigits: 2 }); };

if (monthlyProfit <= 0) { document.getElementById(‘result-main-value’).textContent = ‘Not achievable’; document.getElementById(‘result-main-detail’).innerHTML = ‘Monthly revenue (’ + fmt(revenue) + ‘) does not exceed monthly costs (’ + fmt(fixed + variable) + ‘).’ + ‘
Monthly loss: ’ + fmt(Math.abs(monthlyProfit)) + ‘’ + ‘

You need to increase revenue or reduce costs to reach break-even.’; document.getElementById(‘result-main’).classList.add(‘is-visible’); return; }

var months = Math.ceil(startup / monthlyProfit); var years = Math.floor(months / 12); var remainMonths = months % 12; // “1 year 1 months” was the old output. var plural = function(n, word) { return n + ’ ’ + word + (n === 1 ? ’’ : ’s’); }; var timeStr = months === 0 ? ‘Profitable from month one’ : years > 0 ? plural(years, ‘year’) + (remainMonths > 0 ? ’ ’ + plural(remainMonths, ‘month’) : ‘’) : plural(months, ‘month’);

var annualProfit = monthlyProfit * 12; // Dividing by a zero startup cost returned “Infinity% per year”. var roi = startup > 0 ? (annualProfit / startup) * 100 : null;

// The description and the body both promise a per-unit break-even and there // were no per-unit inputs at all. var price = parseFloat(document.getElementById(‘biz-price’).value); var unitCost = parseFloat(document.getElementById(‘biz-unitcost’).value); var unitBlock = ‘’; if (!isNaN(price) && price > 0 && !isNaN(unitCost) && unitCost >= 0) { var cm = price - unitCost; if (cm <= 0) { unitBlock = ‘

Your price of ’ + fmt(price) + ’ does not cover the ’ + fmt(unitCost) + ’ it costs to make each unit. ’ + ‘No volume fixes that, only a higher price or a lower unit cost.’; } else { var beUnits = Math.ceil(fixed / cm); var unitsForRevenue = price > 0 ? Math.round(revenue / price) : 0; unitBlock = ‘

Per-unit break-even
’ + ‘Contribution margin: ’ + cents(price) + ’ − ’ + cents(unitCost) + ’ = ’ + cents(cm) + ‘ per unit (’ + (cm / price * 100).toFixed(0) + ‘% of the price)
’ + ‘Units needed each month to cover ’ + fmt(fixed) + ’ of fixed costs: ’ + beUnits.toLocaleString() + ‘
’ + ‘That is ’ + fmt(beUnits * price) + ’ of monthly revenue, against the ’ + fmt(revenue) + ’ you entered’ + (revenue >= beUnits * price ? ‘, so you clear it with ’ + fmt(revenue - beUnits * price) + ’ to spare.’ : ‘, which leaves you ’ + fmt(beUnits * price - revenue) + ’ short.’) + ‘
’ + ‘At ’ + fmt(price) + ’ a unit your stated revenue implies about ’ + unitsForRevenue.toLocaleString() + ’ sales a month. Every unit past the ’ + beUnits.toLocaleString() + ’th adds ’ + fmt(cm) + ’ of profit.’; } } else { unitBlock = ‘

Add your price and variable cost per unit above and this will also show how many units a month you need to sell.’; }

document.getElementById(‘result-main-value’).textContent = months === 0 ? timeStr : timeStr + ’ to break even’; document.getElementById(‘result-main-detail’).innerHTML = ‘Startup costs: ’ + fmt(startup) + ‘’ + ‘
Monthly revenue: ’ + fmt(revenue) + ‘’ + ‘
Monthly costs: ’ + fmt(fixed + variable) + ‘ (fixed: ’ + fmt(fixed) + ’ + variable: ’ + fmt(variable) + ‘)’ + ‘
Monthly profit: ’ + fmt(monthlyProfit) + ‘ (’ + (monthlyProfit / revenue * 100).toFixed(1) + ‘% margin)’ + ‘
Annual profit: ’ + fmt(annualProfit) + ‘’ + (roi !== null ? ‘
ROI on startup: ’ + roi.toFixed(1) + ‘% per year’ : ‘
ROI on startup: not applicable with no startup cost, since there is nothing to earn back’) + ‘

After break-even, you earn ’ + fmt(monthlyProfit) + ‘/month in profit.’ + (months > 24 ? ‘
Past 24 months is slow. Most small businesses break even inside 18 to 24 months; restaurants take two to three years.’ : ‘’) + unitBlock; document.getElementById(‘result-main’).classList.add(‘is-visible’);

function _loadChartJs(cb) { if (window.Chart) { cb(); return; } var s = document.createElement(‘script’); s.src = ‘https://cdn.jsdelivr.net/npm/[email protected]/dist/chart.umd.min.js'; s.onload = cb; document.head.appendChild(s); } _loadChartJs(function() { var wrap = document.getElementById(‘calc-chart-wrap’); if (!wrap) return; wrap.classList.add(‘is-visible’); var canvas = document.getElementById(‘calc-chart’); if (!canvas) return; if (window._bizBeChart) { window._bizBeChart.destroy(); window._bizBeChart = null; } var primary = getComputedStyle(document.documentElement).getPropertyValue(’–color-primary’).trim() || ‘#2d9b6e’; var totalMonths = months + 6; var step = Math.max(1, Math.ceil(totalMonths / 30)); var labels = [], cumProfit = [], startupLine = []; for (var mo = 0; mo <= totalMonths; mo += step) { labels.push(‘Mo ’ + mo); cumProfit.push(parseFloat((monthlyProfit * mo - startup).toFixed(2))); startupLine.push(0); } window._bizBeChart = new Chart(canvas, { type: ’line’, data: { labels: labels, datasets: [ { label: ‘Cumulative Profit/Loss’, data: cumProfit, borderColor: primary, backgroundColor: primary + ‘33’, fill: true, tension: 0.4, pointRadius: 2 }, { label: ‘Break-Even Line’, data: startupLine, borderColor: ‘#e74c3c’, backgroundColor: ’transparent’, fill: false, tension: 0, pointRadius: 0, borderDash: [6,4] } ] }, options: { responsive: true, maintainAspectRatio: true, animation: { duration: 800, easing: ’easeInOutQuart’ }, plugins: { legend: { position: ’top’ }, tooltip: { backgroundColor: ‘rgba(0,0,0,0.75)’, callbacks: { label: function(c) { return c.dataset.label + ‘: $’ + c.raw.toLocaleString(); } } } }, scales: { x: { ticks: { maxTicksLimit: 8 } }, y: { title: { display: true, text: ‘Profit/Loss ($)’ } } } } }); }); }

Business break-even analysis determines the exact point where your cumulative revenue covers all startup and ongoing costs — the moment you stop losing money and start making it.

Core formulas: Monthly Net Profit = Revenue − Fixed Costs − Variable Costs Break-Even Point (months) = Total Startup Costs ÷ Monthly Net Profit Break-Even Revenue (units) = Fixed Costs ÷ (Price per Unit − Variable Cost per Unit)

Where:

  • Startup costs = one-time launch expenses (equipment, licenses, deposits, inventory, website)
  • Fixed costs = recurring costs that don’t change with sales (rent, salaries, insurance, subscriptions)
  • Variable costs = costs that scale with revenue (raw materials, shipping, sales commissions, payment fees)
  • Revenue = total income from sales per month

Contribution margin: Contribution Margin = Price per Unit − Variable Cost per Unit This is how much each sale contributes toward covering fixed costs and eventually generating profit.

Worked example: A bakery launches with:

  • Startup costs: $40,000
  • Monthly fixed costs: $6,000 (rent $2,500, staff $2,800, utilities/insurance $700)
  • Monthly revenue: $14,000
  • Monthly variable costs: $4,200 (ingredients, packaging — 30% of revenue)

Monthly Net Profit = $14,000 − $6,000 − $4,200 = $3,800 Break-Even = $40,000 ÷ $3,800 = ~10.5 months

Per-unit break-even (selling $5 muffins, $1.50 variable cost): Contribution Margin = $5.00 − $1.50 = $3.50 Break-Even Units = $6,000 ÷ $3.50 = ~1,714 muffins/month

Industry benchmarks: Most small businesses break even within 18–24 months. Restaurants typically take 2–3 years. Software businesses with low variable costs can break even in under 12 months. Knowing your break-even point is essential before seeking investment or taking on debt.


How we build and check this calculator

This calculator runs entirely in your browser, so the numbers you enter stay on your device. The math behind it is written by hand and tested against worked examples and standard references before the page goes live.

SuperGlobalCalculator is independently built and maintained. See how we build and verify our calculators.


Embed This Calculator

Copy the code below and paste it into your website or blog.
The calculator will work directly on your page.