Job Opportunities API

Check the data. Then trust it.

Facts

Every number on this page was read from the live ledger when the page was built, and every one of them can be reproduced by anyone with a terminal and no account. That includes the numbers that do not flatter us.

The ledger, reconciled
Live — rows you can page out of the API3,378,465
Withheld — held, deliberately not served255,019
Closed — roles retained with their closure date5,768,458
Total ledger9,401,942 — and 3,378,465 + 255,019 + 5,768,458 = 9,401,942, exactly
Employers188,297
Countries249
Posted in the last 7 days202,645
Measured2026-09-13T01:52:41Z
What we hold back, and why
Breaches the employer-direct rule, or comes from a discovery-only source103,732
Reversible doubt — excluded by default, reachable with ?quality=all151,287
Employer asked to be removed0

Withheld is not the same as deleted. The rows stay in the ledger and stay counted here; they are simply not in the set a caller receives by default. An aggregator republishing someone else's advert, a staffing agency placing candidates at third parties, and a job board hosting an advert on an employer's behalf are all real listings — they are just not employer-direct, which is the only thing we sell.

Where the live rows come from
direct (3 providers)1,720,127
employer_ats (17 providers)1,648,283
government (3 providers)10,055
Sources we refuse to carry (19)

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

These are aggregators, boards and government portals. Some are refused on licence terms, some because the advert belongs to someone other than the employer. Either way the test is checkable: none of them should ever appear in a response you receive.

The fields we are worst at
Salary (annual EUR)224,251 (6.6% of live rows)
Seniority1,527,237 (45% of live rows)
City2,447,600 (72% of live rows)
Country2,474,911 (73% of live rows)

You would find this out on evaluation day regardless. Better that it comes from us, on the page we invite you to check, than from your own pipeline three weeks in. The full field-by-field breakdown is on coverage.

Check any of this yourself, without an account
The figures on this pagecurl https://api.jobopportunitiesapi.org/public/coverage
How recently every live row was re-confirmedcurl https://api.jobopportunitiesapi.org/public/freshness
Every provider, and the ones we refusecurl https://api.jobopportunitiesapi.org/public/providers
Employer counts, per countrycurl https://api.jobopportunitiesapi.org/public/coverage/employers
Actual rows, no keycurl 'https://api.jobopportunitiesapi.org/public/jobs?limit=5'

Every one of those answers with no key and with Access-Control-Allow-Origin: *, so they work from a browser console too. If a number on this page disagrees with what those endpoints return, the endpoints are right and we have a bug — tell us.

Measured 2026-09-13T01:52:41Z. The report is rebuilt on a schedule rather than per request, because counting it on every request took 24 seconds and returned 503s — so this page tells you when it was true rather than implying it is true this instant.