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.
| Live listings we will serve | 2,749,660 |
| … in the EU, EFTA and the UK | 611,414 |
| … in the United States, Canada and Mexico | 1,682,148 |
| Employers | 141,331 |
| Posted in the last 7 days | 236,103 |
| Held and deliberately not served | 971,934 |
| Closed roles retained with a closure date and reason | 9,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 |
| Countries | 236 |
| Measured | 2026-11-07T04:09:02Z |
| Ledger last refreshed | 2026-11-07T03:10:44Z |
| Employer applicant-tracking systems | 2,113,525 · 69 sources |
| Employer career sites and direct submissions | 592,181 · 6 sources |
| Government and public employment services | 43,954 · 4 sources |
| Sources that must be named, and how | |
| JobTech Sweden | Arbetsförmedlingen JobTech, CC0 · 25,883 rows |
| USAJOBS | USAJOBS (U.S. Office of Personnel Management) · 8,187 rows |
| NAV Norge | NAV (arbeidsplassen.no) · 6,325 rows |
| Teaching Vacancies (DfE) | Contains public sector information licensed under the Open Government Licence v3.0. · 3,559 rows |
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.