Rental Property Cash on Cash Return Calculator
:root {
–primary-color: #2c3e50;
–accent-color: #27ae60;
–bg-color: #f4f7f6;
–text-color: #333;
–border-radius: 8px;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
line-height: 1.6;
color: var(–text-color);
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
}
.calc-wrapper {
display: flex;
flex-wrap: wrap;
gap: 30px;
background: var(–bg-color);
padding: 30px;
border-radius: var(–border-radius);
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
margin-bottom: 40px;
}
.calc-inputs {
flex: 1;
min-width: 300px;
}
.calc-results {
flex: 1;
min-width: 300px;
background: #fff;
padding: 25px;
border-radius: var(–border-radius);
border-left: 5px solid var(–accent-color);
}
h2 {
color: var(–primary-color);
margin-bottom: 20px;
border-bottom: 2px solid #ddd;
padding-bottom: 10px;
}
.input-group {
margin-bottom: 15px;
}
.input-row {
display: flex;
gap: 15px;
}
.input-col {
flex: 1;
}
label {
display: block;
margin-bottom: 5px;
font-weight: 600;
font-size: 0.9em;
}
input[type="number"] {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
}
button.calc-btn {
width: 100%;
padding: 15px;
background-color: var(–accent-color);
color: white;
border: none;
border-radius: var(–border-radius);
font-size: 18px;
font-weight: bold;
cursor: pointer;
transition: background 0.3s;
margin-top: 10px;
}
button.calc-btn:hover {
background-color: #219150;
}
.result-box {
text-align: center;
margin-bottom: 25px;
padding: 15px;
background: #f9f9f9;
border-radius: var(–border-radius);
}
.result-label {
font-size: 1em;
color: #666;
}
.result-value {
font-size: 2.5em;
font-weight: bold;
color: var(–accent-color);
}
.secondary-results {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
}
.sec-result-item {
border-bottom: 1px solid #eee;
padding-bottom: 10px;
margin-bottom: 10px;
}
.sec-result-item strong {
display: block;
color: var(–primary-color);
}
.article-content {
max-width: 800px;
margin: 0 auto;
}
.article-content h3 {
color: var(–primary-color);
margin-top: 30px;
}
.highlight-box {
background-color: #e8f6f3;
border-left: 4px solid var(–accent-color);
padding: 15px;
margin: 20px 0;
}
@media (max-width: 768px) {
.calc-wrapper {
flex-direction: column;
}
.input-row {
flex-direction: column;
gap: 0;
}
}
Investment Analysis
Cash on Cash Return
0.00%
Monthly Cash Flow
$0.00
Cap Rate
0.00%
Total Cash Invested
$0.00
Monthly Expenses
$0.00
Mortgage Payment
$0.00
NOI (Annual)
$0.00
Rental Property Cash on Cash Return Calculator
Real estate investing relies heavily on accurate mathematical analysis. While many investors look at the Cap Rate, the Cash on Cash Return (CoC) is often the most practical metric for investors using leverage (mortgages) to purchase property. This calculator helps you determine the efficiency of your invested capital.
Why Use Cash on Cash Return?
Cash on Cash return answers the fundamental question: "For every dollar I put into this deal, how much cash am I getting back this year?" Unlike Cap Rate, which assumes an all-cash purchase, CoC accounts for your debt service (mortgage), providing a realistic view of your actual cash flow relative to your out-of-pocket costs.
How the Calculation Works
The formula used in this calculator breaks down into three main components:
1. Annual Cash Flow
This is calculated by taking your total annual rental income and subtracting all operating expenses and debt service (mortgage payments).
- Operating Expenses: Taxes, insurance, HOA, maintenance, vacancy reserves, and property management fees.
- Debt Service: The principal and interest payments on your loan.
2. Total Cash Invested
This represents the actual money you bring to the closing table. It includes:
- Down Payment
- Closing Costs
- Immediate Renovation/Repair Costs
3. The Formula
CoC Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100%
What is a Good Cash on Cash Return?
While "good" is subjective and depends on the market and risk profile, general benchmarks include:
- 8-12%: Generally considered a solid return for residential rental properties.
- 15%+: Considered excellent, though often requires more work (fixer-uppers) or higher-risk neighborhoods.
- Below 5%: May not justify the effort of active management compared to passive index funds, unless you are banking heavily on property appreciation.
Difference Between Cap Rate and CoC
Cap Rate (Capitalization Rate) measures the property's natural rate of return without considering debt. It is calculated as Net Operating Income (NOI) / Purchase Price. It is useful for comparing the intrinsic value of different properties.
Cash on Cash Return measures the velocity of your specific money. It changes depending on how much leverage (loans) you use.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPaymentPct = 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 taxYearly = parseFloat(document.getElementById('propertyTax').value) || 0;
var insuranceYearly = parseFloat(document.getElementById('insurance').value) || 0;
var hoaMonthly = parseFloat(document.getElementById('hoaFees').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
var maintRate = parseFloat(document.getElementById('maintenanceRate').value) || 0;
var mgmtRate = parseFloat(document.getElementById('managementFee').value) || 0;
// 2. Calculate Initial Investment
var downPaymentAmt = price * (downPaymentPct / 100);
var totalCashInvested = downPaymentAmt + closingCosts + rehabCosts;
// 3. Calculate Mortgage
var loanAmount = price – downPaymentAmt;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTermYears * 12;
var mortgagePayment = 0;
if (loanAmount > 0 && interestRate > 0) {
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1]
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else if (loanAmount > 0 && interestRate === 0) {
mortgagePayment = loanAmount / numberOfPayments;
}
// 4. Calculate Operating Expenses (Monthly)
var vacancyCost = monthlyRent * (vacancyRate / 100);
var maintCost = monthlyRent * (maintRate / 100);
var mgmtCost = monthlyRent * (mgmtRate / 100);
var fixedMonthlyExpenses = (taxYearly / 12) + (insuranceYearly / 12) + hoaMonthly;
var variableMonthlyExpenses = vacancyCost + maintCost + mgmtCost;
var totalMonthlyExpenses = fixedMonthlyExpenses + variableMonthlyExpenses;
// 5. Calculate Metrics
var netOperatingIncomeMonthly = monthlyRent – totalMonthlyExpenses;
var netOperatingIncomeAnnual = netOperatingIncomeMonthly * 12;
var monthlyCashFlow = netOperatingIncomeMonthly – mortgagePayment;
var annualCashFlow = monthlyCashFlow * 12;
// Cash on Cash Return
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// Cap Rate (NOI Annual / Purchase Price)
var capRate = 0;
if (price > 0) {
capRate = (netOperatingIncomeAnnual / price) * 100;
}
// 6. Format and Display Results
var currencyFormatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('cocResult').innerText = cocReturn.toFixed(2) + "%";
document.getElementById('cocResult').style.color = cocReturn >= 0 ? "#27ae60" : "#c0392b";
document.getElementById('monthlyCashFlow').innerText = currencyFormatter.format(monthlyCashFlow);
document.getElementById('monthlyCashFlow').style.color = monthlyCashFlow >= 0 ? "#333" : "#c0392b";
document.getElementById('capRate').innerText = capRate.toFixed(2) + "%";
document.getElementById('totalCashNeeded').innerText = currencyFormatter.format(totalCashInvested);
document.getElementById('totalMonthlyExpenses').innerText = currencyFormatter.format(totalMonthlyExpenses + mortgagePayment);
document.getElementById('mortgageResult').innerText = currencyFormatter.format(mortgagePayment);
document.getElementById('noiResult').innerText = currencyFormatter.format(netOperatingIncomeAnnual);
}
// Run calculation once on load to populate defaults
window.onload = function() {
calculateROI();
}