Analyze your real estate investment performance instantly.
Purchase Information
Income & Expenses
Monthly Cash Flow
$0
Cash on Cash ROI
0%
Cap Rate
0%
Monthly Breakdown
Effective Gross Income:$0
Mortgage Payment (P&I):$0
Operating Expenses:$0
Net Operating Income (NOI):$0
How to Analyze Rental Property Deals
Understanding the numbers behind a rental property is crucial for real estate success. This Rental Property Cash Flow Calculator helps investors determine the profitability of a potential purchase by analyzing income, expenses, and financing costs.
Key Metrics Explained
Cash Flow: The net amount of cash moving in or out of the investment each month after all debts and operating expenses are paid. Positive cash flow is the primary goal for buy-and-hold investors.
Cash on Cash Return (CoC ROI): This measures the annual return on the actual cash you invested (down payment + closing costs). A CoC return of 8-12% is generally considered good in many markets.
Cap Rate (Capitalization Rate): This metric calculates the natural rate of return on the property assuming it was bought with all cash. It helps compare properties regardless of financing methods.
Net Operating Income (NOI): The total income generated by the property minus all operating expenses, excluding mortgage payments. This figure is critical for calculating the Cap Rate.
Common Operating Expenses
When estimating expenses, don't forget to account for:
Vacancy: A buffer (usually 5-8%) for times when the unit is empty.
Maintenance: Routine repairs and "CapEx" (Capital Expenditures) for big items like roofs or HVAC.
Property Management: Usually 8-10% of monthly rent if you hire a professional manager.
Use this tool to stress-test your investment. Try increasing the vacancy rate or interest rate to see if the property still cash flows under less-than-ideal conditions.
function calculateCashFlow() {
// 1. Get Inputs
var purchasePrice = parseFloat(document.getElementById('rpcPurchasePrice').value) || 0;
var downPaymentPercent = parseFloat(document.getElementById('rpcDownPayment').value) || 0;
var interestRate = parseFloat(document.getElementById('rpcInterestRate').value) || 0;
var loanTermYears = parseFloat(document.getElementById('rpcLoanTerm').value) || 0;
var closingCosts = parseFloat(document.getElementById('rpcClosingCosts').value) || 0;
var monthlyRent = parseFloat(document.getElementById('rpcMonthlyRent').value) || 0;
var vacancyRate = parseFloat(document.getElementById('rpcVacancy').value) || 0;
var annualPropTax = parseFloat(document.getElementById('rpcPropTax').value) || 0;
var annualInsurance = parseFloat(document.getElementById('rpcInsurance').value) || 0;
var annualMaintenance = parseFloat(document.getElementById('rpcMaintenance').value) || 0;
var mgmtFeePercent = parseFloat(document.getElementById('rpcMgmtFee').value) || 0;
// 2. Loan Calculations
var downPaymentAmount = purchasePrice * (downPaymentPercent / 100);
var loanAmount = purchasePrice – downPaymentAmount;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTermYears * 12;
var monthlyMortgage = 0;
if (loanAmount > 0 && monthlyRate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else if (loanAmount > 0 && monthlyRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
}
// 3. Income Calculations
var vacancyLoss = monthlyRent * (vacancyRate / 100);
var effectiveMonthlyIncome = monthlyRent – vacancyLoss;
// 4. Expense Calculations
var monthlyTax = annualPropTax / 12;
var monthlyInsurance = annualInsurance / 12;
var monthlyMaintenance = annualMaintenance / 12;
var monthlyMgmtFee = effectiveMonthlyIncome * (mgmtFeePercent / 100);
var totalOperatingExpenses = monthlyTax + monthlyInsurance + monthlyMaintenance + monthlyMgmtFee;
var totalMonthlyOutflow = totalOperatingExpenses + monthlyMortgage;
// 5. Metric Calculations
var monthlyCashFlow = effectiveMonthlyIncome – totalMonthlyOutflow;
var annualCashFlow = monthlyCashFlow * 12;
var totalInitialInvestment = downPaymentAmount + closingCosts;
var cashOnCashReturn = 0;
if (totalInitialInvestment > 0) {
cashOnCashReturn = (annualCashFlow / totalInitialInvestment) * 100;
}
var annualNOI = (effectiveMonthlyIncome * 12) – (totalOperatingExpenses * 12);
var capRate = 0;
if (purchasePrice > 0) {
capRate = (annualNOI / purchasePrice) * 100;
}
// 6. Formatting Helper
function formatMoney(num) {
return '$' + num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
function formatPercent(num) {
return num.toFixed(2) + '%';
}
// 7. Display Results
var cashFlowEl = document.getElementById('resMonthlyCashFlow');
cashFlowEl.innerText = formatMoney(monthlyCashFlow);
if(monthlyCashFlow < 0) {
cashFlowEl.classList.add('negative');
} else {
cashFlowEl.classList.remove('negative');
}
document.getElementById('resCashOnCash').innerText = formatPercent(cashOnCashReturn);
document.getElementById('resCapRate').innerText = formatPercent(capRate);
document.getElementById('resGrossIncome').innerText = formatMoney(effectiveMonthlyIncome);
document.getElementById('resMortgage').innerText = formatMoney(monthlyMortgage);
document.getElementById('resExpenses').innerText = formatMoney(totalOperatingExpenses);
document.getElementById('resNOI').innerText = formatMoney(annualNOI / 12) + "/mo";
document.getElementById('rpcResults').classList.add('visible');
}