Stepstone APIstepstone.com ↗
Search Stepstone.de job listings, retrieve full job descriptions, salary estimates, company info, and schema.org structured data via 4 REST endpoints.
What is the Stepstone API?
The Stepstone.de API covers Germany's leading job board across 4 endpoints, letting you search listings by keyword and location, retrieve full job descriptions with HTML text sections, and extract salary estimates and company data. The search_jobs endpoint returns paginated result sets of 25 jobs per page, while get_job_detail delivers structured fields including schema.org JobPosting data, employment type, and application method.
curl -X GET 'https://api.parse.bot/scraper/7da251f1-0c14-4eac-b1a2-9dffa8d0e080/search_jobs?page=1&sort=1&keyword=software+engineer&location=Berlin' \ -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 stepstone-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: Stepstone SDK — search German jobs, drill into details."""
from parse_apis.stepstone_de_job_scraper_api import Stepstone, Sort, Age, WorkFromHome, JobNotFound
stepstone = Stepstone()
# Search for recent software engineer jobs in Berlin, sorted by date
for job in stepstone.jobs.search(keyword="software engineer", location="Berlin", sort=Sort.DATE, age=Age.LAST_7_DAYS, limit=5):
print(job.title, job.location, job.date_posted, job.company_name)
# Drill into the first result for full details including salary
job = stepstone.jobs.search(keyword="developer", location="Munich", limit=1).first()
if job:
detail = job.details()
print(detail.title, detail.employment_type, detail.salary_min, detail.salary_max, detail.salary_currency)
print(detail.contract_type, detail.work_type, detail.location)
# Typed error handling: catch expired/removed job listings
try:
removed_job = stepstone.job("/jobs--Fake-Job--99999999-inline.html")
removed_detail = removed_job.details()
except JobNotFound as exc:
print(f"Job not found: {exc.job_url}")
print("exercised: jobs.search / job.details / JobNotFound error handling")
Full-text search over Stepstone.de job listings. Returns paginated results (25 per page) with job summaries, available filters, and pagination metadata. Paginates via the page parameter (1-based integer). Each item includes a relative URL path suitable for passing to get_job_detail.
| Param | Type | Description |
|---|---|---|
| am | string | Application method filter: 'EXTERNAL' for company website, 'INTERNAL' for Easy Apply. |
| age | string | Date posted filter: 'age_1' for last 24 hours, 'age_7' for last 7 days. |
| fdl | string | Job language filter: 'de' for German, 'en' for English. |
| wfh | integer | Work from home filter: 1 for Fully remote, 2 for Partially remote. |
| page | integer | Page number for pagination (1-based). |
| sort | integer | Sorting order: 1 for Relevance, 2 for Date. |
| keywordrequired | string | Job title or keyword to search for (e.g. 'software engineer', 'developer', 'data scientist'). |
| location | string | Location to search in (city, region, or postcode). Omitting returns results for all of Germany. |
{
"type": "object",
"fields": {
"meta": "object with total count, counters, and SEO data",
"items": "array of job summaries with id, title, url, companyName, location, datePosted, workFromHome, textSnippet",
"filters": "array of available filter groups",
"sorting": "array of sorting options",
"pagination": "object with page, perPage, pageCount, totalCount",
"resultFilterInfo": "object with numberOfResults and search categorization"
},
"sample": {
"data": {
"meta": {
"total": 4445
},
"items": [
{
"id": 14112833,
"url": "/jobs--Mobile-Software-Engineer-iOS-f-m-d-Lissabon-EnBW-IT-Solutions-Unipessoal-Lda--14112833-inline.html?rltr=1_1_25_seorl_m_0_0_0_0_0_0",
"title": "Mobile Software Engineer iOS (f/m/d)",
"salary": "",
"location": "Lissabon",
"companyId": 430357,
"datePosted": "2026-06-05T06:42:56+02:00",
"companyName": "EnBW IT Solutions, Unipessoal, Lda.",
"textSnippet": "To strengthen our development team...",
"workFromHome": "2"
}
],
"filters": [
{
"type": "age",
"children": [
{
"id": "age_1",
"text": "New jobs"
}
]
}
],
"sorting": [
{
"name": "date",
"active": false
},
{
"name": "relevance",
"active": true
}
],
"pagination": {
"page": 1,
"perPage": 25,
"pageCount": 178,
"totalCount": 4445
},
"resultFilterInfo": {
"numberOfResults": 4445
}
},
"status": "success"
}
}About the Stepstone API
Search and Filter Jobs
The search_jobs endpoint accepts a required keyword parameter and optional location (city, region, or postcode). Omitting location returns results across all of Germany. You can narrow results using age (last 24 hours via age_1, last 7 days via age_7), wfh (1 for fully remote, 2 for partially remote), fdl (job language: de or en), and am (application method: EXTERNAL for company website or INTERNAL for Easy Apply). Sorting is controlled with sort (1 for relevance, 2 for date). Results include a pagination object with page, perPage, pageCount, and totalCount, plus a resultFilterInfo object with numberOfResults.
Job Detail and Salary Data
Each item in search_jobs results carries a relative url path. Pass that path to get_job_detail to retrieve the full listing: listingHeader (title, company, metadata), textSections (HTML job description blocks), companyCard, and companyPassportData. Salary information surfaces in listingHeader.CESalary with min, max, period, and currencyIso fields when the listing includes it, and in reduxPreloadedState.predictedSalary as a model-predicted range. The get_salary_info endpoint targets the same payload specifically for salary extraction workflows.
Schema.org Structured Data
Both get_job_detail and get_similar_jobs return a job_posting_schema object containing schema.org JobPosting fields: title, datePosted, validThrough, employmentType, and hiringOrganization. This structured output is suitable for direct ingestion into job aggregators or ATS systems that consume standard job schemas.
Similar Jobs
The get_similar_jobs endpoint accepts the same job_url input as get_job_detail and returns the full listing payload, which may include related job recommendations when the listing page exposes them. The availability of similar job data depends on whether the specific listing page surfaces those recommendations.
The Stepstone API is a managed, monitored endpoint for stepstone.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when stepstone.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 stepstone.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 German job market data by keyword and location using
search_jobswithlocationandkeywordparams - Build a salary benchmarking tool using
listingHeader.CESalarymin/max fields andpredictedSalaryranges fromget_salary_info - Monitor remote job availability in Germany by filtering
search_jobswithwfh=1(fully remote) - Track newly posted listings in a specific field by polling
search_jobswithage=age_1andsort=2 - Populate an ATS or job aggregator using
job_posting_schemaschema.orgJobPostingstructured data fromget_job_detail - Compare Easy Apply vs. external application job volumes using the
amfilter onsearch_jobs - Filter English-language job postings in Germany for international candidates using
fdl=eninsearch_jobs
| 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 Stepstone have an official developer API?+
How does pagination work in `search_jobs`?+
page parameter (1-based integer) to navigate pages. The pagination response object includes page, perPage, pageCount, and totalCount so you can calculate how many pages to iterate.Is salary data always present in job detail responses?+
listingHeader.CESalary (with min, max, period, currencyIso) and reduxPreloadedState.predictedSalary are only populated when the listing includes employer-provided salary data or when a predicted salary model has a value for that listing. Many listings return these fields empty or absent.Does the API cover Stepstone sites outside Germany (e.g., Belgium, Austria)?+
Does the API expose employer contact details or recruiter profiles?+
companyCard and companyPassportData fields with company-level information, but individual recruiter names, email addresses, and phone numbers are not exposed. You can fork it on Parse and revise to extract any additional contact fields present in the job detail payload.