Easy Mortgage Calculator logo — house with growth chart and calculator

Free · No sign-up · Multi-language

Easy Mortgage
Calculator

The mortgage calculator that speaks your language — all 12 of them. From New York to Tokyo, Madrid to Mumbai, built for homebuyers everywhere. Full amortization, escrow breakdown, overpayment savings, and exportable schedules — free, no sign-up, no catch.

Language
Loan Details
$
$20%
%
Years 30
Months 0
Total: 30 years
Include Escrow (Tax & Insurance)

* Note: Escrow fees are not fixed. Insurance costs, tax rates, and other fees often vary over time.

$
$
$
$
$
Overpayment Savings Calculator
Amortization Schedule
Export Results

PDF uses print layout · Excel includes full amortization schedule and yearly summary on separate sheets

Your payment summary

Monthly Payment
Total Cost
Total Interest
Payoff Date
Export Results

PDF uses print layout · Excel includes full amortization schedule and yearly summary on separate sheets

Spread the word

Find this useful?

Bookmark this page or share it with someone buying a home — completely free, no sign-up required.

⚠️ Important: Protect Yourself from Predatory Lenders

Not all lenders are created equal. Predatory lenders use deceptive tactics — inflated fees, high-pressure sales, hidden terms, and unfair interest rates — that can trap borrowers in unmanageable debt. Always research your lender thoroughly, compare at least 3 offers, and never sign anything you don't fully understand. If a deal sounds too good to be true, it probably is.

Pressure to sign quickly
Fees not clearly disclosed
Rate bait-and-switch at closing
Loan flipping or repeated refinancing
Balloon payments buried in terms
Requests to falsify income or documents
Official Government Resources

Trusted Resources to Protect You

These are official U.S. government and nonprofit resources — completely free, no strings attached. Use them to educate yourself before choosing a lender.

These links go directly to official .gov and nonprofit websites. Easy Mortgage Calculator has no affiliate relationship with any of these organizations — they are provided purely as a public service.

How to Use the Easy Mortgage Calculator

1

Enter Your Loan Details

Input your home purchase price, down payment amount, annual interest rate, and loan term (10, 15, 20, or 30 years). Your down payment percentage is calculated automatically.

2

Add Escrow & Fees

Toggle the escrow section to include property taxes, homeowner's insurance, PMI (private mortgage insurance), HOA dues, and any other miscellaneous monthly fees for a complete payment picture.

3

Review Your Amortization Schedule

See every payment broken down by principal, interest, and escrow. Switch between the monthly and yearly summary views. Use the first payment date picker to generate accurate payment dates.

4

Export Your Results

Download a print-ready PDF or a full Excel spreadsheet with monthly and yearly amortization schedules on separate tabs — perfect for sharing with your lender or financial advisor.

5

Already Have a Mortgage? See How Much Overpaying Saves You

If you're already part way through your mortgage, set the loan term to your remaining term, enter your current outstanding balance as the home price with $0 down payment, and your current interest rate. Then open the Overpayment Savings Calculator and enter any extra monthly amount to see how many months you save and how much interest you avoid.

Frequently Asked Questions

What is a fixed-rate mortgage?

A fixed-rate mortgage has an interest rate that stays the same for the entire loan term, so your principal and interest payment never changes. This makes budgeting predictable. Common terms are 15 and 30 years. The longer the term, the lower your monthly payment — but the more total interest you pay over time.

How is my monthly mortgage payment calculated?

Your monthly principal and interest payment is calculated using the standard amortization formula: M = P × [r(1+r)ⁿ] / [(1+r)ⁿ−1], where P is the loan principal, r is the monthly interest rate (annual rate ÷ 12), and n is the total number of payments. Escrow costs (taxes, insurance, PMI, HOA) are added on top of this.

What is included in my total monthly payment?

Your total monthly mortgage payment typically includes: (1) Principal — the portion that reduces your loan balance, (2) Interest — the cost of borrowing, (3) Property taxes — usually collected monthly and held in escrow, (4) Homeowner's insurance — required by lenders, (5) PMI — required if your down payment is less than 20%, and (6) HOA or other fees if applicable.

How much down payment do I need?

Conventional loans typically require 5–20% down. Putting down 20% or more eliminates PMI and lowers your monthly payment. FHA loans allow as little as 3.5% down. VA and USDA loans may require no down payment for qualified buyers. A larger down payment reduces your loan balance, monthly payment, and total interest paid.

What is an amortization schedule?

An amortization schedule is a complete table showing every loan payment over the life of the mortgage. Each row shows the payment date, total payment amount, how much goes to principal vs. interest, any escrow amounts, and your remaining loan balance. Early payments are mostly interest; later payments become mostly principal.

