How the Nigeria salary after tax calculator is verified
Inputs
| Input | Field | Type |
|---|---|---|
| Gross monthly pay, all taxable allowances (₦) | grossMonthly | number |
| of which basic salary (₦ / month) | basicMonthly | number |
| of which housing and transport allowances (₦ / month) | housingTransportMonthly | number |
| Rent you pay for your home (₦ / year) | annualRent | number |
| In the contributory pension scheme (8% of basic, housing and transport) | pensionMember | boolean |
| Public-sector employee, or a private-sector employee who opted in to the NHF (2.5% of basic) | nhfMember | boolean |
| Your contribution under the national health insurance scheme (NHIA) (₦ / month) | healthInsuranceMonthly | number |
| National minimum wage (₦ / month) | minimumWageMonthly | number |
The formula
Each derived value below is computed by the Valem engine from the expression shown, in this order. Nothing else runs — there is no hidden code path.
| Derived value | Field | Formula (JSONata) |
|---|---|---|
| Gross pay for the year | grossAnnual | $round($n(grossMonthly) * 12, 2) |
| Pension 8% for the year | pensionAnnual | pensionMember ? $round($min([$n(basicMonthly) + $n(housingTransportMonthly), $n(grossMonthly)]) * 12 * $const.pensionEmployeeRate, 2) : 0 |
| National Housing Fund 2.5% | nhfAnnual | nhfMember ? $round($min([$n(basicMonthly), $n(grossMonthly)]) * 12 * $const.nhfRate, 2) : 0 |
| National health insurance scheme | healthInsuranceAnnual | $round($n(healthInsuranceMonthly) * 12, 2) |
| Rent relief | rentRelief | $round($min([$n(annualRent) * $const.rentReliefRate, $const.rentReliefCap]), 2) |
| Exempt: pay at or below the minimum wage | minimumWageExempt | $n(grossMonthly) <= $n(minimumWageMonthly) |
| Chargeable income | chargeableIncome | $round($max([0, grossAnnual - pensionAnnual - nhfAnnual - healthInsuranceAnnual - rentRelief]), 2) |
| Income tax for the year | incomeTaxAnnual | minimumWageExempt ? 0 : $round($bandedCharge(chargeableIncome, [{"upTo": $const.band1, "rate": $const.rate0}, {"upTo": $const.band2, "rate": $const.rate1}, {"upTo": $const.band3, "rate": $const.rate2}, {"upTo": $const.band4, "rate": $const.rate3}, {"upTo": $const.band5, "rate": $const.rate4}, {"upTo": null, "rate": $const.rate5}]), 2) |
| Income tax / month (PAYE) | incomeTaxMonthly | $round(incomeTaxAnnual / 12, 2) |
| Net / year | netAnnual | $round($max([0, grossAnnual - incomeTaxAnnual - pensionAnnual - nhfAnnual - healthInsuranceAnnual]), 2) |
| Net / month | netMonthly | $round(netAnnual / 12, 2) |
Rates and thresholds
The expressions above read these as $const. They are the figures the annual refresh replaces, so they live as data rather than being written into the formulas — which is what makes a year-on-year change a one-line diff instead of an edit to arithmetic.
| Constant | Value |
|---|---|
band1 | 800000 |
band2 | 3000000 |
band3 | 12000000 |
band4 | 25000000 |
band5 | 50000000 |
rate0 | 0 |
rate1 | 0.15 |
rate2 | 0.18 |
rate3 | 0.21 |
rate4 | 0.23 |
rate5 | 0.25 |
rentReliefRate | 0.2 |
rentReliefCap | 500000 |
pensionEmployeeRate | 0.08 |
nhfRate | 0.025 |
Test vectors (9)
Every case is executed against this model on each build, by the Java engine and independently by a JavaScript one. A mismatch of a single cent fails the build, so the page cannot ship advertising a figure the model no longer produces.
Case 1 — N1 ₦500,000 a month (₦300,000 basic, ₦150,000 housing and transport), ₦1.2m rent, no NHF: tax ₦330,000 + 18% of ₦2,328,000
given grossMonthly | 500000 |
|---|---|
given basicMonthly | 300000 |
given housingTransportMonthly | 150000 |
given annualRent | 1200000 |
given pensionMember | yes |
given nhfMember | no |
given healthInsuranceMonthly | 0 |
given minimumWageMonthly | 70000 |
expect pensionAnnual | 432000 |
expect chargeableIncome | 5328000 |
expect incomeTaxAnnual | 749040 |
expect netMonthly | 401580 |
Case 2 — N1b the same pay: rent relief, monthly PAYE and net for the year
given grossMonthly | 500000 |
|---|---|
given basicMonthly | 300000 |
given housingTransportMonthly | 150000 |
given annualRent | 1200000 |
given pensionMember | yes |
given nhfMember | no |
given healthInsuranceMonthly | 0 |
given minimumWageMonthly | 70000 |
expect nhfAnnual | 0 |
expect rentRelief | 240000 |
expect incomeTaxMonthly | 62420 |
expect netAnnual | 4818960 |
Case 3 — N1c the same pay, opted in to the NHF: 2.5% of ₦3.6m basic = ₦90,000, tax ₦330,000 + 18% of ₦2,238,000
given grossMonthly | 500000 |
|---|---|
given basicMonthly | 300000 |
given housingTransportMonthly | 150000 |
given annualRent | 1200000 |
given pensionMember | yes |
given nhfMember | yes |
given healthInsuranceMonthly | 0 |
given minimumWageMonthly | 70000 |
expect nhfAnnual | 90000 |
expect chargeableIncome | 5238000 |
expect incomeTaxAnnual | 732840 |
expect netMonthly | 395430 |
Case 4 — N2 ₦70,000 a month, no pension or NHF: the minimum wage, so exempt (₦6,000 otherwise)
given grossMonthly | 70000 |
|---|---|
given basicMonthly | 50000 |
given housingTransportMonthly | 15000 |
given annualRent | 0 |
given pensionMember | no |
given nhfMember | no |
given healthInsuranceMonthly | 0 |
given minimumWageMonthly | 70000 |
expect minimumWageExempt | true |
expect chargeableIncome | 840000 |
expect incomeTaxAnnual | 0 |
Case 5 — N3 ₦1 a month above the minimum wage: 15% of the ₦40,012 above ₦800,000
given grossMonthly | 70001 |
|---|---|
given basicMonthly | 50001 |
given housingTransportMonthly | 15000 |
given annualRent | 0 |
given pensionMember | no |
given nhfMember | no |
given healthInsuranceMonthly | 0 |
given minimumWageMonthly | 70000 |
expect minimumWageExempt | false |
expect incomeTaxAnnual | 6001.8 |
Case 6 — N4 ₦3,000,000 chargeable: the 15% band ends at ₦330,000
given grossMonthly | 250000 |
|---|---|
given basicMonthly | 250000 |
given housingTransportMonthly | 0 |
given annualRent | 0 |
given pensionMember | no |
given nhfMember | no |
given healthInsuranceMonthly | 0 |
given minimumWageMonthly | 70000 |
expect chargeableIncome | 3000000 |
expect incomeTaxAnnual | 330000 |
Case 7 — N5 rent of ₦3,000,000: 20% would be ₦600,000, capped at ₦500,000
given grossMonthly | 500000 |
|---|---|
given basicMonthly | 300000 |
given housingTransportMonthly | 150000 |
given annualRent | 3000000 |
given pensionMember | yes |
given nhfMember | no |
given healthInsuranceMonthly | 0 |
given minimumWageMonthly | 70000 |
expect rentRelief | 500000 |
expect chargeableIncome | 5068000 |
Case 8 — N6 ₦5,000,000 a month, public sector (NHF): ₦54,780,000 chargeable, ₦10,430,000 + 25% of ₦4,780,000
given grossMonthly | 5000000 |
|---|---|
given basicMonthly | 3000000 |
given housingTransportMonthly | 1500000 |
given annualRent | 0 |
given pensionMember | yes |
given nhfMember | yes |
given healthInsuranceMonthly | 0 |
given minimumWageMonthly | 70000 |
expect pensionAnnual | 4320000 |
expect nhfAnnual | 900000 |
expect incomeTaxAnnual | 11625000 |
Case 9 — N7 ₦10,000 a month under the national health insurance scheme is deducted too
given grossMonthly | 500000 |
|---|---|
given basicMonthly | 300000 |
given housingTransportMonthly | 150000 |
given annualRent | 1200000 |
given pensionMember | yes |
given nhfMember | no |
given healthInsuranceMonthly | 10000 |
given minimumWageMonthly | 70000 |
expect chargeableIncome | 5208000 |
expect incomeTaxAnnual | 727440 |
Sources
- Nigeria Tax Act 2025 (Act No. 7, in force 1 Jan 2026), s.58 and Fourth Schedule · checked 2026-11-01
- Nigeria Tax Act 2025 s.30(2)(a): eligible deductions, rent relief 20% up to ₦500,000 · checked 2026-11-01
- Pension Reform Act 2014 (PenCom) s.4(1): employee at least 8% of monthly emoluments · checked 2026-11-01
- National Housing Fund Act Cap N45 (FMBN, 2004 text) s.4: 2.5% of basic; s.4 replaced by the Business Facilitation Act 2022 s.45 · checked 2026-11-01
Check it yourself — and reuse it
The whole model as JSON — inputs, outputs, formulas, vectors and sources in one re-runnable document.
This model is published under CC BY 4.0: use it, adapt it, build on it, with attribution. The licence covers the model — the expression of each rule and the arrangement of the catalog. The rates and thresholds are law, and nobody licenses those; the sources above are where they come from.
← Back to the Nigeria salary after tax calculator
Built with Valem — a live, verifiable calculator you can fork and embed.