Mortgage Amortization Schedule Generator

Enter Mortgage Loan Details

If start date is provided, the schedule will show actual dates.

Amortization Schedule & Loan Summary

Pmt No. Date Beginning Balance Payment Extra Payment Total Payment Interest Principal Ending Balance Cum. Interest Cum. Principal

Schedule will appear here after generation.

Original Term: ${Math.floor(data.totalOriginalTermMonths/12)} years, ${data.totalOriginalTermMonths % 12} months

Scheduled Monthly P&I: $${fNum(data.scheduledMonthlyPayment)}

${data.extraPayment > 0 ? `

Extra Monthly Payment: $${fNum(data.extraPayment)}

` : ''}

Actual Payoff Time: ${data.payoffDateFormatted} (${Math.floor(data.actualTermMonths/12)} years, ${data.actualTermMonths % 12} months)

Total Principal Paid: $${fNum(data.loanAmount)}

Total Interest Paid: $${fNum(data.cumulativeInterest)}

Total Payments Made: $${fNum(data.totalPaidWithExtra)}

`; if (data.extraPayment > 0) { summaryHTML += `

Term Shortened By: ${Math.floor(data.termShortenedMonths/12)} years, ${data.termShortenedMonths % 12} months

Interest Saved: $${fNum(data.interestSaved)}

