Calculate how much interest and time you can save.
Please fill in all required fields with valid positive numbers.
Total Interest Saved
$0.00
Time Saved
0 Years, 0 Months
New Payoff Duration
0 Years, 0 Months
* Comparison based on your current remaining term versus the new term with extra payments.
Why Make Extra Mortgage Payments?
Paying off your mortgage early is one of the most effective risk-free investments you can make. By adding an extra amount to your monthly principal, you directly reduce the loan balance that accrues interest. Over the life of a 30-year loan, even a small extra payment like $100 a month can save you tens of thousands of dollars in interest.
How This Calculator Works
This Mortgage Extra Payment Calculator determines your potential savings by comparing two amortization schedules:
Standard Schedule: Your trajectory based on the remaining balance, interest rate, and term without any extra contribution.
Accelerated Schedule: The new trajectory when your extra monthly payment is applied directly to the principal every month.
The results highlight the "Time Saved" (how much sooner you will be debt-free) and "Total Interest Saved" (the hard cash kept in your pocket).
The Power of Amortization
In the early years of a mortgage, the majority of your payment goes toward interest. By making extra payments, you "skip ahead" in the amortization schedule. For example, a $200,000 loan at 6% interest over 30 years will cost roughly $231,000 in interest alone. Shortening that term by just 5 years could save you over $50,000.
Strategic Repayment Tips
Before aggressively paying down your mortgage, ensure you have an emergency fund and are contributing to tax-advantaged retirement accounts (like 401ks or IRAs). Once those financial pillars are in place, a guaranteed return of 5-7% (your mortgage rate) via debt reduction is often financially superior to keeping cash in a low-interest savings account.
function calculateMortgagePayoff() {
// 1. Get Inputs
var balanceInput = document.getElementById("loanBalance").value;
var rateInput = document.getElementById("interestRate").value;
var termInput = document.getElementById("remainingTerm").value;
var extraInput = document.getElementById("extraPayment").value;
var errorBox = document.getElementById("errorBox");
var resultSection = document.getElementById("resultSection");
// 2. Validate Inputs
if (balanceInput === "" || rateInput === "" || termInput === "") {
errorBox.style.display = "block";
resultSection.style.display = "none";
return;
}
var balance = parseFloat(balanceInput);
var annualRate = parseFloat(rateInput);
var years = parseFloat(termInput);
var extraPayment = parseFloat(extraInput);
if (isNaN(balance) || isNaN(annualRate) || isNaN(years) || balance <= 0 || years <= 0) {
errorBox.innerHTML = "Please enter valid positive numbers for Balance, Rate, and Term.";
errorBox.style.display = "block";
resultSection.style.display = "none";
return;
}
if (isNaN(extraPayment) || extraPayment 0.01 && monthsElapsed = currentBalance) {
interestForMonth = currentBalance * monthlyRate; // recalc exact interest on final sliver
totalInterestWithExtra += interestForMonth;
currentBalance = 0;
monthsElapsed++;
break;
}
totalInterestWithExtra += interestForMonth;
currentBalance -= principalForMonth;
monthsElapsed++;
}
// 4. Determine Results
var monthsSaved = totalMonthsOriginal – monthsElapsed;
// Prevent negative savings if extra payment is 0 or calculation quirks
if (monthsSaved < 0) monthsSaved = 0;
var interestSaved = totalInterestOriginal – totalInterestWithExtra;
if (interestSaved < 0) interestSaved = 0;
// Formatting Time Saved
var yearsSavedVal = Math.floor(monthsSaved / 12);
var remMonthsSavedVal = monthsSaved % 12;
// Formatting New Duration
var newYearsVal = Math.floor(monthsElapsed / 12);
var newMonthsVal = monthsElapsed % 12;
// 5. Update UI
document.getElementById("interestSavedDisplay").innerHTML = "$" + interestSaved.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("timeSavedDisplay").innerHTML = yearsSavedVal + " Years, " + remMonthsSavedVal + " Months";
document.getElementById("newDurationDisplay").innerHTML = newYearsVal + " Years, " + newMonthsVal + " Months";
resultSection.style.display = "block";
}