StepStone.de icon

StepStone.de

Scrape StepStone.de jobs by keyword, location, filters, or URL. Extract 35+ fields including employer, logo, location, posting date, home-office…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

StepStone.de at a glance

StepStone.de is a ready-to-run Apify actor from abotapi for collecting jobs data. Its documented output includes job id, change type (incremental mode), title, employer and location, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Jobs, Automation, Developer Tools
Region
Europe
Pricing
$2.00 per 1,000 results (Free plan), from $1.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
29 options

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.

What StepStone.de can do

  • Two ways to find jobs. Build a search from keyword, location and eight working filters, or paste one or more StepStone.de search-result links and let the actor paginate them forward.
  • 35+ listing fields per job, with optional detail enrichment adding around 12 more: full description, GPS coordinates, structured address, employment type, contract type, valid-through date and a company profile (benefits, industries, size, logo).
  • Filters that are honestly documented. Every filter option was measured against a real search so nothing advertised here silently does nothing, and the one filter StepStone.de does not actually support (salary) is deliberately left out of the input rather than shipped as a switch that does nothing.
  • Resume and recurring updates built in. Continue an interrupted run by pasting its run or dataset id, or turn on incremental mode so scheduled runs return only NEW, UPDATED and REAPPEARED jobs, with UNCHANGED ones suppressed by default.
  • Best-effort recruiter contact harvesting. When detail enrichment is on, phone numbers and email addresses are pulled from tel:/mailto: links and the job description text.
  • A refused run fails loudly instead of returning an empty dataset, so "no jobs matched your filters" is never confused with "the site could not be read".

Choose what to collect

These inputs let you configure StepStone.de - German Jobs, Employers & Salaries. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to find jobs: build a search from filters, or paginate URLs you paste.

Choices: search, url

locationsarrayCities, states, or regions in Germany (Search mode). Examples: 'Berlin', 'München', 'Hamburg', 'Frankfurt am Main', 'Bayern'. One search runs per location. Leave empty for all of Germany.
keywordsstringJob title, skill, or company to search for. Examples: 'Softwareentwickler', 'Ingenieur', 'Marketing Manager', 'Pflegefachkraft'. Leave empty to list all jobs in the location.
workTypestringFull-time (Vollzeit) or part-time (Teilzeit). Measured on 'python' in Berlin: 310 jobs unfiltered, 278 Vollzeit, 57 Teilzeit.

Choices: any, vollzeit, teilzeit

contractTypestringKind of contract offered. Measured on 'python' in Berlin (310 unfiltered): permanent 261, student/Werkstudent 19, fixed-term 6, internship 6, freelance 5, apprenticeship 4, trainee 3, doctorate 3.

Choices: any, permanent, fixed-term, trainee, freelance, apprenticeship, internship, student, doctorate

datePostedstringOnly jobs posted within this many days. Measured on 'python' in Berlin (310 unfiltered): 24 hours 22, 7 days 116, 14 days 254, 30 days 309. Last 3 days measured on 'python' in Berlin: 70 of 355.

Choices: 0, 1, 3, 7, 14, 30

workFromHomestringRemote-working arrangement. Measured on 'python' in Berlin (310 unfiltered): fully remote 15, hybrid 208.

Choices: any, remote, hybrid

Show 22 more inputs
More input fields
InputWhat it controls
jobLanguagestringLanguage the job advert is written in. Measured on 'python' in Berlin (310 unfiltered): German 222, English 86. Note StepStone.de exposes ad language only as a search filter, there is no per-advert language field to return in the results.

Choices: any, de, en

experienceLevelstringSeniority the advert asks for. Measured on 'python' in Berlin (310 unfiltered): with experience 264, without experience 83, with staff responsibility 6.

Choices: any, entry, experienced, management

applyMethodstringWhether the advert takes applications on StepStone or sends you to the company's own site. Measured on 'python' in Berlin (310 unfiltered): quick apply 112, company website 170.

Choices: any, quick-apply, company-website

sortBystringResult ordering. StepStone.de offers exactly these two; sorting changes the order, not how many jobs match. (There is no salary or distance sort on this site.)

Choices: relevance, date

