StepStone.de - German Jobs, Employers & Salaries
Pricing
from $1.20 / 1,000 job results
StepStone.de - German Jobs, Employers & Salaries
Scrape StepStone.de jobs by keyword, location, filters, or URL. Extract 35+ fields including employer, logo, location, posting date, home-office status, and optional full descriptions, GPS, employment type, and company profiles.
Pricing
from $1.20 / 1,000 job results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
StepStone.de Jobs Scraper
Scrape job postings from StepStone.de — Germany's #1 job platform. Fast, reliable. Returns 35+ listing fields per job. Optional detail enrichment adds 12 extra fields including the full German description, GPS coordinates, employment type, and company profile. Supports search by keyword, location and seven working filters, plus URL paste mode.
Key features
- Search mode — keyword + location plus working-hours, contract-type, date, home-office, language, experience and apply-method filters. One run per location. Leave locations empty to search all of Germany.
- URL mode — paste one or more StepStone.de search-result URLs; each is expanded page by page.
- Detail enrichment (
fetchDetails) — adds full description (HTML + plain text), structured address with lat/lng, employment type, contract type, work type, valid-through date, company profile (benefits, industries, size, logo, videos), and best-effort recruiter contact harvesting from tel:/mailto: links and the description text. - 35+ SERP fields — title, employer (name, id, logo URL, profile URL), location text, date posted, work-from-home status, labels, text snippet, partnership info.
- Resume & recurring updates built in (
resumeFromRunIdcontinues an interrupted run; incremental mode (NEW/UPDATED/REAPPEARED/EXPIRED) remembers state across scheduled daily/weekly runs — no dataset ID to paste each time). - MCP connector export — pipe results into Notion / Linear / Airtable / Apify (discovery from the input form, no extra config).
Filters — what each one actually does
Every filter below was measured live against the search python in Berlin, which returned
310 jobs with no filter applied. The number is how many of those 310 remain when the filter is
set. Nothing is advertised here that does not move the result count.
| Field | Value | Jobs left (of 310) |
|---|---|---|
workType | vollzeit (full time) | 278 |
teilzeit (part time) | 57 | |
contractType | permanent (Feste Anstellung) | 261 |
student (Werkstudent) | 19 | |
fixed-term (Befristeter Vertrag) | 6 | |
internship (Praktikum) | 6 | |
freelance (Freie Mitarbeit) | 5 | |
apprenticeship (Ausbildung, Studium) | 4 | |
trainee (Berufseinstieg) | 3 | |
doctorate (Promotion/Habilitation) | 3 | |
datePosted | 1 (last 24 hours) | 22 |
7 (last 7 days) | 116 | |
14 | 254 | |
30 | 309 | |
workFromHome | remote (Nur Home-Office) | 15 |
hybrid (Teilweise Home-Office) | 208 | |
jobLanguage | de (German advert) | 222 |
en (English advert) | 86 | |
experienceLevel | experienced (Mit Berufserfahrung) | 264 |
entry (Ohne Berufserfahrung) | 83 | |
management (Mit Personalverantwortung) | 6 | |
applyMethod | company-website | 170 |
quick-apply (Schnelle Bewerbung) | 112 | |
sortBy | relevance / date | 310 — sorting changes the order, not the match count |
All eight filters combine: vollzeit + permanent + last 7 days + German + hybrid + experienced +
company-website + newest-first returns 27 of the 310.
What StepStone.de does not offer
- No salary filter. The site's salary facet exists but ships no options at all, so this actor deliberately has no minimum-salary input rather than a switch that silently does nothing.
- No salary in listing results either. Across a 25-job sample every
salaryandunifiedSalary.min/maxcame back empty (19 of 25 were flagged "salary available" while still publishing no figure).salaryis returned for completeness and is usuallynull. - No employer-vs-agency filter, and no salary or distance sort — StepStone.de offers relevance and most-recent only.
- No per-advert language field. Ad language exists as a search filter (
jobLanguage) but the job pages expose no language attribute, so there is no language column in the output. skills,postCode,travelTime,publishFromDate/publishToDateandcrossPostedCountwere empty for all 25 jobs in the sample — the site serves them as null, and detail enrichment does not fill them either.
Input reference
| Section | Field | Description |
|---|---|---|
| Mode | mode | search (filters) or url (paste links) |
| Search mode | locations | Array of cities/regions; prefilled ["Berlin"]. Empty = all of Germany |
keywords | Job title or skill (e.g. Softwareentwickler) | |
workType | vollzeit or teilzeit | |
contractType | permanent, fixed-term, trainee, freelance, apprenticeship, internship, student, doctorate | |
datePosted | Days: 1, 7, 14, 30 | |
workFromHome | remote or hybrid | |
jobLanguage | de or en | |
experienceLevel | entry, experienced, management | |
applyMethod | quick-apply or company-website | |
sortBy | relevance or date | |
| URL mode | urls | Array of StepStone.de SERP URLs; each paginated forward |
| Output & limits | fetchDetails | Fetch full detail pages (needs Residential DE proxy) |
maxListings | The cap — total jobs to collect (default 20; 0 = unlimited) | |
maxPages | Optional page cap per search (default 0 = unlimited — stops at Max jobs or the site's last page) | |
maxResidentialRequests | Safety cap on residential proxy usage (0 = unlimited) | |
| Resume & recurring | resumeFromRunId | Continue an interrupted run (delta) |
incrementalMode | Daily monitoring — only changes returned on later runs | |
stateKey | Optional — name this campaign to share state | |
emitUnchanged | Also return UNCHANGED rows (extra rows billed) | |
emitExpired | Also return EXPIRED rows when a complete scan proves they're gone (extra rows billed) | |
| Connection | proxy | Proxy settings (Residential DE recommended; detail enrichment requires it) |
| Export to apps | mcpConnectors | MCP connector IDs to forward each item to (e.g. Notion, Linear, Airtable, Apify) |
notionParentPageUrl | Parent page URL/id for the Notion connector (required for the Notion export) | |
maxNotifyListings | Max items exported per connector per run (default 50; does not affect the dataset) |
Output (per-job record)
Listing fields (always present)
jobId,harmonisedId,jobUrl,applyUrl,title,datePosted,publishFromDate,publishToDatebrand(stepstone-de),backend,scrapedAtemployer(id, name, url, logoUrl, isAnonymous)location(text, postalCode + detail-only: locality, region, country, latitude/longitude (also lat/lng), streetAddress)salary(min, max, currency, period — see "What StepStone.de does not offer": usuallynull)workFromHome,labels,skills,textSnippet,crossPostedCountisSponsored,isHighlighted,isTopJob,isTrafficFromPartnerpartnership(isBackfilled, isCrossPosted, isPartnershipJob, sourceSiteFriendlyName)travelTime,sourceSite,sourceSearchUrl
Multi-city adverts put every city into one location.text string ("Berlin, Frankfurt, Hamburg,
München, Münster"); when fetchDetails is on, the coordinates that come with such an advert are
for one of those cities only, not for all of them.
Detail fields (only when fetchDetails: true)
description,descriptionText(full German job description)employmentType,industry,contractType,workTypejobLocationType,applicantLocationRequirementsdirectApply,applyType(DirekteBewerbung / ExterneBewerbung)validThrough,externalIdcontactPhones,contactEmails(best-effort)company(benefits, industries, size, founded, description, videos, images, jobsCount)detailFetched(boolean flag)
Incremental metadata (only in incremental mode)
changeType(NEW / UPDATED / REAPPEARED / EXPIRED)changedFields,firstSeenAt,lastSeenAt
Scanned vs emitted caps
maxListings counts jobs scanned, not jobs returned. In incremental mode a quiet run that
suppresses most of a page therefore stops paging at the same depth as a noisy one, instead of paging
deeper to backfill the quota — which is what makes recurring runs genuinely cheaper.
Send results into your apps (MCP connectors)
Optionally pipe results into the apps you already use. Authorize a connector once under Apify,
Settings, Integrations, then select it in the input. Set notionParentPageUrl for Notion. Each
connector receives a condensed, human-readable summary per item (title plus key fields), not the
full JSON; the complete record always stays in the Apify dataset. Supported: Notion, Linear,
Airtable, Apify.
Proxy & connection
Search-result pages work on the default connection for most users. Detail pages (for fetchDetails)
always require Apify Residential proxy with country set to DE; job pages refuse every other connection
shape. Free-tier and non-Residential users get SERP-only results and the actor logs a clear warning.
maxResidentialRequests puts a hard ceiling on Residential usage for a run.
StepStone.de sometimes refuses a page outright, on any connection — certain search URLs are simply expensive for the site to build, and it answers by dropping the request. The actor recognizes this as the site having a bad moment, not your connection being blocked, so it does not spend extra proxy budget retrying the same request: your proxy spend never goes up because of it.
If job detail pages start being refused across the board, detail enrichment is switched off for the
rest of the run instead of retrying every remaining job: you still get every listing row, and the
detail-enrichment event is not charged for jobs that were not enriched. The run summary reports this
as detailEnrichmentDisabled.
If a run cannot read a single result page it fails with an explanatory message rather than reporting an empty search — an empty result set from this actor always means the filters really matched nothing. The message distinguishes the two causes, so you are never told to upgrade your proxy for a problem that a proxy cannot fix.