StepStone Jobs Scraper DE, AT, BE, NL — New Jobs, No Login
Pricing
from $0.68 / 1,000 saved jobs
StepStone Jobs Scraper DE, AT, BE, NL — New Jobs, No Login
Search public StepStone jobs in Germany, Austria, Belgium and the Netherlands. Export title, company, salary, workplace type and dates. Return only new jobs. No login.
Pricing
from $0.68 / 1,000 saved jobs
Rating
0.0
(0)
Developer
Cliqto Media
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
Search public StepStone job listings in Germany, Austria, Belgium and the Netherlands and get one clean row per job: title, company, location, posting date, salary as numbers, workplace type and job URL. No login and no API key are needed. A typical run with 20 jobs takes about 5 seconds and costs $0.022.
Use it if you are a recruiter, a sourcing agency or a labour-market analyst who tracks jobs in DACH or Benelux. The smallest run is one search query, for example python developer in Berlin.

Table of contents
- What it does
- Quick start
- Use cases
- Input
- Output
- Pricing and limits
- API, export and integrations
- Troubleshooting
- FAQ
- Related Actors
- Support
What it does
The Actor opens the public StepStone search for each of your queries, reads the job list and saves each job as one Dataset row. It works on four StepStone sites: stepstone.de, stepstone.at, stepstone.be and stepstone.nl.
Each row has absolute job and company URLs, an ISO date, salary as numbers with a currency and period, and a workplaceType of onsite, remote or hybrid. You can also:
- keep only jobs that earlier runs did not return (
onlyNew), for daily monitoring; - open every job page and add the full description and employment type (
includeDetails); - search up to 10 queries in one run; a job found by two queries is saved once.
Good fit
- Daily or weekly lists of new jobs for a role and a city.
- Salary ranges for a role in one city, for market research.
- A list of companies that hire for a skill right now, for sales or sourcing.
Not a fit / limits
- No login, no applications, no recruiter names, e-mails or phone numbers. E-mails and phone numbers in descriptions are replaced with
[removed]. - Only stepstone.de, .at, .be and .nl. Other StepStone countries are not supported.
- Most salaries are StepStone's own estimates, not employer figures (
salaryIsEstimate: true). In our tests they come only with the first 150 results of a query (search pages 1–6). Later pages are read from StepStone's result list without estimates, so those jobs have empty salary fields. - Up to 1000 jobs per run. StepStone itself may stop a search earlier.
Quick start
- Open the Input tab.
- In Search queries (
queries), keeppython developeror type your own job title. - Keep Location (
location) asBerlinor type your city. Keep Maximum jobs (maxItems) at 20. - Click Start.
- Open the Output tab and check the Jobs view:
title,company,location,salaryMin,salaryMax,url.
Expected result: about 20 rows in 5–10 seconds. On our test runs 19 of 20 rows had a salary estimate.
Use cases
| Buyer job | Input path | Output entity | Key fields | Next integration |
|---|---|---|---|---|
| Get new jobs for a role every day | queries, location, onlyNew: true | job | title, company, postedAt, url | Apify schedule + Google Sheets or webhook |
| Compare salary ranges in a city | queries, location, maxItems: 200 | job | salaryMin, salaryMax, salaryPeriod, salaryIsEstimate | CSV / Excel export |
| Find companies that hire for a skill | queries with several skills, empty location | job | company, companyUrl, location | CRM import |
| Read full job texts for analysis | includeDetails: true | job | descriptionText, employmentType, expiresAt | Your own text or AI pipeline |
Input
Input fields
| Field | Plain name | Type | Required | Default / prefill | Allowed values | Effect | Example | Recommendation |
|---|---|---|---|---|---|---|---|---|
queries | Search queries | array of strings | yes | prefill ["python developer"] | 1–10 items, 1–100 characters each | One StepStone search per query. Each query is charged once. | ["SAP Berater", "data analyst"] | Use job titles as people type them on StepStone. |
location | Location | string | no | default empty, prefill Berlin | up to 100 characters | City or region. Empty = the whole country. | München | Use a city from the selected country site. |
radiusKm | Radius (km) | integer | no | 30 | 0–100 | Search radius around location. Ignored when location is empty. | 50 | Larger radius = more jobs. |
domain | Country site | string (select) | no | de | de, at, be, nl | Which StepStone site to search. | at | Match it with the location country. |
postedWithinDays | Posted in the last days | integer | no | 0 | 0, 1, 3, 7, 14, 30 | Keeps only jobs posted in that many days. 0 = no date filter. | 7 | Use 1 or 7 for daily or weekly lists. Other numbers fail input validation. |
workplace | Workplace | string (select) | no | any | any, remote, hybrid | Keeps only remote or only hybrid jobs. | remote | Leave any unless you need home office. |
sortBy | Sort by | string (select) | no | relevance | relevance, date | Order of StepStone results. | date | date is used automatically with onlyNew and with 3, 14 or 30 days. |
includeDetails | Full job description | boolean | no | false | true / false | Opens each job page: full description, employmentType, exact expiresAt. Adds the job-details charge. | true | About 1 job per second. Use only when you need the full text. |
maxItems | Maximum jobs | integer | no | default 50, prefill 20 | 1–1000 | Stops after this many saved jobs in total, across all queries. | 200 | Start small, then raise it. |
onlyNew | Only new jobs | boolean | no | false | true / false | Saves only jobs that earlier runs with the same settings did not return. | true | Use with a schedule. The first run saves the current jobs as a baseline. |
Unknown input keys fail the run with a clear input error. Duplicate jobs inside one run are saved once.
Interacting settings
| When | Input A | Input B | Effective behavior | Example | Cost/result effect |
|---|---|---|---|---|---|
| No city | location empty | radiusKm | Radius is ignored; the whole country is searched. | location: "" | More results for the same query. |
| Monitoring | onlyNew: true | sortBy | Newest first is used; a query stops at the first page with nothing new. | daily schedule | An unchanged run saves 0 rows and costs $0.006. |
| Date filter | postedWithinDays 3, 14 or 30 | sortBy | Newest first is used; rows older than the limit are dropped. | 14 | Pages are still read, so query is charged even with 0 rows. |
| Several queries | queries | maxItems | maxItems is the total for the run, not per query. | 3 queries, maxItems: 100 | Later queries may get fewer rows. |
| Full texts | includeDetails: true | maxItems | One extra page per saved job. | 100 jobs ≈ 2 minutes | Adds $0.005 per job (FREE tier). |
Input examples
New Python jobs in Berlin
{"queries": ["python developer"],"location": "Berlin","maxItems": 20}
Expected behavior: one search on stepstone.de, 30 km around Berlin.
Expected output: up to 20 jobs with title, company, salaryMin, salaryMax, workplaceType.
Limit or cost note: $0.022 on the FREE tier.
Weekly nursing jobs in Vienna
{"queries": ["pflege"],"location": "Wien","domain": "at","postedWithinDays": 7,"maxItems": 50}
Expected behavior: stepstone.at, only jobs from the last 7 days.
Daily monitor for data jobs in Amsterdam, with full texts
{"queries": ["data analyst"],"location": "Amsterdam","domain": "nl","includeDetails": true,"onlyNew": true,"maxItems": 50}
Expected behavior: the first run saves the current jobs. Later runs save only new jobs, each with the full description.
Output
Output fields
| Field | Meaning | Type | Can be empty? | Example / enum | Source / notes |
|---|---|---|---|---|---|
jobId | StepStone job ID | string | no | 13818030 | |
title | Job title | string | no | Backend Entwickler Python (m/w/d) - Data Engineer Python | |
company | Employer name | string | yes | Ratbacher GmbH | null if StepStone hides it |
companyUrl | Company page on StepStone | string | yes | https://www.stepstone.de/cmp/de/ratbacher-gmbh-46710/jobs | absolute URL |
location | Location text | string | yes | Berlin, Mannheim, Frankfurt | as shown on StepStone |
country | Country of the site | string | no | DE, AT, BE, NL | from domain |
url | Job page | string | no | https://www.stepstone.de/stellenangebote--...--13818030-inline.html | absolute, no tracking parameters |
postedAt | Posting date | string (ISO 8601, UTC) | yes | 2026-09-22T11:03:04.747Z | StepStone may refresh this date |
expiresAt | Listing end date | string (ISO 8601) | yes | 2027-03-21T11:30:13.917Z | exact with includeDetails |
salaryMin | Lower salary bound | number | yes | 53000 | null = no salary shown |
salaryMax | Upper salary bound | number | yes | 74000 | null = no salary shown |
salaryCurrency | Currency | string | yes | EUR | ISO code |
salaryPeriod | Salary period | string | yes | year, month, week, day, hour | |
salaryIsEstimate | Salary is StepStone's estimate | boolean | yes | true | null when there is no salary |
employmentType | Contract type | string | yes | full_time, part_time, contract, temporary, internship, other | only with includeDetails, else null |
workplaceType | Home office option | string | yes | onsite, remote, hybrid | |
descriptionText | Plain text | string | yes | short snippet or full text | contacts replaced with [removed] |
descriptionHtml | Full description HTML | string | yes | only with includeDetails | |
descriptionType | Which text you got | string | no | snippet, full | snippet if a job page failed |
isSponsored | Promoted listing | boolean | yes | false | |
query | Query that found the job | string | no | python developer | |
source | Source name | string | no | StepStone | |
fetchedAt | Collection time | string (ISO 8601) | no | 2026-10-14T12:54:39.873Z |
null means StepStone did not show the value. The Actor never writes 0 or "" instead of an unknown value.
Output entities and surfaces
| Situation | Dataset/API/KVS/live view | Result shape | User action |
|---|---|---|---|
| Normal item | Dataset, Jobs view | one row per job | Export or use url |
| No jobs for the search | Empty Dataset; RUN_SUMMARY with status: "not_found" | run SUCCEEDED | Change the query or location |
| Monitor with nothing new | Empty Dataset; status: "complete", skippedSeen > 0 | run SUCCEEDED | Nothing to do |
| Partial result (cost limit, time limit) | Saved rows + RUN_SUMMARY with status: "partial" and reason (CHARGE_LIMIT, TIME_LIMIT, SCAN_LIMIT, DETAILS_UNAVAILABLE) | run SUCCEEDED | CHARGE_LIMIT: raise the cost limit. TIME_LIMIT: raise the timeout or lower maxItems. SCAN_LIMIT: narrow the query or filters. DETAILS_UNAVAILABLE: run again later or without includeDetails |
| Source error or block | Saved rows (if any) + RUN_SUMMARY with reason like SOURCE_HTTP_403 | run FAILED | Try again later |
RUN_SUMMARY (Key-value store, Run status and counters in the Output tab) also has counters per query: sourceTotal, pages, saved, hasMore.
Output example
From the first input example (one row, description shortened):
{"jobId": "13818030","title": "Backend Entwickler Python (m/w/d) - Data Engineer Python","company": "Ratbacher GmbH","companyUrl": "https://www.stepstone.de/cmp/de/ratbacher-gmbh-46710/jobs","location": "Berlin, Mannheim, Frankfurt, Stuttgart, Karlsruhe","country": "DE","url": "https://www.stepstone.de/stellenangebote--Backend-Entwickler-Python-m-w-d-Data-Engineer-Python-Berlin-Mannheim-Frankfurt-Stuttgart-Karlsruhe-Ratbacher-GmbH--13818030-inline.html","postedAt": "2026-09-22T11:03:04.747Z","expiresAt": "2027-03-21T11:30:13.917Z","salaryMin": 53000,"salaryMax": 74000,"salaryCurrency": "EUR","salaryPeriod": "year","salaryIsEstimate": true,"employmentType": null,"workplaceType": "hybrid","descriptionText": "Als Backend Entwickler Python (m/w/d) übernimmst Du eine zentrale Rolle: ...","descriptionHtml": null,"descriptionType": "snippet","isSponsored": false,"query": "python developer","source": "StepStone","fetchedAt": "2026-10-14T12:54:39.873Z"}
employmentType and descriptionHtml are null because includeDetails was off.
Field names compared with raw StepStone data
If you used raw StepStone search data before, these are the new names:
| Raw StepStone field | This Actor | Change |
|---|---|---|
id | jobId | string |
title | title | same |
companyName | company | |
companyUrl | companyUrl | absolute URL |
location | location | extra spaces removed |
url | url | absolute URL, tracking removed |
datePosted | postedAt | ISO 8601 UTC |
unifiedSalary.min / max | salaryMin / salaryMax | numbers, StepStone estimate included |
unifiedSalary.currencyIso / period | salaryCurrency / salaryPeriod | lower-case period |
unifiedSalary.salaryType | salaryIsEstimate | boolean |
workFromHome | workplaceType | onsite / remote / hybrid instead of 0 / 1 / 2 |
textSnippet | descriptionText | plain text, contacts removed |
Pricing and limits
Pricing unit
The Actor uses pay-per-event pricing. You pay only for these events:
| Event | When | FREE | BRONZE | SILVER | GOLD+ |
|---|---|---|---|---|---|
apify-actor-start | once per run | $0.001 | $0.001 | $0.001 | $0.001 |
query | once per query, after StepStone answers the first page | $0.005 | $0.005 | $0.005 | $0.005 |
job | each saved job | $0.0008 | $0.00076 | $0.00072 | $0.00068 |
job-details | each job with a full description (includeDetails) | $0.005 | $0.0048 | $0.0046 | $0.0045 |
Platform usage (compute, proxy) is included; you do not pay it separately.
- A search with 0 jobs, a date filter with no matches and a monitor run with nothing new each cost $0.006 (start + one query).
- If StepStone fails before the first page, the
queryevent is not charged. - If a job page fails with
includeDetails, the row is saved with the snippet andjob-detailsis not charged. After 6 failed job pages in a row the Actor stops opening job pages and ends withreason: "DETAILS_UNAVAILABLE"; rows already found are saved. - Partial runs charge only for saved rows. When your run cost limit is reached, the Actor stops and saves
reason: "CHARGE_LIMIT".
Cost examples
FREE tier prices. Times are from our test runs.
| Scenario | Input scope | Saved jobs | Base charge | Optional charge | Run time |
|---|---|---|---|---|---|
| Quick start | 1 query, maxItems: 20 | 20 | $0.022 | none | ~5 s |
| Medium | 1 query, maxItems: 200 | 200 | $0.166 | none | ~35 s |
| Large | 3 queries, maxItems: 1000 | 1000 | $0.811 (2 queries used) | none | ~2.5 min |
| Full texts | 1 query, 10 jobs, includeDetails: true | 10 | $0.014 | $0.050 | ~20 s |
| Empty search | 1 query, no jobs | 0 | $0.006 | none | ~5 s |
| Monitor, nothing new | 1 query, onlyNew: true | 0 | $0.006 | none | ~3 s |
Limits: up to 10 queries and 1000 saved jobs per run; up to 40 search pages per query and 80 per run. With includeDetails the Actor opens about 1 job page per second, so 1000 jobs take about 17 minutes. The default run timeout is 30 minutes.
API, export and integrations
- Export: download the Dataset as JSON, CSV, Excel, XML or HTML from the Output tab.
- API: start the Actor and read the Dataset with the Apify API. Use the
jobsview:/datasets/{id}/items?view=jobs. - Scheduling: create a schedule with
onlyNew: trueto get only new jobs every day. - Webhooks / no-code: send the Dataset to Google Sheets, Slack, Make or Zapier with Apify integrations after each run.
Use with AI agents (MCP)
- MCP server with only this Actor:
https://mcp.apify.com?tools=cliqtomedia/stepstone-jobs-scraper(Apify MCP docs). - Smallest useful input:
{ "queries": ["python developer"], "location": "Berlin", "maxItems": 20 }
- Key output fields:
title(job title),company(employer),location(city text),salaryMin/salaryMax(numbers, often a StepStone estimate),url(job page). - Typical call: about 5 seconds and $0.022 for 20 jobs. Keep
maxItemsat 100 or less andincludeDetailsoff for fast answers.
Troubleshooting
The run finished with 0 jobs
Symptom: empty Dataset, run SUCCEEDED, RUN_SUMMARY.status is not_found.
Likely reason: StepStone has no jobs for this query, location or filter.
Check: open the same search on the StepStone site.
Action: use a shorter query, a bigger radiusKm or an empty location.
A monitor run saved 0 jobs
Symptom: status: "complete", saved: 0, skippedSeen > 0.
Likely reason: no new jobs since the last run with the same settings.
Action: nothing to fix. This is normal for onlyNew.
Full descriptions stopped
Symptom: status: "partial", reason: "DETAILS_UNAVAILABLE", rows have descriptionType: "snippet".
Likely reason: StepStone job pages failed 6 times in a row.
Action: run again later, or turn off includeDetails to get the search rows only.
Jobs have no salary
Symptom: salaryMin and salaryMax are null.
Likely reason: StepStone shows no salary for the job, or the job is after the first 150 results of the query.
Action: use a narrower query or a city to get the jobs you need into the first 150 results.
The run failed with a SOURCE_ reason
Symptom: run FAILED, reason like SOURCE_HTTP_403 or SOURCE_UNAVAILABLE.
Likely reason: StepStone blocked or did not answer after 4 tries.
Action: start the run again later. Jobs saved before the error stay in the Dataset.
The run stopped early with CHARGE_LIMIT
Symptom: status: "partial", reason: "CHARGE_LIMIT".
Likely reason: the maximum cost per run in your run options was reached.
Action: raise the maximum cost or lower maxItems.
FAQ
Do I need a StepStone account or API key?
No. The Actor reads only public search and job pages. It does not log in.
Are the salaries real?
Most are StepStone's estimates (salaryIsEstimate: true), not the employer's figures. When the salary is not marked as an estimate, salaryIsEstimate is false. Use estimates as a market range, not as an offer.
Is the output complete?
The Actor saves what StepStone shows for your search, up to maxItems. StepStone may show a different order or count on different days. RUN_SUMMARY.queries[].sourceTotal shows how many jobs StepStone reported.
How fresh are the jobs?
Each run reads StepStone live. postedAt is the date StepStone shows; StepStone sometimes refreshes this date for older jobs.
Can I get recruiter contacts?
No. E-mails and phone numbers in descriptions are replaced with [removed].
Related Actors
- Personio Jobs Monitor & Scraper — jobs straight from company career pages on Personio, common in DACH.
- Greenhouse Jobs Scraper & Monitor — jobs from company boards on Greenhouse.
- Remote Jobs Aggregator — remote jobs from RemoteOK, We Work Remotely and Himalayas.
Support
For a bug, a question or a feature request, open an issue in the Issues tab of this Actor. Add the run ID, your input (without private data) and the reason from RUN_SUMMARY. Never send tokens, cookies or billing data.