Startup Runway Calculator

Startup Runway Calculator — StartupIndiaX
Free Tool

Startup Runway Calculator

Know exactly how many months of cash you have left, when you’ll hit zero, and what changes to burn rate can do to your survival timeline.

Your current runway
months
Enter your details below to calculate
036121824+ mo
Awaiting inputs
Cash in bank
₹—
Current balance
Monthly burn
₹—
Net cash out
Monthly revenue
₹—
Incoming cash
Zero date
Cash runs out
Raise by
6-mo buffer target
Cash & revenue
Your current financial position
%
mo
Monthly expenses
Add each cost category (₹ Lakhs/month)
Total monthly burn ₹0 L
Net burn (after revenue) ₹0 L
Cash balance over time
Monthly projection based on current burn & revenue growth
Cash balance
Zero line
Enter your cash balance and monthly expenses above to see your runway analysis.
Scenario Monthly burn Net burn Runway Zero date

18 months is the minimum

Indian VC cycles are slow. Due diligence, term sheets, and legal take 3–6 months. Always raise before you hit 12 months of runway — start at 18.

Revenue is the best runway extender

Every ₹1L of new MRR adds months of runway without dilution. At ₹10L burn, ₹5L MRR doubles your effective runway at no cost.

Start fundraising at 9 months

If you have 9 months left, begin fundraising now. Build your list of 30+ investors, send warm intros, and start first meetings immediately.

Use DPIIT benefits to cut burn

DPIIT-registered startups get income tax exemption (80-IAC), patent fee rebate (80%), and access to Startup India Seed Fund. These directly extend runway.

Projections are estimates based on inputs provided. Actual runway depends on revenue variability, unexpected expenses, and market conditions. Always maintain a cash buffer for unforeseen events.

