Calculating accurate cash flow is the cornerstone of successful real estate investing. This Rental Property Cash Flow Calculator helps investors determine if a potential property is an asset (puts money in your pocket) or a liability (takes money out).
Key Metrics Explained
Gross Rent: The total amount of rent collected before any expenses are deducted.
Vacancy Rate: No property is occupied 100% of the time. We recommend using a conservative 5-8% vacancy rate to account for turnover periods.
NOI (Net Operating Income): This is your profitability before paying the mortgage. It is calculated as Effective Gross Income – Operating Expenses. Banks use this metric to determine the property's value.
Cash Flow: The final amount left in your bank account after all operating expenses and mortgage payments are made.
What is a Good Cash Flow?
While targets vary by market, many seasoned investors aim for $200 – $300 per door, per month in pure cash flow. For example, if you purchase a single-family home with a mortgage payment of $1,200, taxes/insurance of $400, and rent it for $2,000, your cash flow calculation must also account for maintenance and vacancy reserves.
Using the calculator above, if your result is negative, the property is "cash flow negative." This means you must pay out of pocket every month to hold the asset, which is generally risky for beginner investors.
function calculateCashFlow() {
// 1. Get Values
var grossRent = parseFloat(document.getElementById('grossRent').value) || 0;
var otherIncome = parseFloat(document.getElementById('otherIncome').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
var repairsRate = parseFloat(document.getElementById('repairsCapEx').value) || 0;
var mgmtRate = parseFloat(document.getElementById('propMgmt').value) || 0;
var mortgage = parseFloat(document.getElementById('mortgagePayment').value) || 0;
var tax = parseFloat(document.getElementById('propertyTax').value) || 0;
var insurance = parseFloat(document.getElementById('insurance').value) || 0;
var hoa = parseFloat(document.getElementById('hoaFees').value) || 0;
var utilities = parseFloat(document.getElementById('utilities').value) || 0;
// 2. Calculations
var totalGrossIncome = grossRent + otherIncome;
// Calculate Variable Costs (Percentage based on Gross Rent usually, sometimes total income. We use Gross Rent for conservatism)
var vacancyCost = grossRent * (vacancyRate / 100);
var repairsCost = grossRent * (repairsRate / 100);
var mgmtCost = grossRent * (mgmtRate / 100);
var effectiveIncome = totalGrossIncome – vacancyCost;
// Operating Expenses (Everything except Mortgage)
var totalOperatingExpenses = tax + insurance + hoa + utilities + repairsCost + mgmtCost;
var noi = effectiveIncome – totalOperatingExpenses;
var cashFlow = noi – mortgage;
// 3. Formatting Helper
function formatMoney(num) {
return '$' + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}
// 4. Update DOM
document.getElementById('resultsArea').style.display = 'block';
document.getElementById('displayTotalIncome').innerText = formatMoney(totalGrossIncome);
document.getElementById('displayVacancy').innerText = '-' + formatMoney(vacancyCost);
document.getElementById('displayEffectiveIncome').innerText = formatMoney(effectiveIncome);
document.getElementById('displayOperatingExpenses').innerText = '-' + formatMoney(totalOperatingExpenses);
document.getElementById('displayNOI').innerText = formatMoney(noi);
document.getElementById('displayMortgage').innerText = '-' + formatMoney(mortgage);
var flowEl = document.getElementById('displayCashFlow');
flowEl.innerText = formatMoney(cashFlow);
if (cashFlow >= 0) {
flowEl.className = 'positive-flow';
} else {
flowEl.className = 'negative-flow';
}
}