Investing in real estate is a numbers game. Whether you are analyzing a single-family home, a duplex, or a larger multifamily property, understanding the projected return on investment (ROI) is crucial before making an offer. This Rental Property ROI Calculator helps you determine the viability of a deal by calculating key metrics like Cash Flow, Cash on Cash Return, and Cap Rate.
Key Metrics Explained
1. Monthly Cash Flow
This is the money left over after all expenses are paid. It is calculated by taking your gross monthly rental income and subtracting all operating expenses (taxes, insurance, HOA, maintenance) and your debt service (mortgage payment). Positive cash flow ensures the property pays for itself and generates passive income.
2. Cash on Cash Return (CoC)
Cash on Cash Return is perhaps the most important metric for investors using leverage (mortgages). It measures the annual cash income earned on the cash you actually invested.
Example: If you invest $50,000 cash (down payment + closing costs) and the property generates $5,000 in positive cash flow per year, your CoC return is 10%.
3. Cap Rate (Capitalization Rate)
The Cap Rate measures the property's natural rate of return assuming you bought it in all cash. It allows you to compare the profitability of the building itself, independent of your financing terms.
Formula: (Net Operating Income / Purchase Price) × 100
Good Cap Rate: Generally, a Cap Rate between 5% and 10% is considered good, depending on the risk level and location of the market.
How to Use This Calculator
To get accurate results, ensure you estimate expenses conservatively. Maintenance costs are often overlooked; a standard rule of thumb is to allocate 5-10% of the monthly rent for repairs and capital expenditures (CapEx). Additionally, don't forget to include annual property taxes and insurance premiums, which significantly impact your Net Operating Income (NOI).
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('rp_price').value);
var downPercent = parseFloat(document.getElementById('rp_down').value);
var interestRate = parseFloat(document.getElementById('rp_rate').value);
var termYears = parseFloat(document.getElementById('rp_term').value);
var closingCosts = parseFloat(document.getElementById('rp_closing').value);
var monthlyRent = parseFloat(document.getElementById('rp_rent').value);
var hoa = parseFloat(document.getElementById('rp_hoa').value);
var annualTax = parseFloat(document.getElementById('rp_tax').value);
var annualIns = parseFloat(document.getElementById('rp_ins').value);
var monthlyMaint = parseFloat(document.getElementById('rp_maint').value);
// 2. Validation
if (isNaN(price) || isNaN(downPercent) || isNaN(interestRate) || isNaN(termYears) || isNaN(monthlyRent)) {
alert("Please enter valid numbers for all key fields.");
return;
}
// 3. Logic & Calculations
// Mortgage Calc
var downPaymentAmt = price * (downPercent / 100);
var loanAmount = price – downPaymentAmt;
var monthlyRate = interestRate / 100 / 12;
var numPayments = termYears * 12;
var monthlyMortgage = 0;
if (interestRate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
monthlyMortgage = loanAmount / numPayments;
}
// Expense Calc
var monthlyTax = annualTax / 12;
var monthlyIns = annualIns / 12;
var totalMonthlyOperatingExpenses = monthlyTax + monthlyIns + hoa + monthlyMaint; // Excludes mortgage
var totalMonthlyExpenses = totalMonthlyOperatingExpenses + monthlyMortgage;
// NOI (Net Operating Income) = Income – Operating Expenses (No Mortgage)
var monthlyNOI = monthlyRent – totalMonthlyOperatingExpenses;
var annualNOI = monthlyNOI * 12;
// Cash Flow
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Cash Invested
var totalCashInvested = downPaymentAmt + closingCosts;
// Returns
var capRate = (annualNOI / price) * 100;
var cocReturn = (annualCashFlow / totalCashInvested) * 100;
// 4. Output Formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
var percentFormatter = new Intl.NumberFormat('en-US', {
style: 'percent',
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
document.getElementById('rp_res_cashflow').innerHTML = formatter.format(monthlyCashFlow);
document.getElementById('rp_res_cashflow').style.color = monthlyCashFlow >= 0 ? '#27ae60' : '#e74c3c';
document.getElementById('rp_res_coc').innerHTML = percentFormatter.format(cocReturn / 100);
document.getElementById('rp_res_coc').style.color = cocReturn >= 0 ? '#2c3e50' : '#e74c3c';
document.getElementById('rp_res_cap').innerHTML = percentFormatter.format(capRate / 100);
document.getElementById('rp_res_noi').innerHTML = formatter.format(annualNOI);
document.getElementById('rp_res_initial').innerHTML = formatter.format(totalCashInvested);
document.getElementById('rp_res_mortgage').innerHTML = formatter.format(monthlyMortgage);
// Show results
document.getElementById('rp_results_area').style.display = 'block';
}