Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property and renting it out doesn't guarantee a profit. To succeed, investors must accurately calculate their Return on Investment (ROI). This Rental Property ROI Calculator helps you analyze the potential profitability of a real estate investment by breaking down cash flow, capitalization rate (Cap Rate), and Cash on Cash Return.
Key Metrics Explained
1. Cash Flow
Cash flow is the net amount of cash moving in and out of the investment. Positive cash flow means your rental income exceeds all expenses, including the mortgage, taxes, insurance, and maintenance. Negative cash flow indicates the property is costing you money every month to hold.
The Cap Rate measures the natural rate of return of the property independent of debt. It is calculated by dividing the Net Operating Income (NOI) by the property's current market value. It allows you to compare the profitability of different properties regardless of how they are financed.
Formula: (Net Operating Income / Purchase Price) × 100
Generally, a Cap Rate between 4% and 10% is considered good, depending on the location and risk profile of the asset.
3. Cash on Cash Return
This is arguably the most important metric for investors using leverage (mortgages). It calculates the annual cash return on the actual cash invested (down payment + closing costs), rather than the total property price.
To get the most accurate results, ensure you input realistic numbers:
Purchase Price: The agreed-upon price of the property.
Down Payment: The percentage of the price you are paying upfront.
Vacancy Rate: Real estate isn't always occupied. A standard conservative estimate is 5-8% (about 2-3 weeks of vacancy per year).
Maintenance/HOA: Always budget for repairs (roof, HVAC, painting) even if the house is new. A common rule of thumb is saving 10-15% of the rent for maintenance.
Improving Your ROI
If the calculator shows a low or negative return, consider these strategies:
Increase Rent: Can you add value with minor renovations to justify higher rent?
Reduce Expenses: Shop for cheaper insurance or manage the property yourself to save on property management fees.
Refinance: If interest rates drop, refinancing can lower your monthly mortgage payment, instantly boosting cash flow.
function calculateRentalROI() {
// Get Inputs
var price = parseFloat(document.getElementById("purchasePrice").value) || 0;
var downPercent = parseFloat(document.getElementById("downPayment").value) || 0;
var interestRate = parseFloat(document.getElementById("interestRate").value) || 0;
var years = parseFloat(document.getElementById("loanTerm").value) || 0;
var closingCosts = parseFloat(document.getElementById("closingCosts").value) || 0;
var monthlyRent = parseFloat(document.getElementById("monthlyRent").value) || 0;
var annualTax = parseFloat(document.getElementById("propertyTax").value) || 0;
var annualIns = parseFloat(document.getElementById("insurance").value) || 0;
var monthlyMaint = parseFloat(document.getElementById("maintenance").value) || 0;
var vacancyRate = parseFloat(document.getElementById("vacancyRate").value) || 0;
// 1. Calculate Mortgage
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
var monthlyRate = (interestRate / 100) / 12;
var numPayments = years * 12;
var monthlyMortgage = 0;
if (loanAmount > 0 && monthlyRate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else if (loanAmount > 0 && monthlyRate === 0) {
monthlyMortgage = loanAmount / numPayments;
}
// 2. Calculate Monthly Expenses
var monthlyTax = annualTax / 12;
var monthlyIns = annualIns / 12;
var monthlyVacancy = monthlyRent * (vacancyRate / 100);
// Total Operating Expenses (excluding Mortgage)
var monthlyOperatingExpenses = monthlyTax + monthlyIns + monthlyMaint + monthlyVacancy;
// Total Monthly Expenses (including Mortgage)
var totalMonthlyExpenses = monthlyMortgage + monthlyOperatingExpenses;
// 3. Calculate Cash Flow
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 4. Calculate Net Operating Income (NOI)
// NOI = Annual Income – Operating Expenses (Tax, Ins, Maint, Vacancy) – NOT Mortgage
var annualOperatingExpenses = monthlyOperatingExpenses * 12;
var noi = (monthlyRent * 12) – annualOperatingExpenses;
// 5. Calculate Metrics
var totalCashInvested = downPaymentAmount + closingCosts;
var capRate = 0;
if (price > 0) {
capRate = (noi / price) * 100;
}
var cashOnCash = 0;
if (totalCashInvested > 0) {
cashOnCash = (annualCashFlow / totalCashInvested) * 100;
}
// Display Results
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
document.getElementById("displayMortgage").innerText = formatter.format(monthlyMortgage);
document.getElementById("displayTotalExpenses").innerText = formatter.format(totalMonthlyExpenses);
var cashFlowElement = document.getElementById("displayCashFlow");
cashFlowElement.innerText = formatter.format(monthlyCashFlow);
if (monthlyCashFlow < 0) {
cashFlowElement.classList.add("negative-result");
cashFlowElement.classList.remove("highlight-result");
} else {
cashFlowElement.classList.remove("negative-result");
cashFlowElement.classList.add("highlight-result");
}
document.getElementById("displayNOI").innerText = formatter.format(noi);
document.getElementById("displayCapRate").innerText = capRate.toFixed(2) + "%";
var cocElement = document.getElementById("displayCashOnCash");
cocElement.innerText = cashOnCash.toFixed(2) + "%";
if (cashOnCash < 0) {
cocElement.classList.add("negative-result");
cocElement.classList.remove("highlight-result");
} else {
cocElement.classList.remove("negative-result");
cocElement.classList.add("highlight-result");
}
// Show results container
document.getElementById("results").style.display = "block";
}