A free tool by StartupIndiaX.com — India’s startup knowledge portal
' + ''; list.appendChild(row); }); calc(); } function addExpense() { expenses.push({ name: 'New expense', amount: 0 }); renderExpenses(); } function removeExpense(i) { expenses.splice(i, 1); renderExpenses(); } // ── FORMATTING ──────────────────────────────────────────── function fmtL(l) { if (l >= 100) return '₹' + (l / 100).toFixed(1) + ' Cr'; return '₹' + l.toFixed(1) + ' L'; } function monthName(offset) { var d = new Date(); d.setMonth(d.getMonth() + offset); return d.toLocaleDateString('en-IN', { month: 'short', year: '2-digit' }); } function fullDate(offset) { var d = new Date(); d.setMonth(d.getMonth() + offset); return d.toLocaleDateString('en-IN', { month: 'long', year: 'numeric' }); } // ── MAIN CALC ───────────────────────────────────────────── function calc() { var cash = parseFloat(document.getElementById('inp-cash').value) || 0; var revenue = parseFloat(document.getElementById('inp-revenue').value) || 0; var revGrowth = parseFloat(document.getElementById('inp-rev-growth').value) || 0; var fundraise = parseFloat(document.getElementById('inp-fundraise').value) || 0; var fundraiseMo = parseInt(document.getElementById('inp-fundraise-month').value) || 0; var totalBurn = expenses.reduce(function(a, b) { return a + (parseFloat(b.amount) || 0); }, 0); var netBurn = Math.max(0, totalBurn - revenue); document.getElementById('total-burn-display').textContent = fmtL(totalBurn); var nbEl = document.getElementById('net-burn-display'); nbEl.textContent = fmtL(netBurn); nbEl.style.color = netBurn <= 0 ? 'var(--green)' : 'var(--brand)'; // Stat cards document.getElementById('s-cash').textContent = fmtL(cash); document.getElementById('s-burn').textContent = fmtL(totalBurn); document.getElementById('s-rev').textContent = fmtL(revenue); if (netBurn <= 0) { document.getElementById('runway-num').textContent = '∞'; document.getElementById('runway-date').textContent = 'Revenue covers burn — cash-flow positive!'; document.getElementById('s-zero').textContent = 'Cash+ve'; document.getElementById('s-raise').textContent = 'Cash+ve'; setStatus('great', 'Cash-flow positive'); document.getElementById('gauge-fill').style.width = '100%'; document.getElementById('gauge-fill').style.background = 'var(--green)'; renderChart([]); renderScenarios(totalBurn, revenue, cash, revGrowth, fundraise, fundraiseMo); renderInsight(999, totalBurn, revenue, netBurn, cash); return; } // Simulate month by month var balance = cash; var curRevenue = revenue; var months = 0; var balances = [cash]; for (var m = 1; m <= 60; m++) { curRevenue = revenue * Math.pow(1 + revGrowth / 100, m - 1); var burn = totalBurn - curRevenue; if (m === fundraiseMo && fundraise > 0) balance += fundraise; balance -= Math.max(0, burn); balances.push(Math.max(0, balance)); if (balance <= 0) { months = m; break; } if (m === 60) months = 60; } // Display var runEl = document.getElementById('runway-num'); runEl.textContent = months === 60 ? '60+' : months; document.getElementById('runway-date').innerHTML = 'Cash runs out in ' + fullDate(months) + ''; document.getElementById('s-zero').textContent = fullDate(months); document.getElementById('s-raise').textContent = fullDate(months - 6); // Gauge — map 0–24 months to 0–100% var gaugePct = Math.min(months / 24, 1) * 100; var gaugeColor = months <= 3 ? 'var(--brand)' : months <= 6 ? 'var(--amber)' : months <= 12 ? 'var(--teal)' : 'var(--green)'; document.getElementById('gauge-fill').style.width = gaugePct + '%'; document.getElementById('gauge-fill').style.background = gaugeColor; // Status var cls, txt; if (months <= 3) { cls = 'critical'; txt = 'Critical — raise now'; } else if (months <= 6) { cls = 'warning'; txt = 'Warning — start fundraising'; } else if (months <= 12) { cls = 'healthy'; txt = 'Healthy — plan next raise'; } else { cls = 'great'; txt = 'Strong runway'; } setStatus(cls, txt); runEl.className = 'runway-months status-' + cls; renderChart(balances); renderScenarios(totalBurn, revenue, cash, revGrowth, fundraise, fundraiseMo); renderInsight(months, totalBurn, revenue, netBurn, cash); } function setStatus(cls, txt) { var badge = document.getElementById('status-badge'); badge.className = 'status-badge badge-' + cls; document.getElementById('status-text').textContent = txt; } // ── CHART ───────────────────────────────────────────────── function renderChart(balances) { var svg = document.getElementById('burn-chart'); var labels = document.getElementById('month-labels'); if (!balances || balances.length < 2) { svg.innerHTML = ''; labels.innerHTML = ''; return; } var W = 800, H = 150; var maxBal = Math.max.apply(null, balances) || 1; var pts = balances.map(function(b, i) { return { x: (i / (balances.length - 1)) * W, y: H - (b / maxBal) * (H - 10) - 5 }; }); // Area path var areaD = 'M' + pts[0].x + ',' + H; pts.forEach(function(p) { areaD += ' L' + p.x.toFixed(1) + ',' + p.y.toFixed(1); }); areaD += ' L' + pts[pts.length - 1].x + ',' + H + ' Z'; // Line path var lineD = pts.map(function(p, i) { return (i === 0 ? 'M' : 'L') + p.x.toFixed(1) + ',' + p.y.toFixed(1); }).join(' '); // Zero line var zeroY = H - 5; var zeroLine = ''; // Grid lines var gridLines = ''; [0.25, 0.5, 0.75].forEach(function(f) { var y = H - f * (H - 10) - 5; gridLines += ''; gridLines += ''; }); svg.innerHTML = gridLines + zeroLine + '' + '' + '' + pts.filter(function(_, i){ return i === 0 || i === pts.length - 1; }).map(function(p, i) { return ''; }).join(''); // Month labels var showEvery = Math.ceil(balances.length / 8); labels.innerHTML = ''; balances.forEach(function(_, i) { if (i % showEvery === 0 || i === balances.length - 1) { var span = document.createElement('span'); span.className = 'month-label'; span.textContent = i === 0 ? 'Now' : monthName(i); span.style.position = 'absolute'; span.style.left = ((i / (balances.length - 1)) * 100) + '%'; span.style.transform = 'translateX(-50%)'; labels.style.position = 'relative'; labels.appendChild(span); } }); } // ── SCENARIOS ───────────────────────────────────────────── function calcRunwayMonths(cash, burn, revenue, revGrowth, fundraise, fundraiseMo) { if (burn <= revenue) return 60; var balance = cash; var months = 0; for (var m = 1; m <= 60; m++) { var curRev = revenue * Math.pow(1 + revGrowth / 100, m - 1); var net = burn - curRev; if (m === fundraiseMo && fundraise > 0) balance += fundraise; balance -= Math.max(0, net); if (balance <= 0) return m; months = m; } return 60; } function runwayPill(mo) { var cls = mo <= 3 ? 'badge-critical' : mo <= 6 ? 'badge-warning' : mo <= 12 ? 'badge-healthy' : 'badge-great'; var txt = mo >= 60 ? '60+ mo' : mo + ' mo'; return '' + txt + ''; } function renderScenarios(burn, revenue, cash, revGrowth, fundraise, fundraiseMo) { var scenarios = [ { label: 'Current (baseline)', burnMod: 1.0, highlight: true }, { label: 'Cut burn by 20%', burnMod: 0.8 }, { label: 'Cut burn by 40%', burnMod: 0.6 }, { label: 'Double revenue', burnMod: 1.0, revMod: 2.0 }, { label: 'Raise ₹50L extra', burnMod: 1.0, cashAdd: 50 }, { label: 'Raise ₹1 Cr extra', burnMod: 1.0, cashAdd: 100 }, ]; var tbody = document.getElementById('scenario-body'); tbody.innerHTML = scenarios.map(function(s) { var b = burn * (s.burnMod || 1); var r = revenue * (s.revMod || 1); var c = cash + (s.cashAdd || 0); var nb = Math.max(0, b - r); var mo = calcRunwayMonths(c, b, r, revGrowth, fundraise, fundraiseMo); return '' + '' + s.label + '' + '' + fmtL(b) + '' + '' + fmtL(nb) + '' + '' + runwayPill(mo) + '' + '' + (mo >= 60 ? '60+ months' : fullDate(mo)) + '' + ''; }).join(''); } // ── INSIGHT ─────────────────────────────────────────────── function renderInsight(months, burn, revenue, netBurn, cash) { var box = document.getElementById('insight-box'); if (months >= 60) { box.innerHTML = 'You are revenue-positive. Your monthly revenue covers your burn — congratulations. Focus on reinvesting cash into growth rather than raising dilutive capital.'; return; } var txt = '' + months + ' months of runway at your current burn of ' + fmtL(burn) + '/month'; if (revenue > 0) txt += ' and revenue of ' + fmtL(revenue) + '/month'; txt += '. '; if (months <= 3) txt += '🚨 You need to act immediately. Cut non-essential expenses today and reach out to investors and revenue sources simultaneously. You have very little time.'; else if (months <= 6) txt += '⚠️ Start fundraising this week. With Indian VC cycles taking 3–6 months, you need to begin investor outreach immediately. Simultaneously look at cutting burn by 20–30%.'; else if (months <= 12) txt += '📊 Healthy but not comfortable. Begin building your investor pipeline now. Aim to raise before you hit 6 months left. Use this time to hit the metrics that justify your next round.'; else txt += '💪 Strong runway. Use this time wisely — hit product-market fit, grow revenue, and build the metrics story for your next raise. Start investor relationship-building at least 6 months before you need the money.'; box.innerHTML = txt; } // ── HELPERS ─────────────────────────────────────────────── function escHtml(s) { return String(s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); } // ── INIT ────────────────────────────────────────────────── renderExpenses();