Investing in real estate is one of the most reliable ways to build wealth, but not every property is a good deal. To ensure profitability, investors must analyze the numbers thoroughly before signing a contract. This Rental Property ROI Calculator helps you evaluate the potential performance of a rental property by breaking down cash flow, capitalization rate (Cap Rate), and Cash-on-Cash return.
Key Metrics Explained
1. Monthly Cash Flow
Cash flow is the net amount of money moving in or out of the investment each month. It is calculated by subtracting all expenses (mortgage, taxes, insurance, maintenance, HOA) from the monthly rental income. Positive cash flow means the property is generating income, while negative cash flow implies you are losing money every month to hold the asset.
2. Cash-on-Cash Return (CoC)
This is arguably the most important metric for investors using leverage (mortgages). It measures the annual return on the actual cash you invested, rather than the total property price.
Example: If you invest $50,000 cash and receive $5,000 in positive cash flow annually, your CoC return is 10%.
3. Capitalization Rate (Cap Rate)
The Cap Rate indicates the rate of return on a real estate investment property based on the income that the property is expected to generate. It assumes the property is bought with cash (no loan).
Formula: (Net Operating Income / Current Market Value) × 100
Usage: Cap rates are excellent for comparing similar properties in the same area without the variance of financing terms.
How to Improve Rental ROI
If the numbers from the calculator aren't meeting your investment criteria, consider these strategies to improve performance:
Increase Rent: Small renovations or cosmetic updates can often justify a higher monthly rent.
Reduce Operating Expenses: Shop around for cheaper insurance or challenge your property tax assessment.
Refinance: If interest rates drop, refinancing can lower your monthly mortgage payment, instantly boosting cash flow.
Tenant Retention: Vacancy is a "silent killer" of ROI. Keeping good tenants longer reduces turnover costs and vacancy loss.
What is a "Good" ROI?
While subjective, many investors aim for a Cash-on-Cash return of 8% to 12%. In highly appreciative markets, investors might accept a lower cash flow return (e.g., 4-6%) banking on the property value increasing over time. Conversely, in stable markets with low appreciation, investors often demand higher immediate cash flow returns (10%+).
function calculateRentalROI() {
// 1. Get Input Values
var propPrice = parseFloat(document.getElementById('propPrice').value) || 0;
var downPayment = parseFloat(document.getElementById('downPayment').value) || 0;
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
var intRate = parseFloat(document.getElementById('intRate').value) || 0;
var loanTerm = parseFloat(document.getElementById('loanTerm').value) || 0;
var rentIncome = parseFloat(document.getElementById('rentIncome').value) || 0;
var hoaFees = parseFloat(document.getElementById('hoaFees').value) || 0;
var propTaxAnnual = parseFloat(document.getElementById('propTax').value) || 0;
var propInsAnnual = parseFloat(document.getElementById('propIns').value) || 0;
var maintAnnual = parseFloat(document.getElementById('maintenance').value) || 0;
// 2. Validate essential inputs to avoid division by zero
if (propPrice <= 0 || loanTerm 0) {
monthlyPI = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
monthlyPI = loanAmount / numPayments;
}
// 4. Calculate Monthly Expenses
var monthlyTax = propTaxAnnual / 12;
var monthlyIns = propInsAnnual / 12;
var monthlyMaint = maintAnnual / 12;
// Operating Expenses (OpEx) excludes Mortgage
var monthlyOpEx = hoaFees + monthlyTax + monthlyIns + monthlyMaint;
// Total Outflow (OpEx + Mortgage)
var totalMonthlyOutflow = monthlyOpEx + monthlyPI;
// 5. Calculate Metrics
var monthlyCashFlow = rentIncome – totalMonthlyOutflow;
var annualCashFlow = monthlyCashFlow * 12;
// Net Operating Income (NOI) = Income – OpEx (Annual)
var annualNOI = (rentIncome * 12) – (monthlyOpEx * 12);
var totalInvestment = downPayment + closingCosts;
// Cash on Cash Return
var cocReturn = 0;
if (totalInvestment > 0) {
cocReturn = (annualCashFlow / totalInvestment) * 100;
}
// Cap Rate
var capRate = 0;
if (propPrice > 0) {
capRate = (annualNOI / propPrice) * 100;
}
// 6. Format and Display Results
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('res_mortgage').innerText = formatter.format(monthlyPI);
document.getElementById('res_opex').innerText = formatter.format(monthlyOpEx);
document.getElementById('res_total_outflow').innerText = formatter.format(totalMonthlyOutflow);
document.getElementById('res_noi').innerText = formatter.format(annualNOI);
document.getElementById('res_investment').innerText = formatter.format(totalInvestment);
// Highlights
var cfElement = document.getElementById('res_cashflow');
cfElement.innerText = formatter.format(monthlyCashFlow);
if(monthlyCashFlow >= 0) {
cfElement.className = "metric-big result-highlight";
cfElement.style.color = "#27ae60";
} else {
cfElement.className = "metric-big result-negative";
cfElement.style.color = "#c0392b";
}
var cocElement = document.getElementById('res_coc');
cocElement.innerText = cocReturn.toFixed(2) + "%";
document.getElementById('res_cap').innerText = capRate.toFixed(2) + "%";
// Show results
document.getElementById('results').style.display = 'block';
}