🇳🇬 Nigeria Tax Act 2025 · Effective Jan 2026

Know exactly what lands
in your account

Nigeria's most complete tax calculator — for employees, freelancers and multi-income earners.

Your Salary
0%8% standard20%
Deductions
NHF (National Housing Fund) ?
NHIS (Health Insurance) ?
Additional Reliefs (2026)
📊

Enter your monthly gross salary to see your full PAYE breakdown under Nigeria's 2026 Tax Act.

Export your full tax report

PDF summary · Annual filing checklist · Payslip generator · Bulk payroll CSV

MyTax NG

Free Nigerian tax calculator updated for the Nigeria Tax Act 2025 (effective January 2026). Results are estimates only — consult a qualified tax professional for personalised advice.

Privacy Policy | Disclaimer | © 2026 MyTax NG. All rights reserved.
function openPrivacy() { document.getElementById('privacy-modal').style.display = 'block'; document.body.style.overflow = 'hidden'; } function closePrivacy() { document.getElementById('privacy-modal').style.display = 'none'; document.body.style.overflow = ''; } // close on overlay click document.getElementById('privacy-modal').addEventListener('click', function(e) { if (e.target === this) closePrivacy(); }); // ── TAX LOGIC ──────────────────────────────────────────────────────────────── const BANDS_2026 = [ {min:0, max:800000, rate:0 }, {min:800000, max:3000000, rate:.15 }, {min:3000000, max:12000000, rate:.18 }, {min:12000000, max:25000000, rate:.21 }, {min:25000000, max:50000000, rate:.23 }, {min:50000000, max:Infinity, rate:.25 }, ]; const BANDS_2025 = [ {min:0, max:300000, rate:.07}, {min:300000, max:600000, rate:.11}, {min:600000, max:1100000, rate:.15}, {min:1100000,max:1600000, rate:.19}, {min:1600000,max:3200000, rate:.21}, {min:3200000,max:Infinity,rate:.24}, ]; function applyBands(taxable, bands) { let tax = 0, rem = Math.max(0, taxable); for (const b of bands) { if (rem <= 0) break; const w = b.max === Infinity ? rem : b.max - b.min; const chunk = Math.min(rem, w); tax += chunk * b.rate; rem -= chunk; } return tax; } function calcTax(gross, opts, yr) { const { pensionRate = .08, pensionBase = null, // Basic+Housing+Transport; if null use gross useNHF = true, useNHIS = false, rentPaid = 0, // annual rent paid lifeInsurance = 0, // annual life insurance premium housingLoanInt= 0, // annual housing loan interest } = opts; const pBase = pensionBase !== null ? pensionBase : gross; const pension = pBase * pensionRate; const nhf = useNHF ? gross * .025 : 0; const nhis = useNHIS ? gross * .05 : 0; // 2026 specific reliefs const rentRelief = Math.min(rentPaid * .20, 500000); const extraRelief = lifeInsurance + housingLoanInt; let taxable, cra = 0; if (yr === 2026) { taxable = Math.max(0, gross - pension - nhf - nhis - rentRelief - extraRelief); } else { cra = Math.max(200000, .01 * gross) + .2 * gross; taxable = Math.max(0, gross - pension - nhf - nhis - cra); } const bands = yr === 2026 ? BANDS_2026 : BANDS_2025; const tax = applyBands(taxable, bands); const cashDeductions = pension + nhf + nhis; // all three come out of your pocket const netAnnual = gross - tax - cashDeductions; return { tax, taxable, pension, nhf, nhis, rentRelief, extraRelief, cra, deductions: cashDeductions, effectiveRate: gross > 0 ? tax / gross : 0, netMonthly: netAnnual / 12, netAnnual }; } function solveGross(desiredNet, opts) { let lo = desiredNet * .8, hi = desiredNet * 6; for (let i = 0; i < 90; i++) { const mid = (lo + hi) / 2; calcTax(mid, opts, 2026).netAnnual < desiredNet ? lo = mid : hi = mid; } return (lo + hi) / 2; } // ── FORMATTERS ──────────────────────────────────────────────────────────────── const fmtF = n => '₦' + Math.round(n).toLocaleString('en-NG'); const fmt = n => n >= 1e6 ? '₦'+(n/1e6).toFixed(2)+'M' : n >= 1e3 ? '₦'+(n/1e3).toFixed(0)+'K' : '₦'+Math.round(n); const pct = n => (n*100).toFixed(1)+'%'; const num = v => parseFloat(v) || 0; // ── MODE SWITCH ─────────────────────────────────────────────────────────────── function switchMode(mode, btn) { ['paye','reverse','freelancer'].forEach(m => { document.getElementById('mode-'+m).classList.toggle('hidden', m !== mode); }); document.querySelectorAll('.mode-tab').forEach(b => b.classList.remove('active')); btn.classList.add('active'); } // ── PAYE ────────────────────────────────────────────────────────────────────── let pTab = 'breakdown'; function calcPAYE() { const monthly = num(document.getElementById('p-monthly').value); const gross = monthly * 12; if (!gross) { document.getElementById('p-results').innerHTML = `
📊

