Job Opportunities API

Check the data. Then trust it.

Coverage

Every field in the ledger, counted on the rows we will actually serve you — including the ones we do not have. You will find this out on evaluation day either way; better it comes from us.

The ledger as last measured
Live listings we will serve3,318,454
Employers178,739
Posted in the last 7 days232,815
Held and deliberately not served378,889
Closed roles retained6,083,548
Countries251
Measured2026-09-20T22:53:41Z
Ledger last refreshed2026-09-20T22:50:29Z
Field completeness
Application URL3,318,454 100%
Every row links to the employer's own application page.
Country2,432,852 73.3%
ISO country. Absent where the source states only a free-text location.
Category3,114,872 93.9%
Inferred by us and published only above 0.6 confidence.
Remote status3,315,126 99.9%
Stated by the employer, or inferred — field_sources tells you which.
City2,387,326 71.9%
Absent where the source gives a region or a remote-only role.
Full description2,887,145 87%
Full advert text. The largest gap in the ledger, and the honest number.
Seniority1,502,378 45.3%
Inferred from the title. Most titles do not state one.
Salary (annual EUR)201,036 6.1%
Structured salary only. We never publish an estimate as a fact.
Filter to only the rows that carry a field: ?has_description=true, ?has_salary=true, ?remote_confirmed=true.
Where every row comes from
Employer career sites and direct submissions1,662,060 · 3 sources
Employer applicant-tracking systems1,646,948 · 17 sources
Government and public employment services9,446 · 3 sources
Every row names its source in source and source_type.
What we deliberately exclude

The ledger carries no aggregator data. These 19 sources are fetched for our own products and are never published here or through the API, because we are not licensed to redistribute them:

adzuna · apify_all_jobs · apify_fantastic_jobs · apify_job_listings · apify_xing · arbeitnow · arbeitsagentur · careerjet · eures · france_travail · himalayas · jobicy · jooble · landing_jobs · remoteok · remotive · the_muse · weworkremotely · working_nomads

This is why the data is safe to build a product on. If your compliance team asks where a row came from, the answer is in the row.

Measured from the ledger on a schedule, not at the moment you load the page — the exact measurement time is in the table above, and the API returns it as measured_at with an age_seconds beside it. Counting this per request took 24 seconds and returned an error instead of a number. Machine-readable at GET api.jobopportunitiesapi.org/public/coverage.