StepStone Jobs Search Lookup: jobs scraper from $1.50/1k avatar

StepStone Jobs Search Lookup: jobs scraper from $1.50/1k

Pricing

from $1.14 / 1,000 job posting returneds

Go to Apify Store
StepStone Jobs Search Lookup: jobs scraper from $1.50/1k

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

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

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:

FieldType / formatDescription
querytextThe search line you passed in, unchanged.
foundbooleantrue if the search returned at least one posting. false rows are never charged.
statustextOK, NOT_FOUND (no postings for that search), BAD_FORMAT (a blank line), or BLOCKED.
searchKeywordstextThe keywords actually sent to StepStone.
searchLocationtextThe location actually sent to StepStone.
jobCountnumberHow many postings this search returned after your filters — this is exactly what you're charged for.
totalAvailablenumberStepStone's own total-match count for the search, before this actor's page/depth limits.
truncatedbooleantrue if more postings were available than you asked for, or if paging stopped early.
jobsarrayThe full posting list. Present in every row; it's what gets expanded into separate rows in "one row per posting" mode.
jobIdtextStepStone's own numeric posting ID — stable, and what deduplication keys on.
titletextJob title.
companyNametextHiring company as StepStone names it.
locationtextLocation(s) as StepStone prints them on the posting — some postings list several cities.
remotebooleantrue if the location, home-office badge, or title reads as remote.
workFromHomebooleantrue if StepStone shows its own "home office" badge on the card.
postedAgotextHow recently it was posted, in StepStone's own words ("vor 1 Tag").
jobUrllinkPermanent link to the posting on stepstone.de.
scrapedAtdate (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

  1. In the Apify Console. Open the actor page and click Start — the searches field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. 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"]}'
  3. 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 @ Berlin
Bilanzbuchhalter
Pflegefachkraft @ 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:

InputWhat it does
defaultLocationLocation for any line that doesn't name one. Write it as StepStone does — "Berlin", "Muenchen", "Hamburg".
maxJobsPerQueryMost 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:

InputWhat it does
titleKeywordsKeep only titles containing one of these.
excludeTitleKeywordsDrop titles containing one of these — e.g. ["Praktikum","Werkstudent"]. Applied after the include list.
companiesKeep only these companies — partial names match.
excludeCompaniesDrop these companies — useful for filtering out recruitment agencies you already know.
locationsNarrow a wide search to particular districts.
remoteOnlyKeep only roles whose location, home-office badge, or title reads as remote.
skipDuplicateJobsOn 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

queryfoundstatussearchKeywordssearchLocationjobCounttotalAvailabletruncatedjobsjobIdtitlecompanyNamelocationremoteworkFromHomepostedAgojobUrlscrapedAt
Software Engineer @ BerlintrueOKSoftware EngineerBerlin50589true<all postings found (full list)>13817131Software Engineer Public Sector (all genders)msg systems agBerlin, Chemnitz, Dresden, Düsseldorf, Essen, Frankfurt am Main, Hamburg, Hannovertruetruevor 1 Wochehttps://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.html2026-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.