`; } this.elements.summaryOutput.innerHTML = summaryHTML; let tableHTML = ''; data.schedule.forEach(row => { tableHTML += ` ${row.paymentNumber} ${row.date} $${fNum(row.beginningBalance)} $${fNum(row.scheduledPayment)} $${fNum(row.extraPayment)} $${fNum(row.totalPayment)} $${fNum(row.interestPaid)} $${fNum(row.principalPaid)} $${fNum(row.endingBalance)} $${fNum(row.cumulativeInterest)} $${fNum(row.cumulativePrincipal)} `; }); this.elements.scheduleTableBody.innerHTML = tableHTML; if (this.elements.tablePlaceholder) this.elements.tablePlaceholder.style.display = 'none'; if (this.elements.pdfDownloadContainer) this.elements.pdfDownloadContainer.style.display = 'block'; }, downloadPdf: function() { try { if (typeof window.jspdf === 'undefined' || typeof window.jspdf.jsPDF === 'undefined') { alert('PDF generation library (jsPDF core) is not loaded.'); console.error('window.jspdf or window.jspdf.jsPDF is not defined.'); return; } const { jsPDF: JSPDF_CONSTRUCTOR } = window.jspdf; const doc = new JSPDF_CONSTRUCTOR('l', 'pt', 'a4'); // Landscape, points, A4 if (typeof doc.autoTable !== 'function') { alert('PDF generation plugin (jsPDF-Autotable) is not loaded.'); console.error('doc.autoTable is not a function.'); return; } if (!this.calculatedData || !this.calculatedData.schedule || this.calculatedData.schedule.length === 0) { alert('Error: Schedule data missing.'); console.error('PDF error: this.calculatedData.schedule empty.'); return; } const data = this.calculatedData; const fNum = (num) => (typeof num !== 'number' || isNaN(num)) ? 'N/A' : num.toLocaleString(undefined, {minimumFractionDigits:2, maximumFractionDigits:2}); doc.setFontSize(18); doc.text("Mortgage Amortization Schedule", 40, 50); doc.setFontSize(10); doc.text(`Loan Amount: $${fNum(data.loanAmount)} | Interest Rate: ${data.annualInterestRate.toFixed(3)}% | Original Term: ${Math.floor(data.totalOriginalTermMonths/12)} yrs, ${data.totalOriginalTermMonths % 12} mths`, 40, 70); doc.text(`Scheduled P&I: $${fNum(data.scheduledMonthlyPayment)} ${data.extraPayment > 0 ? `| Extra Payment: $${fNum(data.extraPayment)}` : ''}`, 40, 85); doc.text(`Actual Payoff: ${data.payoffDateFormatted} | Total Interest Paid: $${fNum(data.cumulativeInterest)} ${data.extraPayment > 0 ? `(Saved $${fNum(data.interestSaved)})` : ''}`, 40, 100); const head = [['Pmt#', 'Date', 'Beginning Bal.', 'Payment', 'Extra', 'Total Pmt', 'Interest', 'Principal', 'Ending Bal.', 'Cum. Int.', 'Cum. Prin.']]; const body = data.schedule.map(row => [ row.paymentNumber, row.date, fNum(row.beginningBalance), fNum(row.scheduledPayment), fNum(row.extraPayment), fNum(row.totalPayment), fNum(row.interestPaid), fNum(row.principalPaid), fNum(row.endingBalance), fNum(row.cumulativeInterest), fNum(row.cumulativePrincipal) ]); doc.autoTable({ head: head, body: body, startY: 120, theme: 'grid', headStyles: { fillColor: [32, 129, 143], fontSize: 7 }, // Teal color for header styles: { fontSize: 6, cellPadding: 2, overflow: 'linebreak' }, columnStyles: { // Adjust column widths (total A4 landscape width is about 841pt, usable ~760pt with margins) 0: { cellWidth: 25 }, // Pmt# 1: { cellWidth: 55 }, // Date 2: { cellWidth: 70 }, // Beg. Balance 3: { cellWidth: 60 }, // Payment 4: { cellWidth: 50 }, // Extra 5: { cellWidth: 65 }, // Total Pmt 6: { cellWidth: 55 }, // Interest 7: { cellWidth: 65 }, // Principal 8: { cellWidth: 70 }, // End. Balance 9: { cellWidth: 70 }, // Cum. Int. 10: { cellWidth: 70 } // Cum. Prin. }, didDrawPage: function (hookData) { // Add footer to each page doc.setFontSize(8); doc.text('Page ' + doc.internal.getNumberOfPages(), hookData.settings.margin.left, doc.internal.pageSize.height - 15); } }); doc.save("Mortgage_Amortization_Schedule.pdf"); } catch (error) { console.error("PDF Generation Error:", error); alert("An error occurred while generating the PDF: " + error.message + "\nPlease check the console (F12)."); } } }; document.addEventListener('DOMContentLoaded', function() { masApp.init(); });

Are you planning to buy a home, refinance an existing mortgage, or simply wish to understand the long-term financial journey of your loan? The Mortgage Amortization Schedule Generator on WorkToolz.com is your essential partner in achieving complete clarity on your mortgage payments. This user-friendly and powerful tool is designed to provide you with a detailed breakdown of every payment over the life of your loan, illustrating how your principal decreases and interest accrues month by month. Our Mortgage Amortization Calculator transforms complex financial projections into an easy-to-understand schedule, empowering you with the knowledge to make smarter financial decisions.

Understanding a mortgage can often feel overwhelming, with terms like “principal,” “interest,” and “amortization” creating confusion. Our generator cuts through this complexity. All you need to do is input key details such as your loan amount, annual interest rate, and loan term in years and months. You even have the option to specify a loan start date for precise calculations and to include any extra monthly principal payments you anticipate making. This ability to factor in additional payments is particularly valuable, as it allows you to see how even small extra contributions can significantly reduce your loan term and the total interest paid over time. The Mortgage Amortization Calculator illuminates the path to becoming debt-free sooner.

The true benefit of using this tool lies in its transparency. Instead of just seeing a monthly payment sum, you’ll get a comprehensive amortization schedule that clearly shows how much of each payment goes towards the principal and how much covers the interest. In the early years of a mortgage, a larger portion of your payment typically covers interest, while later on, more goes towards reducing your principal balance. Seeing this progression laid out visually can be incredibly motivating and helps in long-term financial planning. It allows you to anticipate your equity growth and understand the true cost of your loan over its full term.

Whether you’re a prospective homebuyer wanting to budget effectively, a current homeowner considering refinancing, or an investor planning property acquisitions, the WorkToolz.com Mortgage Amortization Schedule Generator is an indispensable resource. It helps answer critical questions like “How much interest will I pay over the life of the loan?” or “How quickly can I pay off my mortgage with extra payments?” By providing a detailed, month-by-month payment schedule, our Mortgage Amortization Calculator removes the mystery from your biggest financial commitment. It’s about more than just numbers; it’s about giving you control and confidence in your financial future, transforming what could be a stressful process into a clear and manageable journey.

Scroll to Top