Payroll tax rates 2026 — check payroll rate dates in your files

Finds payroll rate tables that still carry prior-year statutory constants or no effective date, and names the day each country resets. Runs entirely in your browser — nothing is uploaded.

Same engine as the VS Code extension, byte for byte.

Install free

Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.

Open VSX (Cursor, VSCodium)npmDocker Hub
npx @readystack/payroll-rate-expiry-lint <file>
docker run --rm -v "$PWD:/w" getreadystack/payroll-rate-expiry-lint /w

Team? One key for every ReadyStack linter, 5 seats, $149 once

Get the full rule table as a PDF
All 15 rules Payroll Rate Expiry Lint checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.

Get the complete version $29

This page is the working piece. The full pack has everything below.

The day your rate table stopped being correct, with the line number

One hour of outside payroll-tax advice costs more than $29, and it does not read your files

Buy the full version — $29
ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

Payroll Rate Expiry Lint

Seven stale statutory payroll constants sat in one 52-line rate table, and the payroll engineer who owns that table for a five-country team found all seven in the time it took to save the file. The same run returned 23 findings in total. On the clean copy of the same table it returned zero.

That gap is the whole problem with payroll rate tables. They are the one file in a payroll system that is wrong by default. The US OASDI taxable wage base, the US elective deferral limit, the UK employer Class 1 secondary rate and secondary threshold, the German Minijob monthly earnings limit, the French annual social security ceiling, the Canadian CPP maximum pensionable earnings: every one of them is replaced on a fixed day by a body that does not open a pull request. The code keeps running. The table keeps answering. Nothing throws, no test goes red, and the first signal is a payslip.

Payroll Rate Expiry Lint is a VS Code extension that reads those tables and says which lines cannot be current. It ships 15 rules, all of them data in ext/rules.json.

Seven rules recognise a prior-year statutory figure by its value and report the day that country resets. Four of those countries reset on 1 January, so the next reset is 2027-01-01. The United Kingdom resets at the start of the tax year, so the next reset is 2027-04-06. The employer Class 1 secondary rate of 13.8 is reported because it applied only up to 2025-04-05, after which the rate rose to 15 per cent and the secondary threshold fell from 9100 to 5000.

The other eight rules do not need to know any figure. They catch the entries that cannot be checked at all: a rate entry with no effective_from, an entry with no end date, an entry that names no country or jurisdiction, an entry whose own end date is already in the past relative to the run date, a rate block named current or latest that carries no date, a table keyed to a tax year that has already closed, a percent value greater than one stored with no unit key, and an unresolved TODO sitting on a statutory figure. That last pair matter more than they look. A rate value of 6.2 with no unit is read as a fraction by one consumer and a percentage by another, which is a factor of 100 in a withholding line. A TODO is a reminder, not an effective date, and it will not stop a payroll run.

Both fixtures ship inside the package, so the two numbers above are reproducible before you point the tool at your own repository. _fixtures/clean.json holds seven entries, each with a country, an effective_from, an end date in the future and a unit, and it returns 0 findings. _fixtures/dirty.json holds the same seven figures a year out of date, and it returns 23 findings across the five countries.

The free tool is the whole check. Run Payroll Rate Expiry: Check This File or Check Workspace and you get every finding, its line number, its severity and the reset date that applies to it. Nothing is blurred, no counter runs down, and the same engine runs as a single page in the browser from the same ext/engine.js and the same ext/rules.json. The full version exports the result: a dated audit report and a per-country renewal calendar for the whole workspace, for team and commercial use, so next year's reset lives on a calendar instead of in one person's memory.

What the tool does not do is tell you the correct figure for your jurisdiction. A published figure has a source and a date, and a linter that invents one is worse than none. It tells you which figures cannot be current, and when each was replaced, so the lookup you then do is short and aimed at one line.

15 seconds — what it actually does

Questions people ask

What does Payroll Rate Expiry Lint actually do?

It reads payroll rate tables in JSON, JavaScript and TypeScript and applies 15 rules. Seven rules recognise prior-year statutory constants by value across five countries and report the day that country resets. Eight structural rules catch entries with no effective date, no end date, no country, an expired end date, or a percent value with no unit.

Who is it for?

Developers and payroll engineers who maintain payroll or HR software whose rate tables cover more than one country, and the payroll lead who signs the table off before the January run. If your repository holds a file of wage bases, ceilings and employer rates for the US, UK, Germany, France or Canada, it is aimed at you.

Why is a free chatbot or a JSON schema not enough?

A chatbot cannot open your repository and cannot give you a line number, and it will answer with a figure it cannot date. A JSON schema validates shape, not time: it never knew that 13.8 stopped being a lawful employer Class 1 secondary rate on 2025-04-05, or that a table keyed to a closed tax year still answers.

What is free and what is in the full version?

Free is the whole check: all 15 rules, every finding, line number, severity and reset date, for one file or the whole workspace, in the editor and in the browser. Nothing is blurred and no counter runs down. The full version exports the dated audit report and the per-country renewal calendar, for team and commercial use.

What would this cost done by a person?

One hour of outside payroll-tax advice costs more than the full version does once, and that hour still ends with a person reading your table by eye. On the shipped sample table the extension returns 23 findings, 7 of them stale statutory constants across 5 countries, in the time it takes to save a file.

Why not just ask ChatGPT or another AI chat?

A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Payroll Rate Expiry Lint checks the file you open against 15 rules from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.