How the number is built
No black box. This page states the assumptions, the formula, the source for every jurisdiction, and what we deliberately do not model.
The formula
- Start from gross, in the currency the jurisdiction publishes its own schedule in. Nothing is converted.
- Subtract any contribution that jurisdiction allows against the income tax base. What remains is taxable income.
- Run the remainder through the enacted bands, band by band.
- Apply non-refundable credits and rebates, capped at the tax computed.
- Add employee-side social contributions, each with its own ceiling.
- Subtract the total from gross. That total is your net.
Worked example, UK, £60,000
England, Wales and Northern Ireland. Scotland runs its own bands; we flag that on the result rather than silently averaging it.
Source of record
| Jurisdiction | Authority | Tax year | Last verified | Known simplification |
|---|---|---|---|---|
| 🇦🇺Australia | Organisation for Economic Co-operation and Development | 2025 to 2026 tax year, beginning 1 July 2025 | 06 Sept 2026 | Income tax only. Employee social security is not modelled for Australia, so this is not take-home pay and your net is lower. |
| 🇨🇴Colombia | Organisation for Economic Co-operation and Development | 2025 calendar year | 06 Sept 2026 | Income tax only. Employee social security is not modelled for Colombia, so this is not take-home pay and your net is lower. |
| 🇨🇷Costa Rica | Organisation for Economic Co-operation and Development | 2025 calendar year | 06 Sept 2026 | Income tax only. Employee social security is not modelled for Costa Rica, so this is not take-home pay and your net is lower. |
| 🇨🇿Czechia | Organisation for Economic Co-operation and Development | 2025 calendar year | 06 Sept 2026 | Employee social security is included, assessed on gross earnings with its own thresholds. |
| 🇭🇺Hungary | Organisation for Economic Co-operation and Development | 2025 calendar year | 06 Sept 2026 | Employee social security is included, assessed on gross earnings with its own thresholds. |
| 🇮🇱Israel | Organisation for Economic Co-operation and Development | 2025 calendar year | 06 Sept 2026 | Employee social security is included, assessed on gross earnings with its own thresholds. |
| 🇱🇻Latvia | Organisation for Economic Co-operation and Development | 2025 calendar year | 06 Sept 2026 | Employee social security is included, and is deducted from the income tax base before the ladder is applied, which is how the published rates are actually reached. |
| 🇨🇭Switzerland | Organisation for Economic Co-operation and Development | 2025 calendar year | 06 Sept 2026 | Employee social security is included, assessed on gross earnings with its own thresholds. |
| 🇬🇧United Kingdom | HM Revenue and Customs, Organisation for Economic Co-operation and Development | 2025 to 2026 tax year, beginning 6 April 2025 | 06 Sept 2026 | Employee National Insurance is included, assessed on gross earnings with its own thresholds, which are not the income tax thresholds. |
| 🇺🇸United States | Prototype figures, no authority read | 2025 tax year | never | Illustrative only, not computed from a rule |
| 🇩🇪Germany | Prototype figures, no authority read | 2025 assessment year | never | Illustrative only, not computed from a rule |
| 🇨🇦Canada (Ontario) | Prototype figures, no authority read | 2025 tax year | never | Illustrative only, not computed from a rule |
| 🇳🇱Netherlands | Prototype figures, no authority read | 2025 tax year | never | Illustrative only, not computed from a rule |
| 🇮🇪Ireland | Prototype figures, no authority read | 2025 tax year | never | Illustrative only, not computed from a rule |
| 🇸🇬Singapore | Prototype figures, no authority read | YA 2026 | never | Illustrative only, not computed from a rule |
| 🇦🇪United Arab Emirates | Prototype figures, no authority read | 2026 | never | Illustrative only, not computed from a rule |
| 🇿🇦South Africa | Prototype figures, no authority read | 2025–26 tax year | never | Illustrative only, not computed from a rule |
What we don't model
- Dependants, marriage allowances and joint filing
- Pension contributions, salary sacrifice and share schemes
- Regional surcharges below state level (city and municipal taxes)
- Investment, rental and capital-gains income
- Employer-side contributions, you see the employee side only
- Treaty relief, split-year residency and remittance basis
Rate changelog
The calculation order, and why it is written down
The order operations apply in is what decides the answer, and it is not the same in every jurisdiction. A social contribution that reduces the income tax base produces a different figure from one that does not. A surtax on the tax due is a different number from a surtax on taxable income at the same rate. A non-refundable credit applied before a sub-central ladder is not the credit the statute describes.
So the order is stated in the engine file rather than left implicit in the sequence of function calls, and it is this: gross, less any contribution the jurisdiction allows against the base, gives taxable income; the statutory ladder runs on taxable income; any surtax applies to whichever base its own rule names; any credit comes off the tax rather than the income and cannot take it below zero; any sub-central ladder runs on the base its rule names. Employee social security is computed on its own thresholds against gross. Employer contributions are excluded everywhere, because they never appear in your gross pay and including them would flatter or damn a country depending on where its wedge sits.
One consequence of stating it is worth naming. A scalar in an international dataset does not carry its own meaning: the same field is a percentage of the tax due in one country, a contribution on gross in another and a levy on taxable income in a third. Rather than assert a reading, the ingest builds every reading the data allows, computes each with the real engine, and keeps only a reading that reproduces the published outcome at all three incomes. A reading that survives that is a finding. A reading asserted would be a guess wearing a citation.
The nine gates
These run in order before anything is published and the build refuses on any failure. Each names the file that implements it, so the description can be checked against the code rather than believed.
Gate A. Typecheck
tsc --noEmit
The rule schema is a type, so a rule that omits its tax year, its maximum age or its source block does not compile. The currency list is exhaustive by construction: adding a currency fails the build until its minor unit is stated, which is how four currencies with no decimal subunit got a zero rather than a silent hundred.
Gate C. Golden fixtures
scripts/test-golden.ts
Worked examples computed independently of the engine, checked to the penny at zero tolerance. Money is integer minor units everywhere for this reason: floats force a tolerance, and a tolerance hides real disagreement. Fixtures for a withdrawn jurisdiction are retired with the reason attached rather than deleted, and run again if it returns.
Gate D. Cross-check
scripts/verify-crosscheck.ts
Every rule is compared against a separately published compilation of the same law. Disagreements are recorded on the rule rather than resolved silently, because a second reader that quietly loses an argument is not a second reader.
Gate E. Page arithmetic
scripts/test-amount-pages.ts
Checks that what a salary page renders is what the engine computed for that salary. A template can drift from the engine behind it without either being wrong on its own, and nothing else on this list would notice.
Gate F. Reconciliation against the OECD
scripts/verify-taxing-wages.ts
The strongest check here, and the only one that has ever unpublished a live page. The OECD publishes, for every member and for a single person with no children at 67%, 100% and 167% of the average wage, the gross earnings and the average rates actually taken. It is an outcome series, published separately from the statutory schedules our rules are built from, which is exactly what makes it usable as an acceptance test. A jurisdiction reproduces it within half a percentage point or it has no page.
Gate G. Freshness
scripts/verify-freshness.ts
Every rule carries a maximum age. Before this gate, nothing enforced it: the engine raised a warning, the page rendered the warning as nothing, and the site would have served April rates a year later under a green badge. A rule that a published page actually computes with, past its own policy, now fails the build.
Gate H. Content floors and house style
scripts/test-content.ts
Word floors per page type, exactly one H1, real heading nesting, an absolute canonical, a meta description, FAQ markup wherever a FAQ is rendered, and at least eight internal links. It also sweeps for the house typography rules over the built HTML in JavaScript rather than by shell grep, which reports zero matches on a dirty file when the character is multibyte.
Gate I. Similarity and boilerplate
scripts/test-similarity.ts
Two measures, because they catch different failures. Pairwise similarity on eight word runs finds two pages that are the same page. Boilerplate share finds a block repeated across the whole type, which every individual pair hides when both members carry it. Deterministic rather than sampled, so the number does not move between runs on identical input.
Gate J. Prerender
scripts/prerender.mjs
The routes built from the design export ship as a loader, and for a week the bytes served for them held no heading, no paragraph and no number. Each is now loaded in a real browser and the resulting document is written into the file a crawler is served. It fails the build rather than shipping a shell, because an empty page that returns 200 is the failure mode that hid here longest.
What we agree with, and by how much
Gate F computes tax for a single person with no children at 67%, 100% and 167% of each country's own average wage, from our statutory rules, and compares the result with the average rates the OECD publishes for exactly that person in period 2025. The tolerance is 0.5 of a percentage point. The United Kingdom regime, built entirely from HMRC documents and owing the OECD nothing, reproduces the published British row to 0.001 of a percentage point, and that is what made the series usable as an acceptance test rather than a coincidence.
| Jurisdiction | Tax year | What is modelled | Worst miss |
|---|---|---|---|
| Australia | 2025 | income tax only | 0.00pp |
| Switzerland | 2025 | income tax and employee social security | 0.00pp |
| Colombia | 2025 | income tax only | 0.00pp |
| Costa Rica | 2025 | income tax only | 0.33pp |
| Czechia | 2025 | income tax and employee social security | 0.00pp |
| United Kingdom | 2025 | income tax only | 0.00pp |
| Hungary | 2025 | income tax and employee social security | 0.00pp |
| Israel | 2025 | income tax and employee social security | 0.00pp |
| Latvia | 2025 | income tax and employee social security | 0.00pp |
What we refuse, and why
31 jurisdictions are refused. That is not a coverage gap we are working up to hiding: it is the same gate, applied to the countries where it fails. 26 of them fail by a measured amount, and the amount is the useful part. It says exactly how wrong a page of ours would have been, which is a thing no site publishing all of them can tell you about any of them.
| Jurisdiction | Closest reading missed by | Where the difficulty is |
|---|---|---|
| Chile | 0.75pp | allowance and ladder only |
| Japan | 0.83pp | reading not recorded |
| New Zealand | 0.93pp | allowance and ladder only |
| Poland | 1.22pp | reading not recorded |
| Luxembourg | 1.29pp | reading not recorded |
| Netherlands | 1.48pp | tax credit of 3068 applied against the tax due |
| Belgium | 1.52pp | reading not recorded |
| Iceland | 1.75pp | tax credit of 824288 applied against the tax due; representative sub-central rate of 14.94% on taxable income |
| Slovenia | 2.19pp | reading not recorded |
| Spain | 2.32pp | representative sub-central ladder on taxable income |
| Norway | 2.50pp | representative sub-central rate of 15.4% on taxable income |
| Canada | 2.55pp | tax credit of 2552.01 applied against the tax due; representative sub-central ladder on taxable income |
| Slovakia | 2.55pp | allowance and ladder only |
| Switzerland | 3.38pp | representative sub-central ladder on taxable income |
| France | 3.63pp | reading not recorded |
| Denmark | 3.83pp | surtax of 8% read as applying to the tax due; tax credit of 6197.16 applied against the tax due; representative sub-central rate of 25.068% on taxable income |
| Mexico | 3.92pp | tax credit of 5695.74 applied against the tax due |
| Finland | 3.99pp | allowance and ladder only |
| Ireland | 4.68pp | surtax of 8% read as applying to the tax due; tax credit of 2000 applied against the tax due |
| Italy | 5.40pp | tax credit of 1955 applied against the tax due |
| Lithuania | 5.51pp | allowance and ladder only |
| South Korea | 5.81pp | reading not recorded |
| Estonia | 6.39pp | allowance and ladder only |
| Türkiye | 10.17pp | reading not recorded |
| Austria | 13.10pp | allowance and ladder only |
| Sweden | 16.19pp | reading not recorded |
The remaining 5 are refused for reasons no number describes. Germany: 3 rates but 4 thresholds; a ladder needs exactly one fewer threshold than rates. United Kingdom: already ingested from its national authority; OECD is its cross-check, not its source. Greece: rate steps down from 90.00% to 22.00% at band 2; a progressive ladder does not fall as income rises, so one of these rates is wrong at source. Portugal: rate steps down from 21.50% to 0.24% at band 4; a progressive ladder does not fall as income rises, so one of these rates is wrong at source. United States: already ingested from its national authority; OECD is its cross-check, not its source.
Two of those are worth dwelling on because the refusal is about the source rather than about us. Where a published ladder steps down as income rises, a progressive schedule does not do that, so one of the rates is wrong where it was published. We do not repair a source's arithmetic and publish the result as a calculator. We say the series fails a sanity check and leave it.
What we deliberately do not model
This list is the honest part of any methodology page and it is the part most sites leave out. Everything named here is a known gap rather than an oversight, and each is named on the page it affects as well as here.
- Scotland. Scottish rates apply to non-savings non-dividend income on their own band structure. Until those are sourced separately the United Kingdom pages cover England, Wales and Northern Ireland, and say so on every one of them.
- Personal circumstances of every kind. Reliefs, other income, marriage allowances, student loans, salary sacrifice, pension arrangements, residence history and the timing of a move. Any one of these can move the answer more than the headline rate does.
- Employer social security. Excluded everywhere, deliberately. It never appears in your gross pay, and including it would change how a country ranks for a reason that has nothing to do with what lands in your account.
- Employee social security in some jurisdictions. Where it is real and not modelled, the page does not call its figure take-home pay. The label on the number is the claim; a disclaimer underneath does not repair it.
- Cost of living. No index is used, because none has been sourced to the standard everything else here is held to. It is directional at best in any case: the city moves it more than the tax does.
- Currency conversion, except where it is stated. Comparisons are made at each country's own average wage wherever possible, which needs no rate at all. Where a common currency is genuinely required, the rate is the European Central Bank's daily reference rate and the page prints the date it was published beside the converted figure.
The store behind all of it is 959 rules from 5 authorities, published in full at /data/ with every quote, locator and hash intact, under CC BY 4.0 over our compilation. If you want to check this page rather than read it, that file is the place to start.
Written and maintained by Nkosi Ndwandwe, who is not a qualified tax adviser and does not claim to be. The most recent figure behind this site was read from its source on 06 September 2026, which is the date this page reports as its last modification. Everything here can be checked against the document it came from without asking us anything.