Please enter valid positive numbers in all fields.
Monthly Cash Flow$0.00
Net Operating Income (NOI / Monthly)$0.00
Total Monthly Expenses$0.00
Mortgage Payment (P&I)$0.00
Cash on Cash Return0.00%
Cap Rate0.00%
Understanding Rental Property Cash Flow Analysis
Investing in real estate is one of the most reliable ways to build wealth, but the difference between a successful investment and a financial burden often comes down to one metric: Cash Flow. This calculator is designed specifically for real estate investors to analyze the profitability of a potential rental property purchase.
What is Cash Flow?
Cash flow represents the net amount of money moving into and out of a business—in this case, your rental property. It is calculated by subtracting all operating expenses and debt service (mortgage payments) from the total rental income.
Positive Cash Flow: The property generates more income than it costs to own and operate. This provides passive income and a safety margin.
Negative Cash Flow: The property costs you money every month. While some investors accept this for potential appreciation, it carries significantly higher risk.
Key Metrics Explained
This calculator provides several critical financial indicators to help you evaluate a deal:
1. Net Operating Income (NOI)
NOI is the total income the property generates minus all necessary operating expenses. Critical to note: NOI excludes mortgage payments. It measures the profitability of the property itself, independent of financing.
2. Cap Rate (Capitalization Rate)
Calculated as NOI / Purchase Price, the Cap Rate measures the natural rate of return on the property. It helps compare the profitability of different properties regardless of how they are financed. A higher cap rate generally implies a better return but may come with higher risk.
3. Cash on Cash Return
This is arguably the most important metric for investors using leverage. It calculates the annual cash flow divided by the total cash actually invested (Down Payment + Closing Costs). It tells you how hard your specific dollars are working for you.
Common Expenses Often Overlooked
Novice investors often fail because they underestimate expenses. This calculator accounts for the "silent killers" of profitability:
Vacancy Rate: You won't have a tenant 100% of the time. Setting aside 5-8% of rent ensures you can cover costs during turnover.
Maintenance: Roofs leak and toilets break. Allocating 5-10% of monthly rent to a maintenance fund is essential for long-term accuracy.
CapEx (Capital Expenditures): While not a monthly line item, major repairs (like HVAC replacement) should be factored into your maintenance percentage or a separate reserve.
How to Interpret Your Results
If your Cash Flow is positive, you have a self-sustaining asset. If your Cash on Cash Return exceeds 8-10%, you are likely outperforming the stock market average while gaining the benefits of real estate appreciation and tax advantages. However, always verify your input assumptions—garbage in, garbage out!
function calculateRental() {
// Get Input Elements
var priceInput = document.getElementById('purchasePrice');
var downPaymentInput = document.getElementById('downPayment');
var interestRateInput = document.getElementById('interestRate');
var loanTermInput = document.getElementById('loanTerm');
var closingCostsInput = document.getElementById('closingCosts');
var rentInput = document.getElementById('monthlyRent');
var otherIncomeInput = document.getElementById('otherIncome');
var taxInput = document.getElementById('propertyTax');
var insuranceInput = document.getElementById('insurance');
var hoaInput = document.getElementById('hoaFees');
var maintenanceInput = document.getElementById('maintenance');
var vacancyInput = document.getElementById('vacancy');
// Parse Values
var price = parseFloat(priceInput.value);
var downPaymentPercent = parseFloat(downPaymentInput.value);
var interestRate = parseFloat(interestRateInput.value);
var loanTerm = parseFloat(loanTermInput.value);
var closingCosts = parseFloat(closingCostsInput.value);
var monthlyRent = parseFloat(rentInput.value);
var otherIncome = parseFloat(otherIncomeInput.value);
var yearlyTax = parseFloat(taxInput.value);
var yearlyInsurance = parseFloat(insuranceInput.value);
var hoaFees = parseFloat(hoaInput.value);
var maintenancePercent = parseFloat(maintenanceInput.value);
var vacancyPercent = parseFloat(vacancyInput.value);
// Validation
if (isNaN(price) || isNaN(downPaymentPercent) || isNaN(interestRate) ||
isNaN(loanTerm) || isNaN(monthlyRent)) {
document.getElementById('errorMsg').style.display = 'block';
document.getElementById('resultContainer').style.display = 'none';
return;
} else {
document.getElementById('errorMsg').style.display = 'none';
}
// Calculations
// 1. Mortgage
var downPaymentAmount = price * (downPaymentPercent / 100);
var loanAmount = price – downPaymentAmount;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
var monthlyMortgage = 0;
if (interestRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
} else {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// 2. Income
var totalMonthlyIncome = monthlyRent + otherIncome;
// 3. Operating Expenses
var monthlyTax = yearlyTax / 12;
var monthlyInsurance = yearlyInsurance / 12;
var monthlyMaintenance = monthlyRent * (maintenancePercent / 100);
var monthlyVacancy = monthlyRent * (vacancyPercent / 100);
var totalOperatingExpenses = monthlyTax + monthlyInsurance + hoaFees + monthlyMaintenance + monthlyVacancy;
// 4. Net Operating Income (Monthly)
var monthlyNOI = totalMonthlyIncome – totalOperatingExpenses;
// 5. Total Expenses (Operating + Debt)
var totalMonthlyExpenses = totalOperatingExpenses + monthlyMortgage;
// 6. Cash Flow
var monthlyCashFlow = totalMonthlyIncome – totalMonthlyExpenses;
// 7. Returns
var annualCashFlow = monthlyCashFlow * 12;
var annualNOI = monthlyNOI * 12;
var totalCashInvested = downPaymentAmount + closingCosts;
var cashOnCash = 0;
if (totalCashInvested > 0) {
cashOnCash = (annualCashFlow / totalCashInvested) * 100;
}
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
// Display Results
document.getElementById('resultContainer').style.display = 'block';
// Helper for currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('resCashFlow').innerText = formatter.format(monthlyCashFlow);
document.getElementById('resCashFlow').style.color = monthlyCashFlow >= 0 ? '#27ae60' : '#c0392b';
document.getElementById('resNOI').innerText = formatter.format(monthlyNOI);
document.getElementById('resExpenses').innerText = formatter.format(totalMonthlyExpenses);
document.getElementById('resMortgage').innerText = formatter.format(monthlyMortgage);
document.getElementById('resCoC').innerText = cashOnCash.toFixed(2) + '%';
document.getElementById('resCoC').style.color = cashOnCash >= 0 ? '#27ae60' : '#c0392b';
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + '%';
}