Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property doesn't guarantee profit. To ensure a sound investment, you must analyze the numbers accurately. This Rental Property Cash Flow Calculator helps investors determine the viability of a potential rental property by calculating key metrics like Monthly Cash Flow, Cash on Cash Return (CoC), and Cap Rate.
What is Cash Flow?
Cash flow is the net amount of cash moving in and out of a business. In real estate, it represents the profit you bring in each month after all operating expenses and mortgage payments have been made. Positive cash flow means the property is putting money in your pocket, while negative cash flow means you are losing money every month to hold the asset.
The Formula: Cash Flow = Total Income – Total Expenses – Debt Service (Mortgage)
Key Metrics Explained
Net Operating Income (NOI): This is your total income minus operating expenses (taxes, insurance, maintenance, vacancy), but before mortgage payments. It measures the profitability of the property itself, excluding financing costs.
Cap Rate (Capitalization Rate): Calculated as (Annual NOI / Purchase Price) × 100. This percentage helps you compare the return of different properties regardless of how they are financed. A higher Cap Rate generally indicates a better return, though often with higher risk.
Cash on Cash Return (CoC): This is arguably the most important metric for investors using leverage. It measures the annual cash return on the actual cash you invested (Down Payment + Closing Costs + Rehab). Calculated as (Annual Cash Flow / Total Cash Invested) × 100.
Example Scenario
Let's say you buy a property for $250,000 with 20% down ($50,000). Your loan is $200,000 at 6.5% interest. If the property rents for $2,200/month:
Mortgage Payment: Approximately $1,264/month.
Operating Expenses: Taxes, Insurance, HOA, and Maintenance might total $600/month.
Using this calculator allows you to tweak variables—like negotiating a lower purchase price or finding cheaper insurance—to see how they impact your bottom line.
function calculateRentalMetrics() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPercent = parseFloat(document.getElementById('downPaymentPercent').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var rehabCosts = parseFloat(document.getElementById('rehabCosts').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var termYears = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value);
var propertyTaxYear = parseFloat(document.getElementById('propertyTax').value);
var insuranceYear = parseFloat(document.getElementById('insurance').value);
var hoaMonthly = parseFloat(document.getElementById('hoaFee').value);
var maintPercent = parseFloat(document.getElementById('maintenance').value);
var mgmtPercent = parseFloat(document.getElementById('managementFee').value);
// Validation
if (isNaN(price) || isNaN(monthlyRent) || isNaN(interestRate)) {
alert("Please enter valid numbers for Price, Rent, and Interest Rate.");
return;
}
// 2. Initial Calculations
var downPayment = price * (downPercent / 100);
var loanAmount = price – downPayment;
var totalCashInvested = downPayment + closingCosts + rehabCosts;
// 3. Mortgage Payment Calculation (P&I)
var monthlyRate = (interestRate / 100) / 12;
var numPayments = termYears * 12;
var mortgagePayment = 0;
if (interestRate === 0) {
mortgagePayment = loanAmount / numPayments;
} else {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
// 4. Income & Expense Calculations
var vacancyCost = monthlyRent * (vacancyRate / 100);
var effectiveGrossIncome = monthlyRent – vacancyCost;
var maintenanceCost = monthlyRent * (maintPercent / 100);
var managementCost = monthlyRent * (mgmtPercent / 100);
var totalMonthlyExpenses = (propertyTaxYear / 12) + (insuranceYear / 12) + hoaMonthly + maintenanceCost + managementCost;
// 5. Metric Calculations
var monthlyNOI = effectiveGrossIncome – totalMonthlyExpenses; // Net Operating Income
var monthlyCashFlow = monthlyNOI – mortgagePayment;
var annualCashFlow = monthlyCashFlow * 12;
var annualNOI = monthlyNOI * 12;
var cocReturn = (annualCashFlow / totalCashInvested) * 100;
var capRate = (annualNOI / price) * 100;
// 6. Display Results
// Helper for formatting currency
var fmtMoney = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
document.getElementById('monthlyCashFlow').innerHTML = fmtMoney.format(monthlyCashFlow);
document.getElementById('monthlyNOI').innerHTML = fmtMoney.format(monthlyNOI);
document.getElementById('mortgagePayment').innerHTML = fmtMoney.format(mortgagePayment);
document.getElementById('totalExpenses').innerHTML = fmtMoney.format(totalMonthlyExpenses + vacancyCost); // Including vacancy in visual total expenses usually helpful
document.getElementById('totalCashInvested').innerHTML = fmtMoney.format(totalCashInvested);
document.getElementById('cocReturn').innerHTML = cocReturn.toFixed(2) + "%";
document.getElementById('capRate').innerHTML = capRate.toFixed(2) + "%";
// Styling logic for positive/negative flow
var cashFlowElement = document.getElementById('monthlyCashFlow');
if (monthlyCashFlow >= 0) {
cashFlowElement.className = "result-value highlight-result";
cashFlowElement.style.color = "#27ae60";
} else {
cashFlowElement.className = "result-value highlight-result bad-result";
cashFlowElement.style.color = "#c0392b";
}
// Show results container
document.getElementById('results').style.display = "block";
// Scroll to results
document.getElementById('results').scrollIntoView({ behavior: 'smooth' });
}