DHL APIcareers.dhl.com ↗
Search DHL Group's global careers portal via API. Retrieve job listings with title, location, category, career level, skills, and apply URL across 2 endpoints.
What is the DHL API?
The DHL Careers API provides access to job listings from DHL Group's global careers portal across 2 endpoints. The search_jobs endpoint lets you query by keyword with pagination and returns up to 14 fields per listing including title, location, category, career level, a description teaser, skills, and a direct apply URL. A second endpoint, search_relevant_jobs, supports multi-query searches with title-pattern filtering and deduplication.
curl -X GET 'https://api.parse.bot/scraper/7cf237b1-8b1d-42d5-ba7c-9a25be343304/search_jobs?page=1&keywords=Marketing&page_size=10' \ -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-dhl-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: DHL Careers Job Search — bounded, re-runnable; every call capped."""
from parse_apis.dhl_careers_job_search_api import DHLCareers, InvalidPage
client = DHLCareers()
# Search for marketing jobs — limit caps TOTAL items fetched across pages.
for job in client.jobs.search(keywords="Marketing", limit=5):
print(job.title, job.location, job.career_level)
# Drill-down: take ONE item with .first(), then inspect its fields.
job = client.jobs.search(keywords="Analytics", limit=1).first()
if job:
print(job.title, job.country, job.posted_date)
print("Skills:", job.skills)
print("Apply:", job.apply_url)
# Multi-keyword filtered search — find software engineering roles.
for match in client.jobs.search_relevant(
search_keywords="Software Engineer|Backend Developer",
title_patterns="software engineer|backend",
max_results=10,
limit=3,
):
print(match.title, match.city, match.country)
# Typed error handling: catch invalid page input.
try:
client.jobs.search(keywords="test", limit=1).first()
except InvalidPage as exc:
print(f"Invalid input: {exc}")
print("exercised: jobs.search / jobs.search_relevant / InvalidPage catch")
Search for jobs on DHL careers by keyword with pagination. Returns job listings including title, location, category, career level, description teaser, skills, and apply URL. Paginates via integer page number; each page returns up to page_size results. An empty keywords value returns all jobs.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based) |
| keywords | string | Search keywords (e.g., 'Marketing', 'Analytics', 'E-Commerce') |
| page_size | integer | Number of results per page (max 100) |
{
"type": "object",
"fields": {
"jobs": "array of job objects with fields: job_id, title, location, city, state, country, city_state_country, category, career_level, work_hours, posted_date, date_created, description_teaser, apply_url, multi_location, multi_category, is_multi_location, badge, req_id, skills",
"page": "integer current page number",
"page_size": "integer results per page",
"results_count": "integer number of jobs returned on this page",
"total_results": "integer total number of matching jobs"
},
"sample": {
"data": {
"jobs": [
{
"city": "Morris Plains",
"badge": "",
"state": "New Jersey",
"title": "CryoPDP Dir Business Cust Dev",
"job_id": "11013028",
"req_id": "11013028",
"skills": [
"business development strategy",
"pharmaceutical logistics",
"regulatory compliance"
],
"country": "Vereinigte Staaten von Amerika",
"category": "Vertrieb & Unternehmensentwicklung",
"location": "Morris Plains, New Jersey, 07950",
"apply_url": "https://cf-apply.jobappnetwork.com/apply/c_dhl/l_en/CryoPDP-Dir-Business-Cust-Dev-USO-job-Morris-Plains-NJ-US-11013028.html",
"work_hours": "Vollzeit",
"posted_date": "2026-05-15T00:00:00.000+0000",
"career_level": "Manager",
"date_created": "2026-05-12T18:51:55.481+0000",
"multi_category": [
"Vertrieb & Unternehmensentwicklung"
],
"multi_location": [
"Morris Plains, New Jersey, 07950"
],
"is_multi_location": true,
"city_state_country": "Morris Plains, New Jersey, Vereinigte Staaten von Amerika",
"description_teaser": "As a leadership position, this role requires a flexible schedule..."
}
],
"page": 1,
"page_size": 10,
"results_count": 10,
"total_results": 175
},
"status": "success"
}
}About the DHL API
What the API Returns
Both endpoints return job objects from DHL Group's careers portal. Each job includes job_id, title, location, city, state, country, city_state_country, category, career_level, and work_ type, along with a description teaser, skills list, and apply URL. The search_jobs endpoint also surfaces pagination metadata: page, page_size, results_count, and total_results, so you can walk through large result sets.
Searching and Filtering
search_jobs accepts a keywords string (e.g., 'Analytics' or 'E-Commerce'), an integer page (1-based), and a page_size up to 100. Passing an empty keywords value returns all available listings. search_relevant_jobs accepts a pipe-separated search_keywords string — each segment is issued as a separate query — and a pipe-separated title_patterns string for case-insensitive substring matching against job titles. Results are deduplicated across queries, and a max_results cap controls the total returned. The endpoint reports total_matching_jobs alongside the filtered job array.
Coverage and Scope
Listings are sourced from DHL Group's careers portal at careers.dhl.com, which covers roles across DHL's global business divisions including logistics, IT, finance, and operations. The data reflects what is publicly visible on the portal's search results, meaning only active, publicly posted positions are returned. No login-gated or draft listings are accessible.
The DHL API is a managed, monitored endpoint for careers.dhl.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when careers.dhl.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.dhl.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?+
- Build a job alert tool that monitors DHL openings by keyword such as 'Data Engineer' or 'Supply Chain'
- Aggregate DHL job postings by country or city using the country and city_state_country fields for geographic analysis
- Filter postings by career_level to surface entry-level or senior roles for targeted recruitment pipelines
- Use search_relevant_jobs with title_patterns to track how many roles matching 'Software Engineer' are open across all DHL divisions
- Populate an internal job board with DHL listings deduplicated across multiple keyword searches
- Extract skills fields from job objects to analyze in-demand competencies across DHL's tech and logistics roles
- Paginate through all DHL listings using search_jobs with an empty keywords value to build a complete snapshot of current openings
| 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 DHL Group offer an official public developer API for its careers portal?+
What does search_relevant_jobs return that search_jobs doesn't?+
Can I filter jobs by country or location directly in the API?+
Does the API return job application status or candidate data?+
How fresh is the job listing data?+
posted_date or expiry_date field in the current response schema, so recency of individual listings cannot be determined from the response alone.