# StepStone Scraper – Jobs, Salaries & Company Data (DE/AT) (`ninhothedev/stepstone-scraper`) Actor

Scrape StepStone jobs from stepstone.de, .at, .be & .nl: title, company, salary, remote, full description, requirements, company profile & contacts. Keyword or URL, all filters.

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

## Pricing

from $0.80 / 1,000 job results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## StepStone Scraper – Jobs, Salaries & Company Data (DE/AT)

Scrape **StepStone job listings** from **stepstone.de**, **stepstone.at**, **stepstone.be** and **stepstone.nl** in seconds. Search by **keyword + location + radius** or paste any StepStone search URL, apply all the filters you know from the website (date posted, full/part-time, contract type, home office, experience, minimum salary, language) and get clean, flat JSON/CSV/Excel with **title, company, location, remote flag, salary range (incl. StepStone's salary estimate), posting date, full job description, requirements, benefits, company profile and public contact emails & phone numbers**. Pure HTTP – no browser, no login, no API key. Pay only per job – from $0.80 per 1,000.

### What data can you extract?

| Field | Example |
|---|---|
| `job_id`, `url` | `1005465`, `https://www.stepstone.at/stellenangebote--…-1005465-inline.html` |
| `title` | SAP Consultant (w/m/d) |
| `company`, `company_url`, `logo` | ISG Personalmanagement GmbH, company page, logo URL |
| `location`, `city`, `postal_code`, `country` | Wien, Wien, 1040, AT |
| `remote`, `is_remote` | `partial_remote` / `fully_remote`, true |
| `employment_type`, `contract_type`, `work_type` | full_time, Feste Anstellung, "Homeoffice möglich, Vollzeit" |
| `salary_min`, `salary_max`, `salary_currency`, `salary_period`, `salary_is_estimate` | 52000, 70000, EUR, year, true |
| `posted_at`, `expires_at` | 2026-10-09T14:03:12Z |
| `description_text`, `description_html` | full job ad text (detail mode) |
| `responsibilities`, `requirements`, `benefits_text`, `benefits` | split sections of the ad |
| `company_size`, `company_founded`, `company_industries`, `company_address`, `company_description`, `company_benefits`, `company_website` | 10000+, 2016, \["Transport & Logistik"], … |
| `contact_emails`, `contact_phones` | public recruiter / HR contacts from the ad |
| `apply_url`, `application_method`, `no_cover_letter` | quick apply vs. standard, "no cover letter required" |
| `search_keyword`, `search_location`, `scraped_at` | for monitoring & joins |

### How to use

1. Enter one or more **keywords** (e.g. `Software Engineer`, `Pflegefachkraft`) and **locations** (e.g. `Berlin`, `München`, `Wien`) – every keyword is combined with every location. Or paste **StepStone search URLs** / single **job URLs**.
2. Choose filters (date posted, working hours, contract type, home office, experience, minimum salary, language), sorting (newest first by default) and **Max jobs**.
3. Click **Start** and export the results as JSON, CSV, Excel or via API.

```json
{
  "keywords": ["Software Engineer", "Data Engineer"],
  "locations": ["Berlin", "Hamburg"],
  "radius": 30,
  "country": "de",
  "datePosted": "7d",
  "remote": "partial",
  "employmentType": ["full_time"],
  "maxItems": 200,
  "includeDetails": true
}
```

Turn off **Scrape full job details** for a very fast list-only scrape (25 jobs per request: title, company, location, remote, salary estimate, date, snippet, benefits).

### Output example

```json
{
  "job_id": "1005465",
  "url": "https://www.stepstone.at/stellenangebote--SAP-Consultant-w-m-d-Wien-ISG-Personalmanagement-GmbH--1005465-inline.html",
  "title": "SAP Consultant (w/m/d)",
  "company": "ISG Personalmanagement GmbH",
  "company_url": "https://www.stepstone.at/cmp/de/ISG-Personalmanagement-GmbH-19858/jobs.html",
  "location": "Wien",
  "city": "Wien",
  "postal_code": "1040",
  "country": "AT",
  "remote": "partial_remote",
  "is_remote": true,
  "employment_type": "full_time",
  "contract_type": "Feste Anstellung",
  "salary_min": null,
  "salary_max": null,
  "salary_currency": null,
  "salary_period": null,
  "salary_is_estimate": null,
  "salary_text": null,
  "posted_at": "2026-10-14T11:02:01.987Z",
  "expires_at": "2026-11-28T11:40:25.4Z",
  "snippet": "SAP Consultant (w/m/d)\nVollzeit/Wien\nZELMION GmbH ist ein\ninnovatives SAP-Beratungsunternehmen in Wien, spezialisiert auf\nProzessberatung, Dokumentenmanageme…",
  "logo": "https://www.stepstone.at/upload_at/logo/A/logoISG-Personalmanagement-GmbH-19858AT-1912041530.gif",
  "apply_url": "https://www.stepstone.at/stellenangebote--SAP-Consultant-w-m-d-Wien-ISG-Personalmanagement-GmbH--1005465-inline.html",
  "application_method": "external_or_standard",
  "no_cover_letter": false,
  "is_top_job": false,
  "is_sponsored": false,
  "skills": [],
  "benefits": [
    "Flexibles Homeoffice und Büro am Naschmarkt in Wien",
    "Gleitzeit ohne Kernzeit und keine All-in Regelung",
    "Überdurchschnittliche Bezahlung über dem IT-Kollektivvertrag (mindestens 65.000 EUR, Vollzeit, Anpassung je nach Qualifikation)"
  ],
  "description_text": "SAP Consultant (w/m/d)\n\nVollzeit/Wien\n\nZELMION GmbH ist ein\ninnovatives SAP-Beratungsunternehmen in Wien, spezialisiert auf\nProzessberatung, Dokumentenmanage…",
  "intro": null,
  "responsibilities": null,
  "requirements": null,
  "benefits_text": "SAP Consultant (w/m/d)\n\nVollzeit/Wien\n\nZELMION GmbH ist ein\ninnovatives SAP-Beratungsunternehmen in Wien, spezialisiert auf\nProzessberatung, Dokumentenmanage…",
  "additional_info": null,
  "work_type": "Home Office, Vollzeit",
  "industry": "IT, IT-SAP",
  "valid_through": "2026-11-28T11:40:25.4Z",
  "street_address": null,
  "region": null,
  "badges": [
    "Sei einer der ersten Bewerber"
  ],
  "company_id": "19858",
  "company_size": "1-10",
  "company_founded": null,
  "company_address": "Universitätsring, Wien",
  "company_industries": [
    "Personaldienstleistungen"
  ],
  "company_jobs_count": 168,
  "company_description": "Wir freuen uns, Sie in der Welt von ISG begrüßen zu dürfen. Als Komplettanbieter in sämtlichen HR-Bereichen ist es unser Anliegen, Menschen und Unternehmen z…",
  "company_benefits": [
    "Sportaktivitäten",
    "Flexible Arbeitszeiten",
    "Mitarbeiter-Laptop"
  ],
  "company_rating": null,
  "company_website": null,
  "contact_emails": [
    "bewerbung@isg.com"
  ],
  "contact_phones": [
    "+43 1 512 35 05"
  ],
  "is_online": true,
  "details_scraped": true,
  "search_keyword": "SAP Berater",
  "search_location": "Wien",
  "search_url": "https://www.stepstone.at/jobs/sap-berater/in-wien?radius=50&wt=80001&action=sort_publish&orderByField=date",
  "harmonised_id": "d7d155ad-eb52-4975-99ab-0e0119624426",
  "scraped_at": "2026-10-15T20:09:35+00:00"
}

```

### Pricing

Pay per result (pay-per-event):

| What | Price |
|---|---|
| Job from the result list (title, company, location, salary, remote, date, benefits, snippet) | **$0.80 / 1,000 jobs** |
| Full job details add-on (description, requirements, tasks, company profile, contacts) – only when *Scrape full job details* is on | **+$0.80 / 1,000 jobs** |

Example: 1,000 jobs list-only ≈ **$0.80**; 1,000 jobs with full details ≈ **$1.60**. Proxies and compute are included – no hidden costs. Apify's free plan lets you try it at no cost.

### Use cases

- **Recruiting & sourcing agencies** – find companies that are actively hiring, with HR contact emails and phone numbers (lead generation).
- **Job market & salary research** – salary ranges and estimates by role, city and company size.
- **HR tech & job boards** – feed fresh StepStone jobs into your own platform or alerting system (schedule with *Newest first* + *Last 24 hours*).
- **Sales intelligence** – hiring signals (e.g. companies hiring SAP or cloud engineers) for B2B outreach.
- **Competitive intelligence** – monitor which roles competitors advertise and what benefits they offer.
- **AI/LLM pipelines** – clean description text for classification, matching and enrichment.

### Integrations

Use the results anywhere: **REST API**, **Make**, **Zapier**, **n8n**, **Google Sheets**, **Slack**, webhooks, or schedule runs in Apify.

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("ninhothedev/stepstone-scraper").call(run_input={"keywords": ["Software Engineer"], "locations": ["Berlin"], "maxItems": 100})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["company"], job["salary_min"])
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('ninhothedev/stepstone-scraper').call({ keywords: ['Software Engineer'], locations: ['Berlin'], maxItems: 100 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

### FAQ

**Is scraping StepStone legal?** The actor only collects publicly available job ads (no login, no personal profiles). You are responsible for complying with GDPR and StepStone's terms when you store or contact people from the results.

**How many jobs can I get?** StepStone shows up to ~400 pages per search. Split big searches by city or keyword for full coverage; duplicates across searches are removed automatically.

**Do I need a proxy?** No. StepStone blocks cloud IPs, so the actor automatically routes its lightweight HTTP requests through German residential IPs – included in the price.

**Why is the salary marked as estimate?** Many ads don't publish a salary; StepStone shows its own estimate. `salary_is_estimate` tells you which one you got.

**Why are some descriptions empty?** A few employers restrict their ads to applicants from certain regions; for those you still get all list fields and `details_scraped` is `false`.

**Can I schedule it?** Yes – use Apify Schedules with *Newest first* and *Last 24 hours* for daily job alerts.

**Problems or feature requests?** Open an issue on the actor's Issues tab – we usually answer within 24 h.

### Related actors

- [Arbeitnow Jobs Scraper](https://apify.com/ninhothedev/arbeitnow-jobs-scraper)
- [DACH ATS Jobs Scraper](https://apify.com/ninhothedev/dach-ats-jobs-scraper)
- [XING HR Scraper](https://apify.com/ninhothedev/xing-hr-scraper)
- [Website Contact Extractor](https://apify.com/ninhothedev/website-contact-extractor)

# Actor input Schema

## `keywords` (type: `array`):

What to search for, e.g. "Software Engineer", "Pflegefachkraft", "SAP Berater". Each keyword is combined with each location. Leave empty to scrape all jobs in a location or to use Search URLs only.

## `locations` (type: `array`):

City, region or postal code, e.g. "Berlin", "München", "Wien", "Bayern". Leave empty to search the whole country.

## `radius` (type: `integer`):

Search radius around the location in kilometres (StepStone uses 5, 10, 20, 30, 50, 100). Ignored when no location is set.

## `country` (type: `string`):

Which StepStone country site to search (keyword mode). Search URLs always use their own domain.

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

Optional: paste StepStone search result URLs (with any filters applied on the website) and/or single job ad URLs from stepstone.de, .at, .be or .nl.

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

Maximum number of jobs to save in total (exact cap). 0 = no limit.

## `includeDetails` (type: `boolean`):

Open every job ad to add the full description, requirements, tasks, benefits, employment & contract type, company profile (size, founded, industry, website) and public contact emails/phones. Disable for faster list-only scraping.

## `datePosted` (type: `string`):

Only jobs published within this time window.

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

Newest first is ideal for monitoring/scheduled runs.

## `employmentType` (type: `array`):

Full-time and/or part-time.

## `contractType` (type: `array`):

Permanent, temporary, working student, apprenticeship, freelance, trainee, internship or temporary agency work.

## `remote` (type: `string`):

Filter by home-office option.

## `experience` (type: `array`):

Filter by required professional experience.

## `minSalary` (type: `integer`):

Only jobs with (published or StepStone-estimated) yearly salary of at least this amount, e.g. 50000. Rounded down to 10,000 steps.

## `language` (type: `string`):

Only ads written in this language.

## `maxPagesPerSearch` (type: `integer`):

Safety limit of result pages (25 jobs each) per keyword/location/URL. 0 = no limit.

## `maxConcurrency` (type: `integer`):

How many job ads are fetched in parallel.

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

Leave as is: on the Apify platform the actor automatically uses German residential IPs (StepStone blocks datacenter IPs). Set your own proxy only if you have a reason.

## Actor input object example

```json
{
  "keywords": [
    "Software Engineer"
  ],
  "locations": [
    "Berlin"
  ],
  "radius": 30,
  "country": "de",
  "maxItems": 20,
  "includeDetails": true,
  "datePosted": "any",
  "sortBy": "newest",
  "remote": "any",
  "language": "",
  "maxPagesPerSearch": 0,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `details` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "keywords": [
        "Software Engineer"
    ],
    "locations": [
        "Berlin"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ninhothedev/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 = {
    "keywords": ["Software Engineer"],
    "locations": ["Berlin"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ninhothedev/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 '{
  "keywords": [
    "Software Engineer"
  ],
  "locations": [
    "Berlin"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call ninhothedev/stepstone-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ninhothedev/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/wrFqDDFwdhQP2mUCp/builds/8qW6WOZLwc7td255o/openapi.json
