Analyze your potential real estate investment returns instantly.
Monthly Mortgage (P&I):—
Total Monthly Expenses:—
Monthly Cash Flow:—
Cap Rate:—
Cash-on-Cash Return:—
How to Calculate Rental Property ROI
Understanding Return on Investment (ROI) is critical for real estate investors to compare different properties and ensure their capital is working efficiently. Our calculator uses several key metrics to provide a comprehensive view of your potential investment's performance.
Key Metrics Explained
Cap Rate (Capitalization Rate): This measures the property's natural rate of return without considering financing. It is calculated by dividing the Net Operating Income (NOI) by the purchase price.
Cash-on-Cash Return: This is often considered the most important metric for investors using leverage. It measures the annual pre-tax cash flow divided by the actual cash invested (down payment and closing costs).
Net Operating Income (NOI): This is your total income minus all operating expenses (taxes, insurance, maintenance), excluding mortgage payments.
Example ROI Calculation
If you purchase a property for $200,000 with a 20% down payment ($40,000) and it generates $1,800 in monthly rent, your gross annual income is $21,600. After subtracting property taxes, insurance, and a 10% maintenance/vacancy fund (approx. $6,000 total), your NOI is $15,600. Your Cap Rate would be 7.8%. If your mortgage is $1,000/month, your annual cash flow is $3,600, resulting in a 9% Cash-on-Cash return ($3,600 / $40,000).
function calculateRentalROI() {
var price = parseFloat(document.getElementById('propPrice').value);
var downPercent = parseFloat(document.getElementById('downPayment').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var years = parseFloat(document.getElementById('loanTerm').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var taxes = parseFloat(document.getElementById('annualTaxes').value);
var insurance = parseFloat(document.getElementById('annualInsurance').value);
var reserves = parseFloat(document.getElementById('maintReserve').value);
if (isNaN(price) || isNaN(rent) || price 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
monthlyMortgage = loanAmount / numPayments;
}
// Monthly Operating Expenses
var monthlyTax = taxes / 12;
var monthlyIns = insurance / 12;
var monthlyReserves = rent * (reserves / 100);
var totalMonthlyExpenses = monthlyMortgage + monthlyTax + monthlyIns + monthlyReserves;
// ROI Metrics
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualNOI = (rent – (monthlyTax + monthlyIns + monthlyReserves)) * 12;
var capRate = (annualNOI / price) * 100;
var annualCashFlow = monthlyCashFlow * 12;
var cashOnCash = (annualCashFlow / downPaymentAmount) * 100;
// Update UI
document.getElementById('resMortgage').innerText = '$' + monthlyMortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resExpenses').innerText = '$' + totalMonthlyExpenses.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) + '%';
document.getElementById('roiResults').style.display = 'block';
}