Analyze the profitability of your real estate investment instantly.
Purchase Information
Financing Details
Income & Expenses (Monthly)
Estimate for empty months
Investment Analysis
Monthly Cash Flow:$0.00
Net Operating Income (NOI) / Year:$0.00
Cash on Cash Return (CoC):0.00%
Cap Rate:0.00%
Total Monthly Expenses:$0.00
Est. Mortgage Payment (P&I):$0.00
Understanding Rental Property Cash Flow
Investing in real estate is a powerful way to build wealth, but simply buying a property doesn't guarantee profit. The most critical metric for any buy-and-hold real estate investor is Cash Flow. This calculator helps you determine if a potential rental property will put money in your pocket every month or become a financial liability.
Key Metrics Explained
Cash Flow: The net amount of money moving in or out of the investment after all expenses and debt service are paid. A positive cash flow means the property generates income.
Net Operating Income (NOI): This calculates the profitability of the property before adding in the mortgage costs. It is derived by subtracting all operating expenses from the total income.
Cash on Cash Return (CoC): This percentage shows the annual return on the actual cash you invested (down payment + closing costs). It is a vital metric for comparing real estate performance against other investment vehicles like stocks.
Cap Rate: The Capitalization Rate measures the natural rate of return of the property assuming it was bought entirely with cash. It helps compare the intrinsic value of properties in different markets.
How to Calculate Rental Cash Flow
The formula for calculating monthly rental cash flow is straightforward but requires accuracy with your expense estimates:
Cash Flow = Total Monthly Income – (Operating Expenses + Mortgage Payment)
Example Scenario:
Imagine you purchase a property for $250,000. You put 20% down ($50,000) and rent it out for $2,200 per month.
Income: $2,200
Mortgage (P&I): ~$1,200 (approximate at current rates)
Using this calculator allows you to stress-test your numbers. Try increasing the vacancy rate or interest rate to see how sensitive your profit margins are to market changes.
function calculateCashFlow() {
// Get Input Values
var purchasePrice = parseFloat(document.getElementById("purchasePrice").value);
var closingCosts = parseFloat(document.getElementById("closingCosts").value);
var downPaymentPercent = parseFloat(document.getElementById("downPaymentPercent").value);
var interestRate = parseFloat(document.getElementById("interestRate").value);
var loanTerm = parseFloat(document.getElementById("loanTerm").value);
var monthlyRent = parseFloat(document.getElementById("monthlyRent").value);
var propertyTax = parseFloat(document.getElementById("propertyTax").value);
var insurance = parseFloat(document.getElementById("insurance").value);
var hoa = parseFloat(document.getElementById("hoa").value);
var maintenance = parseFloat(document.getElementById("maintenance").value);
var vacancyRate = parseFloat(document.getElementById("vacancy").value);
// Validation to prevent NaN errors
if (isNaN(purchasePrice) || isNaN(monthlyRent)) {
alert("Please enter at least the Purchase Price and Monthly Rent to calculate.");
return;
}
// Set defaults for optional fields if empty
if (isNaN(closingCosts)) closingCosts = 0;
if (isNaN(downPaymentPercent)) downPaymentPercent = 20;
if (isNaN(interestRate)) interestRate = 0;
if (isNaN(loanTerm)) loanTerm = 30;
if (isNaN(propertyTax)) propertyTax = 0;
if (isNaN(insurance)) insurance = 0;
if (isNaN(hoa)) hoa = 0;
if (isNaN(maintenance)) maintenance = 0;
if (isNaN(vacancyRate)) vacancyRate = 0;
// 1. Calculate Mortgage Payment
var downPaymentAmount = purchasePrice * (downPaymentPercent / 100);
var loanAmount = purchasePrice – downPaymentAmount;
var monthlyMortgage = 0;
if (interestRate > 0 && loanAmount > 0) {
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else if (loanAmount > 0) {
// Should be rarely used (0% interest loan), but mathematically:
monthlyMortgage = loanAmount / (loanTerm * 12);
}
// 2. Calculate Vacancy Loss
var monthlyVacancyLoss = monthlyRent * (vacancyRate / 100);
// 3. Calculate Total Operating Expenses
var totalOperatingExpenses = propertyTax + insurance + hoa + maintenance + monthlyVacancyLoss;
// 4. Calculate Net Operating Income (NOI) – Monthly & Annual
var monthlyNOI = monthlyRent – totalOperatingExpenses;
var annualNOI = monthlyNOI * 12;
// 5. Calculate Cash Flow
var monthlyCashFlow = monthlyNOI – monthlyMortgage;
var annualCashFlow = monthlyCashFlow * 12;
// 6. Calculate Cash on Cash Return
var totalCashInvested = downPaymentAmount + closingCosts;
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// 7. Calculate Cap Rate
var capRate = 0;
if (purchasePrice > 0) {
capRate = (annualNOI / purchasePrice) * 100;
}
// Format Output
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById("monthlyCashFlow").innerHTML = formatter.format(monthlyCashFlow);
document.getElementById("annualNOI").innerHTML = formatter.format(annualNOI);
document.getElementById("cocReturn").innerHTML = cocReturn.toFixed(2) + "%";
document.getElementById("capRate").innerHTML = capRate.toFixed(2) + "%";
document.getElementById("totalExpensesDisplay").innerHTML = formatter.format(totalOperatingExpenses);
document.getElementById("mortgagePaymentDisplay").innerHTML = formatter.format(monthlyMortgage);
// Add color classes for positive/negative cash flow
var cashFlowElement = document.getElementById("monthlyCashFlow");
if (monthlyCashFlow >= 0) {
cashFlowElement.className = "result-value positive";
} else {
cashFlowElement.className = "result-value negative";
}
// Show results section
document.getElementById("resultsArea").style.display = "block";
// Scroll to results
document.getElementById("resultsArea").scrollIntoView({behavior: "smooth"});
}