Analyze the profitability and ROI of your real estate investment.
Purchase Details
30 Years
15 Years
10 Years
Income & Expenses
Variable Factors
Avg: 5-8%
% of Rent
0 if self-managed
Est. 2-5% of price
Monthly Cash Flow—
Net Operating Income (NOI) / Mo—
Mortgage Payment (P&I)—
Total Monthly Expenses—
Cash on Cash Return (Annual)—
Cap Rate—
Understanding Rental Property Cash Flow
Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property doesn't guarantee profit. The Rental Property Cash Flow Calculator helps investors determine if a specific property will generate positive income after all expenses are paid.
Key Metrics Explained
1. Net Operating Income (NOI)
NOI is a critical metric that calculates the profitability of an income-generating real estate property before adding in any costs from financing or taxes. The formula is:
NOI = Real Estate Revenue – Operating Expenses
Operating expenses include maintenance, property taxes, insurance, and management fees, but exclude the mortgage payment.
2. Cash on Cash Return (CoC)
This metric measures the annual return the investor made on the property in relation to the amount of mortgage paid during the same year. It is considered one of the most important metrics because it tells you exactly how hard your actual invested cash is working.
CoC Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) x 100%
A "good" CoC return is subjective, but many investors look for 8-12% or higher.
3. Cap Rate (Capitalization Rate)
Cap Rate indicates the rate of return that is expected to be generated on a real estate investment property. It is calculated by dividing the Net Operating Income by the property asset value.
Cap Rate = NOI / Purchase Price
Unlike Cash on Cash return, Cap Rate ignores financing, making it useful for comparing two different properties directly regardless of how they are purchased (cash vs. loan).
What affects your Cash Flow?
Vacancy Rate: Always account for times the property sits empty. A standard conservative estimate is 5-8% (about 2-3 weeks per year).
Maintenance: Properties degrade. Setting aside 10-15% of rent for future repairs (HVAC, roof, painting) ensures you aren't caught off guard.
Interest Rates: A higher interest rate increases your mortgage payment, directly reducing your monthly cash flow.
Use the calculator above to adjust your offer price or down payment to see how it impacts your bottom line. Successful investors never buy on emotion; they buy based on the numbers.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPayment = parseFloat(document.getElementById('downPayment').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var loanTerm = parseInt(document.getElementById('loanTerm').value) || 30;
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var propTaxYearly = parseFloat(document.getElementById('propertyTax').value) || 0;
var insuranceYearly = parseFloat(document.getElementById('insurance').value) || 0;
var hoaMonthly = parseFloat(document.getElementById('hoa').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
var maintenanceRate = parseFloat(document.getElementById('maintenanceRate').value) || 0;
var managementFeeRate = parseFloat(document.getElementById('managementFee').value) || 0;
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
// 2. Calculate Mortgage (P&I)
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
var monthlyPrincipalAndInterest = 0;
if (loanAmount > 0 && interestRate > 0) {
monthlyPrincipalAndInterest = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else if (loanAmount > 0 && interestRate === 0) {
monthlyPrincipalAndInterest = loanAmount / numberOfPayments;
}
// 3. Calculate Monthly Operating Expenses
var vacancyCost = monthlyRent * (vacancyRate / 100);
var maintenanceCost = monthlyRent * (maintenanceRate / 100);
var managementCost = monthlyRent * (managementFeeRate / 100);
var taxesMonthly = propTaxYearly / 12;
var insuranceMonthly = insuranceYearly / 12;
var totalOperatingExpenses = taxesMonthly + insuranceMonthly + hoaMonthly + vacancyCost + maintenanceCost + managementCost;
// 4. Calculate Key Metrics
var noiMonthly = monthlyRent – totalOperatingExpenses;
var cashFlowMonthly = noiMonthly – monthlyPrincipalAndInterest;
var cashFlowYearly = cashFlowMonthly * 12;
var noiYearly = noiMonthly * 12;
var totalCashInvested = downPayment + closingCosts;
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (cashFlowYearly / totalCashInvested) * 100;
}
var capRate = 0;
if (price > 0) {
capRate = (noiYearly / price) * 100;
}
// 5. Update UI
document.getElementById('results').classList.add('visible');
// Helper to format currency
function formatMoney(num) {
return '$' + num.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
// Update DOM elements
var cfElement = document.getElementById('monthlyCashFlow');
cfElement.innerText = formatMoney(cashFlowMonthly);
if (cashFlowMonthly >= 0) {
cfElement.classList.remove('negative');
cfElement.classList.add('positive');
} else {
cfElement.classList.remove('positive');
cfElement.classList.add('negative');
}
document.getElementById('noiMonthly').innerText = formatMoney(noiMonthly);
document.getElementById('mortgagePayment').innerText = formatMoney(monthlyPrincipalAndInterest);
document.getElementById('totalExpenses').innerText = formatMoney(totalOperatingExpenses + monthlyPrincipalAndInterest);
document.getElementById('cocReturn').innerText = cocReturn.toFixed(2) + '%';
document.getElementById('capRate').innerText = capRate.toFixed(2) + '%';
}