Loan Amortization Calculator

Real Estate ROI & Cash Flow Calculator

Analyze the profitability of your next rental property investment

Purchase Info

Monthly Finances

Monthly Cash Flow
$0
Cap Rate
0%
Cash-on-Cash ROI
0%

Mortgage Payment:

Total Monthly Expenses:

Total Cash Invested:

Understanding Real Estate ROI Metrics

Evaluating a rental property goes beyond just checking the monthly rent. Professional investors use specific metrics to determine if a property is a "deal" or a "dud".

1. Net Cash Flow

This is the money left over every month after all expenses, including the mortgage, have been paid. A positive cash flow is essential for building a sustainable portfolio. Our calculator subtracts taxes, insurance, maintenance, and debt service from your gross rent.

2. Capitalization Rate (Cap Rate)

The Cap Rate measures the property's natural rate of return without considering financing. It is calculated by taking the Net Operating Income (NOI) and dividing it by the purchase price. It allows you to compare different properties on an apples-to-apples basis regardless of the loan structure.

3. Cash-on-Cash Return (CoC)

This is arguably the most important metric for investors using leverage (mortgages). It measures the annual cash flow relative to the actual amount of cash you "out-of-pocketed" (the down payment). If you put down $50,000 and earn $5,000 in annual cash flow, your CoC return is 10%.

Pro Tip: Always factor in a 5-10% vacancy rate in your manual estimates to ensure your ROI calculations are realistic. Even the best properties experience turnover.

Calculation Example

Imagine you buy a property for $200,000 with a 20% down payment ($40,000). Your monthly mortgage is $1,050. Rent is $1,800. Expenses (Tax/Insurance/Maint) are $400.

  • Monthly Cash Flow: $1,800 – ($1,050 + $400) = $350
  • Annual Cash Flow: $350 × 12 = $4,200
  • Cash-on-Cash Return: $4,200 / $40,000 = 10.5%

function calculateRentalROI() { // Get Input Values var price = parseFloat(document.getElementById('purchasePrice').value) || 0; var downPct = parseFloat(document.getElementById('downPaymentPercent').value) || 0; var rate = parseFloat(document.getElementById('interestRate').value) || 0; var term = parseFloat(document.getElementById('loanTerm').value) || 0; var rent = parseFloat(document.getElementById('monthlyRent').value) || 0; var tax = parseFloat(document.getElementById('monthlyTax').value) || 0; var ins = parseFloat(document.getElementById('monthlyInsurance').value) || 0; var maint = parseFloat(document.getElementById('monthlyMaint').value) || 0; // Calculations var downPaymentAmount = price * (downPct / 100); var loanAmount = price – downPaymentAmount; // Mortgage Calculation (PMT formula) var monthlyRate = (rate / 100) / 12; var numberOfPayments = term * 12; var monthlyMortgage = 0; if (rate > 0) { monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1); } else { monthlyMortgage = loanAmount / numberOfPayments; } var totalMonthlyExpenses = monthlyMortgage + tax + ins + maint; var monthlyCashFlow = rent – totalMonthlyExpenses; var annualCashFlow = monthlyCashFlow * 12; // Cap Rate (NOI / Price) // NOI = Annual Rent – Annual Expenses (excluding mortgage) var annualOperatingExpenses = (tax + ins + maint) * 12; var annualGrossRent = rent * 12; var noi = annualGrossRent – annualOperatingExpenses; var capRate = (noi / price) * 100; // Cash on Cash Return (Annual Cash Flow / Down Payment) var cocReturn = (annualCashFlow / downPaymentAmount) * 100; // Update Results document.getElementById('resCashFlow').innerHTML = '$' + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById('resCapRate').innerHTML = capRate.toFixed(2) + '%'; document.getElementById('resCoC').innerHTML = cocReturn.toFixed(2) + '%'; document.getElementById('resMortgage').innerHTML = '$' + monthlyMortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ' /mo'; document.getElementById('resTotalExp').innerHTML = '$' + totalMonthlyExpenses.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ' /mo'; document.getElementById('resTotalInvested').innerHTML = '$' + downPaymentAmount.toLocaleString(); // Show results area document.getElementById('resultsArea').style.display = 'block'; // Logic for negative cash flow styling if (monthlyCashFlow < 0) { document.getElementById('resCashFlow').style.color = '#e74c3c'; } else { document.getElementById('resCashFlow').style.color = '#27ae60'; } }

Leave a Comment