The dataset behind every figure on this site

Every figure on this site comes out of one file, and that file is published. It holds 15 countries and 63 lines of employer cost set by law. Each line is copied from the body that sets or collects it. Each one shows the page it came from and the day it was read. The file also holds what 14 employers of record charge, where they publish it. It is free to reuse under CC BY 4.0.

The same rows come in two shapes. data.json keeps each country's lines inside it. The two CSV files are flat, so they open in a spreadsheet. data.csv has one row per line of cost, 63 rows and 27 columns. providers.csv has one row per firm, 14 rows and 13 columns.

What is in it

Countries15
Statutory contribution lines63
Lines read from the body that sets or collects the contribution28
Lines read from a named payroll reference instead35
Lines carrying an annual ceiling44
Countries with statutory extra pay6
Of those, countries where we hold a source putting it in the contribution base5
Employer of record providers14
Providers publishing a per-employee price13
Items we could not confirm and therefore excluded24
Recorded price changes and corrections5
Currencies10, never converted into each other
Statutory year2026
Last full refresh2026-08-21

The files

data.csvOne row per statutory contribution line. The country columns repeat down that country's rows. UTF-8, comma separated, list values separated by |.
providers.csvOne row per employer of record provider, with the published price and the page it was read from.
data.jsonOne object per country with contrib[] nested inside, and the providers alongside with the previous value of every figure that has moved. Served with CORS open, so you can fetch it from your own page.
feed.xmlRSS. One item per provider per day a figure changed.
changesThe same history as a page, with the old value beside the new one.

What one row means

In data.csv a row is one contribution line; the country columns repeat down that country's rows, so a country with three contributions occupies three rows carrying the same leave, notice and severance values. In JSON the same country fields sit on the object and the contribution fields sit in contrib[], where they carry the short names given below.

Row order carries no meaning. Countries and providers come out in the order the source file holds them, not in any ranking, so sorting the file yourself changes nothing about what it says.

Country columns, in data.csv
ColumnTypeWhat it holds
countrystringCountry name as it is written on this site.
iso2stringISO 3166-1 alpha-2 code. The country page is /c/<iso2 lower-case>.
page_urlurlThe page on this site that holds this country.
currencystringThe currency every amount for this country is in. We never convert.
rate_yearnumberThe statutory year the rates apply to.
extra_monthsnumberStatutory extra pay expressed in months of salary per year. 0.5 is fifteen days, 0.96 is a holiday allowance of 8% of annual salary.
extra_in_contribution_basebooleanWhether that extra pay is itself subject to employer contributions. Empty where there is no statutory extra pay to charge them on, or where we hold no source saying either way; in the second case the extra pay is left out of the contribution base and the country page says so.
extra_contribution_sourceurlThe page the line above was read from.
extra_contribution_checkeddateThe day that page was read.
extra_contribution_notestringThe wording of the rule in the source's own terms.
extra_notestringWhat the statutory extra pay is, in the statute's own terms.
leave_daysnumberStatutory minimum paid annual leave, in days per year.
public_holidaysnumberPaid public holidays per year, where they are set nationally.
leave_notestringHow the two figures above are set, and what varies.
severance_pctnumberSeverance accrued per year of service, as a percentage of base salary, where statute sets one. 0 where there is no statutory severance at all. Empty where statute does require severance but not as a percentage accruing each year, for example a number of weeks' pay that steps up with length of service or applies only on redundancy: see severance_note, and note that every figure on this site treats an empty cell as no accrual, which makes the figure a floor.
severance_notestringWhat triggers severance and how it is worked out.
notice_weeksnumberMinimum employer notice in weeks, at the reference length of service used on the country page. 0 where statute sets none.
country_noteslistEverything material that is not a rate: regional variation, employee-side items that are often mistaken for employer cost, and similar. Separated by |.
unconfirmedlistItems we could not confirm from a source we were willing to cite, and therefore excluded from every figure. Separated by |.
Contribution columns, in data.csv (in data.json: n, r, cap, floor, max_wage, src, chk, conf)
ColumnTypeWhat it holds
contribution_namestringThe contribution as the statutory body names it, with the employer share stated.
rate_pctnumberEmployer rate, as a percentage of the contribution base.
capnumberAnnual ceiling on the base for this line, in the country's currency. Empty where the line is uncapped.
band_floornumberAnnual amount below which this line is not charged. Empty where it is charged from the first unit of pay.
max_wagenumberAnnual pay above which the employee does not qualify for this line at all. Empty where the line applies at every salary.
source_urlurlThe page this rate was read from.
checkeddateThe day that page was read.
confidencestringhigh or medium. Medium means the agency had not published the current year at the check date, or the figure came from a payroll reference rather than from the collecting agency.
Provider columns, in providers.csv
ColumnTypeWhat it holds
brandstringProvider name exactly as the provider writes it.
page_urlurlThe page on this site that holds this row.
eor_usd_pemp_monthnumberPublished employer of record price in US dollars per employee per month. Empty where the provider publishes none.
price_publicbooleanWhether a per-employee price appears on the provider's own page.
price_statusstringlist (a flat published price), starting (published as a “from” price), or quote (no price published).
billingstringWhat the price covers and how it is billed, in the provider's own terms.
billing_basisstringmonthly or annual: the billing term the published price requires.
contractor_usdnumberPublished price per contractor per month, where the provider sells contractor payments separately.
contractor_mgmt_usdnumberPublished price per contractor per month for contractor management only, where it is priced apart from payments.
cor_usdnumberPublished price per contractor per month for a fully managed contractor of record.
pricing_urlurlThe published pricing page every figure in the row was read from.
checkeddateThe day the row was last read against that page.
notestringAny condition the provider attaches to the price, in its own wording.

