Analyze your real estate investment deal instantly.
Purchase Details
Income & Expenses
Monthly Mortgage Payment:$0.00
Total Monthly Expenses:$0.00
Monthly Cash Flow:$0.00
Annual Cash Flow:$0.00
Total Initial Investment:$0.00
Cash on Cash ROI:0.00%
How to Use This Rental Property Cash Flow Calculator
Successful real estate investing relies on accurate math. This Rental Property Cash Flow Calculator helps investors determine if a potential property will generate positive income or become a financial liability. By inputting the purchase price, financing details, rental income, and operating expenses, you can instantly see your Cash on Cash Return on Investment (ROI).
Understanding the Key Metrics
When analyzing a rental property, there are three critical numbers generated by this tool:
Monthly Cash Flow: This is your profit after all bills are paid. It is calculated as: Gross Rent – (Mortgage + Taxes + Insurance + Maintenance + Vacancy Reserves). A positive number means passive income; a negative number means you are paying out of pocket to hold the property.
Cash on Cash ROI: This percentage tells you how hard your money is working. It compares your annual profit to the total cash you actually invested (down payment + closing costs). For example, if you invest $50,000 to buy a house and it generates $5,000 in annual profit, your Cash on Cash ROI is 10%.
Total Monthly Expenses: Many new investors only look at the mortgage payment. This calculator accounts for the "hidden" costs of ownership, including vacancy reserves (money set aside for when the unit is empty) and maintenance budgets.
What is a "Good" Cash Flow?
While every investor's goals are different, a general rule of thumb for buy-and-hold real estate is to aim for at least $100 to $200 per door in monthly net positive cash flow. This buffer ensures that unexpected repairs don't immediately turn your investment into a loss.
Regarding Cash on Cash ROI, many investors target a return between 8% and 12%, which often outperforms the average historical returns of the stock market, while also providing the benefits of property appreciation and tax depreciation.
Common Expenses to Watch Out For
When filling out the calculator, ensure you don't underestimate your expenses. Property taxes can rise, insurance premiums fluctuate, and maintenance is inevitable. This tool assumes a standard vacancy rate (often 5-8% depending on your local market) to give you a realistic picture of long-term performance.
function calculateCashFlow() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPayment = parseFloat(document.getElementById('downPayment').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var years = parseFloat(document.getElementById('loanTerm').value) || 0;
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
var rent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var annualTax = parseFloat(document.getElementById('propertyTax').value) || 0;
var annualInsurance = parseFloat(document.getElementById('insurance').value) || 0;
var monthlyMaint = parseFloat(document.getElementById('maintenance').value) || 0;
var vacancyPercent = parseFloat(document.getElementById('vacancyRate').value) || 0;
// 2. Calculate Mortgage
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = years * 12;
var mortgagePayment = 0;
if (loanAmount > 0 && interestRate > 0) {
mortgagePayment = loanAmount * monthlyRate * (Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else if (loanAmount > 0 && interestRate === 0) {
mortgagePayment = loanAmount / numberOfPayments;
}
// 3. Calculate Expenses
var monthlyTax = annualTax / 12;
var monthlyInsurance = annualInsurance / 12;
var monthlyVacancy = rent * (vacancyPercent / 100);
// Total Monthly Expenses (Operating Expenses + Mortgage)
var totalMonthlyExpenses = monthlyTax + monthlyInsurance + monthlyMaint + monthlyVacancy + mortgagePayment;
var operatingExpensesOnly = monthlyTax + monthlyInsurance + monthlyMaint + monthlyVacancy;
// 4. Calculate Cash Flow
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 5. Calculate Cash on Cash ROI
var totalInitialInvestment = downPayment + closingCosts;
var roi = 0;
if (totalInitialInvestment > 0) {
roi = (annualCashFlow / totalInitialInvestment) * 100;
}
// 6. Display Results
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
document.getElementById('resMortgage').innerText = formatter.format(mortgagePayment);
document.getElementById('resExpenses').innerText = formatter.format(totalMonthlyExpenses);
var cfMonthlyEl = document.getElementById('resMonthlyCashFlow');
cfMonthlyEl.innerText = formatter.format(monthlyCashFlow);
if(monthlyCashFlow >= 0) { cfMonthlyEl.className = "result-value positive"; }
else { cfMonthlyEl.className = "result-value negative"; }
var cfAnnualEl = document.getElementById('resAnnualCashFlow');
cfAnnualEl.innerText = formatter.format(annualCashFlow);
if(annualCashFlow >= 0) { cfAnnualEl.className = "result-value positive"; }
else { cfAnnualEl.className = "result-value negative"; }
document.getElementById('resInvestment').innerText = formatter.format(totalInitialInvestment);
var roiEl = document.getElementById('resROI');
roiEl.innerText = roi.toFixed(2) + "%";
if(roi >= 0) { roiEl.className = "result-value positive"; }
else { roiEl.className = "result-value negative"; }
// Show results section
document.getElementById('results').style.display = 'block';
}