AstraZeneca APIcareers.astrazeneca.com ↗
Search AstraZeneca job openings worldwide. Filter by keyword, category, country, and city. Returns job details, descriptions, and direct application URLs.
What is the AstraZeneca API?
The AstraZeneca Careers API covers 5 endpoints for searching and retrieving AstraZeneca job postings globally. search_jobs returns paginated results with titles, locations, posting dates, and canonical URLs, while get_job_detail delivers the full job description as HTML, Schema.org structured data, a requisition ID, and a direct application link for any individual listing.
curl -X GET 'https://api.parse.bot/scraper/50ebd257-21ae-46d7-b087-b813967417e9/search_jobs?page=1&limit=5&query=Engineer' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace careers-astrazeneca-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: AstraZeneca Careers SDK — search jobs, drill into details, explore locations."""
from parse_apis.astrazeneca_careers_api import AstraZeneca, JobNotFound
client = AstraZeneca()
# Search for engineering jobs — limit= caps total items fetched.
for job in client.jobsummaries.search(query="Engineer", limit=3):
print(job.title, job.location)
# Drill into the first result's full details via .details().
summary = client.jobsummaries.search(query="Data Scientist", limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.job_id, detail.apply_url)
# Fetch a job directly by URL via the jobs collection.
try:
job = client.jobs.get(url="https://careers.astrazeneca.com/job/rockville/process-engineer/7684/95453340816")
print(job.title, job.location, job.date_posted)
except JobNotFound as exc:
print(f"Job removed: {exc}")
# List countries and drill into a country's cities.
country = client.countries.list(limit=1).first()
if country:
for city in country.cities.list(limit=5):
print(city.display, city.count)
# Browse job categories.
for cat in client.categories.list(limit=5):
print(cat.display, cat.count)
print("exercised: jobsummaries.search / summary.details / jobs.get / countries.list / country.cities.list / categories.list")
Full-text search over AstraZeneca job openings worldwide. Returns paginated results with job titles, locations, and URLs. An empty query returns all open positions. Paginates via integer page counter; each page contains up to `limit` results.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| limit | integer | Number of results per page (max 50). |
| query | string | Search keywords to match against job titles and descriptions. |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects each containing title, url, location, job_id, and date_posted",
"has_jobs": "boolean, whether any jobs matched the query",
"total_pages": "integer, total number of pages available",
"current_page": "integer, current page number",
"total_results": "integer, total number of matching jobs"
},
"sample": {
"data": {
"jobs": [
{
"url": "https://careers.astrazeneca.com/job/rockville/process-engineer/7684/95453340816",
"title": "Process Engineer",
"job_id": "",
"location": "Rockville, Maryland",
"date_posted": ""
}
],
"has_jobs": true,
"total_pages": 35,
"current_page": 1,
"total_results": 171
},
"status": "success"
}
}About the AstraZeneca API
Searching and Browsing Jobs
The search_jobs endpoint accepts an optional query string matched against job titles and descriptions. Omitting the query returns all open positions. Results paginate via a 1-based page integer with up to 50 results per page (limit). Each result object includes title, url, location, job_id, and date_posted, alongside top-level counts: total_results, total_pages, and current_page.
Job Detail
Pass any url returned by search_jobs to get_job_detail to retrieve the full posting. The response includes description_html (the complete job description), structured_data (Schema.org JobPosting object), apply_url (direct link to the application form), job_id (the AstraZeneca requisition ID in the format R-XXXXXX), location, and date_posted.
Filtering by Location and Category
list_job_categories returns every department or function with a current open role, each with an id, display name, and count of open positions. list_countries returns the same shape for countries. Once you have a country's id and display from list_countries, pass both as country_facet_id and country_name to list_cities_by_country to get city-level breakdowns within that country. All three listing endpoints return their full datasets in a single response with no pagination.
The AstraZeneca API is a managed, monitored endpoint for careers.astrazeneca.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when careers.astrazeneca.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official careers.astrazeneca.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate AstraZeneca openings into an internal recruiting dashboard filtered by country and department
- Monitor newly posted AstraZeneca roles by polling
search_jobsand comparingdate_postedvalues - Build a job alert service that watches for positions in a specific city using
list_cities_by_country - Extract Schema.org structured data from
get_job_detailto feed a job aggregator or search index - Analyze the geographic distribution of AstraZeneca hiring using
list_countriesandlist_cities_by_countrycounts - Retrieve direct
apply_urllinks for a browser extension or candidate-facing job board - Track category-level headcount demand by polling
list_job_categoriesover time
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does AstraZeneca offer an official public developer API for its careers portal?+
What does `get_job_detail` return beyond what `search_jobs` includes?+
search_jobs returns summary fields: title, url, location, job_id, and date_posted. get_job_detail adds description_html (the full posting body), structured_data (the Schema.org JobPosting object), and apply_url (the direct application link), which are not present in search results.Can I filter `search_jobs` results by country or job category directly?+
search_jobs endpoint filters by keyword (query), page, and limit only. Country and category data are available as separate facet endpoints (list_countries, list_job_categories) that return IDs and counts, but passing those IDs as filters into search_jobs is not currently supported. You can fork this API on Parse and revise it to add category and country filter parameters to search_jobs.Are salary or compensation details included in job responses?+
description_html and Schema.org structured_data from the posting, so any compensation information present in those fields would appear there, but there are no dedicated salary fields in the response schema. You can fork this API on Parse and revise it to extract and surface salary data from the structured content if AstraZeneca includes it in specific postings.How current are the job listings returned by this API?+
date_posted field. Closed or filled positions are not returned by search_jobs; they are removed once no longer active on the source site.