We tried 26 job APIs. Here is what works and what does not

Every job API we tried while building Job Badger's search: what each covers, how you get access, what surprised us, and the 9 we do not use.

By Nenad FranjicSenior marketer, and the person who builds Job Badger.

Short answer: Of the 26 job APIs we tried in 2026, 17 run Job Badger's search today, 12 of them without any key. The other 9 returned the same jobs for every query, could not search by keyword, refused our servers, needed something we could not provide, allow commercial use only for a 14-day trial, or ask in their terms that their jobs not be passed on to sites like ours.

Job Badger searches free and official job sources in more than 30 countries at once. Building it meant trying every job API we could find, and most of what we learned is not in anyone's documentation. Here is all of it: what each API covers, how you get access, what surprised us, and the 9 we decided not to use. We re-ran our checks on 3 October 2026; where a finding is older, its date says so.

Five things we learned the hard way

1. Zero results is not an error. The worst failures are silent. EURES returns a perfectly ordinary empty answer for a region code it does not use: the 2021 code for Utrecht, nl31, gives 0 marketing jobs and the 2024 one, nl35, gives 695. jooble returned nothing for “Toronto, Canada”, and 14 jobs for “Toronto”, all in Toronto, Ohio. SmartRecruiters' search returned the same 88 jobs whatever location, country, city, offset or page we sent. Test every filter with a value that has to change the answer, and compare the IDs.

2. Check what the API thinks you asked for.The Bundesagentur für Arbeit matches place names loosely. “Zurich” becomes Aurich in East Frisia; “Belgrade, Serbia” becomes Serba, a village near Jena, and returns 89 jobs in Germany. Its response says what it matched, in woOutput.bereinigterOrt. We now only ask it about places in Germany.

3. Read the terms before you write the adapter.Remotive and Himalayas offer free APIs and, on the same pages, ask that their jobs not be submitted to third-party sites, naming Jooble, Google Jobs and LinkedIn Jobs. Adzuna allows commercial use only during a 14-day trial. CareerOneStop's licence expires 36 months after you apply. ReliefWeb has required a pre-approved app name since 1 November 2025. None of that shows up in a quick test, and all of it decides whether you can ship.

4. APIs change under you.The Bundesagentur retired versions 4 and 5 of its API; they now answer 403 with a one-byte body, and version 6 renamed most fields. In August, Remote OK's ?tags=filter started sending non-browser clients to its homepage; in October it filters again. In July, Himalayas returned the literal string “name” as the company of every job past the first few; by September it was fixed. A source that breaks quietly looks exactly like a source with no jobs, so check each one with a query that should always return something.

5. The data needs cleaning, and so does your code.NYC Jobs lists a job once per posting type, so the same job appears twice. ReliefWeb kept 54 of 1,130 listings published after their closing date. In September, Remote OK sent text double-encoded in UTF-8. Reed's salaries do not say whether they are yearly or hourly. And one bug was ours: Jobicy, Reed and ReliefWeb send numeric IDs, our helper read only strings, every job on those boards got the same empty ID, and de-duplication kept one job per board.

Two quirks are about where your code runs. USAJOBS wants your registered email address as the User-Agent. When we tried Careerjet in July, it tied a key to approved server IPs and wanted the end user's IP on every call, which a serverless function with changing addresses cannot satisfy.

The 17 APIs we use

