Job Opportunities API

The Public Ledger of Openings

Coverage

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

The ledger right now
Live listings2,187,067
Employers196,779
Posted in the last 7 days444,923
Closed roles retained212,147
Countries224
Ledger last refreshed2026-08-05T19:51:06Z
Field completeness
Application URL2,187,067 100%
Every row links to the employer's own application page.
Country1,661,790 76%
ISO country. Absent where the source states only a free-text location.
Category986,281 45.1%
Inferred by us and published only above 0.6 confidence.
Remote status971,670 44.4%
Stated by the employer, or inferred — field_sources tells you which.
City919,043 42%
Absent where the source gives a region or a remote-only role.
Full description738,723 33.8%
Full advert text. The largest gap in the ledger, and the honest number.
Seniority450,090 20.6%
Inferred from the title. Most titles do not state one.
Salary (annual EUR)43,711 2%
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 applicant-tracking systems1,110,670 · 16 sources
Employer career sites and direct submissions694,770 · 2 sources
Government and public employment services381,627 · 6 sources
Every row names its source in source and source_type.
What we deliberately exclude

The ledger carries no aggregator data. These 16 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 · careerjet · 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.

Generated from the live ledger, cached for 10 minutes. Machine-readable at GET api.jobopportunitiesapi.org/public/coverage.