Analyze your real estate deal instantly. Calculate Cash Flow, Cap Rate, and Cash on Cash Return.
Purchase Information
Loan Details
Income & Expenses
Analysis Results
Monthly Cash Flow
–
Cash on Cash Return
–
Cap Rate
–
Net Operating Income (MO)
–
Total Cash Invested
–
Monthly Mortgage
–
Understanding Rental Property Analysis
Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property doesn't guarantee profit. A successful investor must understand the numbers behind the deal. This Rental Property Cash Flow Calculator helps you determine if a potential investment will generate positive income or become a financial burden.
Key Metrics Explained
1. Monthly Cash Flow
This is the profit you take home every month after all expenses are paid. It is calculated as:
Cash Flow = Total Rental Income – (Mortgage + Taxes + Insurance + HOA + Vacancy + Maintenance)
A positive cash flow means the property pays for itself and provides you with income. A negative cash flow means you are feeding the property money every month.
2. Cash on Cash Return (CoC)
This metric measures the annual return on the actual cash you invested (down payment, closing costs, and repairs), not the total purchase price. It allows you to compare real estate returns against other investments like stocks.
Example: If you invest $50,000 cash and the property generates $5,000 in annual positive cash flow, your CoC return is 10%.
3. Cap Rate (Capitalization Rate)
Cap Rate measures the property's natural rate of return assuming you bought it with all cash (no mortgage). It helps you judge the quality of the deal itself, independent of your financing terms.
Cap Rate = (Annual Net Operating Income / Purchase Price) * 100
How to Use This Calculator
Purchase Info: Enter the price and your down payment percentage. Don't forget closing costs, which typically range from 2-5% of the purchase price.
Loan Details: Input your expected interest rate and loan term (usually 30 years).
Income: Enter the gross monthly rent. Check local rental listings (comps) to be accurate.
Expenses: Be honest with expenses. Vacancy (times the unit sits empty) and Maintenance (repairs) are often overlooked but always happen. A standard rule of thumb is setting aside 5-10% of rent for each.
Why Real Estate Investors Fail
The most common mistake new investors make is underestimating expenses. They calculate mortgage, tax, and insurance, but forget to set aside money for a new roof (CapEx), a month where the tenant leaves (Vacancy), or property management fees. This calculator includes fields for vacancy and maintenance percentages to give you a realistic view of your "True Cash Flow".
// Helper to format currency
function formatCurrency(num) {
return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(num);
}
// Helper to format percentage
function formatPercent(num) {
return num.toFixed(2) + '%';
}
// Optional: Calculate actual down payment amount in console or future UI updates if needed
function calculateDownPaymentValue() {
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var percent = parseFloat(document.getElementById('downPaymentPercent').value) || 0;
// Logic exists if we want to show the $ amount dynamically later
}
function calculateROI() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPercent = parseFloat(document.getElementById('downPaymentPercent').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
var repairCosts = parseFloat(document.getElementById('repairCosts').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value);
var loanTerm = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var annualTaxes = parseFloat(document.getElementById('annualTaxes').value) || 0;
var annualInsurance = parseFloat(document.getElementById('annualInsurance').value) || 0;
var monthlyHOA = parseFloat(document.getElementById('monthlyHOA').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
var maintenanceRate = parseFloat(document.getElementById('maintenanceRate').value) || 0;
// Validation
if (!price || !monthlyRent || isNaN(interestRate) || isNaN(loanTerm)) {
alert("Please fill in the required fields: Purchase Price, Interest Rate, Loan Term, and Monthly Rent.");
return;
}
// 2. Calculations
// Initial Investment
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
var totalCashInvested = downPaymentAmount + closingCosts + repairCosts;
// Mortgage Payment (Principal & Interest)
var monthlyRate = (interestRate / 100) / 12;
var numPayments = loanTerm * 12;
var monthlyMortgage = 0;
if (interestRate === 0) {
monthlyMortgage = loanAmount / numPayments;
} else {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
// Variable Expenses based on Rent
var monthlyVacancy = monthlyRent * (vacancyRate / 100);
var monthlyMaintenance = monthlyRent * (maintenanceRate / 100);
// Fixed Monthly Expenses
var monthlyTaxes = annualTaxes / 12;
var monthlyInsurance = annualInsurance / 12;
// Total Operating Expenses (Excluding Mortgage)
var operatingExpenses = monthlyTaxes + monthlyInsurance + monthlyHOA + monthlyVacancy + monthlyMaintenance;
// Net Operating Income (NOI)
var monthlyNOI = monthlyRent – operatingExpenses;
var annualNOI = monthlyNOI * 12;
// Cash Flow
var monthlyCashFlow = monthlyNOI – monthlyMortgage;
var annualCashFlow = monthlyCashFlow * 12;
// Returns
var capRate = (annualNOI / price) * 100;
var cashOnCash = (annualCashFlow / totalCashInvested) * 100;
// 3. Display Results
var resArea = document.getElementById('results-area');
resArea.style.display = 'block';
document.getElementById('resCashFlow').innerHTML = formatCurrency(monthlyCashFlow);
if(monthlyCashFlow < 0) {
document.getElementById('resCashFlow').classList.add('negative');
} else {
document.getElementById('resCashFlow').classList.remove('negative');
}
document.getElementById('resCoC').innerHTML = formatPercent(cashOnCash);
if(cashOnCash < 0) {
document.getElementById('resCoC').classList.add('negative');
} else {
document.getElementById('resCoC').classList.remove('negative');
}
document.getElementById('resCapRate').innerHTML = formatPercent(capRate);
document.getElementById('resNOI').innerHTML = formatCurrency(monthlyNOI);
document.getElementById('resInvested').innerHTML = formatCurrency(totalCashInvested);
document.getElementById('resMortgage').innerHTML = formatCurrency(monthlyMortgage);
// Scroll to results
resArea.scrollIntoView({behavior: 'smooth'});
}