disciplinestringOptional StepStone discipline name, for example IT or Ingenieurwesen. Narrows results (python in Berlin: IT 229 of 355).
sectorstringOptional numeric sector id from the site's sector filter (for example 21000). Narrows results (python in Berlin: 189 of 355).
skillIdsarrayOptional numeric skill ids from the site's skill filter (for example 673565). Narrows results.
cityIdstringOptional numeric city id from the site's city filter (for example 419239). Narrows results (python in Berlin: 312 of 355).
urlsarrayStepStone.de search-result, company-page (/cmp/...) or single job-page URLs (URL mode). Multi-URL supported. Filter fields above are ignored; filter parameters pasted in a link are kept. A page number in the URL is honoured as the starting point. Single job-page links need 'Fetch full job details' on.
fetchDetailsbooleanFetch detail pages to add the full description, GPS coordinates, structured address, employment type, valid-through date, and company profile. Adds ~12 fields. Costs more per job. Job pages are fetched over Residential DE; on a plan without Residential access this is skipped with a warning. Off = fast, cheap, 35 listing fields.
maxListingsintegerTotal jobs to collect across all searches. This is the main limit. Set 0 for unlimited (bounded by Max pages).
maxItemsintegerAlias of Max jobs, for users coming from other StepStone scrapers. It overrides Max jobs only when set; leave it empty to use Max jobs.
maxPagesintegerOptional safety limit on pages walked per location/URL (25 jobs per page). Leave at 0 to walk the whole catalogue: the run stops at Max jobs, the site's own last page, or a repeat-page guard, not an artificial page cap.
resumeFromRunIdstringOptional. ID of a previous run of this actor (or a dataset ID). Jobs already in that dataset are skipped, so this run returns only NEW jobs (a delta). Combine both runs' datasets for the full set. Max jobs then counts only the new jobs. For recurring daily monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching jobs as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED jobs. Turn on "Emit unchanged" or "Emit expired" only when you also want those jobs returned (and billed). State is kept separately for each distinct search/filter setup (or by State key below).
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from your search/filter settings, different searches then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return jobs that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return jobs that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max jobs or Max pages capped it, or when Resume was used. This returns, and bills, extra synthetic rows.
ignoreFieldsForChangesarrayOptional. Field names to leave out of UPDATED detection and changedFields, on top of the built-in exclusions (ad-placement flags, cross-post count, source search link, detail flag, scrape time). Use a plain name such as textSnippet, or a dotted path for a nested field such as employer.logoUrl. The fields stay in the output. Changing this never re-bills your saved jobs.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

