# StepStone Scraper (`parseforge/stepstone-scraper`) Actor

Scrape StepStone.de job listings with full descriptions, employer benefits and geo coordinates. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/stepstone-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 job postings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 💼 StepStone Scraper

> 🚀 **Export Germany's largest job board in seconds.** 34 fields per posting, the employer benefits list StepStone shows on the ad, and exact ISO posting timestamps instead of "vor 12 Stunden".

StepStone.de is the biggest job board in the German-speaking market, and it sits behind an Akamai edge that answers a plain HTTP request with `Access Denied`. This Actor gets past that with German residential routing and reads the same server-rendered result list the site builds for a real browser, so the data you get is the data StepStone actually published. Paste a search URL such as `https://www.stepstone.de/jobs/software-engineer`, paste a single job ad, or just type a keyword and a city and let the Actor build the search for you.

Measured on live runs while building this Actor: `software-engineer` returns 4,650 postings across 186 pages, `manager` returns 25,665 across 1,027 pages, and page 1,027 hands back the exact 15-item remainder rather than looping. A 5-job run with full detail pages finished in 14 seconds. Every one of the 34 fields was populated on the verification run, benefits ran 8 to 20 entries per ad, and descriptions ran 2,900 to 7,600 characters.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Recruiters and talent intelligence teams in DACH | Track which competitors are hiring, where, and on what contract terms |
| HR and compensation teams | Benchmark the benefits packages employers actually advertise, by sector and region |
| Job board and aggregator operators | Feed a niche German board with fresh postings, deduplicated and geo-coded |
| Market researchers and investors | Read hiring velocity by sector as an expansion signal |
| Job seekers and career coaches | Export every matching role into a spreadsheet and filter it your own way |

### 📋 What the StepStone Scraper does

- 🔓 **Gets through the Akamai edge.** StepStone answers a normal HTTP client with a 403 and occasionally serves an interstitial challenge instead of the page. The Actor routes through German residential IPs and retries on a rotated session, so a challenge costs a second, not a run.
- 🎁 **Employer benefits, as a list.** Every ad carries the benefit chips the employer paid to display, from `Betriebliche Altersvorsorge` to `Dienstrad`. The Actor returns them as a clean array of 8 to 20 entries. Nothing else in this niche extracts them.
- 🕰 **Exact posting timestamps.** StepStone shows visitors `Erschienen: vor 12 Stunden`. The Actor returns `datePosted` as a real timestamp with timezone offset, plus a plain `postedDate` for grouping.
- 🧭 **Geo coordinates and postal codes.** Latitude, longitude and the German postal code come straight off the ad, so postings map without a geocoding step.
- 📏 **No depth cap.** A query is exhaustible to its last result. `manager` paginates cleanly through all 1,027 pages and stops, with no wrap-around and no duplicate rows.
- 🎛️ **Every StepStone filter.** Posting age, home office, full or part time, 13 contract types, 3 experience levels, 28 disciplines, 31 sectors, ad language and application method, each one taken from StepStone's own live facet list rather than invented.
- 📝 **Description twice.** `descriptionText` is clean plain text with German entities decoded, ready for an LLM or a spreadsheet. `descriptionHtml` keeps the original markup for rendering.
- ⚡ **Two speeds.** Full detail mode opens every ad for benefits, coordinates and the description. Listing-only mode collects 25 jobs per request when you just need titles, companies and links.

