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);
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
}
.calculator-container {
background: #ffffff;
border: 1px solid #e1e4e8;
border-radius: var(–border-radius);
padding: 30px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
margin-bottom: 40px;
}
.calc-header {
text-align: center;
margin-bottom: 25px;
}
.calc-header h2 {
color: var(–primary-color);
margin: 0;
font-size: 24px;
}
.input-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
@media (max-width: 600px) {
.input-grid {
grid-template-columns: 1fr;
}
}
.input-group {
margin-bottom: 15px;
}
.input-group label {
display: block;
margin-bottom: 8px;
font-weight: 600;
font-size: 14px;
color: var(–primary-color);
}
.input-group input {
width: 100%;
padding: 12px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
transition: border-color 0.3s;
}
.input-group input:focus {
border-color: var(–accent-color);
outline: none;
}
.section-title {
grid-column: 1 / -1;
font-size: 18px;
font-weight: bold;
color: var(–primary-color);
border-bottom: 2px solid #eee;
padding-bottom: 10px;
margin-top: 10px;
margin-bottom: 15px;
}
button.calc-btn {
background-color: var(–accent-color);
color: white;
border: none;
padding: 15px 30px;
font-size: 18px;
font-weight: bold;
border-radius: var(–border-radius);
cursor: pointer;
width: 100%;
margin-top: 20px;
transition: background-color 0.2s;
}
button.calc-btn:hover {
background-color: #219150;
}
.results-area {
margin-top: 30px;
background-color: #f1f8f4;
border: 1px solid #d4edda;
border-radius: var(–border-radius);
padding: 20px;
display: none; /* Hidden by default */
}
.result-row {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
padding-bottom: 10px;
border-bottom: 1px solid #ddd;
}
.result-row:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.result-label {
font-weight: 600;
color: var(–primary-color);
}
.result-value {
font-weight: bold;
color: var(–text-color);
}
.highlight-result {
color: var(–accent-color);
font-size: 24px;
}
/* Article Styling */
.content-section {
margin-top: 50px;
}
.content-section h2 {
color: var(–primary-color);
margin-top: 30px;
}
.content-section p {
margin-bottom: 15px;
color: #4a4a4a;
}
.content-section ul {
margin-bottom: 20px;
padding-left: 20px;
}
.content-section li {
margin-bottom: 8px;
}
Calculate Returns
Total Cash Invested (Out of Pocket):
$0.00
Monthly Mortgage Payment (P&I):
$0.00
Total Monthly Expenses:
$0.00
Monthly Cash Flow:
$0.00
Annual Cash Flow:
$0.00
Cash-on-Cash Return:
0.00%
Understanding Cash-on-Cash Return in Real Estate
Cash-on-Cash Return (CoC) is one of the most popular metrics used by real estate investors to calculate the potential return on a rental property. Unlike standard Return on Investment (ROI), which might factor in loan paydown and appreciation, CoC specifically measures the cash income earned on the cash invested.
Why Use This Calculator?
Real estate investment requires balancing income against financing costs. A property might look profitable based on rent alone, but once you factor in mortgage payments, taxes, insurance, and maintenance, the cash flow might be negative. This calculator helps you determine exactly how hard your down payment is working for you.
The Formula
The formula used in this calculator is:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
Annual Cash Flow: (Gross Monthly Rent – Total Monthly Expenses – Mortgage Payment) × 12
Total Cash Invested: Down Payment + Closing Costs + Rehab Costs
What is a Good Cash-on-Cash Return?
"Good" is subjective and depends on the market and the investor's goals. However, many investors aim for:
8-12%: Solid return for average markets.
15%+: Excellent return, often found in higher-risk or lower-cost areas.
Below 5%: Often considered poor for pure cash flow investing, though investors might accept this if they bank on high appreciation.
Tips for Improving Your Returns
If the calculator shows a return lower than your target, consider these adjustments:
Negotiate Purchase Price: Lowering the entry price reduces your loan and down payment.
Increase Rent: Can you add value to the property to justify higher rent?
Shop for Financing: A lower interest rate significantly reduces monthly costs.
Reduce Vacancy: High vacancy rates kill cash flow. Ensure your projected vacancy expense is realistic.
function calculateROI() {
// 1. Get Input Values using var
var price = parseFloat(document.getElementById('purchasePrice').value);
var closing = parseFloat(document.getElementById('closingCosts').value);
var downPercent = parseFloat(document.getElementById('downPaymentPercent').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var termYears = parseFloat(document.getElementById('loanTerm').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var otherExpenses = parseFloat(document.getElementById('monthlyExpenses').value);
// 2. Validate Inputs
if (isNaN(price) || isNaN(downPercent) || isNaN(rent)) {
alert("Please enter valid numbers for Price, Down Payment, and Rent.");
return;
}
// Handle defaults for empty optional fields
if (isNaN(closing)) closing = 0;
if (isNaN(otherExpenses)) otherExpenses = 0;
if (isNaN(rate)) rate = 0;
if (isNaN(termYears)) termYears = 30;
// 3. Perform Calculations
// Calculate Loan Amount and Down Payment Amount
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
var totalCashInvested = downPaymentAmount + closing;
// Calculate Monthly Mortgage (P&I)
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var mortgagePayment = 0;
if (rate > 0 && termYears > 0 && loanAmount > 0) {
var monthlyRate = (rate / 100) / 12;
var numberOfPayments = termYears * 12;
mortgagePayment = loanAmount * monthlyRate * (Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
var totalMonthlyExpenses = mortgagePayment + otherExpenses;
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Calculate Cash on Cash Return
// Avoid division by zero
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// 4. Update the UI
document.getElementById('displayTotalInvested').innerText = formatCurrency(totalCashInvested);
document.getElementById('displayMortgage').innerText = formatCurrency(mortgagePayment);
document.getElementById('displayTotalExpenses').innerText = formatCurrency(totalMonthlyExpenses);
// Handle negative currency formatting
document.getElementById('displayMonthlyCashFlow').innerText = formatCurrency(monthlyCashFlow);
document.getElementById('displayMonthlyCashFlow').style.color = monthlyCashFlow >= 0 ? '#27ae60' : '#c0392b';
document.getElementById('displayAnnualCashFlow').innerText = formatCurrency(annualCashFlow);
document.getElementById('displayAnnualCashFlow').style.color = annualCashFlow >= 0 ? '#27ae60' : '#c0392b';
document.getElementById('displayCoC').innerText = cocReturn.toFixed(2) + "%";
document.getElementById('displayCoC').style.color = cocReturn >= 0 ? '#27ae60' : '#c0392b';
// Show result area
document.getElementById('resultArea').style.display = 'block';
}
function formatCurrency(num) {
return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(num);
}