Investing in real estate is one of the most reliable ways to build wealth, but not every property is a good deal. To ensure your investment is sound, you need to accurately analyze the numbers. Our Rental Property Cash Flow & ROI Calculator helps investors determine the profitability of a potential purchase by accounting for income, expenses, and financing costs.
Why Cash Flow is King
Cash flow is the net amount of money moving into and out of a business or investment. In real estate, positive cash flow means the rental income exceeds all expenses (mortgage, taxes, insurance, repairs). This "profit" provides passive income and financial buffer against vacancies.
Many new investors make the mistake of only looking at the rent versus the mortgage payment. However, "phantom" costs like vacancy, maintenance, and Capital Expenditures (CapEx) can quickly turn a profitable looking property into a money pit.
Key Metrics Calculated
Net Operating Income (NOI): This is the annual income generated by the property after deducting all operating expenses but before deducting taxes and financing costs. It represents the inherent profitability of the property itself.
Cash on Cash ROI: This is arguably the most important metric for investors using leverage. It measures the annual pre-tax cash flow divided by the total cash invested (down payment, closing costs, rehab). A CoC ROI of 8-12% is often considered a strong target.
Cap Rate: The Capitalization Rate measures the rate of return on a real estate investment property based on the income that the property is expected to generate. It is calculated by dividing the NOI by the property asset value. It helps compare properties regardless of how they are financed.
How to Use This Calculator
To get the most accurate results, ensure you are realistic with your expense estimates:
Vacancy Rate: No property is occupied 100% of the time. Use 5-8% for standard residential areas.
Maintenance & CapEx: Roofs leak and water heaters break. Setting aside 10-15% of rent for repairs and capital expenditures is a prudent safety net.
Management Fees: Even if you plan to self-manage, it's wise to budget 8-10% for property management to ensure the deal still works if you decide to hire a professional later.
Frequently Asked Questions
What is a good Cash on Cash return for a rental property?
While this varies by market and strategy, most buy-and-hold investors aim for a Cash on Cash return between 8% and 12%. In highly appreciative markets, investors might accept lower cash flow (4-6%) in exchange for potential equity growth.
What is the difference between Maintenance and CapEx?
Maintenance refers to routine repairs (fixing a toilet, painting a wall). CapEx (Capital Expenditures) refers to major replacements (new roof, HVAC system, flooring) that occur infrequently but are costly. Both must be budgeted for monthly.
Does this calculator include tax benefits?
This calculator focuses on pre-tax cash flow. Real estate offers significant tax advantages like depreciation, which can improve your effective return, but these should be discussed with a tax professional.
function calculateRentalROI() {
// 1. Get Inputs
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 interestRate = parseFloat(document.getElementById('rpc-rate').value) || 0;
var termYears = parseFloat(document.getElementById('rpc-term').value) || 0;
var monthlyRent = parseFloat(document.getElementById('rpc-rent').value) || 0;
var vacancyPercent = parseFloat(document.getElementById('rpc-vacancy').value) || 0;
var annualTax = parseFloat(document.getElementById('rpc-tax').value) || 0;
var annualInsurance = parseFloat(document.getElementById('rpc-insurance').value) || 0;
var maintenancePercent = parseFloat(document.getElementById('rpc-maintenance').value) || 0;
var hoa = parseFloat(document.getElementById('rpc-hoa').value) || 0;
var managementPercent = parseFloat(document.getElementById('rpc-management').value) || 0;
var capexPercent = parseFloat(document.getElementById('rpc-capex').value) || 0;
// 2. Calculate Investment Details
var downPayment = price * (downPercent / 100);
var loanAmount = price – downPayment;
var totalCashInvested = downPayment + closingCosts + rehabCosts;
// 3. Calculate Mortgage (P&I)
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyMortgage = 0;
if (loanAmount > 0 && interestRate > 0 && termYears > 0) {
var monthlyRate = (interestRate / 100) / 12;
var numPayments = termYears * 12;
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else if (loanAmount > 0 && interestRate === 0) {
monthlyMortgage = loanAmount / (termYears * 12);
}
// 4. Calculate Operating Expenses
var monthlyVacancy = monthlyRent * (vacancyPercent / 100);
var monthlyMaintenance = monthlyRent * (maintenancePercent / 100);
var monthlyManagement = monthlyRent * (managementPercent / 100);
var monthlyCapex = monthlyRent * (capexPercent / 100);
var monthlyTax = annualTax / 12;
var monthlyInsurance = annualInsurance / 12;
var totalOperatingExpenses = monthlyTax + monthlyInsurance + monthlyMaintenance + monthlyVacancy + monthlyCapex + monthlyManagement + hoa;
var totalExpensesWithMortgage = totalOperatingExpenses + monthlyMortgage;
// 5. Calculate Metrics
var noiMonthly = monthlyRent – totalOperatingExpenses;
var noiAnnual = noiMonthly * 12;
var cashFlowMonthly = monthlyRent – totalExpensesWithMortgage;
var cashFlowAnnual = cashFlowMonthly * 12;
var cocRoi = 0;
if (totalCashInvested > 0) {
cocRoi = (cashFlowAnnual / totalCashInvested) * 100;
}
var capRate = 0;
var totalAssetValue = price + rehabCosts; // Assuming value matches price + rehab immediately
if (totalAssetValue > 0) {
capRate = (noiAnnual / totalAssetValue) * 100;
}
// 6. Format and Display Results
function formatCurrency(num) {
return '$' + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}
document.getElementById('res-investment').innerText = formatCurrency(totalCashInvested);
document.getElementById('res-mortgage').innerText = formatCurrency(monthlyMortgage);
document.getElementById('res-expenses').innerText = formatCurrency(totalExpensesWithMortgage);
document.getElementById('res-noi').innerText = formatCurrency(noiMonthly);
var cashFlowEl = document.getElementById('res-cashflow');
cashFlowEl.innerText = formatCurrency(cashFlowMonthly);
cashFlowEl.className = cashFlowMonthly >= 0 ? "rpc-result-value rpc-highlight" : "rpc-result-value rpc-negative";
var annualCashFlowEl = document.getElementById('res-annual-cashflow');
annualCashFlowEl.innerText = formatCurrency(cashFlowAnnual);
annualCashFlowEl.className = cashFlowAnnual >= 0 ? "rpc-result-value" : "rpc-result-value rpc-negative";
var roiEl = document.getElementById('res-roi');
roiEl.innerText = cocRoi.toFixed(2) + '%';
roiEl.className = cocRoi >= 0 ? "rpc-result-value rpc-highlight" : "rpc-result-value rpc-negative";
document.getElementById('res-caprate').innerText = capRate.toFixed(2) + '%';
// Show results container
document.getElementById('rpc-results-box').style.display = 'block';
}