> 💡 **Why it matters:** the benefits package and the exact posting date are the two things a DACH hiring analyst reads a job ad for, and they are the two StepStone does not hand you in a usable form. This Actor returns both on every row.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Every run writes one flat row per job posting. 34 fields, always the same keys, so the dataset is safe to load straight into a pipeline. Fields the source withholds on a given ad carry `Not Disclosed` rather than an empty cell.

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Employer logo hosted by StepStone |
| 📌 `title` | string | Job title as published |
| 🔗 `url` | string | Public job ad URL |
| 🆔 `jobId` | number | StepStone posting ID |
| 🏢 `companyName` | string | Hiring company |
| 🏷 `companyId` | number | StepStone company ID, stable across postings |
| 🌐 `companyUrl` | string | Company profile page on StepStone |
| 🕵 `isAnonymousEmployer` | string | Yes when the employer hides its identity |
| 📍 `location` | string | Work location as StepStone displays it |
| 📮 `postalCode` | string | German postal code |
| 🌍 `country` | string | ISO country code |
| 🧭 `latitude` | number | Latitude of the work location |
| 🧭 `longitude` | number | Longitude of the work location |
| 🕰 `datePosted` | string | Exact publication timestamp with timezone offset |
| 📅 `postedDate` | string | Publication date, YYYY-MM-DD |
| ⏳ `validThrough` | string | When the posting expires |
| 💼 `employmentType` | string | FULL\_TIME, PART\_TIME, INTERN and so on |
| 📝 `contractType` | string | StepStone's German contract label, e.g. Feste Anstellung |
| 🕓 `workType` | string | e.g. Vollzeit, Teilzeit, Homeoffice möglich |
| 🏠 `homeOffice` | string | No, Partial or Full |
| 🏭 `industry` | string | StepStone's discipline and sub-discipline |
| ⚡ `directApply` | string | Yes when the application completes on StepStone |
| 🚀 `quickApply` | string | Yes when the ad carries the quick-apply badge |
| ✉️ `coverLetterRequired` | string | No when the ad says a cover letter is not needed |
| 📣 `isSponsored` | string | Yes for promoted, top-job or highlighted placements |
| 🗂 `resultSection` | string | Whether StepStone ranked the hit as a main or semantic match |
| ✂️ `textSnippet` | string | The teaser StepStone shows on the result card |
| 📄 `descriptionText` | string | Full ad text, HTML stripped, entities decoded |
| 🧾 `descriptionHtml` | string | Full ad, original HTML |
| 🎁 `benefits` | array | Employer benefit chips shown on the ad |
| 🏅 `labels` | array | Badges such as "Anschreiben nicht erforderlich" |
| 🔎 `searchUrl` | string | The page this row was collected from |
| 🕒 `scrapedAt` | string | ISO timestamp of collection |
| ❌ `error` | string | Populated only on a row that reports a failure |

Three real records from a verification run on `https://www.stepstone.de/jobs/software-engineer`:

```json
{
  "imageUrl": "https://www.stepstone.de/upload_DE/logo/E/logoAtotech-Deutschland-GmbH-Co-KG-8107DE-2208291700.gif",
  "title": "Software Engineer, Commissioner (w/m/d)",
  "url": "https://www.stepstone.de/stellenangebote--Software-Engineer-Commissioner-w-m-d-Feucht-bei-Nuernberg-Atotech-Deutschland-GmbH-Co-KG--14445878-inline.html",
  "jobId": 14445878,
  "companyName": "Atotech Deutschland GmbH & Co. KG",
  "companyId": 8107,
  "location": "Feucht (bei Nürnberg)",
  "postalCode": "90537",
  "country": "DE",
  "latitude": 49.35676,
  "longitude": 11.204779,
  "datePosted": "2026-09-01T08:54:46+02:00",
  "postedDate": "2026-09-01",
  "validThrough": "2026-10-01T07:15:11.65Z",
  "employmentType": "FULL_TIME",
  "contractType": "Feste Anstellung",
  "workType": "Vollzeit",
  "homeOffice": "No",
  "industry": "IT, IT-Softwareentwicklung",
  "directApply": "Yes",
  "benefits": ["Betriebskantine", "Coaching-Angebote", "Betriebsarzt im Unternehmen", "Betriebliche Altersvorsorge", "Flexible Arbeitszeiten", "Gute Verkehrsanbindung", "Homeoffice", "Parkplatz"],
  "scrapedAt": "2026-09-01T18:26:40.978Z",
  "error": null
}
```

