Adzuna API: the free jobs API developers find first - a field guide
Adzuna's genuinely free jobs API - 1,000 calls/month, 16+ countries - reviewed honestly next to JobsPipe's own free tier and no-key sandbox. The endpoints nobody reads about, the salary analytics, and the 14-day commercial-trial trap in the terms.
Dvir Atias
Founder, JobsPipe
Search for a free jobs API and Adzuna is usually the first real answer you find. Unlike most aggregators, Adzuna publishes a documented, self-serve API with a genuinely free tier - about 1,000 calls a month - covering job search and, unusually, labor-market analytics across 16+ countries. This guide covers what the Adzuna API actually returns, the analytics endpoints most write-ups skip, where it runs out, and what to pair it with when it does.
Getting a key and making the first call
Register at Adzuna’s developer portal and you get an app_id and app_key pair. Every endpoint is scoped by country code in the path:
curl "https://api.adzuna.com/v1/api/jobs/us/search/1?\
app_id=$APP_ID&app_key=$APP_KEY&\
what=python%20developer&where=austin&results_per_page=20"The response is JSON: a results array with title, company, location (with a parsed area hierarchy), category, a description excerpt, salary_min/salary_max, created date, and a redirect_url. Pagination is the trailing path segment (/search/1, /search/2, …).
The analytics endpoints nobody talks about
The search endpoint is what everyone uses, but Adzuna’s more distinctive surface is aggregate analytics over its index:
/histogram- salary distribution for a query, bucketed by range. The fastest way to answer “what does a data engineer make in Manchester?” without collecting postings yourself./history- average advertised salary by month, going back months. A free time series of salary drift per role or region./top_companies- which employers advertise most for a given query./geodata- vacancy counts by location, useful for heatmaps.
If your product is charts about the job market rather than the postings themselves, these endpoints alone can carry a prototype.
Where the Adzuna API runs out
- Salary is often modeled, not stated. Responses carry a
salary_is_predictedflag: when the posting has no stated range, Adzuna estimates one. Fine for aggregates, dangerous if you display it as the employer’s number. - Excerpts, not full descriptions. The description field is truncated, and
redirect_urlroutes through Adzuna to the original listing - the API is built to send traffic to Adzuna, not to hand you complete records. - Aggregator provenance. Postings arrive via boards and feeds without per-source attribution you can query, and the same role can appear more than once through different boards.
- Quota math. 1,000 calls a month is 33 a day. At 50 results a page, broad monitoring across roles and cities exhausts it quickly; the paid tiers are negotiated rather than listed.
What to pair it with
Adzuna is the best free option for aggregate analytics, and we say as much in our 2026 jobs API comparison and on the free jobs API roundup. The gap is record quality: if you need full descriptions, stated (not predicted) salary ranges, explicit source attribution, and dedup, you need the layer where postings are first published - the ATS feeds.
That is the layer JobsPipe reads: Workday, Greenhouse, Lever, Ashby and 30+ other sources, normalized into one JSON schema with cross-source dedup, structured salary parsed from the posting itself, and webhooks when a role opens or closes. A common split: Adzuna’s histograms for market-level charts, JobsPipe for the postings your product actually stores and shows.
Full postings, stated salaries, 30+ sources - free tier included.
Get a free API keySkip the scraper - try the API right now
Live, normalized postings from 30+ ATS feeds and job boards in one JSON schema. No key, no signup - this sandbox returns sample data in the exact live shape.
Press Test search to see normalized job records rendered here, and the raw JSON on the right.
POST /v1/sandbox/jobs/search{
"job_title_or": [
"software engineer"
],
"limit": 3,
"remote": true
}Advanced: edit the raw request, or copy it as curl
curl -X POST https://api.jobspipe.dev/v1/sandbox/jobs/search \
-H "Content-Type: application/json" \
-d '{"job_title_or":["software engineer"],"remote":true,"limit":5}'For live results, get a free key (1,000 jobs/month) and swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header - request and response shapes are identical.
Frequently Asked Questions
Is the Adzuna API free?
Yes - Adzuna offers a free tier of roughly 1,000 API calls per month after registering for an app_id and app_key. Higher volumes are handled through negotiated paid plans rather than a published pricing page.
What data does the Adzuna API return?
Job search results with title, company, parsed location, category, a truncated description, salary_min/salary_max (with a salary_is_predicted flag when the range is estimated), and a redirect URL to the listing. Separate endpoints return salary histograms, historical salary averages, top hiring companies, and vacancy counts by location.
What are the Adzuna API's main limitations?
Descriptions are excerpts rather than full text, links route through Adzuna, salaries are often model-predicted rather than stated by the employer, there is no per-source attribution, and the free quota of about 33 calls a day runs out fast for broad monitoring. For complete, deduplicated records an ATS-layer API like JobsPipe is the usual complement.

