StepStone Jobs Scraper
Pricing
Pay per event
StepStone Jobs Scraper
A StepStone scraper that returns job postings from Germany, Austria and Belgium with the job link resolved correctly, the employer profile, the location, the posting age and whether StepStone holds a salary estimate for the role.
No proxy, no browser, no impersonation. An access probe graded stepstone.de as an open target, so this actor spends nothing getting in.
What you get
- The job link, not the employer link. A StepStone card contains two anchors and the obvious one points at the company profile. Reading
a[href]gives you employer pages for every row, which is the single most common way a StepStone scraper produces a useless dataset salary_available_on_page, a flag for whether StepStone has a salary estimate behind its show-salary control. In a validation run, 46 of 50 jobs had one. No other jobs actor surfaces this- Employer profile URL alongside the employer name, so postings group per company without a name match
- Work-from-home badge, contract type and work type where the card carries them
- Three markets: Germany, Austria and Belgium
- Stable job ids parsed from the card, so scheduled runs deduplicate exactly
- 25 jobs per page with real pagination, up to 500 per run
- Charged per job, plus a flat $0,002 start fee
Why this one is cheap to run
The second finding was where the data is not. StepStone assigns window.__PRELOADED_STATE__ piecewise, and its only slices are the header, the footer, a modal and the search bar. There is no job list in any state envelope, so the rendered card is the surface, and [data-at="job-item"] is a test hook rather than a styling class, which is what makes it survive the CSS-hash churn that breaks class-based selectors.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
query | string | yes | data engineer | Job title or keyword |
location | string | no | – | City or region, for example Berlin |
market | select | no | de | Germany, Austria or Belgium |
url | string | no | – | A StepStone search URL to read instead |
radius | integer | no | – | Search radius in kilometres |
sort | select | no | relevance | Relevance or most recent |
limit | integer | no | 50 | Jobs to return, 1 to 500 |
retries | integer | no | 3 | Retry attempts per page |
Output
{"position": 1,"job_id": "14439627","title": "Requirements- & Data-Engineer*","url": "https://www.stepstone.de/stellenangebote--Requirements-Data-Engineer-Koeln-...","company": "BarmeniaGothaer","company_url": "https://www.stepstone.de/cmp/de/barmeniagothaer-29978/jobs","location": "Köln, Wuppertal","posted_relative": "vor 21 Stunden","work_from_home": true,"salary_available_on_page": true,"salary_text": null,"is_promoted": false,"market": "de","query": "data engineer"}
Use cases
Recruitment market mapping in DACH. StepStone is the dominant board in Germany and Austria, where Indeed is weaker than it is in English-speaking markets. Run your competitor set as queries and your region as the location, group by company_url, and you see who is hiring hard.
Feeding a job board or aggregator. Job ids are stable and the URL points at the posting rather than the employer, so a scheduled run with sort: date deduplicates cleanly into an index.
Finding roles with published pay. Filter on salary_available_on_page. StepStone computes an estimate for most postings but hides it behind a control, and knowing which roles have one is the difference between a targeted follow-up and opening fifty tabs.
Hiring-signal tracking. A company that posts fifteen engineering roles in a month is expanding. Run their name as a query weekly, count rows, and you have an indicator that arrives before any announcement.
How it compares
| this actor | cheap_scraper/indeed-job-scraper | borderline/indeed-scraper | |
|---|---|---|---|
| Per 1.000 jobs | $1,10 | $1,00 | $5,00 |
| Covers StepStone | yes | no | no |
| Job link resolved correctly | yes | n/a | n/a |
| Salary-estimate flag | yes | no | no |
| Employer profile URL | yes | no | no |
| Needs a proxy or browser | no | – | – |
Honest about the other side: nothing on the Store covers StepStone, so the comparison is against Indeed scrapers on a different board. If your market is the US or UK, an Indeed actor will serve you better. StepStone is where the DACH market actually posts.
Pricing
Two events. A flat run_start of $0,002 covers the run, and job costs $0,0011 per posting returned, which is $1,10 per 1.000. Beyond the start fee you only pay for jobs you actually receive.
Limits and gotchas
- The salary figure is not on the card. StepStone shows a "Gehalt anzeigen" control and reveals the range behind a click.
salary_available_on_pagetells you an estimate exists; retrieving the number would be a second fetch per row and this actor does not make it. locationcan list several cities for one posting, exactly as StepStone renders it. Split it yourself if you need one city per row.- Promoted postings appear in results and are flagged. Filter them out before counting a market.
- 500 jobs per run across 20 pages of 25. Beyond that, narrow the query or add a location.
- German search terms work better on the German and Austrian sites than English ones, even for technical roles.
- The route is a measurement, not a fact. StepStone is open today. If that changes, the failure will be a short body rather than an error, which is why the actor checks the response size rather than the status code.
FAQ
Do I need a proxy for StepStone? No. It was measured as an open target: any client, any headers, any IP. Adding a proxy would cost money and buy nothing.
Why do other StepStone scrapers return company pages instead of jobs? Because each card holds two anchors and the first is the employer profile. The job link lives on the title element specifically.
Can I get the salary? You get whether StepStone has an estimate for the role. The figure itself sits behind a click on the job page, which is a second request per job.
Which countries are covered? Germany, Austria and Belgium, which is StepStone's own footprint.
How do I only get new postings?
Set sort to date and deduplicate on job_id against your previous run.
Related Actors
- Indeed Jobs Scraper — 14 markets, with parsed salary ranges
- LinkedIn Jobs Scraper — full descriptions and applicant counts
- Reddit Scraper — what people say about an employer