```json
{
  "title": "Software Engineer (w/m/d) AWION",
  "url": "https://www.stepstone.de/stellenangebote--Software-Engineer-w-m-d-AWION-Holzwickede-Rhenus-Group--14438282-inline.html",
  "jobId": 14438282,
  "companyName": "Rhenus Group",
  "companyId": 55272,
  "location": "Holzwickede",
  "postalCode": "59549",
  "country": "DE",
  "datePosted": "2026-08-31T04:10:06+02:00",
  "validThrough": "2026-09-30T07:28:49.157Z",
  "employmentType": "FULL_TIME",
  "contractType": "Feste Anstellung",
  "workType": "Vollzeit",
  "industry": "IT, IT-Softwareentwicklung",
  "coverLetterRequired": "No",
  "benefits": ["Bonus", "Betriebskantine", "Karrierechancen", "Dienstrad", "Mitarbeiter-Laptop", "Kostenfreie Getränke", "Umfangreiche Einarbeitung", "Mitarbeiterrabatte", "Ergonomischer Arbeitsplatz", "Flache Hierarchien", "Flexible Arbeitszeiten", "Homeoffice", "Firmenevents- und Veranstaltungen", "Ein modernes Arbeitsumfeld", "Büroküche", "Eigene Ideen", "Parkplatz", "Unbefristeter Arbeitsvertrag", "Tätigkeit in Festanstellung", "Weiterbildungsmöglichkeiten"],
  "labels": ["Anschreiben nicht erforderlich"],
  "error": null
}
```

```json
{
  "title": "Software Engineer (m/w/d) für hardwarenahe Algorithmik (Informatik, Elektrotechnik oder Physik)",
  "jobId": 14342448,
  "companyName": "Diehl Defence GmbH & Co. KG",
  "companyId": 98925,
  "location": "Überlingen am Bodensee",
  "postalCode": "88662",
  "latitude": 47.75776,
  "longitude": 9.187225,
  "datePosted": "2026-08-29T04:54:53+02:00",
  "employmentType": "FULL_TIME",
  "contractType": "Feste Anstellung",
  "workType": "Vollzeit",
  "industry": "Ingenieurwesen, Ingenieurwesen-Elektrotechnik",
  "benefits": ["Betriebskantine", "Coaching-Angebote", "Firmenwagen", "Betriebsarzt im Unternehmen", "Firmenhandy", "Betriebliche Altersvorsorge", "Mitarbeiterrabatte", "Fitnessangebote", "Flexible Arbeitszeiten", "Homeoffice", "Firmenevents- und Veranstaltungen", "Essenszulage", "Vorsorgeuntersuchung", "Parkplatz", "Sportaktivitäten"],
  "error": null
}
```

### ✨ Why choose this Actor

- 🎁 **The benefits array.** Employers pay StepStone to display a benefits package. Those chips are structured data on the page and this Actor returns them as an array. It is the single field a compensation or employer-branding analyst opens a German job ad for.
- 🧭 **Geo-ready out of the box.** Coordinates and postal codes mean postings plot on a map with no geocoding bill attached.
- 📏 **Exhaustible queries.** Deep pagination was tested to the last page of a 25,665-result query. You can take a whole segment, not the first few hundred rows.
- 🛡️ **Honest about the wall.** StepStone hides salary from logged-out visitors. This Actor does not ship a salary column that would be empty on every row, and says so up front rather than after purchase.
- 🧱 **Stable field contract.** The same 34 keys on every row, sentinels instead of nulls, so a CSV import or a database load never breaks on a missing column.
- ⚙️ **Filters taken from the source.** Every dropdown value was read off StepStone's live facet tree and verified against a result count, so no filter silently returns the unfiltered set.

### 📈 How it compares to alternatives

