Last updated: October 8, 2026
The calculation happens in your browser
There is no server receiving your salary, no account to create, no email to confirm. You open the page and the tax engine runs on your own device. The practical consequence is that your figures never leave it; the technical one is that the tool responds instantly as you drag a control.
What you type is saved in your browser so it is still there when you come back, and it disappears the moment you clear the site's data.
Before writing code we look for the official calculator
This is the step that decides whether a country will come out right. Almost every tax authority publishes a calculator; it does not need to be pretty or to have an API, it needs to take a taxable base and return a tax due, because that is exactly the boundary that can be checked.
Switzerland has the Federal Tax Administration's calculator, and Luxembourg the Administration des contributions directes calculator. Where one exists, the country's machinery is checked against it before being accepted, and the checkpoints are frozen in the test suite.
Watch out for what an official calculator does NOT validate: almost all of them are handed the taxable base already computed, so the deductions remain our responsibility. That needs a second anchor, usually a worked payslip example published by the authority itself.
What that checking has turned up
These are real errors that no amount of reading the law had caught, and all of them are fixed. We publish them because they are the only evidence that the checking actually happens:
- In Geneva, the additional centime for home care does not fall inside the 12 % rebate. It was 46 francs hiding inside the test's tolerance, and the test had to be rewritten piece by piece before they showed up.
- In Zug, the 52.11 % printed in the federal Steuerfüsse table is the 2025 figure. That row mixes two years and carries an asterisk that is easy to miss; in 2026 the city charges 52 %.
- In Luxembourg, the employment fund surcharge is marginal rather than global, and a tax bill below twelve euros a year is not collected. The second of those was written down nowhere: it emerged because the official calculator returned zero where the scale gave nine euros.
- In Portugal, a secondary table gave 1,474.53 € as the parcela a abater in the fourth bracket. Checked against the average rates in article 68.º itself, the right figure is 1,476.53 €, and with the wrong one a salary of 30,000 € came out two euros off.
- In Mexico, of four published tables of the worker's IMSS rates, three were wrong, and two of them agreed on the same mistake. What settled it was reading article 106 in full, not hunting for a fifth table.
With no calculator, we look for the second column
Not every authority publishes a calculator, but several publish their scale TWICE: each bracket's marginal rate and, beside it, the cumulative tax or average rate at its ceiling. That second column is a better anchor than any calculation of our own, because it summarises the whole scale up to that point: if a limit or a rate were wrong, the cumulative figure would not come out.
That is what Portugal's article 68.º publishes, along with Annex 8 of Mexico's Resolución Miscelánea Fiscal and Singapore's IRAS tables. And where even that is missing, we walk the entire curve, which is what was done with Spain's fifteen regional scales.
Test figures are copied, never computed
This is the rule that prevents the most errors. Checkpoint figures are copied from the official source; they are never calculated inside the test. A test that reimplements the calculation only proves you made the same mistake twice.
What gets covered, in order of value: both sides of every threshold, which is where the errors live; every mechanism that is not a scale — splitting, family quotient, tapering credits; the entire curve when there is nothing to check against; and anything derived rather than written down, with even more care than the written parts.
We test the tests by breaking the code on purpose
A test that does not fail when the code is wrong is worth nothing. So before a country is called finished, the exact error each test is supposed to catch is injected into the code, and we check that it catches it. Then it is reverted.
Here is what justifies it. In Luxembourg, five mutations each broke between one and sixty-two tests, but switching off the taper on one credit broke NOTHING: a test was missing, and nobody would have noticed. In Portugal, switching off the additional solidarity rate entirely broke nothing either, because the test covering it only checked that a higher salary meant a higher bill, and that is true with or without the surcharge.
The first version of the Swiss test had the same problem: it compared totals, and so it COULD not catch the Geneva error it was written for. The 46 francs fitted inside its tolerance.
What we do not model is written down, country by country
No net-salary calculator models an entire tax system, and any that claims otherwise is lying. What can be done is to say exactly what is left out, and that lives on each country's page: Portugal's IRS Jovem, the Dutch 30 % ruling, Singapore's Parenthood Tax Rebate, the Mexican aguinaldo exemptions.
The judgement calls are written down too, and those are the dangerous ones because they are readings of the law rather than data: in Geneva we apply the 50 % splitting of article 41 al. 3 rather than the 55.56 % of al. 4; in Vaud the 5 % rebate goes only on the cantonal coefficient. If a figure is an assumption rather than a fact, it says so where the figure is.
What this is and what it is not
It is an estimate built for the moment BEFORE you decide something: accepting an offer, moving country, raising your monthly contribution. That needs a figure that is reliable and fast, not one that is exact to the cent.
It is not tax advice and it is no use for filing a return. The rules change every year and each page states which tax year it is computed with. If the decision is a big one, check it with an adviser in that country.
Change log
What has changed, most recent first. Every new country goes through everything above before it appears here.
- 8 October 2026 — Every country page now explains its tax system: where each parameter comes from, what the cross-check turned up and what is left out. And this page.
- 21 September 2026 — Mexico, the eleventh country. The worker's IMSS rate is settled against article 106 of the law after three of four published tables turned out to be wrong.
- 21 September 2026 — Singapore, the tenth country. The diagram now calls each withholding by its own name instead of using the Spanish one for all of them.
- 17 September 2026 — Compound interest slider values can be typed, including above the maximum. The deficit flow stops crossing the withholdings in the diagram.
- 10 September 2026 — Poland, the ninth country. The downloadable report is redesigned, withholdings are now always shown separately, and the country becomes the first thing you choose.
- 2 September 2026 — Legal pages: privacy, cookies and legal notice.
- 30 August 2026 — Every supported country gets its own page. The project is renamed Salary to Life.
- 29 August 2026 — Portugal and the Netherlands. French is added as a third language.
- 28 August 2026 — Luxembourg and the United Arab Emirates. The tax engine is verified against official sources for the first time, which is when the Geneva and Luxembourg errors surfaced.
