EU Pay Transparency Directive data: how many job ads show pay, by country
Directive (EU) 2023/970 required member states to bring pre-employment pay information into national law by 7 June 2026; no official body publishes how many job ads actually show pay, so the figure has to be measured from the ads. Source: Arcadium Data, data as of .
Article 5 of the Pay Transparency Directive gives applicants the right to know the starting pay or pay range of a job before the interview, and that information can be given in the vacancy notice itself. Employers also may not ask about salary history. The deadline for national transposition was 7 June 2026, and countries moved at very different speeds: some have laws in force, several have drafts, a few have not started. Companies that hire across borders now face a patchwork, and the first place it shows is in the job ad.
For a recruiter, a salary tool, a journalist or a compliance team, the practical question is simple: has the share of job ads with pay changed in country X? This guide shows what the official sources can and cannot answer, how to measure it yourself, and the API that does it daily.
The official route: law texts, trackers and Eurostat
What the official sources give you
- The directive and national measures. The text is on EUR-Lex (
eli/dir/2023/970/oj). EUR-Lex also lists the national transposition measures each member state notified, with the date and a link to the law. That is the authoritative status, but it lags the real situation by weeks and names laws, not effects. - Trackers. Law firms and consultancies keep country tables of status and effective dates. They are useful, update at their own pace, and disagree on partial cases such as a country that changed only its labour code on vacancy notices. Cite the one you use and its date.
- Eurostat. The Structure of Earnings Survey and the gender pay gap tables measure actual pay, not posted pay, and are updated every few years. They tell you whether pay differs between men and women, not whether job ads show it.
No statistical office or ministry we are aware of publishes the share of job ads that show pay. The signal is in the ads themselves, which is why the measure is built from public job boards.
Measure it yourself
Many employers publish through applicant tracking systems whose public job-board APIs carry structured pay fields (see the posted salary guide): Greenhouse, Ashby and Lever expose it, others only in the text. A defensible measure has five parts:
- A panel of boards, fixed and documented. State how you chose them. Ours is the open boards of the employers we can place in a country.
- A daily snapshot of open jobs per country. The denominator is open jobs, not new postings.
- A pay test: a structured pay field with a minimum or maximum amount. Pay that is only written in the ad text is harder to detect reliably, so a strict tracker leaves it out and says so. A bare "competitive salary" never counts.
- Shares at two levels: jobs with pay over open jobs, and employers with at least one ad with pay over employers. The second is harder to move with one large employer.
- Legal status next to the number, with a date, so a rise can be read against the law.
Python
from collections import defaultdict
def pay_share(jobs: list[dict]) -> dict[str, dict]:
"""jobs: one snapshot, each {"country": "DE", "employer": "x.com", "has_pay": bool}."""
out = defaultdict(lambda: {"open": 0, "with_pay": 0, "employers": set(), "emp_pay": set()})
for j in jobs:
c = out[j["country"]]
c["open"] += 1
c["employers"].add(j["employer"])
if j["has_pay"]:
c["with_pay"] += 1
c["emp_pay"].add(j["employer"])
return {k: {"payShare": v["with_pay"] / v["open"],
"employerPayShare": len(v["emp_pay"]) / len(v["employers"])} for k, v in out.items()}
Pitfalls
- Panel bias. Boards of employers on modern applicant tracking systems skew towards tech and larger firms. The share is of the panel, not of all jobs. Say so next to every number.
- Multi-country postings. One ad can list several countries; count it once per country or assign one, and say which.
- Ranges that are not salary. Hourly rates, bonus targets and "up to" values need normalising before comparing; see the posted salary guide.
- Staffing agencies post for other employers and can dominate a country; exclude them or report them separately.
- Law dates differ from effect dates. Employers prepare early and enforcement is slow. Do not read a flat line as non-compliance.
- Seasonality. Hiring waves change the mix of open jobs. Compare the same weeks across years or use a trailing average before you call a trend.
The fast route: the share of ads with pay, daily by country
Arcadium Data keeps the panel and the pay test, and serves a daily row per country (and size band of employer) with open jobs, jobs with pay, employers, employers with pay, the two shares and the legal status of the directive with its effective date. The statuses are maintained by hand from public trackers and national measures and carry their as-of date. One country per call is open without a key:
Calls on this page work without a key from one IP (10 requests a minute, 100 a day, short answers, point lookups). A free key lifts the limits: sign up. Routes, parameters and fields: OpenAPI.
curl
curl -s "https://api.arcadiumdata.io/v1/pay/transparency?country=PL"
Python
import requests
data = requests.get("https://api.arcadiumdata.io/v1/pay/transparency?country=PL", timeout=30).json()
for row in data["data"]:
print(row["day"], row["payShare"], row["employerPayShare"], row["directiveStatus"])
TypeScript
const res = await fetch('https://api.arcadiumdata.io/v1/pay/transparency?country=PL');
const data = (await res.json()) as { data: { day: string; openJobs: number; payShare: number; employerPayShare: number; directiveStatus: string }[] };
for (const r of data.data) console.log(r.day, r.payShare, r.employerPayShare, r.directiveStatus);
Response (abridged)
{
"count": 2,
"data": [{
"day": "2026-10-24", "country": "PL", "countryName": "Poland", "sizeBand": "all",
"openJobs": 11271, "jobsWithPay": 773, "payShare": 0.0686,
"employers": 1177, "employersWithPay": 191, "employerPayShare": 0.1623,
"directiveStatus": "partial", "directiveInForce": "2025-12-24"
}]
}
For comparison, the same call for country=DE on the same day returned a pay share of 2.3% and status not_started: 1,556 of 68,206 open jobs in the German panel. Poland, where pre-employment duties are in force, shows about three times that. Read the two shares together: the job share says how common pay is in the stock of open jobs, and the employer share says how widespread the practice is across firms. When the employer share is far above the job share, a few large employers with many ads are not yet showing pay. Use a free key to pull all countries, since and until windows and size bands. The country-by-country picture is on our pay transparency tracker; the statistics page tracks the trend.
Comparison
| Law trackers / EUR-Lex | Eurostat | Arcadium Data /v1/pay/transparency | |
|---|---|---|---|
| Answers | Legal status and dates | Actual pay and gaps | Share of ads with pay |
| Update rhythm | Weeks to months | Years | Daily |
| Unit | Country | Country, sector | Country, employer size band |
| Basis | Laws | Surveys | Public job boards of a documented panel |
| Key | None | None | None for one country; key for all |
Get the data without the plumbing
Arcadium Data serves these datasets from one REST API and one MCP server, with sources, licences and dates on every answer. No key is needed to try the routes in this guide.
Related
- Posted salary data from job ads
- Job board APIs: Greenhouse, Lever, Ashby
- Pay transparency tracker
- Pay transparency statistics
Sources
Last updated 2026-10-25. This guide is ours and independent of the organisations it describes. Found a mistake? Tell us and we correct it.
Questions
What does the EU Pay Transparency Directive require in job ads?
Article 5 gives applicants the right to the initial pay or pay range of a job before the interview, which may be stated in the vacancy notice. Employers also may not ask about pay history. The transposition deadline was 7 June 2026.
Is there an official dataset of job ads that show pay?
Not that we are aware of. EUR-Lex lists national measures and Eurostat publishes actual pay, but no body publishes the share of job ads with pay, so it is measured from public job boards.
Which countries have transposed the directive?
Statuses change monthly. Our tracker lists each member state as transposed, partial, draft or not started, with a source and an as-of date. Check the national measure on EUR-Lex for the legal position.
How is the share of job ads with pay calculated?
Open jobs on the boards of a documented panel of employers, counting a job as having pay when the job board publishes a minimum or maximum amount in a structured field; pay written only in the ad text is not counted, so the share is a floor. We publish both a job share and an employer share.
Is the panel the whole job market?
No. It covers employers on public applicant tracking systems, which skew towards tech and larger firms, so treat the number as a panel measure and compare it over time and between countries.
Cite as: Arcadium Data, "EU Pay Transparency Directive data: how many job ads show pay, by country", https://arcadiumdata.io/guides/eu-pay-transparency-directive-data/, data as of 2026-10-25.