| | This Actor | Typical StepStone scrapers |
|---|---|---|
| Employer benefits list | ✅ 8 to 20 chips per ad, as an array | ❌ Not extracted |
| Geo coordinates | ✅ Latitude, longitude, postal code | ⚠️ Usually city name only |
| Posting date | ✅ Exact timestamp with offset | ⚠️ Often the relative "vor 12 Stunden" string |
| Pagination depth | ✅ Tested to page 1,027 of 1,027 | ⚠️ Commonly capped in the low hundreds |
| Salary | ❌ Login-walled by StepStone, so not shipped | ⚠️ Advertised by several, though the logged-out page does not carry it |
| Filters | ✅ 10 facets, values read from the live source | ⚠️ Keyword and location only |
| Description | ✅ Plain text and HTML | ⚠️ Often the short teaser snippet |
| Null handling | ✅ `Not Disclosed` sentinels, fixed 34-key schema | ⚠️ Missing keys and empty cells |

**On salary, plainly:** StepStone renders a "Gehalt anzeigen" button to logged-out visitors instead of a figure, and its own front-end config carries `salaryInfo: "disabled"`. There is no salary on the public page to extract. Rather than ship a column that is empty on every row, this Actor omits it. If salary is the field you need, the honest answer is that no logged-out StepStone scraper can give it to you.

### 🚀 How to use

1. **Create a free Apify account.** New accounts get $5 in free credit, no card required: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. **Open the Actor** and go to the Input tab.
3. **Choose how to search.** Either paste StepStone URLs into the URL field, or leave it empty and type a keyword and a location instead. A single job ad URL works as well as a search page.
4. **Set Max Items.** Start with 10 to see the shape of the data, then raise it once you are happy.
5. **Pick your filters.** Posting age, home office, contract type, sector and the rest are optional; StepStone applies them itself, so the reported result total already reflects your choices.
6. **Decide on detail depth.** Leave "Scrape Full Job Details" on for benefits, coordinates and full descriptions. Turn it off for a fast titles-and-links run.
7. **Click Start,** then download the results as CSV, Excel, JSON or XML, or pull them from the dataset API.

```json
{
  "searchKeyword": "software engineer",
  "location": "Berlin",
  "postedWithin": "age_7",
  "jobLanguage": "en",
  "maxItems": 200
}
```

### 💼 Business use cases

#### Competitive hiring intelligence

Run the same keyword and sector filter weekly and diff the results. A competitor opening 12 `Vertrieb und Verkauf` roles in Nordrhein-Westfalen inside a fortnight is a go-to-market expansion you can see before the press release. `companyId` is stable across postings, so the diff is reliable even when a company renames a role.

#### Benefits and employer-branding benchmarking

The `benefits` array turns an unstructured perk list into countable data. Pull 5,000 ads in a sector and you can say what share of employers advertise `Betriebliche Altersvorsorge`, `Homeoffice` or `Dienstrad`, and how a client's package ranks against its actual competitors for the same candidates.

#### Job board and aggregator supply

Filter by discipline or sector, run on a schedule, and feed the rows straight into your own board. `validThrough` tells you when to expire a listing, `directApply` tells you whether the application completes on StepStone, and the deduplicated job URL is a natural primary key.

#### Recruitment market research

`postedDate`, `industry`, `contractType` and `homeOffice` across tens of thousands of ads give you hiring velocity by sector, the real share of remote-friendly roles in the German market, and the drift from permanent contracts toward `Befristeter Vertrag` over time.

### 🔌 Automating StepStone Scraper

- **Make** and **Zapier**: trigger on every new dataset item and route new postings into a CRM, an ATS or a Google Sheet.
- **Slack**: post a daily digest of new roles matching a saved search into a recruiting channel.
- **Airbyte**: sync the dataset into Snowflake, BigQuery or Postgres for joins against your own company list.
- **GitHub Actions**: call the Actor on a cron and commit the JSON to a repo for a versioned, diffable hiring history.
- **Google Drive**: drop a fresh CSV into a shared folder every morning for the team to work from.
- **Apify Schedules**: run the same search nightly with `postedWithin` set to the last 24 hours for a pure new-postings feed.

