#rental-roi-tool-wrapper .calc-box {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 8px;
padding: 25px;
margin-bottom: 40px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
#rental-roi-tool-wrapper .input-group {
margin-bottom: 15px;
display: flex;
flex-direction: column;
}
#rental-roi-tool-wrapper label {
font-weight: 600;
margin-bottom: 5px;
color: #2c3e50;
font-size: 14px;
}
#rental-roi-tool-wrapper input {
padding: 12px;
border: 1px solid #ced4da;
border-radius: 4px;
font-size: 16px;
transition: border-color 0.2s;
}
#rental-roi-tool-wrapper input:focus {
border-color: #2ecc71;
outline: none;
}
#rental-roi-tool-wrapper .calc-btn {
background-color: #2ecc71;
color: white;
border: none;
padding: 15px 20px;
font-size: 18px;
font-weight: bold;
border-radius: 4px;
cursor: pointer;
width: 100%;
margin-top: 10px;
transition: background-color 0.2s;
}
#rental-roi-tool-wrapper .calc-btn:hover {
background-color: #27ae60;
}
#rental-roi-tool-wrapper .results-box {
background-color: #ffffff;
border: 2px solid #2ecc71;
border-radius: 6px;
padding: 20px;
margin-top: 25px;
display: none; /* Hidden by default */
}
#rental-roi-tool-wrapper .result-row {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
font-size: 15px;
border-bottom: 1px solid #eee;
padding-bottom: 5px;
}
#rental-roi-tool-wrapper .result-row:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
#rental-roi-tool-wrapper .highlight-result {
font-size: 28px;
color: #27ae60;
font-weight: 800;
text-align: center;
margin-top: 15px;
display: block;
}
#rental-roi-tool-wrapper .grid-2-col {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
@media (max-width: 600px) {
#rental-roi-tool-wrapper .grid-2-col {
grid-template-columns: 1fr;
gap: 0;
}
}
#rental-roi-tool-wrapper h2 {
margin-top: 0;
color: #2c3e50;
}
#rental-roi-tool-wrapper .seo-content h3 {
color: #2c3e50;
margin-top: 30px;
}
#rental-roi-tool-wrapper .seo-content p {
margin-bottom: 15px;
}
#rental-roi-tool-wrapper .help-text {
font-size: 12px;
color: #6c757d;
margin-top: 2px;
}
What is Cash-on-Cash Return?
Cash-on-Cash Return (CoC) is widely considered the most important metric for rental property investors. Unlike simple "Yield" or "Cap Rate," which look at the property's total value, Cash-on-Cash Return measures the percentage return specifically on the actual cash you invested out of pocket.
This metric allows you to compare the profitability of a rental property against other potential investments, such as the stock market, bonds, or high-yield savings accounts. It specifically highlights the power of leverage (using a mortgage) in real estate investing.
How to Calculate Rental Property ROI
The formula for Cash-on-Cash Return is relatively straightforward, but requires accurate inputs regarding your expenses.
Formula:
(Annual Pre-Tax Cash Flow / Total Cash Invested) × 100 = CoC Return %
1. Annual Cash Flow: This is calculated by taking your gross monthly rent and subtracting all monthly expenses (Mortgage Principal & Interest, Taxes, Insurance, HOA fees, Repairs, and Vacancy reserves). Multiply the monthly result by 12.
2. Total Cash Invested: This is the sum of your Down Payment, Closing Costs, and any immediate Rehab/Repair costs required to make the property rentable.
What is a "Good" Cash-on-Cash Return?
While every investor has different goals, most real estate experts consider a Cash-on-Cash return of 8% to 12% to be a solid benchmark for a good investment.
- 8-12%: Generally considered a safe, solid return that beats the average stock market performance.
- 15%+: Considered an excellent return, often found in cheaper markets or properties requiring significant work (BRRRR strategy).
- Below 5%: Unless the property is in a high-appreciation area (like San Francisco or NYC), a return this low implies the cash flow is too thin to cover unexpected repairs.
Why Cash Flow Matters More Than Appreciation
Novice investors often bank on the property value going up (appreciation). However, appreciation is speculative. Cash flow—the money left over every month after bills are paid—is tangible income. A high Cash-on-Cash return ensures your asset is paying you to own it, reducing the risk of foreclosure during market downturns.
function calculateRentalROI() {
// 1. Get Input Values
// Using parseFloat to ensure we work with numbers.
// '|| 0' handles empty inputs gracefully by defaulting to 0.
var downPayment = parseFloat(document.getElementById('downPayment').value) || 0;
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
var rehabCosts = parseFloat(document.getElementById('rehabCosts').value) || 0;
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var monthlyMortgage = parseFloat(document.getElementById('monthlyMortgage').value) || 0;
var otherExpenses = parseFloat(document.getElementById('otherExpenses').value) || 0;
// 2. Calculate Total Cash Invested
var totalInvested = downPayment + closingCosts + rehabCosts;
// 3. Calculate Cash Flow
var totalMonthlyExpenses = monthlyMortgage + otherExpenses;
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 4. Calculate ROI (Cash on Cash Return)
// Handle division by zero if user enters 0 for investment
var roi = 0;
if (totalInvested > 0) {
roi = (annualCashFlow / totalInvested) * 100;
}
// 5. Update the DOM with Results
// Currency formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('displayTotalInvested').innerText = formatter.format(totalInvested);
document.getElementById('displayMonthlyCashFlow').innerText = formatter.format(monthlyCashFlow);
document.getElementById('displayAnnualCashFlow').innerText = formatter.format(annualCashFlow);
// ROI Formatting
var roiElement = document.getElementById('displayROI');
roiElement.innerText = roi.toFixed(2) + "%";
// Visual Logic: Color code the result
if (roi = 12) {
roiElement.style.color = "#27ae60"; // Strong Green for excellent
} else if (roi >= 6) {
roiElement.style.color = "#f39c12"; // Orange for moderate
} else {
roiElement.style.color = "#7f8c8d"; // Grey for low
}
// Show results box
document.getElementById('resultsArea').style.display = 'block';
}