Investing in real estate requires precision. A Rental Property ROI Calculator helps investors determine the profitability of a potential purchase by analyzing cash flow, Cash on Cash Return, and Cap Rate. Understanding these metrics is crucial before signing any purchase agreement.
What is Cash on Cash Return?
Cash on Cash Return measures the annual pre-tax cash flow relative to the total amount of cash invested. Unlike standard ROI, which might account for loan paydown or appreciation, Cash on Cash focuses strictly on the liquid income generated by your initial deposit.
Formula: Annual Pre-Tax Cash Flow / Total Cash Invested
A "good" Cash on Cash return varies by market, but many investors target 8-12% for stable residential rentals.
Understanding Cap Rate (Capitalization Rate)
The Cap Rate represents the rate of return on a real estate investment property based on the income that the property is expected to generate. It is calculated by dividing the Net Operating Income (NOI) by the property asset value.
Cap Rate is useful because it removes financing from the equation, allowing you to compare the raw profitability of different properties regardless of how they are purchased (cash vs. mortgage).
Key Expenses to Consider
Principal & Interest: Your monthly mortgage payment.
Maintenance: Setting aside 1% of the property value annually is a standard rule of thumb.
Vacancy: Rental income isn't guaranteed 365 days a year. A 5-8% vacancy rate buffer is prudent.
How to Use This Calculator
Simply enter the purchase price, your financing details, and estimated expenses. The calculator will determine your Net Operating Income (NOI) and Monthly Cash Flow. Use these figures to adjust your offer price or negotiate better terms to ensure your investment meets your financial goals.
function calculateROI() {
// Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var rent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var downPercent = parseFloat(document.getElementById('downPayment').value) || 0;
var rate = parseFloat(document.getElementById('interestRate').value) || 0;
var term = parseFloat(document.getElementById('loanTerm').value) || 0;
var annualTax = parseFloat(document.getElementById('annualTax').value) || 0;
var annualIns = parseFloat(document.getElementById('annualInsurance').value) || 0;
var monthlyHOA = parseFloat(document.getElementById('monthlyHOA').value) || 0;
var annualMaint = parseFloat(document.getElementById('annualMaint').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
// Calculations
var downPaymentAmt = price * (downPercent / 100);
var loanAmount = price – downPaymentAmt;
// Mortgage Calculation (Monthly)
var monthlyRate = (rate / 100) / 12;
var numPayments = term * 12;
var mortgage = 0;
if (rate > 0) {
mortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
mortgage = loanAmount / numPayments;
}
// Expense Calculations
var monthlyTax = annualTax / 12;
var monthlyIns = annualIns / 12;
var monthlyMaint = annualMaint / 12;
var vacancyCost = rent * (vacancyRate / 100);
var totalOperatingExpenses = monthlyTax + monthlyIns + monthlyMaint + monthlyHOA + vacancyCost;
var totalMonthlyExpenses = totalOperatingExpenses + mortgage;
// Income Calculations
var effectiveGrossIncome = rent – vacancyCost;
var monthlyCashFlow = effectiveGrossIncome – totalMonthlyExpenses – vacancyCost;
// Note: vacancy is income loss, but often tracked as expense in simple calc.
// Correct logic: Effective Income = Rent – Vacancy. Cash Flow = Effective Income – OpEx – Mortgage.
// My var totalOperatingExpenses included vacancyCost. So Effective Income = Rent. Then subtract expenses (one of which is vacancy).
// Let's stick to standard: Cash Flow = Rent – (VacancyLoss + Taxes + Ins + Maint + HOA + Mortgage).
var cashFlowVal = rent – (mortgage + monthlyTax + monthlyIns + monthlyHOA + monthlyMaint + vacancyCost);
var annualCashFlow = cashFlowVal * 12;
// NOI (Net Operating Income) = Income – Operating Expenses (Excluding Mortgage)
var annualNOI = (rent * 12) – ((monthlyTax + monthlyIns + monthlyMaint + monthlyHOA + vacancyCost) * 12);
var monthlyNOIVal = annualNOI / 12;
// ROI Metrics
var cashOnCash = 0;
if (downPaymentAmt > 0) {
cashOnCash = (annualCashFlow / downPaymentAmt) * 100;
}
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
// Display Results
var cashFlowEl = document.getElementById('monthlyCashFlow');
cashFlowEl.innerText = formatMoney(cashFlowVal);
cashFlowEl.className = 'metric-value ' + (cashFlowVal >= 0 ? 'positive' : 'negative');
document.getElementById('cashOnCash').innerText = cashOnCash.toFixed(2) + '%';
document.getElementById('capRate').innerText = capRate.toFixed(2) + '%';
document.getElementById('adjustedIncome').innerText = formatMoney(rent – vacancyCost);
document.getElementById('mortgagePayment').innerText = formatMoney(mortgage);
document.getElementById('operatingExpenses').innerText = formatMoney(totalOperatingExpenses – vacancyCost); // OpEx without vacancy loss for table clarity
document.getElementById('monthlyNOI').innerText = formatMoney(monthlyNOIVal);
// Show Results Section
document.getElementById('results').style.display = 'block';
}
function formatMoney(amount) {
return '$' + amount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
}