* Calculations include estimates for vacancy and maintenance reserves.
Understanding Rental Property Cash Flow
Cash flow is the lifeblood of any real estate investment. It represents the net amount of money left in your pocket after all expenses—including mortgage payments, taxes, insurance, and maintenance reserves—are paid. A positive cash flow ensures that the property pays for itself and generates passive income, while negative cash flow implies that the investment is costing you money every month.
How is Rental Cash Flow Calculated?
The formula for calculating rental property cash flow involves three main steps:
Gross Income: The total revenue generated from rent and other sources (like laundry or parking fees).
Net Operating Income (NOI): Gross Income minus operating expenses (vacancy, repairs, management, taxes, insurance). Note that NOI does not typically include mortgage debt service.
Cash Flow: NOI minus the monthly debt service (mortgage principal and interest).
Key Expense Categories Explained
Many novice investors make the mistake of only subtracting the mortgage from the rent. To get an accurate picture, you must account for:
Vacancy Rate: Properties will not be occupied 365 days a year. A standard safety margin is 5-8% to account for turnover periods.
CapEx (Capital Expenditures): Big-ticket items like roofs, HVAC systems, and water heaters eventually break. Setting aside 5-10% of monthly rent creates a reserve fund for these future costs.
Property Management: Even if you self-manage, it is wise to factor in a management fee (usually 8-10%) to value your own time or prepare for hiring a professional later.
Example Scenario
Imagine you purchase a property that rents for $2,000 per month. Your mortgage is $1,100, taxes are $250, and insurance is $80. You estimate 5% for vacancy, 5% for repairs, and 5% for CapEx.
Use the calculator above to run your own numbers and determine if a potential investment meets your financial goals.
function calculateCashFlow() {
// 1. Get Values
var rent = parseFloat(document.getElementById('rpc_rent').value) || 0;
var otherIncome = parseFloat(document.getElementById('rpc_other_income').value) || 0;
var mortgage = parseFloat(document.getElementById('rpc_mortgage').value) || 0;
var taxes = parseFloat(document.getElementById('rpc_taxes').value) || 0;
var insurance = parseFloat(document.getElementById('rpc_insurance').value) || 0;
var hoa = parseFloat(document.getElementById('rpc_hoa').value) || 0;
var vacancyRate = parseFloat(document.getElementById('rpc_vacancy').value) || 0;
var repairsRate = parseFloat(document.getElementById('rpc_repairs').value) || 0;
var capexRate = parseFloat(document.getElementById('rpc_capex').value) || 0;
var mgmtRate = parseFloat(document.getElementById('rpc_management').value) || 0;
// 2. Calculations
var totalGrossIncome = rent + otherIncome;
// Calculate percentage based expenses off the GROSS RENT (usually standard practice)
var vacancyCost = rent * (vacancyRate / 100);
var repairsCost = rent * (repairsRate / 100);
var capexCost = rent * (capexRate / 100);
var mgmtCost = rent * (mgmtRate / 100);
var totalVariableExpenses = vacancyCost + repairsCost + capexCost + mgmtCost;
var totalFixedExpenses = taxes + insurance + hoa;
var totalOperatingExpenses = totalVariableExpenses + totalFixedExpenses;
// NOI = Income – Operating Expenses (Not including mortgage)
// Note: Technically vacancy is a deduction from income, but for cash flow math it acts like an expense line item.
// To match standard "Cash Flow" math: (Income – Vacancy) – Other Op Expenses – Mortgage
// Let's stick to the flow: Income – (All Expenses + Mortgage)
var totalExpensesIncludingMortgage = totalOperatingExpenses + mortgage;
var monthlyCashFlow = totalGrossIncome – totalExpensesIncludingMortgage;
var annualCashFlow = monthlyCashFlow * 12;
var noi = totalGrossIncome – totalOperatingExpenses; // NOI includes vacancy loss usually
// 3. Update DOM
document.getElementById('res_gross_income').innerText = '$' + totalGrossIncome.toFixed(2);
document.getElementById('res_total_expenses').innerText = '$' + totalExpensesIncludingMortgage.toFixed(2);
document.getElementById('res_noi').innerText = '$' + noi.toFixed(2);
var monthlyEl = document.getElementById('res_monthly_cf');
monthlyEl.innerText = '$' + monthlyCashFlow.toFixed(2);
var annualEl = document.getElementById('res_annual_cf');
annualEl.innerText = '$' + annualCashFlow.toFixed(2);
// Color coding
if (monthlyCashFlow >= 0) {
monthlyEl.classList.remove('negative');
annualEl.classList.remove('negative');
monthlyEl.style.color = "#27ae60";
annualEl.style.color = "#27ae60";
} else {
monthlyEl.classList.add('negative');
annualEl.classList.add('negative');
monthlyEl.style.color = "#c0392b";
annualEl.style.color = "#c0392b";
}
// Show results
document.getElementById('rpc_result').style.display = 'block';
}