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 of 7 November 2026 (daily snapshot)
Live listings we will serve2,749,660
… in the EU, EFTA and the UK611,414
… in the United States, Canada and Mexico1,682,148
Employers141,331
Posted in the last 7 days236,103
Held and deliberately not served971,934
Closed roles retained with a closure date and reason9,912,362
Seen in the last 30 days: open now plus closed in the last 30 days, served rows only (recounted hourly)4,718,352
Countries236
Measured2026-11-07T04:09:02Z
Ledger last refreshed2026-11-07T03:10:44Z
One daily snapshot behind every number on this site: the same values are on the home page, /pricing, /facts, llms.txt, apis.json and /public/site-stats (with one definition per figure). Europe is the EU, EFTA and the UK; regional figures sum the per-country table. Closure dates: JOA records as the closure date the day its daily verification confirmed that an advert had gone. Before late September 2026 that verification ran in large catch-up batches, so closure dates recorded before then show when JOA confirmed a closure, not when the employer closed the role; daily verification applies from late September 2026.
Field completeness
Application URL2,749,660 100%
Every row links to the employer's own application page.
Country2,653,780 96.5%
ISO country. Stated by the source, or inferred from the place; field_sources.country tells you which. Absent where the location names no unique country.
Category2,591,538 94.2%
Inferred by us and published only above 0.6 confidence.
Remote status2,740,163 99.7%
Stated by the employer, or inferred: field_sources tells you which.
City2,277,860 82.8%
Absent where the source gives a region or a remote-only role.
Full description2,683,125 97.6%
Full advert text. The largest gap in the ledger, and the honest number.
Seniority1,212,526 44.1%
Inferred from the title. Most titles do not state one.
Salary (annual EUR)749,734 27.3%
Pay stated by the employer, in structured fields or the posting text; converted to annual EUR. Amounts are never estimated. Where the source states the amount but not its period or currency, the one obvious unit is filled and marked inferred in field_sources; anything not obvious stays absent.
Engagement (stated by the source)3,567 0.1%
The posting states the relationship (employee / vendor / other). Most do not.
Engagement (established)9,811 0.4%
Stated by the source, plus rows our audited rules established. Never guessed from silence.
Contract category (stated by the source)46,976 1.7%
The posting states the contract kind (permanent, fixed-term, ...). Most do not, especially US postings.
Contract category (established)46,976 1.7%
Stated by the source, plus rows our audited rules established. Never guessed from silence.
Agency flag (stated by the source)565 0%
The posting or feed states the direct / agency / umbrella arrangement.
Agency flag (established)6,114 0.2%
Stated, plus rows classified from the source's own agency status.
Working schedule (stated by the source)401,522 14.6%
The posting states full-time / part-time / flexible.
Working schedule (established)401,522 14.6%
Stated by the source, plus rows our audited rules established.
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 systems2,113,525 · 69 sources
Employer career sites and direct submissions592,181 · 6 sources
Government and public employment services43,954 · 4 sources
Sources that must be named, and how
JobTech SwedenArbetsförmedlingen JobTech, CC0 · 25,883 rows
USAJOBSUSAJOBS (U.S. Office of Personnel Management) · 8,187 rows
NAV NorgeNAV (arbeidsplassen.no) · 6,325 rows
Teaching Vacancies (DfE)Contains public sector information licensed under the Open Government Licence v3.0. · 3,559 rows
Every row names its source in source and source_type.
What we deliberately exclude

These 19 sources JOA reads but does not republish: nothing from them is published here or through the API. They include job boards, aggregators and public employment services that JOA uses for discovery only:

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.

Want pay percentiles and time-to-fill instead? See Market Signals.

This measures whether a listed role is still open at its source (freshness). We do not yet publish an independent accuracy audit. Ask us and we will run one against your market before you buy.