Understanding the financials of a rental property is the difference between a successful investment and a financial burden. This Rental Property Cash Flow Calculator helps real estate investors evaluate the potential profitability of a deal by factoring in income, operating expenses, and financing costs.
Key Metrics Explained
1. Net Operating Income (NOI)
NOI is a fundamental metric in real estate. It represents the profitability of a property before adding in any financing costs or taxes. It is calculated as:
NOI = Total Revenue - Total Operating Expenses
Operating expenses include maintenance, vacancy reserves, property management fees, insurance, and taxes, but exclude the mortgage payment.
2. Cash Flow
Cash flow is the net amount of cash moving in or out of the business at the end of the month. Positive cash flow means your property is generating income after the mortgage and all expenses are paid.
Monthly Cash Flow = NOI - Monthly Debt Service (Mortgage)
3. Cash on Cash Return (CoC)
This percentage measures the annual return on the actual cash you invested (down payment + closing costs + rehab costs). It is one of the most important metrics for determining the efficiency of your investment money.
A good CoC return varies by market, but many investors aim for 8-12% or higher.
4. Capitalization Rate (Cap Rate)
The Cap Rate indicates the rate of return that is expected to be generated on a real estate investment property if it was bought entirely with cash. It is useful for comparing the relative value of different properties regardless of financing.
Cap Rate = (Annual NOI / Current Market Value) * 100
Common Expenses to Consider
Vacancy Rate: Always account for the fact that the unit won't be rented 365 days a year. A standard safe estimate is 5-8%.
Capital Expenditures (CapEx): Big-ticket items like roofs, HVAC systems, and water heaters will eventually break. Saving 5-10% of rent monthly creates a reserve for these events.
Property Management: Even if you self-manage, it is wise to factor in a fee (usually 8-10%) so the numbers work if you decide to hire a manager later.
Use this calculator to stress-test your deals. Try increasing the interest rate or vacancy rate to see if the property still cash flows positively in worst-case scenarios.
function calculateCashFlow() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPct = parseFloat(document.getElementById('downPayment').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var termYears = parseFloat(document.getElementById('loanTerm').value) || 0;
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
var rent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var annualTax = parseFloat(document.getElementById('propertyTax').value) || 0;
var annualIns = parseFloat(document.getElementById('insurance').value) || 0;
var monthlyHOA = parseFloat(document.getElementById('hoa').value) || 0;
var vacancyPct = parseFloat(document.getElementById('vacancy').value) || 0;
var repairsPct = parseFloat(document.getElementById('repairs').value) || 0;
var capexPct = parseFloat(document.getElementById('capex').value) || 0;
var managementPct = parseFloat(document.getElementById('management').value) || 0;
// 2. Loan Calculations
var downPaymentAmount = price * (downPct / 100);
var loanAmount = price – downPaymentAmount;
var monthlyRate = (interestRate / 100) / 12;
var totalMonths = termYears * 12;
var monthlyMortgage = 0;
if (interestRate === 0) {
monthlyMortgage = loanAmount / totalMonths;
} else {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalMonths)) / (Math.pow(1 + monthlyRate, totalMonths) – 1);
}
if (isNaN(monthlyMortgage)) monthlyMortgage = 0;
// 3. Expense Calculations
var monthlyTax = annualTax / 12;
var monthlyIns = annualIns / 12;
// Variable expenses calculated on Rent
var vacancyCost = rent * (vacancyPct / 100);
var repairsCost = rent * (repairsPct / 100);
var capexCost = rent * (capexPct / 100);
var managementCost = rent * (managementPct / 100);
var totalOperatingExpenses = monthlyTax + monthlyIns + monthlyHOA + vacancyCost + repairsCost + capexCost + managementCost;
// 4. Profitability Metrics
var monthlyNOI = rent – totalOperatingExpenses;
var monthlyCashFlow = monthlyNOI – monthlyMortgage;
var annualCashFlow = monthlyCashFlow * 12;
var annualNOI = monthlyNOI * 12;
var totalCashInvested = downPaymentAmount + closingCosts;
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
// 5. Update DOM
// Format Currency Helper
var formatCurrency = function(num) {
return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(num);
};
// Format Percent Helper
var formatPercent = function(num) {
return num.toFixed(2) + "%";
};
document.getElementById('monthlyCashFlow').innerHTML = formatCurrency(monthlyCashFlow);
// Color code cash flow
if (monthlyCashFlow >= 0) {
document.getElementById('monthlyCashFlow').style.color = "#27ae60";
} else {
document.getElementById('monthlyCashFlow').style.color = "#c0392b";
}
document.getElementById('monthlyMortgage').innerHTML = formatCurrency(monthlyMortgage);
document.getElementById('totalExpenses').innerHTML = formatCurrency(totalOperatingExpenses);
document.getElementById('monthlyNOI').innerHTML = formatCurrency(monthlyNOI);
document.getElementById('cocReturn').innerHTML = formatPercent(cocReturn);
document.getElementById('capRate').innerHTML = formatPercent(capRate);
document.getElementById('cashNeeded').innerHTML = formatCurrency(totalCashInvested);
// Show results
document.getElementById('results').style.display = "block";
}