Calculate Bonus After Tax

Rental Property ROI & Cash Flow Calculator

Analyze the profitability of your real estate investment

Purchase Details

Monthly Income & Expenses

Monthly Mortgage
$0.00
Monthly Cash Flow
$0.00
Cap Rate
0.00%
Cash on Cash Return
0.00%

Understanding Rental Property ROI

Investing in real estate requires a thorough understanding of the numbers. To determine if a property is a "good deal," you need to look beyond just the monthly rent. This calculator helps you evaluate the most critical metrics for rental success.

Key Metrics Explained

  • Cash Flow: This is the net amount of money moving in and out of your business each month. It is calculated as Gross Rent – (Mortgage + Taxes + Insurance + Maintenance). Positive cash flow is essential for long-term sustainability.
  • Cap Rate (Capitalization Rate): This measures the property's natural rate of return without considering financing. It is calculated as Net Operating Income (NOI) / Purchase Price. It allows you to compare different properties on an apples-to-apples basis.
  • Cash on Cash Return: This is the ratio of annual before-tax cash flow to the total amount of cash invested. It is the most realistic measure of your actual "out of pocket" return.

Example Calculation

If you buy a home for $200,000 with 20% down ($40,000) and it rents for $1,800, your expenses might look like this:

Expense Item Amount
Mortgage (P&I) $1,011
Taxes & Insurance $300
Maintenance Reserve $150
Net Monthly Cash Flow $339
function calculateROI() { // Get Inputs var purchasePrice = parseFloat(document.getElementById('purchasePrice').value) || 0; var downPercent = parseFloat(document.getElementById('downPaymentPercent').value) || 0; var interestRate = parseFloat(document.getElementById('interestRate').value) || 0; var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0; var monthlyRent = parseFloat(document.getElementById('monthlyRent').value) || 0; var propertyTaxes = parseFloat(document.getElementById('propertyTaxes').value) || 0; var insurance = parseFloat(document.getElementById('insurance').value) || 0; var maintenance = parseFloat(document.getElementById('maintenance').value) || 0; // Calculations var downPaymentAmount = purchasePrice * (downPercent / 100); var loanAmount = purchasePrice – downPaymentAmount; var totalCashInvested = downPaymentAmount + closingCosts; // Monthly Mortgage (P&I) var monthlyInterest = (interestRate / 100) / 12; var numberOfPayments = 30 * 12; // Standard 30 year var monthlyMortgage = 0; if (interestRate > 0) { monthlyMortgage = loanAmount * (monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments)) / (Math.pow(1 + monthlyInterest, numberOfPayments) – 1); } else { monthlyMortgage = loanAmount / numberOfPayments; } // Monthly Cash Flow var totalExpenses = monthlyMortgage + propertyTaxes + insurance + maintenance; var monthlyCashFlow = monthlyRent – totalExpenses; var annualCashFlow = monthlyCashFlow * 12; // Cap Rate (NOI / Purchase Price) // NOI = Annual Income – Operating Expenses (Excluding Mortgage) var annualOperatingExpenses = (propertyTaxes + insurance + maintenance) * 12; var netOperatingIncome = (monthlyRent * 12) – annualOperatingExpenses; var capRate = (netOperatingIncome / purchasePrice) * 100; // Cash on Cash Return (Annual Cash Flow / Total Cash Invested) var cashOnCash = (annualCashFlow / totalCashInvested) * 100; // Display Results document.getElementById('resultsArea').style.display = 'block'; document.getElementById('resMortgage').innerText = '$' + monthlyMortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById('resCashFlow').innerText = '$' + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById('resCapRate').innerText = capRate.toFixed(2) + '%'; document.getElementById('resCoC').innerText = cashOnCash.toFixed(2) + '%'; // Color coding for cash flow if (monthlyCashFlow < 0) { document.getElementById('resCashFlow').style.color = '#e74c3c'; } else { document.getElementById('resCashFlow').style.color = '#27ae60'; } }

Leave a Comment