### 🌟 Beyond business use cases

- **Research.** Labour economists can study regional wage-adjacent signals, remote-work adoption and sector demand across the largest German-speaking job market, with real timestamps rather than scraped relative strings.
- **Personal.** A job seeker can export every matching role in their state into a spreadsheet, sort by benefits that actually matter to them, and stop re-reading the same site every evening.
- **Non-profit.** Career-guidance and refugee-integration organisations can build local, filtered job lists for the people they support, including English-language roles via the ad-language filter.
- **Experimentation.** The plain-text descriptions are clean enough to feed straight into an LLM for skill extraction, seniority classification or automated matching without a cleanup pass.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or your assistant of choice:

> I am using the ParseForge StepStone Scraper on Apify (`parseforge/stepstone-scraper`). It returns one row per StepStone.de job posting with 34 fields, including `benefits` (an array of employer benefit chips), `latitude`, `longitude`, `postalCode`, `datePosted` as an exact ISO timestamp, `contractType`, `workType`, `homeOffice`, `industry` and the full ad as both `descriptionText` and `descriptionHtml`. Salary is not included because StepStone hides it from logged-out visitors. Help me design a weekly hiring-intelligence report from this dataset.

### ❓ Frequently Asked Questions

#### 🔐 Does this need a StepStone login?

No. It reads only what StepStone serves to the public, and no account or cookie is involved.

#### 💰 Why is there no salary field?

StepStone shows logged-out visitors a "Gehalt anzeigen" button instead of a number, and its own page config disables salary display. There is no salary on the public page to read, so shipping a `salary` column would mean shipping an always-empty one.

#### 🌍 Does it work outside Germany?

This Actor targets stepstone.de, the German site. StepStone's other national sites use different domains and are not covered here.

#### 🛡️ Why does it need a proxy?

StepStone sits behind Akamai and answers non-German IPs with `Access Denied` on every path. German residential routing is on by default and is the only configuration verified to reach the site. Turning it off will almost certainly return nothing.

#### 📄 How many results can I get from one search?

As many as the search has. Pagination was verified to the last page of a 25,665-result query, page 1,027 of 1,027, with no wrap-around and no repeated rows.

#### 📏 How many jobs come back per request?

25, which is StepStone's fixed page size. Requests for a larger page are ignored by the site, so the Actor does not pretend to offer that knob.

#### ⚡ How do I make a run faster?

Turn off "Scrape Full Job Details". Listing-only mode collects 25 jobs per request and skips the per-ad page, at the cost of benefits, coordinates and the full description.

#### 🎯 Can I scrape one specific job ad?

Yes. Paste the job URL into the URL field. Search pages and single ads can be mixed freely in the same run.

#### 🔁 Are duplicates removed?

Yes. Rows are deduplicated on the canonical job URL across every search page and direct URL in the run, so a posting that appears in two searches is billed and delivered once.

#### 🇩🇪 Why are some values in German?

Because StepStone publishes them in German. `contractType`, `workType`, `industry` and `benefits` keep the source's exact wording so they match the site and stay joinable; the schema's dropdown labels carry English glosses alongside them.

#### 🕐 What does `validThrough` mean?

The date StepStone expects the posting to expire. It is useful for ageing out listings in a downstream board.

#### ⏰ Can I get only today's jobs?

Yes. Set "Posted Within" to the last 24 hours, or sort by date and cap Max Items.

### 🔌 Integrate with any app

Results are available through the Apify API and the dataset endpoint in JSON, CSV, Excel and XML, so anything that speaks HTTP can consume them. Schedules, webhooks and the Apify integrations catalogue cover the rest.

### 🔗 Recommended Actors