Enter your monthly gross salary to see your full PAYE breakdown under Nigeria's 2026 Tax Act.

`; return; } const opts = { pensionRate: num(document.getElementById('p-pension').value) / 100, useNHF: document.getElementById('p-nhf').checked, useNHIS: document.getElementById('p-nhis').checked, rentPaid: num(document.getElementById('p-rent').value) * 12, lifeInsurance: num(document.getElementById('p-insurance').value) * 12, housingLoanInt: num(document.getElementById('p-housingloan').value) * 12, }; const r26 = calcTax(gross, opts, 2026); const r25 = calcTax(gross, opts, 2025); renderPAYEResults(gross, r26, r25, opts); } function renderPAYEResults(gross, r26, r25, opts) { const segs = [ {c:'#7C4DFF', w: r26.tax/gross*100, l:'Tax' }, {c:'#B39DFF', w: r26.pension/gross*100, l:'Pension' }, {c:'#D4C5FF', w: (r26.nhf+r26.nhis)/gross*100, l:'NHF/NHIS' }, {c:'#EDE7FF', w: r26.netAnnual/gross*100, l:'Take-home'}, ]; const needlePos = Math.min(r26.effectiveRate * 400, 96); const breakdownHTML = `
Effective Tax Rate
${pct(r26.effectiveRate)}
of gross income goes to FIRS
${segs.map(s=>`
`).join('')}
${segs.map(s=>`
${s.l}
`).join('')}
Gross Annual${fmtF(gross)}
— Pension (${Math.round(opts.pensionRate*100)}%)−${fmt(r26.pension)}
${opts.useNHF ? `
— NHF (2.5%)−${fmt(r26.nhf)}
` : ''} ${opts.useNHIS ? `
— NHIS (5%)−${fmt(r26.nhis)}
` : ''} ${r26.rentRelief > 0 ? `
— Rent Relief (20%)−${fmt(r26.rentRelief)}
` : ''} ${r26.extraRelief > 0 ? `
— Life Ins. / Housing Loan−${fmt(r26.extraRelief)}
` : ''}
= Taxable Income${fmtF(r26.taxable)}
— Tax-free Band (first ₦800,000 @ 0%)₦0 tax
${r26.taxable > 800000 ? `
— Tax on ₦${Math.round(r26.taxable-800000).toLocaleString()} above band−${fmtF(r26.tax)}
` : ''}
PAYE Tax−${fmtF(r26.tax)}
Net Annual${fmtF(r26.netAnnual)}
Monthly Take-home${fmtF(r26.netMonthly)}
`; const saving = r25.tax - r26.tax; const compareHTML = `

Nigeria Tax Act 2025 takes effect Jan 1 2026. Here's your tax change at ${fmtF(num(document.getElementById('p-monthly').value))}/mo gross.

20252026
${[ {l:'Annual Tax', o:r25.tax, n:r26.tax, lb:true }, {l:'Monthly Net', o:r25.netMonthly, n:r26.netMonthly, lb:false}, {l:'Annual Net', o:r25.netAnnual, n:r26.netAnnual, lb:false}, {l:'Effective Rate', o:r25.effectiveRate, n:r26.effectiveRate, lb:true, isPct:true}, ].map(row => { const better = row.lb ? row.n < row.o : row.n > row.o; const diff = Math.abs(row.n - row.o); return `
${row.l}
${row.isPct ? pct(row.o) : fmt(row.o)} ${row.isPct ? pct(row.n) : fmt(row.n)} ${better?'▼':'▲'} ${row.isPct?pct(diff):fmt(diff)}
`; }).join('')}
${saving > 0 ? `🎉 You save ${fmtF(saving)} in annual tax under the new law.` : `⚠️ You'll pay ${fmtF(-saving)} more annually under the new law.`}
`; document.getElementById('p-results').innerHTML = `
Monthly Take-home
${fmtF(r26.netMonthly)}
${fmtF(r26.netAnnual)}/yr · effective rate ${pct(r26.effectiveRate)}
${pTab === 'breakdown' ? breakdownHTML : compareHTML}
`; // store for tab switching window._pBreakdown = breakdownHTML; window._pCompare = compareHTML; } function setPTab(tab) { pTab = tab; document.querySelectorAll('.inner-tab').forEach(b => b.classList.toggle('active', b.textContent.toLowerCase().includes(tab === 'breakdown' ? '2026' : '2025'))); document.getElementById('p-tab-content').innerHTML = tab === 'breakdown' ? window._pBreakdown : window._pCompare; } // ── REVERSE ─────────────────────────────────────────────────────────────────── function calcReverse() { const targetNet = num(document.getElementById('r-net').value); if (!targetNet) { document.getElementById('r-results').innerHTML = `
🎯

