Calculating cash flow is the fundamental step in evaluating any real estate investment. Cash flow is the net amount of money moving in and out of a business—in this case, your rental property.
Positive cash flow means your rental income exceeds your mortgage and operating expenses, providing you with passive income. Negative cash flow implies you are losing money every month to hold the property, which is generally a risky strategy unless you are banking heavily on appreciation.
Key Metrics Explained
Net Monthly Cash Flow: This is your "take-home" money from the property before income taxes. It is calculated as: Gross Rent – (Mortgage + Taxes + Insurance + HOA + Vacancy/Maintenance).
Cash on Cash Return (CoC): This is arguably the most important metric for investors. It measures the annual return on the actual cash you invested (Down Payment + Closing Costs), rather than the total loan amount. It allows you to compare real estate returns against other investments like stocks or bonds.
How to Use This Calculator
Purchase Price & Loan Details: Enter the price of the home and your financing terms. A typical investment loan requires 20-25% down.
Rental Income: Estimate fair market rent. Check local listings (Zillow, Craigslist) for comparable properties.
Expenses: Be realistic. Don't forget to account for maintenance and vacancy. A common rule of thumb is setting aside 10-15% of rent for repairs and vacancy combined.
What is a Good Cash on Cash Return?
While this varies by market and investor goals, many real estate investors aim for a Cash on Cash return of 8-12%. In highly appreciative markets, investors might accept a lower return (4-6%), while in stable cash-flow markets, they might demand 15% or higher.
function calculateRentalResults() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('rp-price').value) || 0;
var downPayment = parseFloat(document.getElementById('rp-down').value) || 0;
var closingCosts = parseFloat(document.getElementById('rp-closing').value) || 0;
var interestRate = parseFloat(document.getElementById('rp-rate').value) || 0;
var loanTermYears = parseFloat(document.getElementById('rp-term').value) || 0;
var monthlyRent = parseFloat(document.getElementById('rp-rent').value) || 0;
var annualTax = parseFloat(document.getElementById('rp-tax').value) || 0;
var annualInsurance = parseFloat(document.getElementById('rp-insurance').value) || 0;
var monthlyHOA = parseFloat(document.getElementById('rp-hoa').value) || 0;
var maintenanceRate = parseFloat(document.getElementById('rp-maint').value) || 0;
// 2. Calculate Mortgage Payment
var loanAmount = price – downPayment;
var monthlyMortgage = 0;
if (loanAmount > 0 && loanTermYears > 0) {
if (interestRate === 0) {
monthlyMortgage = loanAmount / (loanTermYears * 12);
} else {
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTermYears * 12;
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
}
// 3. Calculate Monthly Expenses
var monthlyTax = annualTax / 12;
var monthlyInsurance = annualInsurance / 12;
var maintenanceCost = monthlyRent * (maintenanceRate / 100);
var totalOperatingExpenses = monthlyTax + monthlyInsurance + monthlyHOA + maintenanceCost;
var totalMonthlyOutflow = monthlyMortgage + totalOperatingExpenses;
// 4. Calculate Results
var monthlyCashFlow = monthlyRent – totalMonthlyOutflow;
var annualCashFlow = monthlyCashFlow * 12;
var totalInvestment = downPayment + closingCosts;
var cashOnCashReturn = 0;
if (totalInvestment > 0) {
cashOnCashReturn = (annualCashFlow / totalInvestment) * 100;
}
// 5. Update UI
document.getElementById('res-mortgage').innerText = formatCurrency(monthlyMortgage);
document.getElementById('res-opex').innerText = formatCurrency(totalOperatingExpenses);
document.getElementById('res-outflow').innerText = formatCurrency(totalMonthlyOutflow);
var cashFlowElement = document.getElementById('res-cashflow');
cashFlowElement.innerText = formatCurrency(monthlyCashFlow);
if(monthlyCashFlow >= 0) {
cashFlowElement.style.color = '#27ae60';
} else {
cashFlowElement.style.color = '#c0392b';
}
var cocElement = document.getElementById('res-coc');
cocElement.innerText = cashOnCashReturn.toFixed(2) + '%';
if(cashOnCashReturn >= 0) {
cocElement.style.color = '#27ae60';
} else {
cocElement.style.color = '#c0392b';
}
document.getElementById('res-investment').innerText = formatCurrency(totalInvestment);
// Show results section
document.getElementById('rp-results-container').style.display = 'block';
}
function formatCurrency(num) {
return '$' + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}