Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property doesn't guarantee a profit. To succeed, real estate investors must accurately calculate their Return on Investment (ROI) and "Cash on Cash" return. This Rental Property ROI Calculator is designed to help you analyze the profitability of a potential deal by factoring in income, expenses, and financing costs.
How is Rental ROI Calculated?
There are several metrics investors use to evaluate a property, but the two most important for residential rentals are Cash on Cash Return and Cap Rate.
1. Cash on Cash Return
This metric calculates the cash income earned on the cash invested in a property. It is the most accurate measure of how your specific money is performing.
Example: If you invest $58,000 cash (down payment + closing costs) and the property generates $3,600 in net profit per year, your Cash on Cash ROI is 6.2%.
2. Capitalization Rate (Cap Rate)
Cap Rate measures the property's natural rate of return assuming it was bought entirely with cash. It helps compare properties regardless of financing.
Formula: (Net Operating Income / Current Market Value) × 100
Note: Net Operating Income (NOI) includes rental income minus operating expenses (taxes, insurance, maintenance) but excludes mortgage payments.
What is a Good ROI for Rental Property?
While "good" is subjective based on your risk tolerance and local market, most investors aim for a Cash on Cash return between 8% and 12%. In highly competitive markets, returns might be lower (4-6%), but investors often count on property appreciation to make up the difference. Conversely, in lower-cost areas, you might find properties yielding 15%+, though they may come with higher maintenance risks.
Factors That Impact Your Returns
When using this calculator, ensure you are accounting for all potential expenses to get a realistic number. Common oversights include:
Vacancy Rates: Always budget for the property sitting empty for a few weeks a year (typically 5-8% of rent).
Maintenance & Repairs: Setting aside 10-15% of monthly rent for future repairs (roof, HVAC, water heater) is prudent.
Property Management: If you don't manage it yourself, expect to pay 8-10% of the monthly rent to a management company.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPayment = parseFloat(document.getElementById('downPayment').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var termYears = parseFloat(document.getElementById('loanTerm').value);
var rentIncome = parseFloat(document.getElementById('rentalIncome').value);
var monthlyExp = parseFloat(document.getElementById('monthlyExpenses').value);
// 2. Validation
if (isNaN(price) || isNaN(downPayment) || isNaN(closingCosts) ||
isNaN(interestRate) || isNaN(termYears) || isNaN(rentIncome) || isNaN(monthlyExp)) {
alert("Please fill in all fields with valid numbers.");
return;
}
// 3. Calculation Logic
// Loan Amount
var loanAmount = price – downPayment;
// Monthly Mortgage Calculation (Principal + Interest)
var monthlyMortgage = 0;
if (loanAmount > 0) {
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = termYears * 12;
if (interestRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
} else {
monthlyMortgage = (loanAmount * monthlyRate) / (1 – Math.pow(1 + monthlyRate, -numberOfPayments));
}
}
// Monthly Cash Flow
// Cash Flow = Rental Income – (Operating Expenses + Mortgage Payment)
var totalMonthlyExpenses = monthlyExp + monthlyMortgage;
var monthlyCashFlow = rentIncome – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Net Operating Income (NOI)
// NOI = (Rental Income – Operating Expenses) * 12 (Does NOT include mortgage)
var monthlyNOI = rentIncome – monthlyExp;
var annualNOI = monthlyNOI * 12;
// Total Cash Invested
var totalInvestment = downPayment + closingCosts;
// Cash on Cash ROI
// CoC = (Annual Cash Flow / Total Investment) * 100
var cashOnCash = 0;
if (totalInvestment > 0) {
cashOnCash = (annualCashFlow / totalInvestment) * 100;
}
// Cap Rate
// Cap Rate = (Annual NOI / Purchase Price) * 100
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
// 4. Update UI
var resultArea = document.getElementById('resultsArea');
resultArea.style.display = "block";
// Format Currency Helper
var formatCurrency = function(num) {
return "$" + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
};
// Display Values
document.getElementById('resCashFlow').innerHTML = formatCurrency(monthlyCashFlow);
if(monthlyCashFlow < 0) {
document.getElementById('resCashFlow').classList.add('negative');
} else {
document.getElementById('resCashFlow').classList.remove('negative');
}
document.getElementById('resNOI').innerHTML = formatCurrency(annualNOI);
document.getElementById('resCapRate').innerHTML = capRate.toFixed(2) + "%";
document.getElementById('resCoC').innerHTML = cashOnCash.toFixed(2) + "%";
if(cashOnCash < 0) {
document.getElementById('resCoC').classList.add('negative');
document.getElementById('resCoC').classList.remove('highlight');
} else {
document.getElementById('resCoC').classList.remove('negative');
document.getElementById('resCoC').classList.add('highlight');
}
}