Enter your target monthly take-home and we'll calculate the exact gross salary to negotiate for.

`; return; } const opts = { pensionRate: num(document.getElementById('r-pension').value) / 100, useNHF: document.getElementById('r-nhf').checked, useNHIS: document.getElementById('r-nhis').checked, }; const desiredAnnual = targetNet * 12; const reqGross = solveGross(desiredAnnual, opts); const r = calcTax(reqGross, opts, 2026); document.getElementById('r-results').innerHTML = `
Negotiate for a gross of
${fmtF(reqGross/12)}/mo
${fmtF(reqGross)}/yr annual gross → ${fmtF(r.netMonthly)}/mo take-home
Monthly cost breakdown
Monthly Tax
${fmtF(r.tax/12)}
Pension (${Math.round(opts.pensionRate*100)}%)
${fmtF(r.pension/12)}
NHF + NHIS
${fmtF((r.nhf+r.nhis)/12)}
Effective Rate
${pct(r.effectiveRate)}
💡 Negotiation tip: Offer letters quote gross. Ask for ${fmtF(reqGross/12)}/month gross to receive exactly ${fmtF(r.netMonthly)}/month net.
`; } // ── FREELANCER ──────────────────────────────────────────────────────────────── const INCOME_TYPES = [ {id:'salary', label:'Salary / PAYE', tag:'paye', wht:false}, {id:'consulting', label:'Consulting Fee', tag:'wht', wht:true, whtRate:.10}, {id:'contract', label:'Contract Income', tag:'wht', wht:true, whtRate:.10}, {id:'rental', label:'Rental Income', tag:'rental', wht:false}, {id:'dividend', label:'Dividend', tag:'wht', wht:true, whtRate:.10}, ]; let sources = []; let srcId = 0; function addSource(type) { const id = ++srcId; sources.push({id, type: type || 'salary', monthly: ''}); renderSources(); calcFreelancer(); } function removeSource(id) { sources = sources.filter(s => s.id !== id); renderSources(); calcFreelancer(); } function updateSource(id, field, val) { const s = sources.find(s => s.id === id); if (s) { s[field] = val; calcFreelancer(); } } function renderSources() { const container = document.getElementById('sources-container'); container.innerHTML = sources.map((src, i) => { const ti = INCOME_TYPES.find(t => t.id === src.type); return `
${ti.tag==='wht'?'Withholding Tax':ti.tag==='rental'?'Rental':'PAYE'} ${sources.length > 1 ? `` : ''}
`; }).join(''); // show/hide PAYE settings based on whether salary source exists const hasSalary = sources.some(s => s.type === 'salary'); document.getElementById('fl-paye-settings').style.display = hasSalary ? '' : 'none'; } function calcFreelancer() { const opts = { pensionRate: num(document.getElementById('fl-pension').value) / 100, useNHF: document.getElementById('fl-nhf').checked, useNHIS: false, }; const results = sources.map(src => { const annual = num(src.monthly) * 12; const ti = INCOME_TYPES.find(t => t.id === src.type); if (!annual) return {...src, ti, annual:0, tax:0, net:0}; if (ti.wht) { const tax = annual * ti.whtRate; return {...src, ti, annual, tax, net: annual - tax}; } const r = calcTax(annual, opts, 2026); return {...src, ti, annual, tax: r.tax + r.deductions, net: r.netAnnual}; }); const totAnnual = results.reduce((s,r) => s + r.annual, 0); const totTax = results.reduce((s,r) => s + r.tax, 0); const totNet = results.reduce((s,r) => s + r.net, 0); const hasWHT = results.some(r => r.ti?.wht && r.annual > 0); const activeSrcs = results.filter(r => r.annual > 0); if (!totAnnual) { document.getElementById('fl-results').innerHTML = `
💼

Add your income sources — salary, consulting fees, rental income, dividends — and see your combined tax picture.

`; return; } document.getElementById('fl-results').innerHTML = `
Combined Monthly Take-home
${fmtF(totNet/12)}
${fmtF(totNet)}/yr net · total deductions ${fmtF(totTax)}/yr
Per-Source Summary
${activeSrcs.map((r,i) => `
${INCOME_TYPES.find(t=>t.id===r.type).label} ${r.ti.wht?`WHT ${r.ti.whtRate*100}%`:r.ti.tag.toUpperCase()}
Gross/mo
${fmtF(r.annual/12)}
Tax/mo
${fmtF(r.tax/12)}
Net/mo
${fmtF(r.net/12)}
`).join('')}
Total Monthly Net
across ${activeSrcs.length} income source${activeSrcs.length>1?'s':''}
${fmtF(totNet/12)}
${hasWHT ? `
⚠️ WHT Credit: Withholding Tax deducted at source is claimable as a tax credit in your FIRS annual return. Keep all WHT credit notes from clients.
` : ''}
`; } // ── INIT ─────────────────────────────────────────────