Real estate investing is a numbers game. To ensure a profitable investment, you need to accurately project your income and expenses before signing on the dotted line. This Rental Property Cash Flow Calculator helps investors analyze potential deals by determining key metrics like Monthly Cash Flow, Cap Rate, and Cash on Cash Return.
Understanding the Inputs
To get the most accurate results, you'll need to gather specific financial details about the property:
Purchase Price & Down Payment: The total cost of the home and the initial cash you are investing.
Loan Details: Your interest rate and loan term (usually 15 or 30 years) determine your mortgage payment.
Vacancy Rate: Properties aren't rented 100% of the time. A standard conservative estimate is 5-8% to account for turnover periods.
Maintenance & CapEx: It is crucial to set aside a percentage of monthly rent (typically 5-10%) for repairs and capital expenditures like a new roof or HVAC system.
Key Metrics Explained
Net Monthly Cash Flow
This is the profit you take home every month after all expenses, including the mortgage, have been paid. A positive cash flow means the asset is paying for itself and generating income.
Cash on Cash Return measures the annual return on the actual cash you invested (your down payment plus closing costs). It is one of the most important metrics because it allows you to compare real estate returns against other investment vehicles like stocks.
NOI represents the profitability of a property before adding in financing costs and taxes. It helps calculate the Cap Rate and is used by lenders to determine the viability of the property.
Cap Rate (Capitalization Rate)
The Cap Rate indicates the potential return on an investment assuming you paid all cash. It is useful for comparing the profitability of different properties regardless of how they are financed.
Formula: (NOI / Current Market Value) × 100
function calculateRentalMetrics() {
// 1. Get Input Values
var price = parseFloat(document.getElementById("purchasePrice").value);
var downPayment = parseFloat(document.getElementById("downPayment").value);
var interestRate = parseFloat(document.getElementById("interestRate").value);
var termYears = parseFloat(document.getElementById("loanTerm").value);
var rent = parseFloat(document.getElementById("monthlyRent").value);
var vacancyRate = parseFloat(document.getElementById("vacancyRate").value);
var annualTax = parseFloat(document.getElementById("propertyTax").value);
var annualInsurance = parseFloat(document.getElementById("insurance").value);
var maintRate = parseFloat(document.getElementById("maintenance").value);
var otherCosts = parseFloat(document.getElementById("otherExpenses").value);
// Validate Inputs
if (isNaN(price) || isNaN(downPayment) || isNaN(rent)) {
alert("Please enter valid numbers for Price, Down Payment, and Rent.");
return;
}
// 2. Calculate Mortgage Payment
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numPayments = termYears * 12;
var mortgagePayment = 0;
if (interestRate === 0) {
mortgagePayment = loanAmount / numPayments;
} else {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
// 3. Calculate Monthly Expenses
var monthlyTax = annualTax / 12;
var monthlyInsurance = annualInsurance / 12;
var monthlyVacancy = rent * (vacancyRate / 100);
var monthlyMaintenance = rent * (maintRate / 100);
var totalOperatingExpenses = monthlyTax + monthlyInsurance + monthlyVacancy + monthlyMaintenance + otherCosts;
var totalExpenses = totalOperatingExpenses + mortgagePayment;
// 4. Calculate Key Metrics
var monthlyCashFlow = rent – totalExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Net Operating Income (NOI) = Income – Operating Expenses (Exclude Mortgage)
// Operating Expenses = Tax + Ins + Vacancy + Maint + Other (HOA)
var annualNOI = (rent * 12) – (totalOperatingExpenses * 12);
var capRate = (annualNOI / price) * 100;
var cocReturn = (annualCashFlow / downPayment) * 100;
// 5. Display Results
var formatCurrency = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
var formatPercent = new Intl.NumberFormat('en-US', { style: 'percent', minimumFractionDigits: 2 });
document.getElementById("resGrossIncome").innerText = formatCurrency.format(rent);
document.getElementById("resTotalExpenses").innerText = formatCurrency.format(totalExpenses);
var cashFlowEl = document.getElementById("resCashFlow");
cashFlowEl.innerText = formatCurrency.format(monthlyCashFlow);
// Styling for positive/negative cash flow
if(monthlyCashFlow >= 0) {
cashFlowEl.className = "rp-result-value rp-highlight";
} else {
cashFlowEl.className = "rp-result-value rp-highlight-neg";
}
document.getElementById("resNOI").innerText = formatCurrency.format(annualNOI);
document.getElementById("resCapRate").innerText = capRate.toFixed(2) + "%";
document.getElementById("resCOC").innerText = cocReturn.toFixed(2) + "%";
// Show Results Section
document.getElementById("resultsSection").style.display = "block";
}