Calculating cash flow is the fundamental step in evaluating any real estate investment. "Cash flow" represents the net amount of money moving in or out of your rental business each month. Positive cash flow means the property generates more income than it costs to operate, while negative cash flow implies you must contribute personal funds to keep the property running.
This calculator helps investors determine the viability of a potential purchase by breaking down mortgage costs, operating expenses, and long-term return metrics like Cash on Cash (CoC) return and Cap Rate.
Key Metrics Explained
1. Net Operating Income (NOI)
Formula:Total Income - Operating Expenses (Excluding Mortgage Payments)
NOI is a critical metric because it measures the profitability of the property itself, independent of how you financed it. It includes rental income minus taxes, insurance, maintenance, HOA fees, and vacancy reserves. Banks often look at NOI to determine if a property generates enough income to cover the debt.
2. Cash Flow
Formula:NOI - Mortgage Debt Service
This is your "take-home" profit. While NOI ignores debt, Cash Flow is directly impacted by your loan terms. A property might have a strong NOI but negative cash flow if the mortgage leverage is too high or interest rates are unfavorable.
3. Cash on Cash Return (CoC)
Formula:(Annual Cash Flow / Total Cash Invested) × 100
This percentage tells you how hard your money is working. If you invest $50,000 (down payment + closing costs) and receive $5,000 in annual cash flow, your CoC return is 10%. This allows you to compare real estate returns directly against other investments like stocks or bonds.
4. Cap Rate (Capitalization Rate)
Formula:(Annual NOI / Purchase Price) × 100
Cap Rate measures the natural rate of return of the property as if you bought it with all cash. It is the standard industry metric for comparing the value of different properties regardless of financing. A higher Cap Rate generally indicates higher returns but may come with higher risk (e.g., a property in a declining neighborhood).
The 50% Rule and 1% Rule
Seasoned investors often use "rule of thumb" estimations before diving into a full calculator analysis:
The 1% Rule: Suggests that the monthly rent should be at least 1% of the purchase price. For a $250,000 home, rent should ideally be $2,500+.
The 50% Rule: Estimates that operating expenses (excluding mortgage) will consume roughly 50% of your gross rental income over time.
While these rules are helpful filters, our calculator above provides the granular detail necessary for making a final investment decision.
How to Improve Cash Flow
If your calculation shows negative or low cash flow, consider these strategies:
Increase Rent: Are you charging market rates? Could minor cosmetic upgrades justify a higher rent?
Lower Expenses: Shop for cheaper insurance, appeal property tax assessments, or self-manage to save on management fees.
Adjust Financing: A larger down payment reduces monthly mortgage costs, instantly boosting cash flow (though potentially lowering CoC return).
Buy Better: The profit is often made at the purchase. Negotiating a lower purchase price is the most effective way to improve all return metrics.
Disclaimer: This calculator is for educational purposes only. It does not constitute financial advice. Real estate investments carry risks. Always consult with a qualified financial advisor or real estate professional before making investment decisions.
function calculateRental() {
// 1. Get Inputs
var price = parseFloat(document.getElementById("purchasePrice").value);
var downPercent = parseFloat(document.getElementById("downPaymentPercent").value);
var interestRate = parseFloat(document.getElementById("interestRate").value);
var years = parseFloat(document.getElementById("loanTerm").value);
var rent = parseFloat(document.getElementById("monthlyRent").value);
var taxYearly = parseFloat(document.getElementById("annualPropertyTax").value);
var insYearly = parseFloat(document.getElementById("annualInsurance").value);
var hoa = parseFloat(document.getElementById("monthlyHOA").value);
var maintPercent = parseFloat(document.getElementById("maintVacancy").value);
// Validation to prevent NaN errors
if (isNaN(price) || isNaN(downPercent) || isNaN(interestRate) || isNaN(years) || isNaN(rent)) {
alert("Please enter valid numbers for all fields.");
return;
}
// 2. Calculate Mortgage (P&I)
var downPayment = price * (downPercent / 100);
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var totalPayments = years * 12;
var mortgagePayment = 0;
if (monthlyRate > 0) {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalPayments)) / (Math.pow(1 + monthlyRate, totalPayments) – 1);
} else {
mortgagePayment = loanAmount / totalPayments;
}
// 3. Calculate Monthly Expenses (Operating)
// Note: Expenses for NOI include Tax, Insurance, HOA, Maintenance, Vacancy. NOT Mortgage.
var taxMonthly = taxYearly / 12;
var insMonthly = insYearly / 12;
var maintVacancyMonthly = rent * (maintPercent / 100);
var operatingExpensesMonthly = taxMonthly + insMonthly + hoa + maintVacancyMonthly;
var totalCostMonthly = operatingExpensesMonthly + mortgagePayment;
// 4. Calculate Results
var monthlyCashFlow = rent – totalCostMonthly;
var monthlyNOI = rent – operatingExpensesMonthly;
var annualNOI = monthlyNOI * 12;
var annualCashFlow = monthlyCashFlow * 12;
// Cap Rate = (Annual NOI / Purchase Price)
var capRate = (annualNOI / price) * 100;
// Cash on Cash Return = (Annual Cash Flow / Total Cash Invested)
// Total Cash Invested = Down Payment + Estimated Closing Costs (Assume 3% of price)
var closingCosts = price * 0.03;
var totalInvested = downPayment + closingCosts;
var cocReturn = (annualCashFlow / totalInvested) * 100;
// 5. Update DOM
document.getElementById("displayMortgage").innerText = "$" + mortgagePayment.toFixed(2);
document.getElementById("displayExpenses").innerText = "$" + totalCostMonthly.toFixed(2) + " (incl. P&I)";
document.getElementById("displayNOI").innerText = "$" + monthlyNOI.toFixed(2);
var cfElement = document.getElementById("displayCashFlow");
cfElement.innerText = "$" + monthlyCashFlow.toFixed(2);
// Style changes for positive/negative cash flow
if (monthlyCashFlow >= 0) {
cfElement.classList.remove("highlight-negative");
cfElement.classList.add("highlight-positive");
} else {
cfElement.classList.remove("highlight-positive");
cfElement.classList.add("highlight-negative");
}
document.getElementById("displayCoC").innerText = cocReturn.toFixed(2) + "%";
document.getElementById("displayCapRate").innerText = capRate.toFixed(2) + "%";
}
// Run calculation once on load to show defaults
window.onload = function() {
calculateRental();
};