How to Calculate Rental Property ROI
Investing in real estate is one of the most proven ways to build wealth, but not every property is a "good deal." To determine if a rental property is worth your capital, you must look beyond the purchase price and evaluate the Return on Investment (ROI). This calculator helps you break down the complex math of real estate finance.
Understanding Key Real Estate Metrics
- Cap Rate (Capitalization Rate): This measures the property's natural rate of return without considering financing. It is calculated by taking the Net Operating Income (NOI) and dividing it by the purchase price. A cap rate of 5-8% is often considered healthy in stable markets.
- Cash on Cash Return (CoC): This is arguably the most important metric for investors using leverage (mortgages). It measures the annual cash flow relative to the actual cash you invested (down payment).
- Net Operating Income (NOI): Your total annual income minus all operating expenses. Crucially, NOI does not include your mortgage payment.
- Cash Flow: This is the "money in your pocket" at the end of the month after all bills—including the mortgage—are paid.
Real-World Investment Example
Imagine you buy a property for $250,000. You put 20% down ($50,000). Your monthly rent is $2,200, and your total expenses (taxes, insurance, and repairs) are $500. If your mortgage is $1,200, your monthly cash flow is $500 ($2,200 – $500 – $1,200).
In this scenario, your annual cash flow is $6,000. Your Cash on Cash Return would be 12% ($6,000 / $50,000), which is generally considered a strong return in today's market.
Pro-Tips for Using This Calculator
Don't forget to account for Vacancy Rates and Capital Expenditures (CapEx). We recommend adding 5-10% of your rent to your monthly expenses to cover periods when the property is empty or when major repairs like a new roof or HVAC system are needed. Accurate data entry leads to accurate investment decisions.
function calculateRentalROI() {
// Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var dpPercent = parseFloat(document.getElementById('downPaymentPercent').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);
// Validation
if (isNaN(price) || isNaN(rent) || price 0) {
monthlyMortgage = (loanAmount * monthlyInterest) / (1 – Math.pow(1 + monthlyInterest, -numPayments));
} else {
monthlyMortgage = loanAmount / numPayments;
}
var annualRent = rent * 12;
var annualExpenses = expenses * 12;
var annualMortgage = monthlyMortgage * 12;
var monthlyCashFlow = rent – expenses – monthlyMortgage;
var annualCashFlow = monthlyCashFlow * 12;
var noi = annualRent – annualExpenses;
var capRate = (noi / price) * 100;
var cashOnCash = (annualCashFlow / downPaymentAmount) * 100;
// Display Results
document.getElementById('resMortgage').innerText = "$" + monthlyMortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCashFlow').innerText = "$" + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resNOI').innerText = "$" + noi.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
document.getElementById('resCashOnCash').innerText = cashOnCash.toFixed(2) + "%";
document.getElementById('resCashRequired').innerText = "$" + downPaymentAmount.toLocaleString();
// Analysis Text
var analysis = "";
if (cashOnCash >= 10) {
analysis = "This property shows excellent potential with a double-digit Cash on Cash return. High yield!";
} else if (cashOnCash >= 5) {
analysis = "This is a solid investment. The returns are comparable to or better than historical stock market averages.";
} else if (cashOnCash > 0) {
analysis = "This property has positive cash flow, but the returns are modest. Ensure there is high appreciation potential.";
} else {
analysis = "Warning: This property has negative cash flow. You would be losing money every month.";
}
document.getElementById('resAnalysisText').innerText = analysis;
// Color coding cash flow
if (monthlyCashFlow < 0) {
document.getElementById('resCashFlow').style.color = "#e74c3c";
} else {
document.getElementById('resCashFlow').style.color = "#27ae60";
}
}
// Initialize on load
window.onload = function() {
calculateRentalROI();
};