Analyze your real estate investment deal in seconds.
Monthly Cash Flow$0.00
Net Operating Income (NOI) / Mo$0.00
Total Monthly Expenses$0.00
Monthly Mortgage Payment (P&I)$0.00
Cash on Cash Return0.00%
Cap Rate0.00%
Understanding Rental Property Cash Flow
Calculating cash flow is the most critical step in evaluating a rental property investment. Cash flow represents the money left over after all expenses, including the mortgage, have been paid. Positive cash flow ensures the property pays for itself and generates income, while negative cash flow means the property is costing you money every month.
How This Calculator Works
This tool breaks down the finances of a potential real estate deal into granular details. It considers three main categories:
Acquisition Costs: The purchase price and how you finance it (down payment, interest rate, term).
Gross Income: The total rent collected, adjusted for potential vacancy (periods where the unit sits empty).
Operating Expenses: The recurring costs required to keep the property running, such as taxes, insurance, repairs, property management, and Homeowners Association (HOA) fees.
Key Metrics Explained
1. Net Operating Income (NOI)
NOI is calculated by subtracting all operating expenses from the total revenue generated by the property. Crucially, NOI does not include mortgage payments. It is a pure measure of the property's profitability before debt service.
Formula: Gross Income – Operating Expenses = NOI
2. Cash on Cash Return (CoC)
This percentage tells you how hard your actual invested cash is working. It compares your annual pre-tax cash flow to the total cash invested (Down Payment + Closing Costs). A CoC return of 8-12% is generally considered a good target for residential rentals.
Formula: (Annual Cash Flow / Total Cash Invested) × 100
3. Cap Rate (Capitalization Rate)
Cap Rate measures the natural rate of return on the property as if you bought it with all cash. It helps compare properties regardless of financing methods.
Formula: (Annual NOI / Purchase Price) × 100
Why Include CapEx and Vacancy?
Many new investors make the mistake of only calculating "Rent minus Mortgage." This calculator forces you to account for:
Vacancy: You won't collect rent 12 months a year forever. A 5% vacancy rate assumes the property is empty for about 18 days a year (or one month every two years).
CapEx (Capital Expenditures): Big-ticket items like roofs, HVAC systems, and water heaters eventually break. Setting aside 5-10% of rent monthly ensures you have funds when these expensive repairs arise.
Using the 1% Rule
A quick rule of thumb for screening properties is the 1% rule, which states that the monthly rent should be at least 1% of the purchase price. For example, a $200,000 home should rent for at least $2,000. While not a hard rule, properties meeting this threshold are more likely to generate positive cash flow.
function calculateRental() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPct = parseFloat(document.getElementById('downPayment').value) || 0;
var rate = parseFloat(document.getElementById('interestRate').value) || 0;
var years = parseFloat(document.getElementById('loanTerm').value) || 0;
var rent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var vacancyPct = parseFloat(document.getElementById('vacancyRate').value) || 0;
var taxYear = parseFloat(document.getElementById('propertyTax').value) || 0;
var insYear = parseFloat(document.getElementById('insurance').value) || 0;
var maintPct = parseFloat(document.getElementById('maintenance').value) || 0;
var capexPct = parseFloat(document.getElementById('capex').value) || 0;
var mgmtPct = parseFloat(document.getElementById('managementFee').value) || 0;
var hoaMo = parseFloat(document.getElementById('hoa').value) || 0;
// 2. Calculate Loan Metrics
var downPaymentAmount = price * (downPct / 100);
var loanAmount = price – downPaymentAmount;
var monthlyRate = (rate / 100) / 12;
var numPayments = years * 12;
// Mortgage Calculation Formula
var monthlyMortgage = 0;
if (monthlyRate > 0 && numPayments > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else if (years > 0) {
monthlyMortgage = loanAmount / numPayments; // 0% interest case
}
// 3. Calculate Monthly Expenses
var vacancyCost = rent * (vacancyPct / 100);
var maintCost = rent * (maintPct / 100);
var capexCost = rent * (capexPct / 100);
var mgmtCost = rent * (mgmtPct / 100);
var taxMo = taxYear / 12;
var insMo = insYear / 12;
var totalOpExpensesMo = taxMo + insMo + hoaMo + vacancyCost + maintCost + capexCost + mgmtCost;
// 4. Key Metrics
var effectiveGrossIncome = rent – vacancyCost; // Some definitions subtract vacancy from Gross
// Simplified for this tool: We treat vacancy as an expense item in the flow or deduction from income.
// NOI = (Rent – Vacancy) – (Operating Expenses excluding vacancy if subtracted above).
// Let's standard: NOI = Rent – VacancyCost – OtherOpExpenses.
var noiMo = rent – totalOpExpensesMo;
var cashFlow = noiMo – monthlyMortgage;
var annualNOI = noiMo * 12;
var annualCashFlow = cashFlow * 12;
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
var cocReturn = 0;
// Total cash invested = Down Payment + (Closing Costs – assume 3% of price roughly for estimate or just Downpayment?)
// To be strict to inputs, we use Down Payment only.
if (downPaymentAmount > 0) {
cocReturn = (annualCashFlow / downPaymentAmount) * 100;
}
// 5. Display Results
document.getElementById('resultsArea').style.display = 'block';
// Format Currency Function
var fmt = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
document.getElementById('resCashFlow').innerHTML = fmt.format(cashFlow);
document.getElementById('resCashFlow').style.color = cashFlow >= 0 ? '#38a169' : '#e53e3e'; // Green if positive, Red if negative
document.getElementById('resNOI').innerText = fmt.format(noiMo);
document.getElementById('resExpenses').innerText = fmt.format(totalOpExpensesMo);
document.getElementById('resMortgage').innerText = fmt.format(monthlyMortgage);
document.getElementById('resCoC').innerText = cocReturn.toFixed(2) + "%";
document.getElementById('resCoC').style.color = cocReturn >= 0 ? '#2d3748' : '#e53e3e';
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
}
// Initial Calculation on load
window.onload = function() {
calculateRental();
};