Calculate your monthly savings and break-even point.
30 Years
20 Years
15 Years
10 Years
Usually 2% to 5% of the loan amount.
Calculation Results
New Monthly Payment:
$0.00
Monthly Savings:
$0.00
Break-Even Period:
0 Months
Total Savings (Life of Loan):
$0.00
How Does a Mortgage Refinance Work?
Refinancing involves replacing your current home loan with a new one, typically to take advantage of lower interest rates, shorten the loan term, or switch from an adjustable-rate mortgage (ARM) to a fixed-rate mortgage. By using our Mortgage Refinance Savings Calculator, you can determine if the long-term benefits outweigh the upfront costs.
Understanding the Break-Even Point
The break-even point is the most critical metric when deciding to refinance. It represents the number of months it will take for your monthly savings to cover the upfront closing costs. For example:
If your closing costs are $4,000
And your monthly savings are $200
Your break-even point is 20 months ($4,000 / $200)
If you plan to stay in your home longer than 20 months, refinancing makes financial sense.
Common Reasons to Refinance
Lower Your Interest Rate: Reducing your rate by even 0.75% to 1% can save tens of thousands of dollars in interest.
Shorten the Loan Term: Moving from a 30-year to a 15-year mortgage allows you to build equity faster and pay off your home sooner.
Cash-Out Refinance: Accessing your home equity for debt consolidation or home improvements.
Remove PMI: If your home value has increased, refinancing might help you eliminate Private Mortgage Insurance.
Example Calculation
Imagine you have a $350,000 balance at 7.5% interest. If you refinance to a new 30-year loan at 6.25% with $6,000 in closing costs:
Current Payment (Principal & Interest): ~$2,447
New Payment: ~$2,155
Monthly Savings: $292
Break-Even: ~21 months
function calculateRefiSavings() {
var balance = parseFloat(document.getElementById('refi_balance').value);
var oldPayment = parseFloat(document.getElementById('refi_old_payment').value);
var interestRate = parseFloat(document.getElementById('refi_new_rate').value);
var termYears = parseInt(document.getElementById('refi_new_term').value);
var costs = parseFloat(document.getElementById('refi_costs').value);
if (isNaN(balance) || isNaN(oldPayment) || isNaN(interestRate) || isNaN(costs) || balance <= 0) {
alert("Please enter valid positive numbers for all fields.");
return;
}
// Monthly interest rate
var monthlyRate = (interestRate / 100) / 12;
// Total number of payments
var totalPayments = termYears * 12;
// Monthly Payment Formula: P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var newPayment = balance * (monthlyRate * Math.pow(1 + monthlyRate, totalPayments)) / (Math.pow(1 + monthlyRate, totalPayments) – 1);
var monthlySavings = oldPayment – newPayment;
var breakEven = costs / monthlySavings;
// Total savings over life of loan: (Old monthly * new term months) – (New monthly * new term months) – costs
// This is a simplified view assuming the user was going to pay the old amount for the same duration.
// Better logic: Total payments over the NEW term length minus costs.
var totalSavings = (monthlySavings * totalPayments) – costs;
// Update DOM
document.getElementById('res_new_payment').innerText = "$" + newPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_monthly_savings').innerText = "$" + monthlySavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (monthlySavings <= 0) {
document.getElementById('res_breakeven').innerText = "Never (No savings)";
document.getElementById('res_monthly_savings').style.color = "#e74c3c";
document.getElementById('res_total_savings').innerText = "$0.00";
} else {
document.getElementById('res_breakeven').innerText = Math.ceil(breakEven) + " Months";
document.getElementById('res_monthly_savings').style.color = "#27ae60";
document.getElementById('res_total_savings').innerText = "$" + totalSavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
document.getElementById('refi_results').style.display = 'block';
}