Funding Round Dilution Calculator

Funding Round Dilution Calculator — StartupIndiaX
Free Tool

Funding Round Dilution Calculator

See exactly how your equity changes with every funding round. Add multiple rounds, track your cap table live, and understand what you'll own at exit.

Total: 100% ✓

Stay above 50% as long as possible

Majority ownership means you control board decisions. Indian VCs often push for board seats after Series A — negotiate carefully.

Keep ESOP pool lean early

Investors often demand a 10–15% ESOP pool pre-money, which dilutes founders. Negotiate to create it post-money instead.

Anti-dilution provisions matter

Ask for broad-based weighted average anti-dilution protection. Avoid full ratchet clauses — they heavily punish founders in down rounds.

Raise at the right valuation

Raising too early at a low valuation causes maximum dilution. Get to meaningful traction (₹10L+ MRR) before your Series A.

For educational purposes only — not legal or financial advice. Actual cap table structures depend on term sheets, DPIIT regulations, FEMA compliance, and legal documentation. Consult a startup lawyer or CA before finalising any round.

A free tool by StartupIndiaX.com — India's startup knowledge portal
'; return; } rounds.forEach(function(r, i) { var postmoney = (r.premoney || 0) + (r.investment || 0); var dilPct = postmoney > 0 ? (r.investment / postmoney * 100).toFixed(1) : '0.0'; var pricePerShare = (document.getElementById('premoney0') ? parseFloat(document.getElementById('premoney0').value) || 5 : 5); var div = document.createElement('div'); div.className = 'round-item'; div.innerHTML = '
' + 'Round ' + (i + 1) + '' + '' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + 'Post-money: ' + fmtCr(postmoney) + '' + 'Investor stake: ' + dilPct + '%' + 'Valuation step-up: ' + (i === 0 ? '—' : 'from prev') + '' + '
'; c.appendChild(div); }); } function updateRoundSummary(i) { var r = rounds[i]; var postmoney = (r.premoney || 0) + (r.investment || 0); var dilPct = postmoney > 0 ? (r.investment / postmoney * 100).toFixed(1) : '0.0'; var el = document.getElementById('rsummary-' + i); if (el) { el.innerHTML = 'Post-money: ' + fmtCr(postmoney) + '' + 'Investor stake: ' + dilPct + '%' + (i > 0 ? 'Step-up: ' + (((r.premoney / (rounds[i-1].premoney + rounds[i-1].investment)) - 1) * 100).toFixed(0) + '%' : ''); } } function addRound() { var last = rounds[rounds.length - 1] || { investment: 2, premoney: 8 }; var postLast = last.premoney + last.investment; rounds.push({ name: 'Series ' + 'ABCDE'[rounds.length] || 'Next', investment: last.investment * 3, premoney: postLast * 3 }); renderRounds(); calc(); } function removeRound(i) { rounds.splice(i, 1); renderRounds(); calc(); } function calc() { var f1name = document.getElementById('f1name').value || 'Founder 1'; var f2name = document.getElementById('f2name').value || 'Co-founder 2'; var f1 = parseFloat(document.getElementById('f1pct').value) || 0; var f2 = parseFloat(document.getElementById('f2pct').value) || 0; var esop = parseFloat(document.getElementById('esoppct').value) || 0; var pm0 = parseFloat(document.getElementById('premoney0').value) || 5; var totShares= parseFloat(document.getElementById('totalshares').value)||1000000; var total = p2(f1 + f2 + esop); var ec = document.getElementById('equity-check'); if (Math.abs(total - 100) < 0.05) { ec.textContent = 'Total: 100% ✓'; ec.className = 'equity-check ok'; } else { ec.textContent = 'Total: ' + total.toFixed(1) + '% — must equal 100%'; ec.className = 'equity-check err'; } var stages = [{ label: 'Pre-funding', f1: f1, f2: f2, esop: esop, investors: [], postmoney: pm0 }]; rounds.forEach(function(r, i) { var prev = stages[stages.length - 1]; var postmoney = (r.premoney || 0) + (r.investment || 0); var dilFrac = postmoney > 0 ? r.investment / postmoney : 0; var keep = 1 - dilFrac; var newInvestors = prev.investors.map(function(inv) { return { name: inv.name, pct: p2(inv.pct * keep), colorIdx: inv.colorIdx }; }); newInvestors.push({ name: r.name + ' investors', pct: p2(dilFrac * 100), colorIdx: i }); stages.push({ label: r.name, f1: p2(prev.f1 * keep), f2: p2(prev.f2 * keep), esop: p2(prev.esop * keep), investors: newInvestors, postmoney: postmoney }); }); var final = stages[stages.length - 1]; var foundersStart = f1 + f2; var foundersFinal = p2(final.f1 + final.f2); var totalDil = p2(foundersStart - foundersFinal); var finalPM = rounds.length > 0 ? (rounds[rounds.length-1].premoney + rounds[rounds.length-1].investment) : pm0; var qualClass = foundersFinal > 50 ? 'good' : foundersFinal > 30 ? 'warn' : 'bad'; document.getElementById('stat-grid').innerHTML = '
' + fmtPct(foundersFinal) + '
Founders retain
' + '
' + fmtPct(totalDil) + '
Total diluted
' + '
' + fmtPct(final.f1) + '
' + f1name + '\'s stake
' + '
' + fmtCr(finalPM) + '
Final post-money
'; var barsHtml = ''; stages.forEach(function(stage) { var founderCombined = p2(stage.f1 + stage.f2); barsHtml += '
' + '
' + '' + stage.label + '' + 'founders ' + fmtPct(founderCombined) + '  ·  valuation ' + fmtCr(stage.postmoney) + '' + '
' + '
'; function seg(pct, bg, tx, lbl) { if (pct < 0.1) return ''; return '
' + (pct > 5 ? fmtPct(pct) : '') + '
'; } barsHtml += seg(stage.f1, '#E6F5F3', '#0F6E56', f1name); barsHtml += seg(stage.f2, '#E6F1FB', '#185FA5', f2name); barsHtml += seg(stage.esop, '#FEF5E7', '#854F0B', 'ESOP'); stage.investors.forEach(function(inv) { var c = PALETTE[inv.colorIdx % PALETTE.length]; barsHtml += seg(inv.pct, c.bg, c.tx, inv.name); }); barsHtml += '
'; }); document.getElementById('ownership-bars').innerHTML = barsHtml; var legendHtml = '
' + f1name + '
' + (f2 > 0 ? '
' + f2name + '
' : '') + '
ESOP pool
'; rounds.forEach(function(r, i) { var c = PALETTE[i % PALETTE.length]; legendHtml += '
' + r.name + ' investors
'; }); document.getElementById('bar-legend').innerHTML = legendHtml; var colHeaders = 'StakeholderSharesPre-funding'; stages.slice(1).forEach(function(s) { colHeaders += 'After ' + s.label + ''; }); var rows = ''; function tableRow(cls, name, shares, pctArr, prevPct) { var sharesStr = shares ? shares.toLocaleString('en-IN') : '—'; var cells = '' + name + '' + sharesStr + ''; pctArr.forEach(function(pct, i) { var isReduced = i > 0 && pct < pctArr[i - 1]; cells += '' + (pct >= 0 ? fmtPct(pct) : '—') + ''; }); return '' + cells + ''; } var f1allPcts = stages.map(function(s) { return s.f1; }); var f2allPcts = stages.map(function(s) { return s.f2; }); var esopAllPcts = stages.map(function(s) { return s.esop; }); rows += tableRow('row-founder', f1name, Math.round(totShares * f1 / 100), f1allPcts); if (f2 > 0) rows += tableRow('row-founder', f2name, Math.round(totShares * f2 / 100), f2allPcts); rows += tableRow('row-pool', 'ESOP pool', Math.round(totShares * esop / 100), esopAllPcts); rounds.forEach(function(r, roundIdx) { var pctArr = stages.map(function(stage, si) { if (si === 0) return -1; var inv = stage.investors.find(function(x) { return x.colorIdx === roundIdx; }); return inv ? inv.pct : -1; }); rows += tableRow('row-investor', r.name + ' investors', null, pctArr); }); var totalRow = 'Total' + totShares.toLocaleString('en-IN') + ''; stages.forEach(function() { totalRow += '100.0%'; }); totalRow += ''; document.getElementById('cap-table').innerHTML = '' + colHeaders + '' + rows + totalRow + ''; var insight = f1name + ' starts at ' + fmtPct(f1) + ' and ends at ' + fmtPct(final.f1) + ' after ' + rounds.length + ' round' + (rounds.length !== 1 ? 's' : '') + '. '; insight += 'Combined founders retain ' + fmtPct(foundersFinal) + ', giving up ' + fmtPct(totalDil) + ' total. '; if (foundersFinal > 50) insight += 'Founders maintain majority control — a strong position entering the next phase.'; else if (foundersFinal > 30) insight += 'Founders hold significant ownership but no majority. Prioritise board composition and reserved matters in your term sheet.'; else insight += 'Founders are a minority shareholder. Carefully negotiate voting rights, drag-along clauses, and liquidation preferences before signing.'; document.getElementById('insight-box').textContent = insight; } renderRounds(); calc();