# StepStone Jobs Scraper: Germany, Austria and Belgium (`redfoxscout/stepstone-jobs-scraper`) Actor

Scrape StepStone job listings in Germany, Austria and Belgium by keyword, city, radius and post date. Returns title, company, location, salary where StepStone shows its own estimate, remote flag, URL and optional full description. $0.90 per 1,000 jobs.

- **URL**: https://apify.com/redfoxscout/stepstone-jobs-scraper.md
- **Developed by:** [Red Fox Scout](https://apify.com/redfoxscout) (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.68 / 1,000 jobs

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?

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

Scrape **StepStone job listings** in **Germany, Austria and Belgium** by **keyword, city, radius and post date**. For each job you get the **title, company, location, salary where StepStone shows one, remote flag, URL**, and an optional **full description**. **No login, no cookies and no API key.**

**Price: $0.90 per 1,000 jobs.** Duplicate jobs and failed searches are free. Apify's free plan ($5 monthly credit) covers about 5,500 jobs a month, before run compute.

![StepStone Jobs Scraper output: title, company, location, posted date and salary estimate for software engineer jobs in Berlin](https://raw.githubusercontent.com/TikTop-Data/apify-store-assets/main/images/stepstone-jobs-scraper-output.png)

### Questions it answers

- What new jobs were posted in my city in the last 24 hours?
- Which remote developer roles in Germany come with the full job description?
- Which employers in Hamburg are hiring nursing staff right now?
- What salary estimates does StepStone show for a role in a given city?

### Who uses this

- 🧑‍💼 **Recruiters and staffing agencies:** new listings for the roles they fill, every morning.
- 📊 **Labour-market researchers:** how a role's listings spread across cities, and how fast they change.
- 🎯 **Job seekers:** one sheet of matching jobs with links, instead of paging through results.
- 🏢 **HR teams:** see how other employers word their job ads and what StepStone estimates for similar roles.

### Why this StepStone Jobs Scraper

- 🔓 **No login, no cookies.** It reads the listings StepStone shows to any visitor.
- 📍 **City and radius.** Search Berlin with a radius of 5 to 100 km, not just the whole country.
- 🆕 **Newest first, or only the last 24 hours or 7 days.**
- 🏠 **Remote and easy-apply flags.** Filter to jobs StepStone flags as home office, and see which jobs offer quick apply.
- 🔤 **Umlauts work.** Search Bürokaufmann or München as you would write them.
- 📄 **Full descriptions on request,** as plain text with email addresses and phone numbers replaced.
- 💵 **$0.90 per 1,000 jobs,** one flat price with every filter.

### How to use the StepStone Jobs Scraper

1. Click **Try for free** (a free Apify account is enough).
2. Enter keywords, one per line (`Pflegefachkraft`), or paste a StepStone search link.
3. Optional: pick the StepStone site, a city with a radius, a posting window, a remote filter, or newest first.
4. Click **Start**, then download the jobs as JSON, CSV or Excel, or schedule the run for a daily feed.

### Input

| Field | Default | What it does |
|---|---|---|
| `searches` | – | Keywords or StepStone search links, one per line. Required. |
| `country` | `DE` | StepStone site: `DE` (stepstone.de), `AT` (stepstone.at) or `BE` (stepstone.be). A pasted link keeps its own site. |
| `location` | – | City, for example `Berlin` or `München`. Empty = the whole country. |
| `radius` | – | Kilometres around the city, from 5 to 100. Used only with a location. |
| `postedWithin` | any | `1` = last 24 hours, `7` = last 7 days. |
| `remote` | any | `full` = fully remote, `partial` = partly remote, as StepStone flags them. Remote work that only the job text mentions is not matched. |
| `sortByDate` | off | Newest first instead of StepStone's default order. |
| `includeDescription` | off | Adds the full job text. One more page request per job, so runs take longer. |
| `maxItems` | 100 | Jobs per search (max 5,000). |

Example (the input behind the output below):

```json
{ "searches": ["software engineer"], "location": "Berlin", "maxItems": 25 }
```

### Output

One row per job. A real row from that run (the other 24 rows have the same fields):

```json
{
  "jobId": "14538729",
  "url": "https://www.stepstone.de/stellenangebote--Software-Engineer-m-w-d-Operations-Research-Muenster-Berlin-Koeln-flaschenpost-SE--14538729-inline.html",
  "title": "Software Engineer (m/w/d) – Operations Research",
  "company": "flaschenpost SE",
  "companyUrl": "https://www.stepstone.de/cmp/de/flaschenpost-se-135518/jobs",
  "logoUrl": "https://www.stepstone.de/upload_DE/logo/5/logoflaschenpost-SE-135518DE-2203221217.gif",
  "location": "Münster, Berlin, Köln",
  "postedAt": "2026-09-24T13:23:52.62Z",
  "remote": "partial",
  "salaryMin": 52000,
  "salaryMax": 70000,
  "salaryCurrency": "EUR",
  "salaryPeriod": "year",
  "salaryIsEstimate": true,
  "easyApply": false,
  "noCoverLetter": true,
  "snippet": "Um unsere Mission zu erfüllen, suchen wir zum nächstmöglichen Zeitpunkt einen Software Engineer (m/w/d) an einem unserer Standorte in Münster, Köln oder Berlin.",
  "description": null,
  "validThrough": null,
  "country": "DE",
  "searchQuery": "software engineer"
}
```

`remote` is `none`, `partial` or `full`, from StepStone's own home-office flag. `salaryIsEstimate` is `true` when the salary is StepStone's estimate. `easyApply` is `true` when StepStone shows the quick-apply label.

With `includeDescription` on, `description` holds the full ad as plain text and `validThrough` gives the date the ad ends. The same job from a run with `{ "searches": ["software engineer"], "location": "Berlin", "includeDescription": true, "maxItems": 2 }`, shortened:

```json
{ "jobId": "14538729", "description": "Spannend, aufstrebend und verdammt schnell – wir sind flaschenpost!\n\nWir liefern den Wocheneinkauf innerhalb von 120 Minuten zu unseren Kund:innen. ...", "validThrough": "2026-10-24T13:23:52.62Z" }
```

### Example tasks

Ready-made inputs you can open, change and run:

- [Find nursing jobs in Hamburg](https://apify.com/redfoxscout/stepstone-jobs-scraper/examples/stepstone-nursing-jobs-hamburg)

### Daily job feed

Schedule the Actor (Apify Console → Schedules) with `postedWithin` set to `1` and `sortByDate` on. Each run returns the jobs posted in the last 24 hours, so a job can appear in more than one day's run. Compare `jobId` to skip repeats, then send the rows to Google Sheets, Slack or a webhook with Apify integrations.

### How much does it cost?

$0.90 per 1,000 jobs.

- 100 jobs: about $0.09
- 10,000 jobs: about $9
- Duplicate jobs (found by two searches) and failed searches: free

Apify's free plan gives $5 of credit every month, enough for about 5,500 jobs before run compute.

### FAQ

**Is this legal?** It reads job listings that StepStone shows to any visitor without logging in. It does not log in, use cookies or solve CAPTCHAs, and it does not read salary figures behind StepStone's login. It replaces email addresses and phone numbers in the text it returns. Websites can still set rules for automated access, so check StepStone's terms and your local rules before you use the data commercially.

**Why do most jobs have no salary?** Many listings show no salary to a logged-out visitor, and employers often leave it out. StepStone adds its own estimate to some listings, and how many depends on the job and the search. Those rows carry the numbers with `salaryIsEstimate` set to `true`. Employer salaries that appear only after a StepStone login are not included.

**Does it include the full job description?** Yes, with `includeDescription` turned on. The Actor opens each job page and adds the full ad as plain text. That is one more page request per job, so runs take longer. The price per job stays the same.

### Related Actors

- [Jobs Index](https://apify.com/redfoxscout/jobs-index): search 260,000+ open jobs from 8,000+ company career sites at once.
- [ATS Jobs Scraper](https://apify.com/redfoxscout/ats-jobs-scraper): every open job on a company's Greenhouse, Lever, Ashby and other career sites.
- [LinkedIn Jobs Scraper](https://apify.com/redfoxscout/linkedin-jobs-scraper): the same keyword and location search for LinkedIn job listings.

# Actor input Schema

## `searches` (type: `array`):

StepStone keywords or full StepStone search URLs, one per line, e.g. Pflegefachkraft or https://www.stepstone.de/jobs/software-engineer/in-berlin.

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

Which StepStone site to search; pasted StepStone URLs use the site in their own address.

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

City to search in, e.g. Berlin, München or Frankfurt am Main; leave empty to search the whole country.

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

Search radius around the city in km, e.g. 25. Only used when a location is set.

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

Only jobs posted in this period, e.g. Last 24 hours for the newest listings.

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

Only jobs StepStone flags as home office (fully or partly); remote work mentioned only in the job text is not matched.

## `sortByDate` (type: `boolean`):

Show the newest postings first instead of StepStone's default order, e.g. when you only want the latest listings.

## `includeDescription` (type: `boolean`):

Open each job page and add the full ad text as plain text; this is one extra request per job, so runs take longer.

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

Stop each search after this many results.

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

How many searches run at once.

## Actor input object example

```json
{
  "searches": [
    "software engineer"
  ],
  "country": "DE",
  "location": "Berlin",
  "postedWithin": "",
  "remote": "",
  "sortByDate": false,
  "includeDescription": false,
  "maxItems": 100,
  "maxConcurrency": 3
}
```

# Actor output Schema

## `results` (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 = {
    "searches": [
        "software engineer"
    ],
    "location": "Berlin"
};

// Run the Actor and wait for it to finish
const run = await client.actor("redfoxscout/stepstone-jobs-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 = {
    "searches": ["software engineer"],
    "location": "Berlin",
}

# Run the Actor and wait for it to finish
run = client.actor("redfoxscout/stepstone-jobs-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 '{
  "searches": [
    "software engineer"
  ],
  "location": "Berlin"
}' |
apify call redfoxscout/stepstone-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,redfoxscout/stepstone-jobs-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/y6wgoGs4NX7Ti1LKF/builds/x7h1bnCk9cjkotn93/openapi.json
