.rp-calc-container {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background: #f9f9f9;
border: 1px solid #e0e0e0;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
}
.rp-calc-title {
text-align: center;
color: #2c3e50;
margin-bottom: 25px;
font-size: 28px;
}
.rp-row {
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-bottom: 15px;
}
.rp-col {
flex: 1;
min-width: 280px;
}
.rp-input-group {
margin-bottom: 15px;
}
.rp-input-group label {
display: block;
margin-bottom: 5px;
font-weight: 600;
color: #444;
font-size: 14px;
}
.rp-input-group input {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
}
.rp-input-group input:focus {
border-color: #3498db;
outline: none;
}
.rp-btn {
width: 100%;
padding: 15px;
background-color: #27ae60;
color: white;
border: none;
border-radius: 4px;
font-size: 18px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s;
margin-top: 10px;
}
.rp-btn:hover {
background-color: #219150;
}
.rp-results {
margin-top: 30px;
padding: 20px;
background-color: #fff;
border-left: 5px solid #27ae60;
border-radius: 4px;
display: none;
}
.rp-result-row {
display: flex;
justify-content: space-between;
padding: 10px 0;
border-bottom: 1px solid #eee;
}
.rp-result-row:last-child {
border-bottom: none;
}
.rp-result-label {
color: #555;
font-weight: 500;
}
.rp-result-value {
font-weight: bold;
color: #2c3e50;
font-size: 18px;
}
.rp-highlight {
color: #27ae60;
font-size: 22px;
}
.rp-article {
margin-top: 50px;
line-height: 1.6;
color: #333;
}
.rp-article h2 {
color: #2c3e50;
margin-top: 30px;
border-bottom: 2px solid #eee;
padding-bottom: 10px;
}
.rp-article ul {
margin-bottom: 20px;
padding-left: 20px;
}
.rp-article li {
margin-bottom: 10px;
}
.error-msg {
color: #c0392b;
text-align: center;
margin-top: 10px;
display: none;
font-weight: bold;
}
@media (max-width: 600px) {
.rp-row {
flex-direction: column;
gap: 0;
}
}
Rental Property Cash on Cash Return Calculator
Purchase Info
Purchase Price ($)
Down Payment (%)
Closing/Rehab Costs ($)
Interest Rate (%)
Loan Term (Years)
Income & Expenses
Monthly Rental Income ($)
Vacancy Rate (%)
Management Fee (%)
Annual Property Tax ($)
Annual Insurance ($)
Annual Maintenance ($)
Calculate Returns
Please enter valid numerical values for all fields.
Investment Analysis
Total Cash Invested (Upfront):
$0.00
Monthly Mortgage Payment:
$0.00
Total Monthly Expenses (incl. Mortgage):
$0.00
Monthly Cash Flow:
$0.00
Annual Cash Flow:
$0.00
Cash on Cash Return (CoC):
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. Unlike standard ROI which might account for loan paydown or appreciation, Cash on Cash strictly measures the liquid cash flow relative to the actual dollars you put into the deal.
The formula is: (Annual Pre-Tax Cash Flow / Total Cash Invested) x 100% .
Why Use This Calculator?
Real estate investors use this tool to determine the efficiency of their capital. If you buy a rental property for $300,000, but only put $60,000 down, your return should be based on the $60,000, not the total purchase price. This calculator accounts for:
Vacancy Rates: The realistic percentage of time the unit sits empty.
Management Fees: The cost of hiring a property manager (usually 8-10% of rent).
Operating Expenses: Taxes, insurance, and maintenance reserves.
Leverage: The impact of your mortgage interest rate on your cash flow.
What is a "Good" Cash on Cash Return?
While every investor has different goals, general benchmarks include:
8-12%: Considered a solid return in most stable markets.
15%+: Excellent return, often found in lower-cost markets or properties requiring renovation ("value-add").
Below 5%: Generally considered low for a pure rental play, unless you are banking heavily on appreciation.
How to Improve Your ROI
If your calculation shows a low return, consider these levers:
Reduce Vacancy: Improve tenant retention or market the property better.
Raise Rent: Is your property renting below market value? Strategic upgrades can justify rent increases.
Refinance: Lowering your interest rate reduces monthly debt service, instantly boosting cash flow.
function calculateRentalROI() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('rp_price').value);
var downPct = parseFloat(document.getElementById('rp_down').value);
var closing = parseFloat(document.getElementById('rp_closing').value);
var rate = parseFloat(document.getElementById('rp_rate').value);
var term = parseFloat(document.getElementById('rp_term').value);
var rent = parseFloat(document.getElementById('rp_rent').value);
var vacancyPct = parseFloat(document.getElementById('rp_vacancy').value);
var mgmtPct = parseFloat(document.getElementById('rp_mgmt').value);
var tax = parseFloat(document.getElementById('rp_tax').value);
var insurance = parseFloat(document.getElementById('rp_insurance').value);
var maint = parseFloat(document.getElementById('rp_maint').value);
// Validation
if (isNaN(price) || isNaN(downPct) || isNaN(rent) || isNaN(rate) || isNaN(term)) {
document.getElementById('rp_error').style.display = 'block';
document.getElementById('rp_results').style.display = 'none';
return;
} else {
document.getElementById('rp_error').style.display = 'none';
}
// Handle optional fields as 0 if empty/NaN
closing = isNaN(closing) ? 0 : closing;
vacancyPct = isNaN(vacancyPct) ? 0 : vacancyPct;
mgmtPct = isNaN(mgmtPct) ? 0 : mgmtPct;
tax = isNaN(tax) ? 0 : tax;
insurance = isNaN(insurance) ? 0 : insurance;
maint = isNaN(maint) ? 0 : maint;
// 2. Mortgage Calculation
var downAmount = price * (downPct / 100);
var loanAmount = price – downAmount;
var monthlyRate = (rate / 100) / 12;
var totalMonths = term * 12;
var monthlyMortgage = 0;
if (rate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalMonths)) / (Math.pow(1 + monthlyRate, totalMonths) – 1);
} else {
monthlyMortgage = loanAmount / totalMonths;
}
// 3. Income Calculation
var grossAnnualRent = rent * 12;
var vacancyLoss = grossAnnualRent * (vacancyPct / 100);
var effectiveGrossIncome = grossAnnualRent – vacancyLoss;
// 4. Expense Calculation
var annualMgmtFee = effectiveGrossIncome * (mgmtPct / 100); // Usually charged on collected rent
var annualOperatingExpenses = tax + insurance + maint + annualMgmtFee;
var annualDebtService = monthlyMortgage * 12;
var totalAnnualExpenses = annualOperatingExpenses + annualDebtService;
// 5. Results
var annualCashFlow = effectiveGrossIncome – totalAnnualExpenses;
var monthlyCashFlow = annualCashFlow / 12;
var totalInvested = downAmount + closing;
var cashOnCash = 0;
if (totalInvested > 0) {
cashOnCash = (annualCashFlow / totalInvested) * 100;
}
// 6. Display formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('res_invested').innerHTML = formatter.format(totalInvested);
document.getElementById('res_mortgage').innerHTML = formatter.format(monthlyMortgage);
document.getElementById('res_expenses').innerHTML = formatter.format(totalAnnualExpenses / 12);
var cfElement = document.getElementById('res_monthly_cf');
cfElement.innerHTML = formatter.format(monthlyCashFlow);
cfElement.style.color = monthlyCashFlow >= 0 ? '#2980b9' : '#c0392b';
var annualCfElement = document.getElementById('res_annual_cf');
annualCfElement.innerHTML = formatter.format(annualCashFlow);
annualCfElement.style.color = annualCashFlow >= 0 ? '#2980b9' : '#c0392b';
var cocElement = document.getElementById('res_coc');
cocElement.innerHTML = cashOnCash.toFixed(2) + '%';
cocElement.style.color = cashOnCash >= 0 ? '#27ae60' : '#c0392b';
document.getElementById('rp_results').style.display = 'block';
}