We built 102 tax calculators, then checked every one against the statute
Every online tax calculator asks to be trusted and none of them shows its working. We published 102 of them as open models — formula, constants and test vectors visible — and then spent a week checking each against the law it claims to implement. More than half of the salary models needed a change.
· Valem
What we checked, and what "wrong" means here
The catalog is 102 models: a net-salary calculator and a vehicle-tax calculator for each of 51 countries. Each one is a declarative spec — a list of named fields, the expression that derives each value, the rates as constants, and a set of test cases the engine reproduces on every build. Everything is published, so any claim below can be checked against the model rather than taken on trust.
That machinery guarantees exactly one thing: the model computes what it says it computes. It cannot tell you whether the rate is this year's rate, because there is nothing inside a self-consistent model that knows about the outside world. So the audit was manual and source-by-source: open the statute, the tax authority's own calculator, or the official rate table, and compare it with the constant.
Of the 51 salary models, 19 came out verified-current, 29 needed at least one figure changed, and 3 remained blocked on a document we could not obtain. That is a failure rate better than one in two — which is the first useful finding, because it means the correct prior for any tax calculator you have not personally re-derived this year is that it is stale.
Most errors were drift, not mistakes
The single largest category was simply time. The models were authored against 2025 figures and 2026 had arrived. Thresholds indexed to wages or inflation move every year by design, so a calculator that is not refreshed is not merely dated — it is wrong by the exact amount of the indexation.
Czechia is typical: the taxpayer credit and the social and health rates were all unchanged, but the 23%-rate threshold is set at 36 times the average wage and therefore moves annually, from 139,340 to 146,901 CZK a month. Nothing was mistaken; the number was just a year old. Norway had four separate changes in one budget. Slovenia's entire income-tax scale had shifted.
There is a useful trick here for anyone maintaining a rate table: check whether every constant reproduces as last year's value times the officially announced uplift. Portugal's 2026 set is last year's ×1.0351, South Africa's ×1.034, Austria's ×1.01733, and Slovakia's three new thresholds are exactly 154.8, 212.4 and 264.0 times the €284.13 living minimum. When the arithmetic reproduces, you have two independent derivations agreeing, which is a much stronger position than one source.
Some errors were structural, and no amount of refreshing would have caught them
A refresh that only updates numbers misses reforms that change the shape of the calculation. Denmark's 2026 reform split the old 15% topskat into a 7.5% mellemskat and a 7.5% topskat at different thresholds, and added a 5% top-topskat above 2,818,152 DKK charged on income before labour-market contributions. Slovakia's consolidation package added two entirely new bands at 30% and 35%. Neither model needed new figures; both needed new fields.
Bulgaria was the strangest case. Every number in the model was arithmetically right, and the unit was retired: Bulgaria joined the euro on 1 January 2026. The ceiling of 4,130 BGN converts to €2,111.63, matching the published transitional figure of €2,111.64 to the cent — so the old value was correct and simultaneously unusable.
And a few were wrong for any year
The most uncomfortable findings were the ones no tax year would have made right. These survived because the models were internally consistent and their published vectors all passed — the only way to find them was to read the source.
Mexico's income tax was implemented as (gross − 8,000) × 15%. The real Article 96 monthly tariff is eleven brackets of fixed quota plus marginal rate, from 1.92% to 35%. At an ordinary 15,000 MXN salary the old model produced 1,050 pesos of ISR against an actual 1,552.78 — out by a third. The model's own note had admitted the real table "es más detallada", which in hindsight was the lead, not the excuse.
Norway's minimum-deduction cap was 109,950, a figure matching no recent year in either direction. Lithuania's tax-free allowance carried a spurious third branch belonging to a rule that had been repealed. Slovakia's vehicle model exempted electric cars from a vignette that has no electric exemption — almost certainly copied from Czechia, which does.
The failure mode we most want you to take away
The defect that appeared most often, after simple drift, was not a wrong number at all. It was a missing rule: a provision the model never implemented, frequently one its own explanatory note described.
Saudi Arabia's end-of-service award had the right formula and ignored the Article 84 resignation reduction entirely — nothing below two years, one third from two to five, two thirds from five to ten, the full award only after ten. Anyone who resigned got a materially overstated figure. The UAE model omitted the statutory two-years'-wages cap. South Korea's vehicle tax described its 5%-a-year age discount in the page's own note and never applied it, so a twelve-year-old 1,998 cc car was billed 519,480 won instead of 259,740.
This is why we now diff the prose against the derivations as a matter of routine. When a calculator explains a rule it does not implement, the explanation is the bug report.
Why we can publish this at all
None of this is possible with a conventional calculator, because there is nothing to audit. A form that takes a number and returns a number has no external representation of its own logic — you cannot diff it against a statute, you cannot re-run its assumptions, and you certainly cannot ask a colleague to check it.
Every calculator we publish carries its model as data: the formula for each derived value, the constants those formulas read, the scenarios the engine reproduces, and the source document behind each rule with the date it was last checked. That is what made a week-long audit feasible for 102 models, and it is why the findings above are stated as figures rather than impressions.
It also sets the limit of what we claim. Our verification badge means the engine reproduces the model's own stated formula. It does not mean the formula matches current law — the cited sources are the evidence for that, and 18 of the vehicle-tax models say plainly that their rates are illustrative because no national schedule exists to ship.
Related
Three ways a calculator is wrong that its own tests can never catch
Round numbers are the tell: spotting an invented rate table
See the 102 calculators this came from · All research
Built with Valem — models you can read, re-run and check.