These are the sources one search asks today, 12 of them with no key. The company boards are read one company at a time; we read 57 of them, picked by the markets they hire in.

  • EURES

    31 European countries · No key · checked 3 October 2026

    The EU's job portal, fed by every national employment service. Its public search API is undocumented, and was down on and off for two weeks in September. A region code it does not use returns zero results with a 200, exactly like an empty search: the 2021 code for Utrecht (nl31) gives 0, the 2024 one (nl35) gives 695 marketing jobs. Pay is not in the search results, only in each vacancy's own record.

  • Bundesagentur für Arbeit (Jobsuche)

    Germany · A public key, sent as a header · checked 3 October 2026

    Versions 4 and 5 are retired and answer 403 with a one-byte body; version 6 renamed most fields. The place filter is fuzzy: "Zurich" becomes Aurich in East Frisia, and "Belgrade, Serbia" becomes Serba near Jena, with 89 German jobs. The response says what it matched in woOutput.bereinigterOrt, so check it before trusting the results.

  • JobTech JobSearch (Arbetsförmedlingen)

    Sweden · No key · checked 3 October 2026

    Fast, clean JSON with occupations already classified and the employer's own application link.

  • MyCareersFuture

    Singapore · No key · checked 3 October 2026

    Every listing in our sample came with a pay range: 110 of 110.

  • NYC Jobs (NYC Open Data)

    New York City government · No key · checked 3 October 2026

    The same job appears once per posting type, so keep the external postings, de-duplicate by job_id and drop closed ones. Every listing in our sample came with pay: 24 of 24.

  • Jobicy

    Remote jobs · No key · checked 3 October 2026

    The tag parameter is a text search, and a term under three letters ("hr") returns a 400.

  • Remote OK

    Remote jobs · No key · checked 3 October 2026

    In August its ?tags= filter sent non-browser clients to the homepage; in October it filters again. A salary of 0 means none was given, and in September we found text double-encoded in UTF-8 ("–" for a dash).

  • Working Nomads

    Remote jobs · No key · checked 3 October 2026

    The latest listings only, and no pay field.

  • Arbeitnow

    Germany and remote jobs · No key · checked 3 October 2026

    A paginated feed with no pay field.

  • Greenhouse Job Board API

    Company career boards · No key, one board per company · checked 3 October 2026

    Add content=true and pay_transparency=true to the list endpoint and one call returns every ad in full with the employer's pay ranges.

  • Ashby Posting API

    Company career boards · No key, one board per company · checked 3 October 2026

    includeCompensation=true adds the pay summary, and shouldDisplayCompensationOnJobPostings says whether the company shows it. Big boards are big: OpenAI's was 14.5 MB for 828 jobs.

  • Lever Postings API

    Company career boards · No key, one board per company · checked 3 October 2026

    Postings carry an ISO country code, which beats parsing the location text.

  • SmartRecruiters job search

    Across companies · No key · checked 3 October 2026

    The cross-company search returned the same 88 marketing jobs whatever location, country, city, offset or page we sent.

  • Reed

    United Kingdom · Free key · checked 3 October 2026

    The key goes in a Basic-auth header as the username, with an empty password. Search results give a minimum and maximum salary without saying whether it is yearly or hourly, and nothing at all when the employer hid it.

  • USAJOBS

    US federal government · Free key · checked 3 October 2026

    The User-Agent header must be the email address you registered with. Every listing in our sample carried its pay range: 33 of 33.

  • jooble

    Aggregator · Free key · checked 26 September 2026

    Our key returned rows only for US places (New York 20; London, Berlin and Madrid 0). A location with a comma ("Toronto, Canada") returned nothing, and a bare "Toronto" returned Toronto, Ohio.

  • ReliefWeb

    Humanitarian and development jobs · Free appname, approved by ReliefWeb · checked 3 October 2026

    Since 1 November 2025 the appname must be pre-approved. In September, 54 of 1,130 listings were still published after their closing date, so filter on the date yourself.

The 9 we do not use

