Analyze your real estate investment potential instantly.
Purchase Information
Income & Occupancy
Operating Expenses
Investment Analysis
Monthly Principal & Interest:$0.00
Total Monthly Expenses:$0.00
Net Operating Income (Monthly):$0.00
Monthly Cash Flow:$0.00
Annual Returns
Net Operating Income (Annual):$0.00
Cap Rate:0.00%
Cash on Cash ROI:0.00%
Understanding Rental Property Cash Flow Analysis
Successful real estate investing relies heavily on accurate data analysis. Before purchasing a rental property, it is crucial to calculate the potential cash flow and return on investment (ROI). This Rental Property Cash Flow Calculator helps investors evaluate whether a property is a viable asset or a potential liability.
Key Metrics Explained
1. Monthly Cash Flow
Cash flow is the profit remaining after all expenses are paid. It is calculated by subtracting your total monthly expenses (mortgage, taxes, insurance, maintenance, vacancy reserves) from your gross monthly rental income. Positive cash flow means the property puts money in your pocket every month.
2. Net Operating Income (NOI)
NOI is a fundamental metric in real estate that determines the profitability of a property excluding financing costs. It represents the income generated after operating expenses but before the mortgage payment. It is calculated as: Gross Income – Operating Expenses.
3. Capitalization Rate (Cap Rate)
The Cap Rate measures the natural rate of return of a real estate investment assuming it was bought with cash. It allows you to compare different properties regardless of how they are financed. A higher cap rate generally indicates a higher potential return, though often with higher risk. Formula: (Annual NOI / Purchase Price) × 100.
4. Cash on Cash Return (CoC ROI)
This is arguably the most important metric for investors using leverage (mortgages). It measures the annual cash return relative to the actual cash invested (down payment + closing costs). A CoC return of 8-12% is often considered a solid benchmark for rental properties.
How to Use This Calculator
Purchase Information: Enter the negotiated price, your down payment percentage, and loan details. Don't forget closing costs, which typically range from 2-5% of the purchase price.
Income & Vacancy: Input the expected monthly rent. The vacancy rate accounts for periods when the unit is empty; 5-8% is a standard industry average.
Operating Expenses: Be realistic. Include property taxes, insurance, HOA fees, and allocate percentages for maintenance (repairs), property management (usually 8-10% if professional), and capital expenditures (roof, HVAC replacement funds).
Using conservative estimates for expenses and vacancy will help protect you from overestimating potential profits. Always verify your numbers with local market data.
function calculateRental() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('rpc_price').value) || 0;
var downPercent = parseFloat(document.getElementById('rpc_down').value) || 0;
var closingCosts = parseFloat(document.getElementById('rpc_closing').value) || 0;
var interestRate = parseFloat(document.getElementById('rpc_rate').value) || 0;
var loanYears = parseFloat(document.getElementById('rpc_term').value) || 0;
var rent = parseFloat(document.getElementById('rpc_rent').value) || 0;
var vacancyRate = parseFloat(document.getElementById('rpc_vacancy').value) || 0;
var annualTax = parseFloat(document.getElementById('rpc_tax').value) || 0;
var annualIns = parseFloat(document.getElementById('rpc_ins').value) || 0;
var monthlyHOA = parseFloat(document.getElementById('rpc_hoa').value) || 0;
var maintPercent = parseFloat(document.getElementById('rpc_maint').value) || 0;
var mgmtPercent = parseFloat(document.getElementById('rpc_mgmt').value) || 0;
var capexPercent = parseFloat(document.getElementById('rpc_capex').value) || 0;
// 2. Calculations
// Loan Calculations
var downPaymentAmt = price * (downPercent / 100);
var loanAmount = price – downPaymentAmt;
var monthlyRate = (interestRate / 100) / 12;
var numPayments = loanYears * 12;
var monthlyMortgage = 0;
if (interestRate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
monthlyMortgage = loanAmount / numPayments;
}
if (loanYears === 0) monthlyMortgage = 0; // Cash purchase scenario safeguard
// Income Calculations
var vacancyLoss = rent * (vacancyRate / 100);
var effectiveGrossIncome = rent – vacancyLoss;
// Operating Expenses (Monthly)
var taxMo = annualTax / 12;
var insMo = annualIns / 12;
var maintMo = rent * (maintPercent / 100);
var mgmtMo = rent * (mgmtPercent / 100);
var capexMo = rent * (capexPercent / 100);
var totalOperatingExpensesMo = taxMo + insMo + monthlyHOA + maintMo + mgmtMo + capexMo;
// NOI
var monthlyNOI = effectiveGrossIncome – totalOperatingExpensesMo;
var annualNOI = monthlyNOI * 12;
// Total Expenses (including debt service)
var totalMonthlyExpenses = totalOperatingExpensesMo + monthlyMortgage;
// Cash Flow
var monthlyCashFlow = effectiveGrossIncome – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Returns
var totalCashInvested = downPaymentAmt + closingCosts;
var capRate = (annualNOI / price) * 100;
var cashOnCash = 0;
if (totalCashInvested > 0) {
cashOnCash = (annualCashFlow / totalCashInvested) * 100;
}
// 3. Display Results
document.getElementById('res_mortgage').innerText = formatCurrency(monthlyMortgage);
document.getElementById('res_expenses').innerText = formatCurrency(totalMonthlyExpenses);
document.getElementById('res_noi_mo').innerText = formatCurrency(monthlyNOI);
document.getElementById('res_noi_yr').innerText = formatCurrency(annualNOI);
var cfElement = document.getElementById('res_cashflow');
cfElement.innerText = formatCurrency(monthlyCashFlow);
if (monthlyCashFlow >= 0) {
cfElement.className = "rpc-result-value rpc-highlight";
} else {
cfElement.className = "rpc-result-value rpc-highlight-neg";
}
document.getElementById('res_caprate').innerText = capRate.toFixed(2) + "%";
var cocElement = document.getElementById('res_coc');
cocElement.innerText = cashOnCash.toFixed(2) + "%";
if (cashOnCash >= 0) {
cocElement.className = "rpc-result-value rpc-highlight";
} else {
cocElement.className = "rpc-result-value rpc-highlight-neg";
}
// Show results container
document.getElementById('rpcResults').style.display = 'block';
}
function formatCurrency(num) {
return "$" + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}