StepStone Jobs Search Lookup: jobs scraper from $1.50/1k
Pricing
from $1.14 / 1,000 job posting returneds
StepStone Jobs Search Lookup: jobs scraper from $1.50/1k
StepStone jobs scraper by keyword and location — run a search on StepStone.de, the largest job board in Germany/Austria/Switzerland, and get one row per posting: title, company, location, home-office badge, link. No login required. Pay per posting returned; empty searches are free.
Pricing
from $1.14 / 1,000 job posting returneds
Rating
0.0
(0)
Developer
Adrian Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
StepStone Jobs Search Lookup: StepStone Jobs Scraper by Keyword & Location
You write job searches the way you'd type them into StepStone — Software Engineer @ Berlin —
and this actor runs each one against StepStone.de, one of the largest job boards in the
DACH region (Germany, Austria, Switzerland), and returns one clean row per posting: title,
company, location, home-office badge, how recently it was posted, and a permanent link.
No login. No API key. StepStone's search page is behind a connection-level bot wall, but the page itself is server-rendered with real job data once that wall is cleared — see "Why this one" below.
Who it's for
The accountable_eel catalogue sells company and hiring intelligence columns for outbound and recruiting. Each actor takes a list of identifiers — domains, company slugs, and here, job searches — and returns one flat, stably-named row per result: the shape a Clay table, an n8n workflow, or an AI agent can consume without post-processing. Pricing is pay-per-event: a fraction of a cent for a row you actually got, and nothing at all for a search that finds nothing. No seat licence, no monthly minimum, no credit system to decode.
This actor is the DACH-region counterpart to seek-jobs-search-lookup and
linkedin-jobs-search-lookup: wide-net keyword + location search rather than a per-company
listing. The ATS lookups in the same family (greenhouse-jobs-lookup, lever-jobs-lookup and
friends) answer "what is this company hiring for" — you bring the company list. This one
answers "who is hiring for this role, in this German-speaking city" when you don't have the
list yet.
Why this one
- Reaches data a plain request can't. A bare request to StepStone's search pages is blocked at the connection level — the server accepts the TLS handshake and then either resets the stream or never responds at all, before any page-level check even runs. This actor routes through a proxy tier built for exactly this kind of defense; the page itself, once reached, is ordinary server-rendered HTML with the job data already in it — no headless browser needed.
- The filters are real. A location segment genuinely narrows results — a Berlin search returned only Berlin-inclusive postings in verification, not a superset silently unfiltered — and pagination returns a genuinely disjoint set of postings per page, not a repeated cache.
- You are never billed for the same posting twice. Every posting is deduplicated by its StepStone job ID across the pages of one search and, by default, across every search in the run — an overlapping pair of searches returns, and bills, each posting once.
- A generous depth ceiling, not a silent ceiling. StepStone served a real page 182 pages deep into a 4,544-result search in verification — this actor still caps paging at a modest default (8 pages / ~200 postings per search) to keep proxy cost predictable, not because StepStone itself stops sooner. Raise "Most postings to return per search" if you need more.
- Honest about proxy cost. Reaching StepStone requires a paid proxy tier, unlike most of this catalogue's actors. That cost is priced into what you're charged per posting — see Pricing.
What you get
One row per job posting by default. (Turn off "One row per job posting" in the Input tab to get
one row per search instead, with the whole posting list nested in jobs.) Every row carries
these fields:
| Field | Type / format | Description |
|---|---|---|
query | text | The search line you passed in, unchanged. |
found | boolean | true if the search returned at least one posting. false rows are never charged. |
status | text | OK, NOT_FOUND (no postings for that search), BAD_FORMAT (a blank line), or BLOCKED. |
searchKeywords | text | The keywords actually sent to StepStone. |
searchLocation | text | The location actually sent to StepStone. |
jobCount | number | How many postings this search returned after your filters — this is exactly what you're charged for. |
totalAvailable | number | StepStone's own total-match count for the search, before this actor's page/depth limits. |
truncated | boolean | true if more postings were available than you asked for, or if paging stopped early. |
jobs | array | The full posting list. Present in every row; it's what gets expanded into separate rows in "one row per posting" mode. |
jobId | text | StepStone's own numeric posting ID — stable, and what deduplication keys on. |
title | text | Job title. |
companyName | text | Hiring company as StepStone names it. |
location | text | Location(s) as StepStone prints them on the posting — some postings list several cities. |
remote | boolean | true if the location, home-office badge, or title reads as remote. |
workFromHome | boolean | true if StepStone shows its own "home office" badge on the card. |
postedAgo | text | How recently it was posted, in StepStone's own words ("vor 1 Tag"). |
jobUrl | link | Permanent link to the posting on stepstone.de. |
scrapedAt | date (ISO) | When this actor fetched the row. |
A search that returns no postings comes back as a single found: false row with a
status/message explaining why, and is never charged. So does a blank line.
Pricing
- Job posting returned: $1.5 per 1,000 job postings
Plus a $0.00005 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.
You're charged per posting returned, not per search — a search that returns 12 postings costs twelve, a search that returns none costs nothing, and a blank line costs nothing.
Because you pay per posting, "Most postings to return per search" is your budget control: leave it at 50 and a ten-search run costs at most 500 postings' worth.
How to use
- In the Apify Console. Open the actor page and click Start — the
searchesfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~stepstone-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"searches":["Software Engineer @ Berlin"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
Paste one search per line:
Software Engineer @ BerlinBilanzbuchhalterPflegefachkraft @ Muenchen
A line with no @ location uses the location you set once in 🔍 Search settings — leave
that blank too and the search covers all of Germany.
🔍 Search settings — these are sent to StepStone, so they narrow the search before results are returned, which makes runs cheaper as well as more relevant:
| Input | What it does |
|---|---|
defaultLocation | Location for any line that doesn't name one. Write it as StepStone does — "Berlin", "Muenchen", "Hamburg". |
maxJobsPerQuery | Most postings to return per search. Default 50, capped at 200 (8 pages) by default. |
🎯 Narrow the results — applied here, to the postings after they arrive, so you can filter on things StepStone's own search box doesn't expose. They combine with AND across fields and OR within a field:
| Input | What it does |
|---|---|
titleKeywords | Keep only titles containing one of these. |
excludeTitleKeywords | Drop titles containing one of these — e.g. ["Praktikum","Werkstudent"]. Applied after the include list. |
companies | Keep only these companies — partial names match. |
excludeCompanies | Drop these companies — useful for filtering out recruitment agencies you already know. |
locations | Narrow a wide search to particular districts. |
remoteOnly | Keep only roles whose location, home-office badge, or title reads as remote. |
skipDuplicateJobs | On by default. Each posting is returned, and billed, once per run even if two searches overlap. |
Input
{"searches": ["Software Engineer @ Berlin"]}
One search per line. Write it as "keywords @ location", or just the keywords and set a location below. Accepted formats: Softwareentwickler @ Berlin, Bilanzbuchhalter, Pflegefachkraft @ Muenchen.
Output
| query | found | status | searchKeywords | searchLocation | jobCount | totalAvailable | truncated | jobs | jobId | title | companyName | location | remote | workFromHome | postedAgo | jobUrl | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Software Engineer @ Berlin | true | OK | Software Engineer | Berlin | 50 | 589 | true | <all postings found (full list)> | 13817131 | Software Engineer Public Sector (all genders) | msg systems ag | Berlin, Chemnitz, Dresden, Düsseldorf, Essen, Frankfurt am Main, Hamburg, Hannover | true | true | vor 1 Woche | https://www.stepstone.de/stellenangebote--Software-Engineer-Public-Sector-all-genders-Berlin-Chemnitz-Dresden-Duesseldorf-Essen-Frankfurt-am-Main-Hamburg-Hannover-msg-systems-ag--13817131-inline.html | 2026-08-31T07:00:50.030Z |
A miss comes back as a row with "found": false and is never charged.
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~stepstone-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"searches":["Software Engineer @ Berlin"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~stepstone-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"searches":["Software Engineer @ Berlin"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~stepstone-jobs-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"searches":["{{search}}"]}, mapping the row's search into the searches array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "StepStone Jobs Scraper | Apify" — the agent will find and run this actor.