# 🏆 Best Cheapest StepStone Job Scraper 🏆 (`claygenius/best-cheapest-stepstone-job-scrapper`) Actor

Scrape job listings from StepStone.de by keyword, location, or search URL. Structured JSON output with title, company, location, salary, and apply link. Requires a German proxy.

- **URL**: https://apify.com/claygenius/best-cheapest-stepstone-job-scrapper.md
- **Developed by:** [Muhammad Shamshad Aslam](https://apify.com/claygenius) (community)
- **Categories:** Automation, Jobs, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## StepStone.de Jobs Scraper – Keyword, Location & Search URL

Extract job listings from **StepStone.de**, one of Germany's largest job boards. Search by keyword and location, or paste any StepStone search URL. Clean, structured JSON output — ideal for recruitment analysis, market research, and job market monitoring.

### Features

- ✅ **Two search modes** — keyword + location, or paste a StepStone search URL
- ✅ **Structured output** — title, company, location, salary, contract type, posting date, apply link
- ✅ **Automatic pagination** — scrapes up to your `maxItems` limit
- ✅ **Smart early-stop** — halts after N consecutive pages with no new jobs (no infinite runs)
- ✅ **Bot-protection handling** — real-browser rendering with fingerprints; retries on blocks

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `keyword` | string | `software developer` | Job title or keyword (ignored if Search URLs given) |
| `location` | string | — | City or region, e.g. `berlin`, `münchen` |
| `searchUrls` | array | — | StepStone search URLs; overrides keyword/location |
| `maxItems` | integer | `50` | Max job listings to scrape |
| `maxStalePages` | integer | `2` | Stop after N consecutive pages with no new jobs |
| `fetchDetails` | boolean | `false` | Visit each job page for full description, benefits, salary breakdown & company info |
| `proxyConfig` | object | Residential DE | Proxy settings (Germany recommended) |

### Two modes

**Fast mode (`fetchDetails: false`, default)** — scrapes the search result cards only: title, company, location, salary estimate, work-from-home, posting date, badges, and the job URL. One page load per ~25 jobs.

**Detail mode (`fetchDetails: true`)** — additionally visits every job page and collects the full description, employment/contract type, structured salary (min/max/currency), benefits list, company industry & address, and validity date. One extra page load per job — slower and more expensive, but far richer.

### Example input

```json
{
  "keyword": "software developer",
  "location": "berlin",
  "maxItems": 100,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
````

### Example output

```json
{
  "id": "12345678",
  "title": "Software Developer (m/w/d)",
  "company": "Example GmbH",
  "location": "Berlin",
  "salary": "55.000 € – 70.000 €",
  "contractType": "Feste Anstellung",
  "workType": "Home Office möglich",
  "posted": "vor 2 Tagen",
  "url": "https://www.stepstone.de/stellenangebote--Software-Developer--12345678",
  "companyLogo": "https://...",
  "keyword": "software developer"
}
```

### Notes

- StepStone.de is bot-protected and Germany-based — **Residential proxies with country DE** are strongly recommended for reliable results.
- Data is saved to the default Apify dataset; export as JSON, CSV, or Excel.

# Actor input Schema

## `searchUrls` (type: `array`):

Paste one or more StepStone.de search result URLs (all site filters are preserved). When a URL is given, keyword/location are ignored — you don't need a search keyword.

## `keyword` (type: `string`):

Job title or keyword (e.g. 'software developer', 'projektmanager').

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

City or region (e.g. berlin, münchen, hamburg). Optional.

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

Maximum number of job listings to scrape. Leave empty (or 0) to scrape ALL results.

## `maxStalePages` (type: `integer`):

Stop when this many consecutive pages return no new jobs. Prevents wasted runtime.

## `fetchDetails` (type: `boolean`):

When ON, the actor visits each individual job page to collect the full description, employment type, benefits, salary breakdown, and company info. Slower and more expensive, but much richer data.

## `proxyConfig` (type: `object`):

Residential proxies with country=DE strongly recommended (StepStone is Germany-based and bot-protected).

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.stepstone.de/jobs/software-engineer?searchOrigin=jobad&rsearch=1"
  ],
  "keyword": "software engineer",
  "maxItems": 0,
  "maxStalePages": 2,
  "fetchDetails": false,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `jobListings` (type: `string`):

Scraped job listings with title, company, location, salary, and apply link

# 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 = {
    "searchUrls": [
        "https://www.stepstone.de/jobs/software-engineer?searchOrigin=jobad&rsearch=1"
    ],
    "proxyConfig": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("claygenius/best-cheapest-stepstone-job-scrapper").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 = {
    "searchUrls": ["https://www.stepstone.de/jobs/software-engineer?searchOrigin=jobad&rsearch=1"],
    "proxyConfig": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("claygenius/best-cheapest-stepstone-job-scrapper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.stepstone.de/jobs/software-engineer?searchOrigin=jobad&rsearch=1"
  ],
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call claygenius/best-cheapest-stepstone-job-scrapper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=claygenius/best-cheapest-stepstone-job-scrapper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🏆 Best Cheapest StepStone Job Scraper 🏆",
        "description": "Scrape job listings from StepStone.de by keyword, location, or search URL. Structured JSON output with title, company, location, salary, and apply link. Requires a German proxy.",
        "version": "1.0",
        "x-build-id": "FGGWsLMRfQt2lvqu8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/claygenius~best-cheapest-stepstone-job-scrapper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-claygenius-best-cheapest-stepstone-job-scrapper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/claygenius~best-cheapest-stepstone-job-scrapper/runs": {
            "post": {
                "operationId": "runs-sync-claygenius-best-cheapest-stepstone-job-scrapper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/claygenius~best-cheapest-stepstone-job-scrapper/run-sync": {
            "post": {
                "operationId": "run-sync-claygenius-best-cheapest-stepstone-job-scrapper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Paste one or more StepStone.de search result URLs (all site filters are preserved). When a URL is given, keyword/location are ignored — you don't need a search keyword.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keyword": {
                        "title": "Search Keyword",
                        "type": "string",
                        "description": "Job title or keyword (e.g. 'software developer', 'projektmanager').",
                        "default": "software engineer"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City or region (e.g. berlin, münchen, hamburg). Optional."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of job listings to scrape. Leave empty (or 0) to scrape ALL results.",
                        "default": 0
                    },
                    "maxStalePages": {
                        "title": "Stop After N Stale Pages",
                        "type": "integer",
                        "description": "Stop when this many consecutive pages return no new jobs. Prevents wasted runtime.",
                        "default": 2
                    },
                    "fetchDetails": {
                        "title": "Fetch Full Job Details",
                        "type": "boolean",
                        "description": "When ON, the actor visits each individual job page to collect the full description, employment type, benefits, salary breakdown, and company info. Slower and more expensive, but much richer data.",
                        "default": false
                    },
                    "proxyConfig": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Residential proxies with country=DE strongly recommended (StepStone is Germany-based and bot-protected)."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
