Analyze your real estate investment's potential cash flow and return on investment.
Down Payment Amount:$0.00
Monthly Mortgage Payment:$0.00
Total Monthly Expenses:$0.00
Monthly Net Cash Flow:$0.00
Cap Rate:0.00%
Cash-on-Cash Return:0.00%
Understanding Rental Property ROI
Investing in real estate requires a clear understanding of the numbers. Our Rental Property ROI Calculator helps you determine if a property is a "good deal" by calculating the most critical metrics: Cash-on-Cash Return and Net Cash Flow.
What is Cash-on-Cash Return?
Cash-on-Cash (CoC) return is the ratio of annual before-tax cash flow to the total amount of cash invested. Unlike a standard ROI, which might include appreciation and equity build-up, CoC focuses specifically on the physical cash you put in versus the cash you get back each year.
Key Factors in Your Calculation
Purchase Price: The total agreed price of the property.
Down Payment: The upfront capital you provide (typically 20-25% for investment loans).
Mortgage Payment: Calculated using the principal and interest based on current market rates.
Operating Expenses: These include property taxes, homeowners insurance, property management fees, repairs, and vacancy reserves.
Real-World Example
Imagine purchasing a condo for $250,000 with a 20% down payment ($50,000). If your monthly rent is $2,200 and your total expenses (mortgage + taxes + insurance) are $1,800, your monthly cash flow is $400. Your annual cash flow is $4,800. Dividng $4,800 by your initial $50,000 investment results in a 9.6% Cash-on-Cash return.
What is a Good ROI?
In most markets, a Cash-on-Cash return between 8% and 12% is considered excellent. However, this depends on the risk profile of the area and the potential for property value appreciation over time.
function calculateRentalROI() {
var price = parseFloat(document.getElementById("propPrice").value);
var downPercent = parseFloat(document.getElementById("downPayPercent").value);
var interestRate = parseFloat(document.getElementById("intRate").value) / 100 / 12;
var termMonths = parseFloat(document.getElementById("loanTerm").value) * 12;
var rent = parseFloat(document.getElementById("monthlyRent").value);
var otherExp = parseFloat(document.getElementById("monthlyExp").value);
if (isNaN(price) || isNaN(downPercent) || isNaN(rent)) {
alert("Please enter valid numbers for price, down payment, and rent.");
return;
}
// Calculations
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
// Mortgage Formula: P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var mortgagePayment = 0;
if (interestRate > 0) {
var x = Math.pow(1 + interestRate, termMonths);
mortgagePayment = (loanAmount * x * interestRate) / (x – 1);
} else {
mortgagePayment = loanAmount / termMonths;
}
var totalMonthlyOutlay = mortgagePayment + otherExp;
var monthlyCashFlow = rent – totalMonthlyOutlay;
var annualCashFlow = monthlyCashFlow * 12;
// Cash-on-Cash Return (Annual Cash Flow / Total Cash Invested)
// For simplicity, we assume cash invested = down payment.
// In complex deals, this would include closing costs.
var cocReturn = (annualCashFlow / downPaymentAmount) * 100;
// Cap Rate (Annual Net Operating Income / Purchase Price)
var annualNOI = (rent – otherExp) * 12;
var capRate = (annualNOI / price) * 100;
// Display Results
document.getElementById("resDownPay").innerText = "$" + downPaymentAmount.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resMortgage").innerText = "$" + mortgagePayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resTotalExp").innerText = "$" + totalMonthlyOutlay.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resCashFlow").innerText = "$" + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resCapRate").innerText = capRate.toFixed(2) + "%";
document.getElementById("resCoC").innerText = cocReturn.toFixed(2) + "%";
// Set colors for cash flow
if (monthlyCashFlow < 0) {
document.getElementById("resCashFlow").style.color = "#e74c3c";
document.getElementById("resCoC").style.color = "#e74c3c";
} else {
document.getElementById("resCashFlow").style.color = "#27ae60";
document.getElementById("resCoC").style.color = "#27ae60";
}
document.getElementById("roiResults").style.display = "block";
}