jobIdJob ID (text)
changeTypeChange type (incremental mode) (text)
titleTitle (text)
employerEmployer (object)
locationLocation (object)
salarySalary (object)
datePostedPosted (text)
sourceSiteSource (text)
jobUrlURL (link)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
Show 9 more fields
employmentTypeEmployment (array)
industryIndustry (text)
jobLocationTypeWork type (text)
validThroughValid through (text)
applyTypeApply (text)
contactPhonesContact phones (array)
contactEmailsContact emails (array)
descriptionTextDescription (text)
companyCompany (object)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "rowType": "job",
  "brand": "stepstone-de",
  "backend": "unified",
  "sourceSearchUrl": "https://www.stepstone.de/jobs/vollzeit/softwareentwickler/in-berlin",
  "jobId": 12345678,
  "harmonisedId": "12345678",
  "jobUrl": "https://www.stepstone.de/stellenangebote--Beispiel-Job-Berlin-Beispiel-GmbH--12345678-inline.html",
  "applyUrl": "https://www.stepstone.de/stellenangebote--Beispiel-Job-Berlin-Beispiel-GmbH--12345678-inline.html",
  "sourceSite": "StepStone.de",
  "title": "Softwareentwickler (m/w/d)",
  "datePosted": "2026-09-20",
  "publishFromDate": "2026-09-20",
  "publishToDate": "2026-10-20",
  "employer": {
    "id": "9001",
    "name": "Beispiel GmbH",
    "url": "https://www.stepstone.de/cmp/de/beispiel-gmbh-9001",
    "logoUrl": "https://images.stepstone.de/beispiel-gmbh-logo.png",
    "isAnonymous": false
  },
  "location": {
    "text": "Berlin",
    "postalCode": "10115",
    "locality": "Berlin",
    "region": "Berlin",
    "country": "DE",
    "latitude": 52.52,
    "longitude": 13.405,
    "lat": 52.52,
    "lng": 13.405,
    "streetAddress": null
  },
  "salary": {
    "rawText": null,
    "min": null,
    "max": null,
    "currency": null,
    "period": null
  },
  "workFromHome": "Home-Office teilweise möglich",
  "labels": [
    "Vollzeit"
  ],
  "skills": [],
  "textSnippet": "Wir suchen einen erfahrenen Softwareentwickler zur Verstärkung unseres Teams...",
  "crossPostedCount": 1,
  "isSponsored": false,
  "isHighlighted": false,
  "isTopJob": false,
  "isTrafficFromPartner": false,
  "partnership": {
    "isBackfilled": false,
    "isCrossPosted": false,
    "isPartnershipJob": false,
    "sourceSiteFriendlyName": null
  },
  "travelTime": null,
  "description": "<p>Wir suchen einen erfahrenen Softwareentwickler...</p>",
  "descriptionText": "Wir suchen einen erfahrenen Softwareentwickler...",
  "validThrough": "2026-11-20T00:00:00",
  "employmentType": [
    "FULL_TIME"
  ],
  "industry": "Informationstechnologie",
  "directApply": true,
  "applyType": "DirekteBewerbung",
  "jobLocationType": null,
  "applicantLocationRequirements": null,
  "externalId": "REQ-2026-001",
  "contractType": "permanent",
  "workType": "vollzeit",
  "company": {
    "id": "9001",
    "name": "Beispiel GmbH",
    "jobsCount": 12,
    "founded": "2005",
    "size": "201-500",
    "industries": [
      "Informationstechnologie"
    ],
    "benefits": [
      "Home-Office",
      "Weiterbildung"
    ],
    "description": "Beispiel GmbH ist ein fiktives Beispielunternehmen."
  },
  "contactPhones": [],
  "contactEmails": [],
  "detailFetched": true,
  "scrapedAt": "2026-09-30T09:00:00+00:00"
}

Ways to use this data

  • Recruiters and talent teams: track newly posted roles from target employers or an industry across German cities.
  • Job seekers and career coaches: monitor a keyword and location search daily so new postings are caught early.
  • Labor market research: build historical datasets of demand by contract type, work model and experience level.
  • Sales and lead generation: use employer and company-profile fields (industries, size, benefits) to prioritize outbound targets.
  • HR tech and job-board products: pull structured German job data into your own product through the dataset or the API.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does StepStone.de return?

The documented output for StepStone.de includes job id, change type (incremental mode), title, employer, location, salary, posted and source. Availability of each field depends on the source page and the selected mode.

How much does StepStone.de cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new job postings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only NEW, UPDATED and REAPPEARED jobs, and unchanged ones are not billed unless you turn on Emit unchanged.

When is the salary field filled?

StepStone.de serves a salary range for many adverts: 21 of 25 jobs in the 2026-11-04 sample (python in Berlin) carried salary and unifiedSalary values, all marked Predicted (the site's estimate), and the rest were null. There is no salary filter or salary sort, because the site does not offer one.

Why did a large batch of jobs suddenly come back as EXPIRED, more than my Max jobs setting?

EXPIRED detection only runs after a complete scan of a tracked search, and the EXPIRED batch itself is not limited by Max jobs: every previously-tracked job no longer found is returned in that one run. If a monitoring campaign has not run in a while, expect a correspondingly large EXPIRED batch the next time it runs.

Can incremental mode mark a job UPDATED even though nothing about it changed?

It can, in one specific case: right after you bootstrap a new monitoring campaign with resumeFromRunId, the resumed jobs are known only by id, not by content. The first time incremental mode later re-scrapes one of those jobs, it is classified UPDATED because there is nothing stored yet to compare it against, even if the job itself is unchanged. Treat that one occurrence as informational.

Ready to collect with StepStone.de?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.