Are these results accurate?

This calculator provides estimates based on the information you enter. Actual loan terms, rates, taxes, insurance premiums, and fees vary by lender, location, and individual circumstances. Results should be used for planning purposes only. Always consult a licensed mortgage professional for personalized advice before making financial decisions.

About this site?

Easy Mortgage Calculator is a family side project, built with the hope of creating something genuinely useful for people navigating one of the biggest financial decisions of their lives. We built one that speaks 12 languages and works equally well whether you're buying a home in New York, Madrid, Tokyo, or Mumbai. If it saves you time, helps you understand your mortgage a little better, or shows you how much an extra payment could save — that's what we set out to do. We hope in time to grow this into a small but meaningful monthly income to help make ends meet, one helpful tool at a time. Thank you for your support!

'; const w=window.open('','_blank');if(w){w.document.write(html);w.document.close();} } // ── OVERPAYMENT SAVINGS ── function calcOverpayment(){ const toggle=document.getElementById('overpay-toggle'); const results=document.getElementById('overpay-results'); const zero=document.getElementById('overpay-zero'); if(!toggle||!toggle.checked){ overpaySchedule=[]; if(results)results.style.display='none'; if(zero)zero.style.display='flex'; resetSummaryPanel(); renderMonthly(); return; } const extra=parseFloat(document.getElementById('extra-payment').value)||0; const lump=parseFloat(document.getElementById('lump-sum').value)||0; if((extra<=0&&lump<=0)||schedule.length===0){ overpaySchedule=[]; if(results)results.style.display='none'; if(zero)zero.style.display='flex'; resetSummaryPanel(); renderMonthly(); return; } if(results)results.style.display='block'; if(zero)zero.style.display='none'; // Rebuild schedule with overpayments const hp=parseFloat(document.getElementById('home-price').value)||0; const dp=parseFloat(document.getElementById('down-payment').value)||0; const r=parseFloat(document.getElementById('rate').value)||0; const ptax=parseFloat(document.getElementById('prop-tax').value)||0; const ins=parseFloat(document.getElementById('home-ins').value)||0; const pmi=parseFloat(document.getElementById('pmi').value)||0; const hoa=parseFloat(document.getElementById('hoa').value)||0; const other=parseFloat(document.getElementById('other-fees').value)||0; const principal=hp-dp; const n=getTermMonths(); const monthly=calcMonthly(principal,r,n); const mr=r/100/12; const escrow=showEscrow?(ptax/12+ins/12+pmi+hoa+other):0; overpaySchedule=[]; let bal=principal-lump; if(bal<0)bal=0; let {year,month,day}={...selDate}; let totalInterestNew=0; let rowNum=1; while(bal>0&&rowNum<=n){ const int=bal*mr; // interest this month const regPri=monthly-int; // regular principal from standard payment const extraThisRow=extra; // extra toward principal const totalPriReduction=regPri+extraThisRow; // Don't overpay beyond remaining balance const actualExtra=Math.min(extraThisRow, Math.max(0, bal-regPri)); const actualPri=Math.min(regPri+actualExtra, bal); bal-=actualPri; if(bal<0)bal=0; totalInterestNew+=int; overpaySchedule.push({ num:rowNum,year,month,day, payment:monthly, principal:regPri, interest:int, escrow, extra:rowNum===1?actualExtra+lump:actualExtra, balance:bal }); rowNum++; month++;if(month>11){month=0;year++;} } // Compute savings const origMonths=schedule.length; const newMonths=overpaySchedule.length; const savedMonths=Math.max(0,origMonths-newMonths); const origInterest=schedule.reduce((s,row)=>s+row.interest,0); const savedInterest=Math.max(0,origInterest-totalInterestNew); const savedYears=Math.floor(savedMonths/12); const savedMos=savedMonths%12; // Display years / months separately const yearsEl=document.getElementById('os-years'); const monthsEl=document.getElementById('os-months'); const yearsLbl=document.getElementById('os-years-lbl'); const monthsLbl=document.getElementById('os-months-lbl'); if(yearsEl)yearsEl.textContent=savedYears>0?savedYears:'0'; if(monthsEl)monthsEl.textContent=savedMos>0?savedMos:'0'; if(yearsLbl)yearsLbl.textContent=savedYears===1?(L.yearWord||'year'):(L.yearsWord||'years'); if(monthsLbl)monthsLbl.textContent=savedMos===1?(L.monthWord||'month'):(L.monthsWord||'months'); document.getElementById('os-int').textContent=fmtC(savedInterest); // ── Update payment summary panel ── // Monthly extra row const extraRow=document.getElementById('m-monthly-extra-row'); const extraVal=document.getElementById('m-monthly-extra'); if(extraRow&&extraVal&&extra>0){ extraVal.textContent='+'+fmtC(extra); extraRow.style.display='flex'; } // Mute original values ['m-total','m-interest','m-payoff'].forEach(id=>{ const el=document.getElementById(id); if(el)el.classList.add('muted'); }); // Total cost with overpayment const newTotal=overpaySchedule.reduce((s,r)=>s+r.payment+(showEscrow?r.escrow:0),0)+(lump>0?lump:0); const totalOpEl=document.getElementById('m-total-op'); if(totalOpEl)totalOpEl.textContent=fmtC(newTotal); document.getElementById('m-total-op-row').style.display='flex'; // Interest with overpayment const newInt=overpaySchedule.reduce((s,r)=>s+r.interest,0); const intOpEl=document.getElementById('m-interest-op'); if(intOpEl)intOpEl.textContent=fmtC(newInt); document.getElementById('m-interest-op-row').style.display='flex'; // New payoff date if(overpaySchedule.length>0){ const last=overpaySchedule[overpaySchedule.length-1]; const payoffOpEl=document.getElementById('m-payoff-op'); if(payoffOpEl)payoffOpEl.textContent=new Date(last.year,last.month,last.day).toLocaleDateString(L.locale,{month:'long',year:'numeric'}); document.getElementById('m-payoff-op-row').style.display='flex'; } // New payoff date if(overpaySchedule.length>0){ const last=overpaySchedule[overpaySchedule.length-1]; document.getElementById('os-newdate').textContent=new Date(last.year,last.month,last.day).toLocaleDateString(L.locale,{month:'long',year:'numeric'}); } // Original payoff date if(schedule.length>0){ const orig=schedule[schedule.length-1]; document.getElementById('os-origdate').textContent=new Date(orig.year,orig.month,orig.day).toLocaleDateString(L.locale,{month:'long',year:'numeric'}); } // Progress bar const pct=Math.max(5,Math.round(newMonths/origMonths*100)); document.getElementById('op-bar-new').style.width=pct+'%'; // Refresh table to show overpay schedule with extra column currentPage=1; renderMonthly(); renderYearly(); } ['extra-payment','lump-sum'].forEach(id=>{ document.getElementById(id).addEventListener('input',calcOverpayment); }); document.getElementById('overpay-toggle').addEventListener('change',function(){ document.getElementById('overpay-body').style.display=this.checked?'block':'none'; calculate(); if(this.checked) calcOverpayment(); else { resetSummaryPanel(); renderYearly(); } }); // ── TERM SLIDERS ── function updateTermDisplay(){ const y=parseInt(document.getElementById('term-years-slider').value)||0; const m=parseInt(document.getElementById('term-months-slider').value)||0; document.getElementById('term-years-val').textContent=y; document.getElementById('term-months-val').textContent=m; // Sync hidden term field (in whole years for any legacy references) document.getElementById('term').value=y; // Update total display const yWord=y===1?(L.yearWord||'year'):(L.yearsWord||'years'); const mWord=m===1?(L.monthWord||'month'):(L.monthsWord||'months'); let display=''; if(y>0)display+=y+' '+yWord; if(m>0)display+=(display?' ':'')+m+' '+mWord; if(!display)display='0 '+(L.monthsWord||'months'); document.getElementById('term-total-display').textContent=(L.termTotal||'Total')+': '+display; // Clear active on quick-pick buttons document.querySelectorAll('.term-quick').forEach(b=>b.classList.remove('active')); // Re-highlight if matches a standard term if(m===0)[10,15,20,30].forEach(yr=>{ if(y===yr)document.getElementById('tq'+yr).classList.add('active'); }); calculate(); } function setQuickTerm(years){ document.getElementById('term-years-slider').value=years; document.getElementById('term-months-slider').value=0; updateTermDisplay(); } document.getElementById('term-years-slider').addEventListener('input',updateTermDisplay); document.getElementById('term-months-slider').addEventListener('input',updateTermDisplay); document.querySelectorAll('.term-quick').forEach(btn=>{ btn.addEventListener('click',()=>setQuickTerm(parseInt(btn.dataset.years))); }); // ── DONATE ── (function(){ document.querySelectorAll('.donate-btn').forEach(btn => { btn.addEventListener('click', () => { const thanks = document.getElementById('donate-thanks'); if(thanks) thanks.style.display = 'flex'; }); }); })(); buildLangBar();applyLang();buildCurrencyToggle();calculate();setupShare(); const yrEl=document.getElementById('footer-year');if(yrEl)yrEl.textContent=new Date().getFullYear();