Rental Property Cash on Cash Return Calculator
:root {
–primary-color: #2c3e50;
–accent-color: #27ae60;
–bg-color: #f8f9fa;
–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);
margin: 0;
padding: 20px;
background-color: var(–bg-color);
}
.calculator-container {
max-width: 800px;
margin: 0 auto;
background: #fff;
padding: 30px;
border-radius: var(–border-radius);
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.calc-header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid #eee;
padding-bottom: 20px;
}
.calc-header h1 {
margin: 0;
color: var(–primary-color);
font-size: 28px;
}
.grid-inputs {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
.input-group {
margin-bottom: 15px;
}
.input-group label {
display: block;
font-weight: 600;
margin-bottom: 8px;
font-size: 14px;
color: var(–primary-color);
}
.input-wrapper {
position: relative;
}
.input-wrapper input {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
transition: border-color 0.3s;
}
.input-wrapper input:focus {
border-color: var(–accent-color);
outline: none;
}
.currency-symbol, .percent-symbol {
position: absolute;
top: 50%;
transform: translateY(-50%);
color: #777;
font-size: 14px;
}
.currency-symbol { left: 10px; }
.percent-symbol { right: 10px; }
.input-with-currency input { padding-left: 25px; }
.input-with-percent input { padding-right: 25px; }
.section-title {
grid-column: 1 / -1;
font-size: 18px;
font-weight: bold;
margin-top: 10px;
color: var(–primary-color);
border-bottom: 1px solid #eee;
padding-bottom: 5px;
}
button.calc-btn {
grid-column: 1 / -1;
background-color: var(–accent-color);
color: white;
border: none;
padding: 15px;
font-size: 18px;
font-weight: bold;
border-radius: var(–border-radius);
cursor: pointer;
transition: background 0.3s;
margin-top: 10px;
}
button.calc-btn:hover {
background-color: #219150;
}
#results-area {
margin-top: 30px;
padding: 20px;
background-color: #f1f8e9;
border: 1px solid #c8e6c9;
border-radius: var(–border-radius);
display: none;
}
.result-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
}
.result-item {
background: white;
padding: 15px;
border-radius: 6px;
box-shadow: 0 2px 5px rgba(0,0,0,0.05);
text-align: center;
}
.result-item.highlight {
grid-column: 1 / -1;
background: var(–primary-color);
color: white;
}
.result-label {
font-size: 13px;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 5px;
opacity: 0.9;
}
.result-value {
font-size: 24px;
font-weight: bold;
color: var(–accent-color);
}
.result-item.highlight .result-value {
color: #fff;
font-size: 32px;
}
/* Article Styling */
.content-article {
max-width: 800px;
margin: 40px auto;
background: #fff;
padding: 30px;
border-radius: var(–border-radius);
box-shadow: 0 4px 15px rgba(0,0,0,0.05);
}
.content-article h2 {
color: var(–primary-color);
border-left: 4px solid var(–accent-color);
padding-left: 15px;
margin-top: 30px;
}
.content-article p {
margin-bottom: 15px;
color: #555;
}
.content-article ul {
margin-bottom: 20px;
}
.content-article li {
margin-bottom: 8px;
}
@media (max-width: 600px) {
.grid-inputs, .result-grid {
grid-template-columns: 1fr;
}
}
Cash on Cash Return (CoC)
0.00%
Net Operating Income (Annual)
$0.00
Total Cash Invested
$0.00
Monthly Mortgage Payment
$0.00
What is Cash on Cash Return?
Cash on Cash Return (CoC) is a metric used in real estate transactions that calculates the cash income earned on the cash invested in a property. Put simply, it measures the annual return the investor made on the property in relation to the amount of mortgage paid during the same year.
Unlike standard ROI, which might look at the total value of the asset, Cash on Cash Return focuses specifically on the actual cash you put into the deal (down payment, closing costs, and rehab costs) versus the actual cash you take out (net rental income minus mortgage payments).
How the Calculation Works
The formula used in this calculator is:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) x 100%
- Annual Pre-Tax Cash Flow: This is your Gross Rent minus all operating expenses (taxes, insurance, HOA, maintenance, vacancy) and minus your annual mortgage debt service.
- Total Cash Invested: This includes your Down Payment, Closing Costs, and any immediate Repair/Rehab costs.
What is a Good Cash on Cash Return?
While "good" is subjective, most real estate investors aim for a Cash on Cash Return between 8% and 12%. This range typically outperforms the stock market average while providing the added benefits of property appreciation and tax depreciation.
In highly competitive markets, investors might accept 4-6% hoping for appreciation, while in lower-cost areas, investors often demand 15%+ returns to offset lower appreciation potential.
Why Use This Calculator?
Before purchasing a rental property, it is crucial to understand if the asset will generate positive cash flow. A property might look profitable based on gross rent, but once you factor in vacancy rates (typically 5-8%), maintenance reserves (5-10%), and debt service, the actual cash return can diminish quickly.
Use this tool to stress-test your investment: try increasing the interest rate or vacancy rate to see if the deal still makes sense in a worst-case scenario.
function calculateROI() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPercent = parseFloat(document.getElementById('downPaymentPercent').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var loanTerm = parseFloat(document.getElementById('loanTerm').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var rehabCosts = parseFloat(document.getElementById('rehabCosts').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var annualTax = parseFloat(document.getElementById('annualPropertyTax').value);
var annualInsurance = parseFloat(document.getElementById('annualInsurance').value);
var monthlyHOA = parseFloat(document.getElementById('monthlyHOA').value);
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value);
var maintenanceRate = parseFloat(document.getElementById('maintenanceRate').value);
// Validation
if (isNaN(price) || price 0) {
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
if (monthlyRate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else {
monthlyMortgage = loanAmount / numberOfPayments;
}
}
// 4. Calculate Operating Expenses (Annual)
var grossAnnualIncome = monthlyRent * 12;
var annualVacancyCost = grossAnnualIncome * (vacancyRate / 100);
var annualMaintenanceCost = grossAnnualIncome * (maintenanceRate / 100);
var annualHOA = monthlyHOA * 12;
var totalOperatingExpenses = annualTax + annualInsurance + annualHOA + annualVacancyCost + annualMaintenanceCost;
// 5. Calculate Metrics
var netOperatingIncome = grossAnnualIncome – totalOperatingExpenses; // NOI
var annualDebtService = monthlyMortgage * 12;
var annualCashFlow = netOperatingIncome – annualDebtService;
var monthlyCashFlow = annualCashFlow / 12;
var cashOnCashReturn = 0;
if (totalInvested > 0) {
cashOnCashReturn = (annualCashFlow / totalInvested) * 100;
}
// 6. Update UI
document.getElementById('res_coc').innerText = cashOnCashReturn.toFixed(2) + "%";
document.getElementById('res_cashflow').innerText = formatCurrency(monthlyCashFlow);
document.getElementById('res_noi').innerText = formatCurrency(netOperatingIncome);
document.getElementById('res_total_invested').innerText = formatCurrency(totalInvested);
document.getElementById('res_mortgage').innerText = formatCurrency(monthlyMortgage);
// Styling based on result
var cocElement = document.getElementById('res_coc');
if(cashOnCashReturn >= 0) {
cocElement.style.color = "#fff"; // Kept white because background is primary color
} else {
cocElement.style.color = "#e74c3c"; // Red if negative, though background is primary.. let's change logic if needed, but white on dark blue is fine.
}
// Show results
document.getElementById('results-area').style.display = 'block';
}
function formatCurrency(num) {
return "$" + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}