Some of these work well for other purposes. They did not fit a free search that lists their jobs next to everyone else's, or they did not work from our servers.

  • Remotive

    Remote jobs · No key · checked 3 October 2026

    Returned the same 16 jobs for "marketing" and for "nurse" (the nurse search led with back-end engineers). Its API page also asks that its jobs not be submitted to third-party sites, naming Jooble, Neuvoo, Google Jobs and LinkedIn Jobs.

  • Himalayas

    Remote jobs · No key · checked 3 October 2026

    Its API page asks that its jobs not be submitted to third-party sites, naming Jooble, Neuvoo, Google Jobs and LinkedIn Jobs, which is close to what a job search does. In July every company name past the first few results came back as the literal string "name"; that was fixed by September.

  • The Muse

    US-led, worldwide · No key · checked 3 October 2026

    No keyword search, only a fixed list of categories: "Marketing" returned 1 job and "Software Engineering" 96,981. A "Berlin, Germany" location returned 6,379 jobs led by remote and US ones.

  • We Work Remotely

    Remote jobs · RSS feed · checked 3 October 2026

    The feed refused our servers in July, and its terms page refuses scripts, so we could not check what it allows.

  • Careerjet

    Aggregator · Free key · checked 21 July 2026

    Every call must carry the end user's IP address and user agent, and the key is tied to approved server IPs. Serverless functions change theirs, and our valid key returned nothing.

  • Adzuna

    Aggregator · Free key · checked 3 October 2026

    Commercial use is allowed only during a 14-day trial; the terms say so plainly. We kept the trial for when we would pay.

  • CareerOneStop

    United States · Free key · checked 3 October 2026

    Royalty-free, but the licence expires 36 months after you apply. In July its registration did not accept our connection from outside the US.

  • Job Bank

    Canada · Partner feed · checked 12 September 2026

    The job feed for partners requires a Canadian Business Number.

  • Infostud

    Serbia · None · checked 3 October 2026

    No public API. Its robots.txt disallows the RSS feed and search for every crawler, and its terms prohibit commercial reuse without permission.

If you are building something similar

Start with the public employment services. They are free, they carry on-site jobs that remote boards never see, and national services often publish structured pay: our pay transparency report found pay on nearly every vacancy in 8 European countries. Then add the remote boards, whose listings carry their own location rules (the remote jobs report found 38% open to the US only), and company career boards for the markets nobody else reaches.

Give every source a timeout and let the rest answer without it. Keep a known query per source and alert when it comes back empty. Store the date you last checked each finding, because the next change will not be announced.

The result is Job Badger's search: one search across all 17 sources, free and without an account.

How we checked

On 3 October 2026 we re-ran each live behaviour described here from a script: the same query with different filters, compared by job ID, and each API's response read as it came. Terms are quoted from each API's own documentation page, listed under Sources. Findings we could not re-run, because we no longer call that API or could not register, keep the date we last saw them.

Common questions

Is there a free API for jobs in Europe?
Yes. EURES, the EU's job portal, answers searches across 31 European countries without a key, though the API is undocumented. Germany's Bundesagentur für Arbeit and Sweden's JobTech JobSearch are free too, and they carry on-site jobs that remote job boards do not.
Which job board APIs are free to use?
Of the 17 we use, 12 need no key at all: EURES, JobTech JobSearch (Arbetsförmedlingen), MyCareersFuture, NYC Jobs (NYC Open Data), Jobicy, Remote OK, Working Nomads, Arbeitnow, Greenhouse Job Board API, Ashby Posting API, Lever Postings API and SmartRecruiters job search. Bundesagentur für Arbeit (Jobsuche), Reed, USAJOBS, jooble and ReliefWeb are free with a key or an approved app name. Adzuna is free for commercial use only during a 14-day trial.
Can I use the Remotive or Himalayas API on my job site?
Read their terms first. Both API pages ask that their jobs not be submitted to third-party websites, naming Jooble, Neuvoo, Google Jobs and LinkedIn Jobs, and ask for a link back and a credit. A job search that lists their jobs next to everyone else's is close to what they rule out, so we have not used either.
Why does my job API return zero results?
Often because the API did not understand the request and said nothing. EURES returns zero for a region code it does not use, jooble returned nothing for a location with a comma in it, and the Bundesagentur matches place names loosely, so a name it does not know can land you in the wrong town. Test each filter with a value that must change the answer.

Sources

The guidance here is tested against real applications and their outcomes — including the rejections — rather than written from a content brief.