.rp-calculator-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;
}
.rp-calc-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
@media (max-width: 600px) {
.rp-calc-grid {
grid-template-columns: 1fr;
}
}
.rp-input-group {
margin-bottom: 15px;
}
.rp-input-group label {
display: block;
font-weight: 600;
margin-bottom: 5px;
color: #333;
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: #2c3e50;
outline: none;
}
.rp-btn {
grid-column: span 2;
background-color: #27ae60;
color: white;
padding: 15px;
border: none;
border-radius: 4px;
font-size: 18px;
font-weight: bold;
cursor: pointer;
width: 100%;
margin-top: 10px;
transition: background-color 0.3s;
}
.rp-btn:hover {
background-color: #219150;
}
@media (max-width: 600px) {
.rp-btn {
grid-column: span 1;
}
}
.rp-results {
margin-top: 30px;
background: #fff;
padding: 20px;
border-radius: 6px;
box-shadow: 0 2px 5px rgba(0,0,0,0.05);
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: 700;
color: #2c3e50;
}
.rp-highlight {
color: #27ae60;
font-size: 1.2em;
}
.rp-negative {
color: #c0392b;
}
.rp-article {
margin-top: 40px;
line-height: 1.6;
color: #333;
}
.rp-article h2 {
font-size: 24px;
margin-bottom: 15px;
color: #2c3e50;
border-bottom: 2px solid #eee;
padding-bottom: 10px;
}
.rp-article h3 {
font-size: 20px;
margin-top: 25px;
margin-bottom: 10px;
color: #34495e;
}
.rp-article p {
margin-bottom: 15px;
}
.rp-article ul {
margin-bottom: 15px;
padding-left: 20px;
}
.rp-article li {
margin-bottom: 8px;
}
Rental Property Cash-on-Cash Return Calculator
Investment Analysis
$0.00
$0.00
$0.00
$0.00
0.00%
$0.00
Understanding Cash-on-Cash Return for Rental Properties
Investing in real estate requires analyzing specific metrics to ensure your capital is working efficiently. Unlike a standard Return on Investment (ROI) calculation that might include property appreciation or loan paydown, the Cash-on-Cash Return focuses strictly on the liquid cash flow relative to the cash you actually put into the deal.
How is Cash-on-Cash Return Calculated?
The formula is straightforward but powerful for investors comparing different rental opportunities:
Cash-on-Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
Key Components of the Calculation
- Annual Cash Flow: This is your gross annual rental income minus all expenses (mortgage principal and interest, taxes, insurance, HOA fees, vacancy reserves, maintenance, and property management).
- Total Cash Invested: This is not the price of the home. It is the sum of your down payment, closing costs, inspection fees, and any immediate repair or renovation costs paid out of pocket to get the property rent-ready.
What is a “Good” Cash-on-Cash Return?
While answers vary based on the investor’s goals and the risk level of the neighborhood, most seasoned real estate investors look for a return between 8% and 12%. Returns higher than 15% are often found in lower-cost areas but may come with higher tenant turnover risks. A return lower than 5% might suggest the property is better suited as an appreciation play rather than a cash flow generator.
Why Use This Calculator?
This calculator helps you instantly determine if a rental property will generate positive cash flow. By inputting your specific loan terms, rental income, and operating expenses, you can avoid negative leverage situations where the cost of borrowing exceeds the income generated by the asset.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById(“rp_price”).value);
var closingCosts = parseFloat(document.getElementById(“rp_closing”).value);
var downPayment = parseFloat(document.getElementById(“rp_down”).value);
var interestRate = parseFloat(document.getElementById(“rp_rate”).value);
var years = parseFloat(document.getElementById(“rp_term”).value);
var rent = parseFloat(document.getElementById(“rp_rent”).value);
var expenses = parseFloat(document.getElementById(“rp_expenses”).value);
// 2. Validate Inputs
if (isNaN(price) || isNaN(downPayment) || isNaN(interestRate) || isNaN(years) || isNaN(rent) || isNaN(expenses)) {
alert(“Please fill in all fields with valid numbers.”);
return;
}
if (downPayment > price) {
alert(“Down payment cannot be greater than the purchase price.”);
return;
}
// 3. Calculate Mortgage Payment (Principal & Interest)
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = years * 12;
var mortgagePayment = 0;
if (interestRate === 0) {
mortgagePayment = loanAmount / numberOfPayments;
} else {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// 4. Calculate Cash Flow
var totalMonthlyExpenses = mortgagePayment + expenses;
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 5. Calculate Cash on Cash Return
// Total Invested = Down Payment + Closing Costs + Rehab (User input ‘closing’ covers rehab/closing)
var totalInvested = downPayment + (isNaN(closingCosts) ? 0 : closingCosts);
var cocReturn = 0;
if (totalInvested > 0) {
cocReturn = (annualCashFlow / totalInvested) * 100;
}
// 6. Format and Display Results
var formatter = new Intl.NumberFormat(‘en-US’, {
style: ‘currency’,
currency: ‘USD’,
minimumFractionDigits: 2
});
document.getElementById(“res_mortgage”).innerText = formatter.format(mortgagePayment);
document.getElementById(“res_total_exp”).innerText = formatter.format(totalMonthlyExpenses);
var mFlowEl = document.getElementById(“res_monthly_cf”);
mFlowEl.innerText = formatter.format(monthlyCashFlow);
if (monthlyCashFlow < 0) { mFlowEl.className = "rp-result-value rp-negative"; }
else { mFlowEl.className = "rp-result-value rp-highlight"; }
var aFlowEl = document.getElementById("res_annual_cf");
aFlowEl.innerText = formatter.format(annualCashFlow);
if (annualCashFlow < 0) { aFlowEl.className = "rp-result-value rp-negative"; }
else { aFlowEl.className = "rp-result-value rp-highlight"; }
var cocEl = document.getElementById("res_coc");
cocEl.innerText = cocReturn.toFixed(2) + "%";
if (cocReturn < 0) { cocEl.className = "rp-result-value rp-negative"; }
else { cocEl.className = "rp-result-value rp-highlight"; }
document.getElementById("res_invested").innerText = formatter.format(totalInvested);
// Show results area
document.getElementById("rp_results_area").style.display = "block";
}