Analyze potential real estate deals to determine ROI, Cap Rate, and Monthly Cash Flow.
Purchase Info
Financing Details
Income & Expenses
Monthly Cash Flow
—
Cash on Cash ROI
—
Cap Rate
—
Net Operating Income (NOI)
—
Total Cash Invested
—
Monthly Expenses
—
How to Analyze a Rental Property Investment
Success in real estate investing depends heavily on running the numbers accurately before making an offer. A "gut feeling" is not a strategy. This Rental Property Cash Flow Calculator is designed to help investors objectively evaluate the profitability of a potential residential real estate asset.
Key Metrics Explained
Cash Flow: This is the profit you pocket each month after all expenses (mortgage, taxes, insurance, repairs) are paid. Positive cash flow ensures the property pays for itself and provides income.
Cash on Cash ROI (CoC): This metric compares your annual pre-tax cash flow to the total amount of cash you actually invested (down payment + closing costs + rehab). It tells you how hard your specific dollars are working.
Cap Rate (Capitalization Rate): This measures the property's natural rate of return assuming you bought it with all cash. It is calculated by dividing the Net Operating Income (NOI) by the Purchase Price. It allows you to compare properties regardless of financing.
Net Operating Income (NOI): The total income generated by the property minus all operating expenses. Note that NOI does not include mortgage payments.
Understanding the Inputs
To get an accurate result, you must estimate expenses conservatively:
Vacancy Rate: Properties won't be rented 365 days a year. A standard safe estimate is 5% to 8% (roughly 2-4 weeks of vacancy per year).
Maintenance & CapEx: Even if a house is new, things break. Allocating 10% of rent for repairs and capital expenditures (roof, HVAC replacement) protects your cash flow reserves.
Property Management: If you hire a professional manager, they typically charge 8% to 10% of the monthly rent. If you self-manage, you are "paying yourself" this fee with your time.
The 1% Rule
A common "rule of thumb" for initial screening is the 1% rule. It 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/month. While not a hard rule, properties that meet this threshold often produce positive cash flow.
function calculateRental() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var closing = parseFloat(document.getElementById('closingCosts').value) || 0;
var downPercent = parseFloat(document.getElementById('downPaymentPercent').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var years = parseFloat(document.getElementById('loanTerm').value) || 0;
var rent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
var taxYearly = parseFloat(document.getElementById('propertyTax').value) || 0;
var insuranceYearly = parseFloat(document.getElementById('insurance').value) || 0;
var hoa = parseFloat(document.getElementById('hoaFees').value) || 0;
var maintRate = parseFloat(document.getElementById('maintenance').value) || 0;
var mgmtRate = parseFloat(document.getElementById('managementFee').value) || 0;
// 2. Calculate Mortgage
var downPayment = price * (downPercent / 100);
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numPayments = years * 12;
var mortgagePayment = 0;
if (loanAmount > 0 && interestRate > 0) {
mortgagePayment = (loanAmount * monthlyRate) / (1 – Math.pow(1 + monthlyRate, -numPayments));
} else if (loanAmount > 0 && interestRate === 0) {
mortgagePayment = loanAmount / numPayments;
}
// 3. Calculate Income
var vacancyLoss = rent * (vacancyRate / 100);
var effectiveGrossIncome = rent – vacancyLoss;
// 4. Calculate Operating Expenses
var taxMonthly = taxYearly / 12;
var insuranceMonthly = insuranceYearly / 12;
var maintenanceMonthly = rent * (maintRate / 100);
var mgmtMonthly = rent * (mgmtRate / 100);
var operatingExpenses = taxMonthly + insuranceMonthly + maintenanceMonthly + mgmtMonthly + hoa;
// 5. Calculate Metrics
var noiMonthly = effectiveGrossIncome – operatingExpenses;
var noiAnnual = noiMonthly * 12;
var totalMonthlyExpenses = operatingExpenses + mortgagePayment;
var cashFlowMonthly = effectiveGrossIncome – totalMonthlyExpenses;
var cashFlowAnnual = cashFlowMonthly * 12;
var totalCashInvested = downPayment + closing;
var cocRoi = 0;
if (totalCashInvested > 0) {
cocRoi = (cashFlowAnnual / totalCashInvested) * 100;
}
var capRate = 0;
if (price > 0) {
capRate = (noiAnnual / price) * 100;
}
// 6. Display Results
var formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
var percentFormatter = new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 2, maximumFractionDigits: 2 });
document.getElementById('resCashFlow').innerText = formatter.format(cashFlowMonthly);
document.getElementById('resCocRoi').innerText = percentFormatter.format(cocRoi) + "%";
document.getElementById('resCapRate').innerText = percentFormatter.format(capRate) + "%";
document.getElementById('resNoi').innerText = formatter.format(noiAnnual) + " / yr";
document.getElementById('resCashInvested').innerText = formatter.format(totalCashInvested);
document.getElementById('resExpenses').innerText = formatter.format(totalMonthlyExpenses);
// Styling classes for positive/negative cashflow
var cfElement = document.getElementById('resCashFlow');
if (cashFlowMonthly >= 0) {
cfElement.className = "result-value positive";
} else {
cfElement.className = "result-value negative";
}
document.getElementById('resultsSection').style.display = "block";
}