Analyze your real estate investment instantly. This calculator determines your monthly cash flow, Cash on Cash Return (CoC), and Cap Rate to help you make data-driven investment decisions.
$
%
$
$
%
$
$
$
$
%
%
Monthly Cash Flow
$0.00
Cash on Cash Return
0.00%
Metric
Amount
Total Cash Invested
$0.00
Monthly Income (Gross)
$0.00
Monthly Expenses (Operating + Debt)
$0.00
NOI (Net Operating Income) / Year
$0.00
Cap Rate
0.00%
Understanding Rental Property Investment Analysis
When evaluating a rental property, knowing the listing price is just the beginning. To determine if a property is a viable investment, savvy investors rely on key metrics like Cash Flow, Cash on Cash Return (CoC), and Cap Rate. This tool breaks down these complex calculations into actionable insights.
What is Cash on Cash Return?
Cash on Cash Return is widely considered the most important metric for rental property investors. It measures the annual return you make on the actual cash you invested, expressed as a percentage. Unlike simple ROI, it accounts for leverage (your mortgage).
Formula: Annual Cash Flow / Total Cash Invested
For example, if you invest $50,000 to buy a property (down payment + closing costs) and it generates $5,000 in positive cash flow per year, your Cash on Cash return is 10%.
How is Monthly Cash Flow Calculated?
Positive cash flow ensures your business survives. To calculate it accurately, you must subtract all expenses from your gross rental income.
Gross Income: Monthly rent.
Operating Expenses: Property taxes, insurance, HOA fees, maintenance reserves, and vacancy allowances.
Debt Service: Your principal and interest mortgage payment.
Note on Vacancy & Maintenance: Many beginners forget to account for these "hidden" costs. Our calculator allows you to set a percentage (typically 5-10%) to set aside for future repairs and periods when the unit is empty.
Cap Rate vs. Cash on Cash Return
While CoC measures the return on your equity, the Capitalization Rate (Cap Rate) measures the natural rate of return of the property as if it were bought with all cash. It is calculated by dividing the Net Operating Income (NOI) by the Purchase Price. Cap Rate is useful for comparing the profitability of different buildings regardless of financing.
What is a "Good" Return?
Investment goals vary, but generally:
6-8% CoC: Decent return, common in stable markets.
8-12% CoC: Great return, often found in growing markets or value-add deals.
12%+ CoC: Excellent return, usually requires finding off-market deals or significant rehabilitation.
function calculateRental() {
// 1. Get Input Values
var price = parseFloat(document.getElementById("purchasePrice").value) || 0;
var downPercent = parseFloat(document.getElementById("downPayment").value) || 0;
var closingCosts = parseFloat(document.getElementById("closingCosts").value) || 0;
var rehabCosts = parseFloat(document.getElementById("rehabCosts").value) || 0;
var interestRate = parseFloat(document.getElementById("interestRate").value) || 0;
var loanTermYears = parseFloat(document.getElementById("loanTerm").value) || 0;
var monthlyRent = parseFloat(document.getElementById("monthlyRent").value) || 0;
var annualTax = parseFloat(document.getElementById("propertyTax").value) || 0;
var annualIns = parseFloat(document.getElementById("homeInsurance").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;
// 2. Calculate Initial Investment
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
var totalInvested = downPaymentAmount + closingCosts + rehabCosts;
// 3. Calculate Mortgage Payment (PI)
var monthlyRate = (interestRate / 100) / 12;
var numPayments = loanTermYears * 12;
var monthlyPI = 0;
if (interestRate > 0 && loanTermYears > 0) {
monthlyPI = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else if (loanTermYears > 0) {
monthlyPI = loanAmount / numPayments;
}
// 4. Calculate Monthly Expenses
var monthlyTax = annualTax / 12;
var monthlyIns = annualIns / 12;
var vacancyCost = monthlyRent * (vacancyRate / 100);
var maintenanceCost = monthlyRent * (maintenanceRate / 100);
var totalOperatingExpenses = monthlyTax + monthlyIns + monthlyHOA + vacancyCost + maintenanceCost;
var totalMonthlyExpenses = totalOperatingExpenses + monthlyPI;
// 5. Calculate Metrics
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// NOI = Income – Operating Expenses (excluding mortgage)
var annualNOI = (monthlyRent * 12) – (totalOperatingExpenses * 12);
// Cash on Cash Return
var cocReturn = 0;
if (totalInvested > 0) {
cocReturn = (annualCashFlow / totalInvested) * 100;
}
// Cap Rate
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
// 6. Display Results
document.getElementById("results").style.display = "block";
// Helper function for currency formatting
var formatCurrency = function(num) {
return "$" + num.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
};
document.getElementById("monthlyCashFlowResult").innerHTML = formatCurrency(monthlyCashFlow);
document.getElementById("cocResult").innerHTML = cocReturn.toFixed(2) + "%";
document.getElementById("totalInvestedResult").innerHTML = formatCurrency(totalInvested);
document.getElementById("grossIncomeResult").innerHTML = formatCurrency(monthlyRent);
document.getElementById("totalExpensesResult").innerHTML = formatCurrency(totalMonthlyExpenses);
document.getElementById("noiResult").innerHTML = formatCurrency(annualNOI);
document.getElementById("capRateResult").innerHTML = capRate.toFixed(2) + "%";
// Styling for positive/negative flow
var cashFlowCard = document.getElementById("cashFlowCard");
var cocCard = document.getElementById("cocCard");
if(monthlyCashFlow < 0) {
document.getElementById("monthlyCashFlowResult").style.color = "#e74c3c";
cashFlowCard.classList.add("negative");
} else {
document.getElementById("monthlyCashFlowResult").style.color = "#2c3e50";
cashFlowCard.classList.remove("negative");
}
if(cocReturn < 0) {
cocCard.classList.add("negative");
} else {
cocCard.classList.remove("negative");
}
}