Investing in real estate is a powerful vehicle for wealth creation, but success depends on the numbers. Our Rental Property ROI Calculator helps investors analyze potential deals by breaking down cash flow, capitalization rates (Cap Rate), and Cash on Cash Return.
Key Metrics Explained
Cash Flow: The net amount of cash moving in or out of the investment each month after all expenses and mortgage payments are made. Positive cash flow is essential for long-term sustainability.
Net Operating Income (NOI): This calculates the profitability of the property before adding in the mortgage costs. It is calculated as (Rental Income – Vacancy Losses – Operating Expenses).
Cap Rate: The ratio of Net Operating Income to the property's purchase price. It represents the potential return on an investment assuming it was paid for in cash.
Cash on Cash Return: The most practical metric for leveraged investors. It measures the annual pre-tax cash flow divided by the total cash invested (Down Payment + Closing Costs).
Example Analysis
Consider a property listed for $250,000. You put $50,000 down (20%) and pay $5,000 in closing costs.
If the property rents for $2,200/month and your operating expenses (taxes, insurance, maintenance) are $800/month, plus a mortgage payment of roughly $1,264 (at 6.5% interest), your monthly cash flow would be approximately $136.
While $136 might seem small monthly, the annual cash flow of $1,632 against your total cash investment of $55,000 yields a Cash on Cash return of nearly 3%. This excludes the benefits of principal paydown (equity build-up) and property appreciation, which significantly boost the total ROI over time.
Why Use a Calculator?
Real estate markets vary wildly. A property in a high-appreciation area might have lower cash flow (and a lower Cap Rate), while a property in a stable, lower-cost area might offer higher immediate cash flow. By adjusting the inputs for Purchase Price, Rent, and Vacancy Rate, you can stress-test your investment against market downturns to ensure your portfolio remains profitable.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById("purchasePrice").value);
var downPayment = parseFloat(document.getElementById("downPayment").value);
var rate = parseFloat(document.getElementById("interestRate").value);
var term = parseFloat(document.getElementById("loanTerm").value);
var rent = parseFloat(document.getElementById("monthlyRent").value);
var expenses = parseFloat(document.getElementById("monthlyExpenses").value);
var vacancyRate = parseFloat(document.getElementById("vacancyRate").value);
var closingCosts = parseFloat(document.getElementById("closingCosts").value);
// Validation
if (isNaN(price) || isNaN(downPayment) || isNaN(rate) || isNaN(term) || isNaN(rent) || isNaN(expenses)) {
alert("Please enter valid numbers in all fields.");
return;
}
// 2. Calculate Mortgage Payment (Principal + Interest)
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var loanAmount = price – downPayment;
var monthlyRate = (rate / 100) / 12;
var totalPayments = term * 12;
var mortgagePayment = 0;
if (monthlyRate > 0) {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalPayments)) / (Math.pow(1 + monthlyRate, totalPayments) – 1);
} else {
mortgagePayment = loanAmount / totalPayments;
}
// 3. Calculate Income Adjusted for Vacancy
var vacancyLoss = rent * (vacancyRate / 100);
var effectiveIncome = rent – vacancyLoss;
// 4. Calculate Net Operating Income (NOI)
// NOI = (Gross Income – Vacancy – Operating Expenses) * 12
// Note: NOI does NOT include Mortgage Payment
var monthlyNOI = effectiveIncome – expenses;
var annualNOI = monthlyNOI * 12;
// 5. Calculate Cash Flow
var monthlyCashFlow = monthlyNOI – mortgagePayment;
var annualCashFlow = monthlyCashFlow * 12;
// 6. Calculate Cap Rate
// Cap Rate = Annual NOI / Purchase Price
var capRate = (annualNOI / price) * 100;
// 7. Calculate Cash on Cash Return
// CoC = Annual Cash Flow / Total Cash Invested
var totalCashInvested = downPayment + closingCosts;
var cashOnCash = (annualCashFlow / totalCashInvested) * 100;
// 8. Display Results
var resultDiv = document.getElementById("results");
resultDiv.style.display = "block";
// Helper for formatting currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById("resMortgage").innerText = formatter.format(mortgagePayment);
var cfElement = document.getElementById("resCashFlow");
cfElement.innerText = formatter.format(monthlyCashFlow);
cfElement.className = "result-value " + (monthlyCashFlow >= 0 ? "highlight-positive" : "highlight-negative");
document.getElementById("resNOI").innerText = formatter.format(annualNOI);
document.getElementById("resCapRate").innerText = capRate.toFixed(2) + "%";
var cocElement = document.getElementById("resCoC");
cocElement.innerText = cashOnCash.toFixed(2) + "%";
cocElement.className = "result-value " + (cashOnCash >= 0 ? "highlight-positive" : "highlight-negative");
}