What is deliberately not in it

No computed values. The employer cost at a given salary, the uplift percentage, the severance accrual in money and the break-even headcount against an employer of record fee are all worked out at build time from these columns; none of them is stored, so nobody has to trust a number whose derivation is invisible. The method page writes out every formula.

No converted currencies. Each country stays in its own currency and provider fees stay in the dollars the provider publishes. A converted figure is one nobody published, and it would need an exchange rate and a date we do not hold.

No guesses. Where a statutory body does not publish something, or we could not retrieve it, the field is empty and the item is named in unconfirmed instead. 24 items are excluded that way. An empty cell and a zero are different things: severance_pct is 0 in the 8 countries with no statutory severance at all, and empty in the 5 where severance is owed but not as a percentage accruing each year. Both are treated as no accrual in the figures, which is one of the reasons those figures are floors.

No ratings. There is no score, star or rank column anywhere in it. Ordering on this site comes from one computed number and nothing else.

Two fields in data.json are not in the CSV. low and high hold the range a country's marginal employer rate moves through, recorded when the country was first read. Nothing on this site computes from them, and the per-line rates in data.csv are what every figure is built on, so they are left in the JSON and out of the CSV. The provider previous block is left out for the same reason: it is history rather than a current figure, and it is published in full in changes and the feed.

How to read the confidence and source labels

Two labels sit on every contribution line and they mean different things. source_url says where the rate was read: 28 of 63 lines come from the body that sets or collects the contribution, and the remaining 35 from a named national payroll reference, because the statutory page could not be reliably retrieved. confidence says how firm the reading is: 23 of 63 are high and 40 are medium. A line can be statutory and still medium, for example where the agency had not published the current year at the check date.

The 46 entries in country_notes carry what does not fit a rate: regional variation, employee-side items often mistaken for employer cost, and conditions attached to a figure. They are part of the data, not decoration.

How often it changes

Figures are re-read against the source page and re-dated when they move. Any figure older than 90 days is marked on the page it appears on. Every change is kept, with the old value, the new value, the date and the reason, and published in changes and the feed. The URLs above are stable: the file at each one is replaced, never moved.

License

The data is published under Creative Commons Attribution 4.0. You may reuse it, including commercially, if you credit After the Salary and link back. The rates themselves are facts published by statutory bodies and the prices are facts published by the providers; the collection, the column definitions and the wording on this site are ours.

Cite this data

If you quote a figure, please cite the dataset rather than an individual page, and give the date you took it. The figures move.

ReferenceAfter the Salary (2026). Employer statutory cost by country, and employer of record pricing [Data set]. https://seatbill.com/employer-of-record/data
In a sentence“According to After the Salary (2026), …” with a link to https://seatbill.com/employer-of-record/data
LicenseCC BY 4.0
@misc{afterthesalary_employer_cost, title = {Employer statutory cost by country, and employer of record pricing}, author = {Kaz}, year = {2026}, url = {https://seatbill.com/employer-of-record/data}, note = {After the Salary. Licensed CC BY 4.0} }

Researchers and journalists are welcome to the whole file. If you need a cut of it that is not here, a set of countries or a date range, ask and it will be produced.

If a figure is wrong

Tell us through the contact form with the statutory page or the pricing page you saw it on. It will be re-read, corrected, re-dated, and the correction published in changes with the old value beside the new one.

Related

Written by Kaz, independent publisher. No commercial relationship with the providers named unless it is listed on the disclosure page.

Page last updated 2026-09-06. Sources are listed per figure and labeled statutory or payroll reference. Rates last verified 2026-08-21. This is not legal, tax or payroll advice and we do not file anyone's payroll.

Every formula on this site is written out in full on Method. Ordering is by computed cost, never by what a provider pays us.

Corrections: contact form.