Analyze your real estate investment's potential returns, cash flow, and capitalization rate.
Purchase & Loan Details
30 Years
15 Years
10 Years
Income & Expenses
Monthly Cash Flow
$0.00
Cash on Cash Return
0.00%
Cap Rate
0.00%
Monthly Breakdown
Gross Monthly Rent:$0.00
Less: Vacancy (%):-$0.00
Effective Gross Income:$0.00
Mortgage Payment (P&I):-$0.00
Property Tax (Monthly):-$0.00
Insurance (Monthly):-$0.00
HOA Fees:-$0.00
Maintenance Reserve:-$0.00
Total Monthly Expenses:-$0.00
Net Monthly Cash Flow:$0.00
Understanding Rental Property Analysis
Investing in real estate is a numbers game. Before purchasing a rental property, it is crucial to analyze the potential returns to ensure the investment meets your financial goals. This calculator helps investors determine the viability of a property by breaking down income, expenses, and key return metrics.
Key Metrics Explained
Cash Flow: This is the net income from the property after all operating expenses and mortgage payments are made. Positive cash flow indicates a profit, while negative cash flow means you are losing money every month.
Cash on Cash Return (CoC): This metric measures the annual return on the actual cash you invested (down payment + closing costs). It is calculated as: (Annual Cash Flow / Total Cash Invested) × 100. A CoC return of 8-12% is generally considered good by many investors.
Cap Rate (Capitalization Rate): This measures the property's natural rate of return without considering the mortgage financing. It helps compare properties regardless of how they are paid for. Formula: (Net Operating Income / Purchase Price) × 100.
Estimating Expenses
One of the most common mistakes new investors make is underestimating expenses. Aside from the mortgage, you must account for:
Vacancy: Properties won't be rented 365 days a year. A 5-8% vacancy allowance is standard.
Maintenance: Setting aside 5-10% of the rent for repairs ensures you have funds when the water heater breaks or the roof needs patching.
Capital Expenditures (CapEx): Major replacements like HVAC or roofing. While not monthly, they should be budgeted for.
Use this tool to run multiple scenarios. What happens if the rent is lower than expected? What if interest rates rise? Stress-testing your numbers is key to successful real estate investing.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPayment = parseFloat(document.getElementById('downPayment').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var loanTermYears = parseInt(document.getElementById('loanTerm').value) || 30;
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var propertyTaxYear = parseFloat(document.getElementById('propertyTax').value) || 0;
var insuranceYear = parseFloat(document.getElementById('insurance').value) || 0;
var hoaMonth = parseFloat(document.getElementById('hoa').value) || 0;
var maintenancePct = parseFloat(document.getElementById('maintenance').value) || 0;
var vacancyPct = parseFloat(document.getElementById('vacancy').value) || 0;
// 2. Validate essential inputs
if (price 0 && interestRate > 0) {
// Standard Amortization Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1]
mortgagePayment = loanAmount * (monthlyInterestRate * Math.pow(1 + monthlyInterestRate, numberOfPayments)) / (Math.pow(1 + monthlyInterestRate, numberOfPayments) – 1);
} else if (loanAmount > 0 && interestRate === 0) {
mortgagePayment = loanAmount / numberOfPayments;
}
// 4. Calculate Monthly Expenses
var taxMonth = propertyTaxYear / 12;
var insuranceMonth = insuranceYear / 12;
var vacancyCost = monthlyRent * (vacancyPct / 100);
var maintenanceCost = monthlyRent * (maintenancePct / 100);
// Operating Expenses (excluding mortgage) for NOI calculation
var operatingExpenses = taxMonth + insuranceMonth + hoaMonth + maintenanceCost + vacancyCost;
// Total Expenses including mortgage
var totalMonthlyExpenses = operatingExpenses + mortgagePayment;
// 5. Calculate Returns
var effectiveGrossIncome = monthlyRent – vacancyCost;
var netOperatingIncome = effectiveGrossIncome – (operatingExpenses – vacancyCost); // NOI usually excludes debt service
// Correct NOI: Gross Income – Operating Expenses (Tax, Ins, HOA, Maint, Vacancy)
// Wait, operatingExpenses calculated above includes vacancy cost.
// NOI = (Rent – Vacancy) – (Tax + Ins + HOA + Maint).
var noi = (monthlyRent – vacancyCost) – (taxMonth + insuranceMonth + hoaMonth + maintenanceCost);
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses; // Correct: Rent – (OpExp + Mortgage)
var annualCashFlow = monthlyCashFlow * 12;
var totalCashInvested = downPayment + closingCosts;
// Cash on Cash Return
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// Cap Rate
var capRate = 0;
if (price > 0) {
capRate = ((noi * 12) / price) * 100;
}
// 6. Update UI
// Helper for currency formatting
var fmt = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
document.getElementById('res-monthly-cashflow').innerText = fmt.format(monthlyCashFlow);
document.getElementById('res-monthly-cashflow').style.color = monthlyCashFlow >= 0 ? '#27ae60' : '#c0392b';
document.getElementById('res-coc').innerText = cocReturn.toFixed(2) + "%";
document.getElementById('res-coc').style.color = cocReturn >= 0 ? '#27ae60' : '#c0392b';
document.getElementById('res-cap-rate').innerText = capRate.toFixed(2) + "%";
// Breakdown details
document.getElementById('res-gross-rent').innerText = fmt.format(monthlyRent);
document.getElementById('res-vac-rate').innerText = vacancyPct;
document.getElementById('res-vacancy').innerText = "-" + fmt.format(vacancyCost);
document.getElementById('res-effective-income').innerText = fmt.format(effectiveGrossIncome);
document.getElementById('res-mortgage').innerText = "-" + fmt.format(mortgagePayment);
document.getElementById('res-tax').innerText = "-" + fmt.format(taxMonth);
document.getElementById('res-insurance').innerText = "-" + fmt.format(insuranceMonth);
document.getElementById('res-hoa').innerText = "-" + fmt.format(hoaMonth);
document.getElementById('res-maint').innerText = "-" + fmt.format(maintenanceCost);
document.getElementById('res-total-expenses').innerText = "-" + fmt.format(totalMonthlyExpenses);
var finalCashFlowEl = document.getElementById('res-final-cashflow');
finalCashFlowEl.innerText = fmt.format(monthlyCashFlow);
finalCashFlowEl.style.color = monthlyCashFlow >= 0 ? '#27ae60' : '#c0392b';
// Show results
document.getElementById('rental-results').style.display = 'block';
}