- [Workday Jobs Scraper](https://apify.com/parseforge/workday-jobs-scraper) for employers hosting careers on Workday.
- [Greenhouse Jobs Scraper](https://apify.com/parseforge/greenhouse-jobs-scraper) for employers on Greenhouse.
- [Lever Jobs Scraper](https://apify.com/parseforge/lever-jobs-scraper) for employers on Lever.
- [LinkedIn Jobs Scraper](https://apify.com/parseforge/linkedin-jobs-scraper) for cross-checking the same roles on LinkedIn.
- [EU EURES Jobs Scraper](https://apify.com/parseforge/eu-eures-jobs-scraper) for the European public employment network.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this is an independent tool and is not affiliated with, endorsed by, or connected to StepStone GmbH, The Stepstone Group, or any employer whose posting it collects. It gathers only publicly available data.

# Actor input Schema

## `startUrls` (type: `array`):

Paste StepStone search result pages or single job ad pages, for example https://www.stepstone.de/jobs/software-engineer or https://www.stepstone.de/stellenangebote--...--14445878-inline.html. Leave empty to build the search from the fields below.

## `searchKeyword` (type: `string`):

Job title, skill or company to search for, exactly as you would type it into the StepStone search box. Ignored when StepStone URLs are supplied above.

## `location` (type: `string`):

City, region or postal code, for example Berlin, Nordrhein-Westfalen or 10115. Leave empty to search all of Germany.

## `searchRadius` (type: `string`):

StepStone collapses every radius below 100 km into one default catchment area, so only these two settings actually change the result count.

## `sortBy` (type: `string`):

Relevance is StepStone's own ranking. Date returns the newest postings first, which is what you want for a daily job feed.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `scrapeJobDetails` (type: `boolean`):

Open every job ad to add the full description, employer benefits, contract type, work type, industry, postal code and geo coordinates. Turn this off for a fast, listing-only run that uses one request per 25 jobs.

## `postedWithin` (type: `string`):

Only return postings published inside this window.

## `workFromHome` (type: `string`):

Filter by how much of the role can be done from home.

## `workType` (type: `string`):

Full time or part time.

## `contractType` (type: `string`):

StepStone's contract categories, in the site's own German wording.

## `experienceLevel` (type: `string`):

Filter by the experience StepStone assigns to the posting.

## `discipline` (type: `string`):

StepStone's job family, for example IT or Ingenieurwesen.

## `sector` (type: `string`):

The employer's industry, using StepStone's own sector list.

## `jobLanguage` (type: `string`):

The language the job ad itself is written in, as detected by StepStone. Useful for finding English-language roles in Germany.

## `applicationMethod` (type: `string`):

Whether the application is completed on StepStone or on the employer's own website.

## `proxyConfiguration` (type: `object`):

StepStone is behind Akamai and only answers German residential IPs, so residential proxies with country DE are on by default. Changing this will usually stop the run from returning data.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.stepstone.de/jobs/software-engineer"
    }
  ],
  "searchKeyword": "software engineer",
  "location": "Berlin",
  "searchRadius": "",
  "sortBy": "1",
  "maxItems": 10,
  "scrapeJobDetails": true,
  "postedWithin": "",
  "workFromHome": "",
  "workType": "",
  "contractType": "",
  "experienceLevel": "",
  "discipline": "",
  "sector": "",
  "jobLanguage": "",
  "applicationMethod": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields

## `fullData` (type: `string`):

Complete dataset with all 34 fields

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.stepstone.de/jobs/software-engineer"
        }
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/stepstone-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.stepstone.de/jobs/software-engineer" }],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/stepstone-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.stepstone.de/jobs/software-engineer"
    }
  ],
  "maxItems": 10
}' |
apify call parseforge/stepstone-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/stepstone-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MaMugc1M2z1hvDJfE/builds/NuozdGXnzN5BKn8mu/openapi.json
