Mortgage Payment Amortization Calculator Extra Payment
by
Real Estate ROI & Cap Rate Calculator
Analyze your rental property profitability in seconds.
Property Details
(Tax, Ins, Maintenance, Vacancy)
Analysis Summary
Monthly Mortgage Payment:$0.00
Net Operating Income (NOI):$0.00
Monthly Cash Flow:$0.00
Cap Rate:0.00%
Cash on Cash Return:0.00%
Pro Tip: A "good" Cap Rate typically ranges between 4% and 10%, depending on the market and property type.
How to Use the Rental Property ROI Calculator
Investing in real estate requires more than just a gut feeling. To ensure a property is a sound investment, you need to crunch the numbers. This calculator helps you determine the most critical metrics used by professional real estate investors: Cap Rate and Cash-on-Cash Return.
Key Definitions
Cap Rate (Capitalization Rate): Calculated as Net Operating Income (NOI) divided by the Purchase Price. It represents the natural rate of return for a property without considering financing.
Cash-on-Cash Return: The ratio of annual before-tax cash flow to the total amount of cash invested. This is crucial for investors using leverage (mortgages).
Net Operating Income (NOI): Your total annual income minus all operating expenses. It does not include mortgage payments or taxes.
Monthly Cash Flow: The amount of profit left over after all bills, including the mortgage, have been paid each month.
Example Calculation
Imagine you buy a duplex for $300,000 with a 20% down payment ($60,000). Your monthly rent is $2,500 and your operating expenses (taxes, insurance, and repairs) average $700 per month.
1. Annual NOI: ($2,500 rent – $700 expenses) * 12 = $21,600.
2. Cap Rate: $21,600 / $300,000 = 7.2%.
3. Cash Flow: If your mortgage is $1,500/mo, your net cash flow is $2,500 – $700 – $1,500 = $300/month.
What is a Good ROI?
Most investors aim for a Cash-on-Cash return of 8-12% and a Cap Rate between 5-8% in stable markets. However, these targets can change based on location. In "Appreciation Markets" like San Francisco or NYC, Cap Rates might be lower (2-4%), while in "Cash Flow Markets" like the Midwest, you might see Cap Rates above 10%.
function calculateRentalROI() {
var price = parseFloat(document.getElementById("purchasePrice").value);
var down = parseFloat(document.getElementById("downPayment").value);
var rate = parseFloat(document.getElementById("interestRate").value);
var rent = parseFloat(document.getElementById("monthlyRent").value);
var expenses = parseFloat(document.getElementById("monthlyExpenses").value);
if (isNaN(price) || isNaN(down) || isNaN(rate) || isNaN(rent) || isNaN(expenses)) {
alert("Please enter valid numeric values.");
return;
}
// Mortgage Calculation (30 year fixed as standard)
var loanAmount = price – down;
var monthlyRate = (rate / 100) / 12;
var numberOfPayments = 360; // 30 years
var mortgagePayment = 0;
if (loanAmount > 0) {
mortgagePayment = (loanAmount * monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// Net Operating Income (Annual)
var annualGrossRent = rent * 12;
var annualExpenses = expenses * 12;
var annualNOI = annualGrossRent – annualExpenses;
// Cap Rate
var capRate = (annualNOI / price) * 100;
// Monthly Cash Flow
var monthlyCashFlow = rent – expenses – mortgagePayment;
var annualCashFlow = monthlyCashFlow * 12;
// Cash on Cash Return
var cocReturn = 0;
if (down > 0) {
cocReturn = (annualCashFlow / down) * 100;
}
// Update UI
document.getElementById("resMortgage").innerText = "$" + mortgagePayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resNOI").innerText = "$" + (annualNOI / 12).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " /mo";
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) + "%";
}
// Run calculation on load
window.onload = function() {
calculateRentalROI();
};