Rental Property Cash Flow Calculator
Accurately calculating rental property cash flow is the bedrock of successful real estate investing. Positive cash flow ensures your investment covers its own costs and provides passive income, while negative cash flow means you are paying out of pocket to hold the asset.
This specific calculator goes beyond simple income minus expenses. It helps you determine critical metrics like Net Operating Income (NOI) and Cash-on-Cash Return, allowing you to evaluate the true profitability of a potential rental property factoring in your initial investment.
Property Inputs
Monthly Income
Monthly Expenses
Initial Investment
Financial Results
Understanding Your Rental Profitability Metrics
Monthly Cash Flow: This is your immediate "take-home" profit every month after all bills, including the mortgage, are paid. A negative number here means you must contribute personal funds to keep the property running.
Net Operating Income (NOI): This metric looks at the property's ability to generate income significantly unrelated to financing costs. It is calculated by subtracting all operating expenses (property tax, insurance, management, repairs, HOA) from the gross income, but it excludes the mortgage principal and interest payments. Lenders heavily rely on NOI to determine the value of an income property.
Cash-on-Cash Return (CoC): This is arguably the most important metric for investors using leverage (a mortgage). It measures the annual return on the actual cash you invested (down payment, closing costs, and initial repairs), rather than the total purchase price of the property. A 10% CoC return means you are earning $0.10 annually for every $1.00 you invested out of pocket.
Example Scenario
Imagine you purchase a property where your total cash invested is $60,000. You rent it for $2,500/month. Your total monthly expenses, including a $1,200 mortgage, taxes, insurance, and reserves, sum up to $2,100/month.
- Your Monthly Cash Flow would be $2,500 – $2,100 = $400.
- Your Annual Cash Flow would be $400 x 12 = $4,800.
- Your Cash-on-Cash Return would be ($4,800 / $60,000) = 8.00%.
Use the calculator above to test your own scenarios and ensure your investment meets your financial goals.
function calculateRentalProfit() { // 1. Get Inputs with validation to handle empty fields or NaN var rentIncome = parseFloat(document.getElementById("rentIncome").value) || 0; var otherIncome = parseFloat(document.getElementById("otherIncome").value) || 0; var mortgagePayment = parseFloat(document.getElementById("mortgagePayment").value) || 0; var propertyTax = parseFloat(document.getElementById("propertyTax").value) || 0; var insurance = parseFloat(document.getElementById("insurance").value) || 0; var pmRate = parseFloat(document.getElementById("pmRate").value) || 0; var capexRate = parseFloat(document.getElementById("capexRate").value) || 0; var hoaFees = parseFloat(document.getElementById("hoaFees").value) || 0; var totalCashInvested = parseFloat(document.getElementById("totalCashInvested").value) || 0; // 2. Calculate Gross Monthly Income var totalMonthlyIncome = rentIncome + otherIncome; // 3. Calculate Percentage-based Variable Expenses var pmCost = totalMonthlyIncome * (pmRate / 100); var capexCost = totalMonthlyIncome * (capexRate / 100); // 4. Calculate Total Monthly Expenses (Operating + Debt Service) var totalOperatingExpenses = propertyTax + insurance + pmCost + capexCost + hoaFees; var totalMonthlyExpenses = totalOperatingExpenses + mortgagePayment; // 5. Calculate Cash Flow var monthlyCashFlow = totalMonthlyIncome – totalMonthlyExpenses; var annualCashFlow = monthlyCashFlow * 12; // 6. Calculate Annual Net Operating Income (NOI) // NOI represents income after operating expenses but BEFORE mortgage payments. var annualNOI = (totalMonthlyIncome – totalOperatingExpenses) * 12; // 7. Calculate Cash-on-Cash Return var cocReturn = 0; // Avoid division by zero if no cash is invested (e.g. 100% financing or error) if (totalCashInvested > 0) { cocReturn = (annualCashFlow / totalCashInvested) * 100; } // 8. Update Output Results with formatting // Helper function for formatting currency function formatCurrency(amount) { return "$" + amount.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,'); } document.getElementById("resultTotalIncome").innerHTML = formatCurrency(totalMonthlyIncome); document.getElementById("resultTotalExpenses").innerHTML = formatCurrency(totalMonthlyExpenses); // For monthly cash flow, change color based on positive/negative var monthlyFlowEl = document.getElementById("resultMonthlyCashFlow"); monthlyFlowEl.innerHTML = formatCurrency(monthlyCashFlow); if (monthlyCashFlow >= 0) { monthlyFlowEl.style.color = "#28a745"; // Green for positive } else { monthlyFlowEl.style.color = "#dc3545"; // Red for negative } document.getElementById("resultAnnualCashFlow").innerHTML = formatCurrency(annualCashFlow); document.getElementById("resultAnnualNOI").innerHTML = formatCurrency(annualNOI); document.getElementById("resultCocReturn").innerHTML = cocReturn.toFixed(2) + "%"; }