Job Opportunities API

Check the data. Then trust it.

How this compares

Including the cases where somebody else is the better buy. Every figure about another vendor below is quoted from their own page, or is an HTTP request we actually sent, on the date shown — never a reading of their marketing.

The one like-for-like comparison that needs no caveat

Techmap sells job data by the country: “Starting at 333 € per month per country”, daily exports as JSON files, one country without data limits. Their AWS Data Exchange route is “4800 € per year per country”. Read from techmap.io/pricing on 2026-08-08.

Signal is €299 / month for one country with no record limit — the same shape and the same unit — plus an incremental delta feed, so you fetch what changed rather than a full export every day. That is the whole comparison. It is the only one in this market we can make without an asterisk, which is why it is the one we lead with.

Before buying it, check how much of your country we actually hold at /coverage/countries. If the whole market fits inside €80 / month's monthly record allowance, buy that instead — the uncapped single country buys you nothing.

Can you query it before you have an account? (probed 2026-08-08)

Sent from a machine outside our network to each vendor's own documented job-search endpoint, with no credentials. This is the column worth checking yourself, because it takes ten seconds and it is the one thing in this table nobody can phrase their way out of.

VendorNo-key requestCORS
Job Opportunities API200 — rows returnedAccess-Control-Allow-Origin: *
jobdataapi400 — key requirednone
TheirStack405 — bearer token requirednone
Coresignal404 — no route without a keynone
Techmap (via RapidAPI)401 — invalid API keynone
Adzuna400 — app_id + app_key requirednone
curl 'https://api.jobopportunitiesapi.org/public/jobs?country=GB&require_fields=description&limit=3'

Rows come back with a field_sources block marking every field published, inferred or absent, and a completeness object saying how many such rows exist in the ledger.

To be exact about what "without an account" means here: one page per filter, up to 50 rows, at about two requests a second. Change the filters and you get different rows. Paging through the corpus needs a key — the free one does it. This is stated rather than discovered, because a page arguing that our claims survive checking should not have an asterisk you find at request 51.

Where somebody else is the better buy
Techmap, on breadth of sourcing. They publish “over 1800 sources”. We redistribute a much smaller number and name every one of them at /public/providers. If your requirement is “as many sources as possible”, that is theirs, not ours.
Coresignal and TheirStack, on company data. They sell firmographics, technographics and employee data alongside the postings. We are a job ledger and we are not going to pretend to be a company graph. Buying us for the postings and them for the enrichment layer is a legitimate architecture, and often a cheaper one.
jobdataapi and Bright Data, on salary benchmarking. They sell modelled salary. We publish only figures an employer actually wrote down, which is a small share of rows — /public/coverage says exactly how small, per country. If you need a salary on every row and a model is acceptable, we are the wrong product and saying so early saves us both a call.
Fantastic Jobs and JSearch, on headline price. Both undercut our entry tier for bulk job data. We are not the cheapest and do not claim to be.
Anyone, on company size. This is one person. The mitigation is structural rather than a promise: the API answers without a key, so you can monitor it from your own infrastructure with no account and no status-page subscription, and the top two plans include bulk export of the full corpus — if this stops, you keep the data.
Our own worst numbers, so you do not have to find them
  • Structured salary is 6.6% of rows. Employers mostly do not publish one and we will not model it. ?require_fields=salary returns the ones that do, at 100%, and tells you how many that is.
  • Full advert text is 79% of the ledger, and it is very uneven by country — the table publishes every country including the weak ones.
  • Some sources give us rows and no advert text at all. Three of them are at zero. /public/providers publishes the per-source figure, zeroes included.
  • Everything above is checkable without an account. /public/coverage, /public/coverage/countries, /public/providers and /public/freshness all answer with no key — the last of those reports how recently every live row was re-confirmed at its source, which is the claim a data buyer checks second.
  • 599,803 of the ledger is European (EU, EFTA and the UK) out of 3,424,320 live rows. If you need depth outside Europe, weigh that before you buy.

Competitors change their pricing and we will not always notice on the day. If something here is out of date or wrong, tell us at /contact and it gets corrected — a comparison page nobody can correct is an advertisement.