Income-Driven Repayment Estimator
ANA›Life Services Authority›National Calculator Authority›Income-Driven Repayment Estimator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Income-Driven Repayment Estimator
Estimate your monthly federal student loan payment under the four main Income-Driven Repayment (IDR) plans: SAVE, PAYE, IBR (new & old), and ICR.
Adjusted Gross Income (AGI) — annual ($)
Family Size
State of Residence
Contiguous 48 states / D.C. (default) Alaska Hawaii
Total Federal Loan Balance ($)
Weighted Average Interest Rate (%)
New borrower on or after July 1, 2014?
Yes No
Calculate
function incCalc() { const resultDiv = document.getElementById('inc-result');
// --- Inputs --- const agi = parseFloat(document.getElementById('inc-agi').value); const family = parseInt(document.getElementById('inc-family').value); const stateSel = document.getElementById('inc-state-sel').value; const balance = parseFloat(document.getElementById('inc-balance').value); const rateInput = parseFloat(document.getElementById('inc-rate').value); const newBorrower = document.getElementById('inc-new-borrower').value === 'yes';
// --- Validation --- const errors = []; if (isNaN(agi) || agi 30) errors.push("Interest rate must be between 0% and 30%."); if (errors.length) { resultDiv.innerHTML = '' + errors.join('') + '
'; return; }
// --- 2024 Federal Poverty Guidelines (FPL) --- // Source: HHS 2024 FPL // Base for family of 1; each additional person adds $5,380 (contiguous) // Alaska: base $20,470 + $6,730/additional; Hawaii: base $16,770 + $6,190/additional let fplBase, fplAdd; if (stateSel === 'AK') { fplBase = 20470; fplAdd = 6730; } else if (stateSel === 'HI') { fplBase = 16770; fplAdd = 6190; } else { fplBase = 15060; fplAdd = 5380; } const fpl = fplBase + fplAdd * (family - 1);
// --- Discretionary Income definitions --- // SAVE: income above 225% FPL // PAYE / new IBR: income above 150% FPL // Old IBR / ICR: income above 150% FPL (IBR old) or 100% FPL (ICR) const discSAVE = Math.max(0, agi - 2.25 * fpl); const disc150 = Math.max(0, agi - 1.50 * fpl); const disc100 = Math.max(0, agi - 1.00 * fpl);
// --- Monthly payment formulas --- // SAVE: 10% of discretionary (225% FPL threshold); undergrad-only borrowers 5% // This calculator uses 10% as the general rate (mixed/grad loans) const savePmt = (discSAVE * 0.10) / 12;
// PAYE: 10% of discretionary (150% FPL); capped at standard 10-yr payment const payePmt = (disc150 * 0.10) / 12;
// IBR (new, post-2014): 10% of discretionary (150% FPL); capped at standard 10-yr const ibrNewPmt = (disc150 * 0.10) / 12;
// IBR (old, pre-2014): 15% of discretionary (150% FPL); capped at standard 10-yr const ibrOldPmt = (disc150 * 0.15) / 12;
// ICR: lesser of (20% of discretionary at 100% FPL) OR // 12-year standard payment × income percentage factor // Simplified: 20% of disc100 / 12 vs standard-12yr payment const icr20Pmt = (disc100 * 0.20) / 12;
// Standard 10-year payment (used as cap for PAYE/IBR and comparison) const r = rateInput / 100 / 12; let std10Pmt; if (r === 0) { std10Pmt = balance / 120; } else { std10Pmt = balance * (r * Math.pow(1 + r, 120)) / (Math.pow(1 + r, 120) - 1); }
// Standard 12-year payment (used in ICR income-percentage-factor approach) let std12Pmt; if (r === 0) { std12Pmt = balance / 144; } else { std12Pmt = balance * (r * Math.pow(1 + r, 144)) / (Math.pow(1 + r, 144) - 1); }
// ICR income percentage factor ≈ AGI / poverty line ratio applied to 12-yr payment // Simplified statutory formula: min(20% disc, 12-yr payment) const icrPmt = Math.min(icr20Pmt, std12Pmt);
// Apply caps (PAYE and IBR capped at standard 10-yr) const payePmtCapped = Math.min(payePmt, std10Pmt); const ibrNewPmtCapped = Math.min(ibrNewPmt, std10Pmt); const ibrOldPmtCapped = Math.min(ibrOldPmt, std10Pmt);
// Monthly interest accrual const monthlyInterest = balance * r;
// --- Forgiveness terms --- const saveYears = 20; // 20 yrs undergrad / 25 yrs grad; use 20 as default const payeYears = 20; const ibrNewYears = 20; const ibrOldYears = 25; const icrYears = 25;
// --- Format helpers --- const fmt = v => '$' + v.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ','); const fmtInt = v => '$' + Math.round(v).toLocaleString();
// --- Eligibility notes --- const payeElig = newBorrower ? '' : ' (PAYE requires new borrower on/after 10/1/2007 with disbursement after 10/1/2011)'; const ibrNewElig = newBorrower ? '' : ' (New IBR requires new borrower on/after 7/1/2014)';
// --- Build results table --- const plans = [ { name:'SAVE', pmt: savePmt, years: saveYears, note:'10% of income above 225% FPL; 5% for undergrad-only loans' }, { name:'PAYE', pmt: payePmtCapped, years: payeYears, note:'10% of income above 150% FPL; capped at standard 10-yr payment' + payeElig }, { name:'IBR (New)', pmt: ibrNewPmtCapped, years: ibrNewYears, note:'10% of income above 150% FPL; capped at standard 10-yr payment' + ibrNewElig }, { name:'IBR (Old)', pmt: ibrOldPmtCapped, years: ibrOldYears, note:'15% of income above 150% FPL; capped at standard 10-yr payment' }, { name:'ICR', pmt: icrPmt, years: icrYears, note:'Lesser of 20% of income above 100% FPL or 12-yr standard payment' }, ];
let rows = ''; plans.forEach(p => { const annualPmt = p.pmt * 12; const negAmort = p.pmt ${p.name} ${fmt(p.pmt)}/mo ${fmtInt(annualPmt)}/yr ${p.years} yrs ${negAmort} ${p.note} `; });
resultDiv.innerHTML = ` ### Results
2024 Federal Poverty Level (family of ${family}, ${stateSel === 'AK' ? 'Alaska' : stateSel === 'HI' ? 'Hawaii' : 'contiguous US'}): ${fmtInt(fpl)}
Standard 10-Year Payment: ${fmt(std10Pmt)}/mo | Monthly Interest Accrual: ${fmt(monthlyInterest)}/mo
Plan Monthly Pmt Annual Pmt Forgiveness Neg. Amort? Notes
${rows}
⚠️ Negative amortization means your payment does not cover monthly interest; your balance may grow. SAVE plan has interest subsidy that prevents balance growth for qualifying borrowers. Forgiven amounts may be taxable income (except PSLF). Consult your loan servicer for exact figures.
`; }
#### Formulas Used
Federal Poverty Level (2024, contiguous US): FPL = $15,060 + $5,380 × (family_size − 1)
Discretionary Income: SAVE: max(0, AGI − 2.25 × FPL) PAYE / IBR New: max(0, AGI − 1.50 × FPL) IBR Old: max(0, AGI − 1.50 × FPL) ICR: max(0, AGI − 1.00 × FPL)
Monthly Payment: SAVE = DiscretionarySAVE × 10% ÷ 12 PAYE = min(Discretionary150 × 10% ÷ 12, Standard 10-yr payment) IBR New = min(Discretionary150 × 10% ÷ 12, Standard 10-yr payment) IBR Old = min(Discretionary150 × 15% ÷ 12, Standard 10-yr payment) ICR = min(Discretionary100 × 20% ÷ 12, Standard 12-yr payment)
Standard N-Year Payment: PMT = P × [r(1+r)n] / [(1+r)n − 1] where r = annual rate ÷ 12, n = months
#### Assumptions & References
- Sources: 34 CFR §§ 685.209, 685.221; studentaid.gov IDR plans; HHS 2024 Poverty Guidelines.
More Calculators
- Spousal Support Duration Estimator
- Expected Value by Draft Position Calculator
- Draft Pick Trade Value Calculator
- Draft Class Strength Rating Calculator
- Ohm's Law Calculator
- Transformer KVA Calculator
- Power Factor Correction Calculator
-
Surplus Value Calculator: Contract Cost vs. Draft Slot Production
- Daily Water Intake Calculator
- Sleep Needs Calculator
- Window Energy Performance Calculator
- Appliance Energy Cost Calculator
- Appliance Repair vs. Replace Calculator