StepStone logo

Job boards & ATS · Live on Apify

StepStone scraper for jobs in Germany, Austria, Belgium and the Netherlands

Search StepStone for a role and a city. You get one clean row per job with company, date and salary numbers. Turn on only new for a daily list.

About $0.80 for 1,000 jobs$0.0008 per job + $0.001 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

jobId13818030
titleBackend Entwickler Python (m/w/d) - Data Engineer Python
companyRatbacher GmbH

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: python developer in Search queries. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

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.

  • 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 for

  • 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 good fit

  • 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.

Who uses it

Recruiters in DACH and Benelux

Find companies that hire for a skill now.

Pay researchers

See salary ranges for a role in one city.

Job seekers

Get new jobs for your role every day.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.001Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Search query$0.005One search query read from StepStone (first result page), charged even when it returns no jobs.
Saved job$0.0008 (from $0.00068 on paid Apify plans)One unique StepStone job saved to the dataset.
Full job description$0.005 (from $0.0045 on paid Apify plans)Full description and employment type added to a saved job (only with Full job description on).

Examples

  • One job: about $0.0018.
  • 1,000 jobs: about $0.80.
  • Every day 100 jobs, for 30 days: about $2.43 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 6,200 jobs.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Do I need a StepStone account?

No. The tool reads public search and job pages only.

Are the salaries from the employer?

Mostly no. Most are StepStone estimates. Check the salaryIsEstimate field.

How many jobs can I get?

Up to 1,000 jobs and 10 queries per run.

Can I get recruiter emails?

No. Emails and phone numbers in job texts are replaced with [removed].

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].

Details

Step by step on Apify
  1. Open the Input tab.
  2. In Search queries (queries), keep python developer or type your own job title.
  3. Keep Location (location) as Berlin or type your city. Keep Maximum jobs (maxItems) at 20.
  4. Click Start.
  5. Open the Output tab and check the Jobs view: title, company, location, salaryMin, salaryMax, url.
Use cases
TaskInputYou getKey fieldsNext step
Get new jobs for a role every dayqueries, location, onlyNew: truejobtitle, company, postedAt, urlApify schedule + Google Sheets or webhook
Compare salary ranges in a cityqueries, location, maxItems: 200jobsalaryMin, salaryMax, salaryPeriod, salaryIsEstimateCSV / Excel export
Find companies that hire for a skillqueries with several skills, empty locationjobcompany, companyUrl, locationCRM import
Read full job texts for analysisincludeDetails: truejobdescriptionText, employmentType, expiresAtYour own text or AI pipeline
Tips for better results
  • Use a city from the same country as the StepStone site you pick.
  • Turn on details to add the full job text and job type.
  • Salary data comes with the first 150 results of a query. Use specific queries.
Limits and good to know
  • If StepStone fails before the first page, the query event is not charged
  • If a job page fails with includeDetails, the row is saved with the snippet and job-details is not charged. After 6 failed job pages in a row the Actor stops opening job pages and ends with reason: "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"

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "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"
}

Use it from code

Actor ID: cliqtomedia/stepstone-jobs-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/stepstone-jobs-scraper").call(run_input={
    "queries": [
        "python developer"
    ],
    "location": "Berlin"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~stepstone-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["python developer"], "location": "Berlin"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/stepstone-jobs-scraper")
result = tool.invoke({"run_input": {"queries": ["python developer"], "location": "Berlin"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (23)
FieldTypeMeaning
jobIdstringStepStone job ID.
titlestringJob title.
companystringCompany name, null if hidden.
companyUrlstringCompany profile URL on StepStone.
locationstringLocation text from the listing.
countrystringCountry code of the StepStone site: DE, AT, BE or NL.
urlstringJob page URL without tracking parameters.
postedAtstringPosting date, ISO 8601.
expiresAtstringListing end date, ISO 8601, if known.
salaryMinnumberLower salary bound; null when StepStone shows no salary.
salaryMaxnumberUpper salary bound; null when StepStone shows no salary.
salaryCurrencystringISO currency code, e.g. EUR.
salaryPeriodstringyear, month, week, day or hour.
salaryIsEstimatebooleantrue when the salary is StepStone's estimate, not the employer's figure.
employmentTypestringfull_time, part_time, contract, temporary, internship or other; only with full description.
workplaceTypestringonsite, remote or hybrid.
descriptionTextstringPlain-text snippet or full description, contacts removed.
descriptionHtmlstringFull description HTML when Full job description is on.
descriptionTypestringsnippet or full.
isSponsoredbooleantrue for promoted listings.
querystringSearch query that found the job.
sourcestringAlways StepStone.
fetchedAtstringTime the row was collected, ISO 8601.
Input settings (10)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Search queries requiredqueriesarray["python developer"]
Locationlocationstring"Berlin"
Radius (km)radiusKminteger30
Country sitedomainstring"de"
Posted in the last dayspostedWithinDaysinteger0
Workplaceworkplacestring"any"
Sort bysortBystring"relevance"
Full job descriptionincludeDetailsbooleanfalse
Maximum jobsmaxItemsinteger20
Only new jobsonlyNewbooleanfalse

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure