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, investors must analyze the numbers rigorously. This Rental Property ROI Calculator is designed to help you analyze the profitability of a potential investment property by calculating key metrics like Cash on Cash Return, Cap Rate, and Monthly Cash Flow.
Key Metrics Explained
1. Monthly Cash Flow
Cash flow is the profit you bring in each month after all expenses are paid. It is calculated as:
Cash Flow = Total Monthly Income – Total Monthly Expenses
Positive cash flow ensures the property pays for itself and provides you with passive income. Our calculator accounts for mortgage payments, taxes, insurance, vacancy allowances, and maintenance costs.
2. Cash on Cash Return (CoC)
This is arguably the most important metric for rental investors. It measures the annual return on the actual cash you invested (down payment, closing costs, and rehab costs), rather than the total price of the property.
Formula:(Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
A "good" CoC return varies by market, but many investors target 8% to 12%.
3. Cap Rate (Capitalization Rate)
Cap Rate measures the property's natural rate of return assuming you paid all cash. It helps compare properties regardless of financing.
Formula:(Net Operating Income / Purchase Price) × 100
Note that NOI (Net Operating Income) does not include mortgage payments.
How to Use This Calculator
Purchase Price & Loan Details: Enter the offer price and your financing terms. The interest rate significantly impacts cash flow.
Vacancy Rate: No property is occupied 100% of the time. A standard conservative estimate is 5% to 8% (roughly 2-4 weeks per year).
Maintenance & CapEx: Always budget for repairs. Even if the house is new, setting aside funds for future roof or HVAC replacements is critical.
Property Management: If you plan to hire a manager, include their fee (typically 8-10% of rent) to see how it affects your bottom line.
Why These Numbers Matter
Many amateur investors only look at "Rent minus Mortgage." This is a dangerous oversimplification. By accounting for vacancy, taxes, insurance, and maintenance, this calculator provides a realistic view of whether a property is a liability or a true asset.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('rp_price').value) || 0;
var downPayment = parseFloat(document.getElementById('rp_down').value) || 0;
var closingCosts = parseFloat(document.getElementById('rp_closing').value) || 0;
var rehabCosts = parseFloat(document.getElementById('rp_rehab').value) || 0;
var interestRate = parseFloat(document.getElementById('rp_rate').value) || 0;
var loanTermYears = parseFloat(document.getElementById('rp_term').value) || 0;
var monthlyRent = parseFloat(document.getElementById('rp_rent').value) || 0;
var vacancyRate = parseFloat(document.getElementById('rp_vacancy').value) || 0;
var annualTax = parseFloat(document.getElementById('rp_tax').value) || 0;
var annualInsurance = parseFloat(document.getElementById('rp_ins').value) || 0;
var monthlyMaint = parseFloat(document.getElementById('rp_maint').value) || 0;
var monthlyPM = parseFloat(document.getElementById('rp_pm').value) || 0;
// 2. Calculate Mortgage (P&I)
var loanAmount = price – downPayment;
var monthlyMortgage = 0;
if (loanAmount > 0 && interestRate > 0 && loanTermYears > 0) {
var monthlyRate = (interestRate / 100) / 12;
var numPayments = loanTermYears * 12;
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
// 3. Calculate Income (Effective)
var vacancyLoss = monthlyRent * (vacancyRate / 100);
var effectiveIncome = monthlyRent – vacancyLoss;
// 4. Calculate Operating Expenses (Monthly)
// Expenses for NOI do NOT include Mortgage Interest/Principal
var monthlyTax = annualTax / 12;
var monthlyIns = annualInsurance / 12;
var operatingExpenses = monthlyTax + monthlyIns + monthlyMaint + monthlyPM;
// 5. Calculate NOI (Net Operating Income)
var monthlyNOI = effectiveIncome – operatingExpenses;
var annualNOI = monthlyNOI * 12;
// 6. Calculate Cash Flow
var monthlyCashFlow = monthlyNOI – monthlyMortgage;
var annualCashFlow = monthlyCashFlow * 12;
// 7. Calculate Cash Invested
var totalCashInvested = downPayment + closingCosts + rehabCosts;
// 8. ROI Metrics
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / (price + rehabCosts)) * 100; // Cap rate usually based on total cost basis
}
// 9. Display Results
var resContainer = document.getElementById('rp_result_container');
resContainer.style.display = 'block';
// Format Currency Helper
var fmtMoney = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
var cfElement = document.getElementById('res_cashflow');
cfElement.innerText = fmtMoney.format(monthlyCashFlow);
// Color coding for cashflow
if(monthlyCashFlow >= 0) {
cfElement.className = 'rp-metric-value positive';
} else {
cfElement.className = 'rp-metric-value negative';
}
document.getElementById('res_coc').innerText = cocReturn.toFixed(2) + "%";
document.getElementById('res_cap').innerText = capRate.toFixed(2) + "%";
document.getElementById('res_invested').innerText = fmtMoney.format(totalCashInvested);
document.getElementById('res_mortgage').innerText = fmtMoney.format(monthlyMortgage);
}