Investing in real estate is one of the most reliable ways to build wealth, but success hinges on the numbers. This Rental Property Cash Flow Calculator helps investors analyze potential deals by breaking down income, expenses, and financing costs to determine the true profitability of an asset.
What is Positive Cash Flow?
Cash flow is the net amount of money moving in and out of a rental property business. Positive cash flow occurs when a property's gross rental income exceeds all expenses, including mortgage payments, taxes, insurance, and maintenance costs. This surplus income is essentially passive income for the investor.
Conversely, negative cash flow means the property costs more to operate than it generates in rent. While some investors accept negative cash flow in high-appreciation markets, most seek positive cash flow to ensure the asset pays for itself.
Key Metrics Explained
Net Operating Income (NOI): This is the annual income generated by the property after deducting operating expenses (vacancy, taxes, insurance, repairs) but before deducting mortgage payments. It measures the raw profitability of the property itself.
Cash on Cash Return (CoC): This metric calculates the annual return on the actual cash invested (Down Payment + Closing Costs). It is calculated as: (Annual Cash Flow / Total Cash Invested) Ă— 100. A CoC return of 8-12% is often considered a solid target for rental investors.
Vacancy Rate: No property is occupied 100% of the time. Prudent investors account for a 5% to 8% vacancy rate to budget for turnover periods between tenants.
CapEx (Capital Expenditures): Unlike routine repairs, CapEx refers to major expenses like replacing a roof or HVAC system. Setting aside a monthly amount (e.g., 5-10% of rent) ensures you have funds when these big-ticket items are needed.
How to Use This Calculator
To get an accurate analysis, input the purchase price and loan details. Be realistic about your expense estimates—underestimating maintenance or vacancy is a common mistake for new investors. Adjust the rental income and expenses to see how different scenarios impact your monthly cash flow and overall return on investment.
function calculateRentalCashFlow() {
// 1. Get Input Values
var price = parseFloat(document.getElementById("purchasePrice").value);
var downPercent = parseFloat(document.getElementById("downPayment").value);
var interestRate = parseFloat(document.getElementById("interestRate").value);
var loanYears = parseFloat(document.getElementById("loanTerm").value);
var rent = parseFloat(document.getElementById("monthlyRent").value);
var annualTax = parseFloat(document.getElementById("annualTax").value);
var annualInsurance = parseFloat(document.getElementById("annualInsurance").value);
var hoa = parseFloat(document.getElementById("hoaFee").value);
var vacancyPercent = parseFloat(document.getElementById("vacancyRate").value);
var repairs = parseFloat(document.getElementById("repairCosts").value);
var mgmtPercent = parseFloat(document.getElementById("managementFee").value);
// Validate Inputs
if (isNaN(price) || isNaN(rent) || isNaN(interestRate)) {
alert("Please enter valid numbers for Price, Rent, and Interest Rate.");
return;
}
// 2. Calculate Mortgage (P&I)
var loanAmount = price – (price * (downPercent / 100));
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanYears * 12;
var mortgagePayment = 0;
if (interestRate === 0) {
mortgagePayment = loanAmount / numberOfPayments;
} else {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// 3. Calculate Monthly Expenses
var monthlyTax = annualTax / 12;
var monthlyInsurance = annualInsurance / 12;
var vacancyCost = rent * (vacancyPercent / 100);
var mgmtCost = rent * (mgmtPercent / 100);
var totalOperatingExpenses = monthlyTax + monthlyInsurance + hoa + vacancyCost + repairs + mgmtCost;
var totalExpenses = totalOperatingExpenses + mortgagePayment;
// 4. Calculate Cash Flow
var monthlyCashFlow = rent – totalExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 5. Calculate Metrics
// NOI = Annual Income – Annual Operating Expenses (Excluding Mortgage)
var annualNOI = (rent * 12) – (totalOperatingExpenses * 12);
// Cash on Cash Return = Annual Cash Flow / Total Cash Invested
// Assuming Cash Invested = Down Payment (simplification for calculator)
var cashInvested = price * (downPercent / 100);
var cocReturn = 0;
if (cashInvested > 0) {
cocReturn = (annualCashFlow / cashInvested) * 100;
}
// 6. Display Results
document.getElementById("resIncome").innerText = "$" + rent.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resMortgage").innerText = "$" + mortgagePayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resExpenses").innerText = "$" + totalOperatingExpenses.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
var cfElement = document.getElementById("resCashFlow");
cfElement.innerText = "$" + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (monthlyCashFlow >= 0) {
cfElement.className = "rp-result-value positive";
} else {
cfElement.className = "rp-result-value negative";
}
document.getElementById("resNOI").innerText = "$" + annualNOI.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
var cocElement = document.getElementById("resCoC");
cocElement.innerText = cocReturn.toFixed(2) + "%";
if (cocReturn >= 0) {
cocElement.className = "rp-result-value positive";
} else {
cocElement.className = "rp-result-value negative";
}
document.getElementById("rpResults").style.display = "block";
}