Calculating cash flow is the fundamental step in evaluating a real estate investment. Positive cash flow means the property generates more income than it costs to own and operate, providing you with a steady stream of passive income. Negative cash flow implies the property requires monthly contributions from your pocket to sustain, which is generally a riskier investment strategy.
How to Use This Calculator
This calculator breaks down the profitability of a rental property into three core metrics:
Monthly Cash Flow: Your net profit each month after all bills, mortgage, and reserves (like maintenance and vacancy) are paid.
Cash on Cash Return (CoC): A percentage that measures the annual return on the actual cash you invested (down payment + closing costs). This allows you to compare real estate returns against other investment vehicles like stocks.
Cap Rate: Measures the property's natural rate of return assuming it was bought with all cash. It helps compare properties regardless of financing.
Key Input Definitions
To get the most accurate result, ensure you account for "hidden" costs:
Vacancy Rate: Properties are rarely occupied 100% of the time. A standard conservative estimate is 5-8% (representing about 2-3 weeks of vacancy per year).
Maintenance: Even if the house is new, things break. Budgeting $100-$200 or 10% of rent helps build a reserve for future repairs.
Closing Costs: Don't forget the fees paid at purchase, including title insurance, origination fees, and inspections, as these affect your total cash invested.
Interpreting Your Results
A "good" cash flow depends on your goals. Many investors aim for $100-$200 per door per month in pure profit. For Cash on Cash Return, a target of 8-12% is often considered a solid benchmark in many markets, outperforming average stock market returns while gaining equity in the property.
function calculateRental() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('rpc-price').value) || 0;
var closingCosts = parseFloat(document.getElementById('rpc-closing').value) || 0;
var downPercent = parseFloat(document.getElementById('rpc-down').value) || 0;
var interestRate = parseFloat(document.getElementById('rpc-interest').value) || 0;
var loanTermYears = parseFloat(document.getElementById('rpc-term').value) || 0;
var rent = parseFloat(document.getElementById('rpc-rent').value) || 0;
var otherIncome = parseFloat(document.getElementById('rpc-other-income').value) || 0;
var yearlyTax = parseFloat(document.getElementById('rpc-tax').value) || 0;
var yearlyIns = parseFloat(document.getElementById('rpc-insurance').value) || 0;
var monthlyHoa = parseFloat(document.getElementById('rpc-hoa').value) || 0;
var monthlyMaint = parseFloat(document.getElementById('rpc-maint').value) || 0;
var vacancyRate = parseFloat(document.getElementById('rpc-vacancy').value) || 0;
// 2. Calculate Mortgage (P&I)
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
var monthlyInterestRate = (interestRate / 100) / 12;
var numberOfPayments = loanTermYears * 12;
var monthlyMortgage = 0;
if (loanAmount > 0 && interestRate > 0) {
monthlyMortgage = loanAmount * (monthlyInterestRate * Math.pow(1 + monthlyInterestRate, numberOfPayments)) / (Math.pow(1 + monthlyInterestRate, numberOfPayments) – 1);
} else if (loanAmount > 0 && interestRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
}
// 3. Calculate Expenses
var monthlyTax = yearlyTax / 12;
var monthlyIns = yearlyIns / 12;
var vacancyCost = rent * (vacancyRate / 100);
var operatingExpenses = monthlyTax + monthlyIns + monthlyHoa + monthlyMaint + vacancyCost;
var totalMonthlyExpenses = operatingExpenses + monthlyMortgage;
// 4. Calculate Income
var totalMonthlyIncome = rent + otherIncome;
// 5. Calculate Metrics
var monthlyCashFlow = totalMonthlyIncome – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
var totalInvested = downPaymentAmount + closingCosts;
var cocReturn = 0;
if (totalInvested > 0) {
cocReturn = (annualCashFlow / totalInvested) * 100;
}
var noi = (totalMonthlyIncome * 12) – (operatingExpenses * 12); // Net Operating Income (Annual)
var capRate = 0;
if (price > 0) {
capRate = (noi / price) * 100;
}
// 6. Display Results
document.getElementById('rpc-results-area').style.display = 'block';
document.getElementById('res-income').innerHTML = '$' + totalMonthlyIncome.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res-expenses').innerHTML = '$' + totalMonthlyExpenses.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res-mortgage').innerHTML = '$' + monthlyMortgage.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
var cfElement = document.getElementById('res-cashflow');
cfElement.innerHTML = '$' + monthlyCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Style cash flow color
var cfRow = document.getElementById('row-cashflow');
if (monthlyCashFlow >= 0) {
cfRow.classList.remove('negative');
cfRow.classList.add('highlight');
} else {
cfRow.classList.remove('highlight');
cfRow.classList.add('negative');
}
document.getElementById('res-coc').innerHTML = cocReturn.toFixed(2) + '%';
document.getElementById('res-cap').innerHTML = capRate.toFixed(2) + '%';
document.getElementById('res-invested').innerHTML = '$' + totalInvested.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
}