Investing in real estate is a powerful way to build wealth, but the success of a rental property hinges on the numbers. This Rental Property Cash Flow Calculator helps investors determine if a potential deal will generate positive income or become a financial burden.
Key Metrics Explained
Monthly Cash Flow: This is your net profit after paying all operating expenses and debt service (mortgage). A positive cash flow means the property pays for itself and provides you with income.
Cash on Cash Return (CoC): This metric measures the annual return on the actual cash you invested (down payment + closing costs + rehab). It is calculated as: (Annual Cash Flow / Total Cash Invested) × 100. A CoC return of 8-12% is often considered a strong target for buy-and-hold investors.
Cap Rate (Capitalization Rate): Cap Rate evaluates the profitability of a property regardless of financing. It is calculated as (Net Operating Income / Purchase Price) × 100. It helps compare properties purely on their income-generating potential.
Net Operating Income (NOI): This is the total income the property generates minus all operating expenses (taxes, insurance, maintenance, vacancy), excluding mortgage payments.
How to Use This Calculator
To get the most accurate results, ensure you estimate expenses conservatively. Always include a buffer for Maintenance/CapEx (saving for big repairs like a roof or HVAC) and Vacancy (months where the unit sits empty). A common rule of thumb is to set aside 5-10% of rent for each.
Input your purchase price, loan terms, and expected rental income above to instantly visualize the financial viability of your next investment property.
function calculateCashFlow() {
// 1. Get Inputs using var
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 rehabCosts = parseFloat(document.getElementById('rpc_rehab').value) || 0;
var rate = parseFloat(document.getElementById('rpc_rate').value) || 0;
var termYears = parseFloat(document.getElementById('rpc_term').value) || 0;
var rent = parseFloat(document.getElementById('rpc_rent').value) || 0;
var taxAnnual = parseFloat(document.getElementById('rpc_tax').value) || 0;
var insuranceAnnual = parseFloat(document.getElementById('rpc_insurance').value) || 0;
var hoaMonthly = parseFloat(document.getElementById('rpc_hoa').value) || 0;
var maintMonthly = parseFloat(document.getElementById('rpc_maint').value) || 0;
var vacancyRate = parseFloat(document.getElementById('rpc_vacancy').value) || 0;
// 2. Calculate Loan Details
var downPayment = price * (downPercent / 100);
var loanAmount = price – downPayment;
var monthlyRate = (rate / 100) / 12;
var totalPayments = termYears * 12;
var monthlyPI = 0;
if (monthlyRate > 0 && totalPayments > 0) {
monthlyPI = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalPayments)) / (Math.pow(1 + monthlyRate, totalPayments) – 1);
} else if (totalPayments > 0) {
monthlyPI = loanAmount / totalPayments; // 0% interest case
}
// 3. Calculate Expenses
var vacancyMonthly = rent * (vacancyRate / 100);
var taxMonthly = taxAnnual / 12;
var insuranceMonthly = insuranceAnnual / 12;
// Operating Expenses (excluding mortgage)
var operatingExpensesMonthly = taxMonthly + insuranceMonthly + hoaMonthly + maintMonthly + vacancyMonthly;
// Total Expenses (including mortgage)
var totalExpensesMonthly = operatingExpensesMonthly + monthlyPI;
// 4. Calculate Key Metrics
var monthlyCashFlow = rent – totalExpensesMonthly;
var annualCashFlow = monthlyCashFlow * 12;
// NOI (Annual) – Excludes Mortgage
var annualNOI = (rent * 12) – (operatingExpensesMonthly * 12);
// Total Cash Invested
var totalCashInvested = downPayment + closingCosts + rehabCosts;
// Cash on Cash Return
var cashOnCash = 0;
if (totalCashInvested > 0) {
cashOnCash = (annualCashFlow / totalCashInvested) * 100;
}
// Cap Rate
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
// 5. Display Results
document.getElementById('res_mortgage').innerText = formatCurrency(monthlyPI);
document.getElementById('res_expenses').innerText = formatCurrency(totalExpensesMonthly);
document.getElementById('res_noi').innerText = formatCurrency(annualNOI / 12);
var cfElement = document.getElementById('res_cashflow');
cfElement.innerText = formatCurrency(monthlyCashFlow);
if (monthlyCashFlow >= 0) {
cfElement.classList.remove('rpc-neg');
cfElement.classList.add('rpc-highlight');
} else {
cfElement.classList.remove('rpc-highlight');
cfElement.classList.add('rpc-neg');
}
document.getElementById('res_coc').innerText = cashOnCash.toFixed(2) + "%";
document.getElementById('res_cap').innerText = capRate.toFixed(2) + "%";
document.getElementById('res_invested').innerText = formatCurrency(totalCashInvested);
// Show result section
document.getElementById('rpc_results').style.display = 'block';
}
function formatCurrency(num) {
return "$" + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}