# StepStone Jobs Scraper (`fetch_cat/stepstone-jobs-scraper`) Actor

Scrape StepStone jobs by keyword, location, or URL. Export titles, companies, locations, descriptions, salary signals, and hiring metadata.

- **URL**: https://apify.com/fetch\_cat/stepstone-jobs-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 3 total users, 1 monthly users, 97.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.95 / 1,000 item extracteds

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/platform/actors/running/actors-in-store#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

## StepStone Jobs Scraper

Scrape public StepStone job listings by keyword, location, or StepStone URL.

Use this actor to collect structured job data from StepStone for recruiting research, lead generation, hiring intelligence, and labor-market monitoring.

### What does StepStone Jobs Scraper do?

StepStone Jobs Scraper extracts public job listings from StepStone search and job pages.

It can return job titles, employers, locations, job URLs, descriptions, salary signals, employment type, requirements, skills, company logos, and source metadata.

The output is ready for spreadsheets, BI tools, dashboards, enrichment pipelines, and recruiting workflows.

### Who is it for?

- 🧑‍💼 Recruiters tracking hiring demand by role and city.
- 📈 Labor-market analysts monitoring employer activity.
- 🧲 Lead-generation teams finding companies that are hiring.
- 🏢 Sales teams prospecting HR, staffing, and employer accounts.
- 🧪 Researchers comparing job titles, locations, skills, and salaries.
- 🤖 Automation teams feeding job data into internal systems.

### Why use this actor?

- ✅ Search StepStone by job keyword and location.
- ✅ Process StepStone search URLs and job detail URLs.
- ✅ Keep every row traceable to the input query and source URL.
- ✅ Export clean structured data from the Apify dataset.
- ✅ Limit runs with `maxItems` for predictable costs.
- ✅ Use the default German residential proxy route for reliable collection when StepStone stalls direct cloud traffic.
- ✅ Optimized job-detail collection with automatic fallback keeps larger runs fast without dropping full descriptions.
- ✅ Inspect `RUN_SUMMARY` for discovered, saved, fallback, and failed-detail counts.
- ✅ Exit cleanly with partial rows and a `RUN_CHECKPOINT` before long workloads reach the platform timeout.

### Output fields

| Field | Description |
| --- | --- |
| `title` | Job title shown on StepStone. |
| `company` | Hiring company or organization. |
| `location` | Job location when available. |
| `jobUrl` | Canonical StepStone job URL. |
| `postedAt` | Posting date when available. |
| `validThrough` | Expiration date when available. |
| `employmentType` | Full-time, part-time, contract, or similar signal. |
| `salary` | Salary text or structured salary signal when available. |
| `description` | Job description text. |
| `requirements` | Requirements or profile text when detected. |
| `skills` | Common skill keywords detected in the posting. |
| `companyLogo` | Company logo URL when available. |
| `sourceQuery` | Keyword used for the search. |
| `sourceLocation` | Location used for the search. |
| `sourceUrl` | Search or detail URL where the listing was found. |
| `scrapedAt` | Timestamp of extraction. |

### Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

| Event | What is charged | Price |
| --- | --- | ---: |
| `start` | One-time fee charged when a run starts. Covers fixed startup cost (init, proxy warmup, first HTTP setup). | $0.005 |

| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `item` | Charged per item extracted. | $1.8155 / 1,000 | $1.5787 / 1,000 | $1.2314 / 1,000 | $0.94722 / 1,000 | $0.63148 / 1,000 | $0.44203 / 1,000 |

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

### Quick start

1. Open the actor on Apify.
2. Enter a job keyword such as `software engineer`.
3. Enter a location such as `Berlin`.
4. Set `maxItems` to the number of jobs you need.
5. Run the actor.
6. Export results from the dataset as JSON, CSV, Excel, or via API.

### Ready-to-run examples

- [Build a StepStone employer lead list](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-employer-lead-list)
- [Compare Python developer jobs across German cities](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-python-developer-city-sample)
- [Scrape StepStone job detail URLs](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-job-detail-url-extractor)
- [Extract healthcare jobs in Germany](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-healthcare-jobs-germany)
- [Find jobs posted in the last 24 hours](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-recent-jobs-24-hours)
- [Track DevOps engineer demand](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-devops-engineer-germany-jobs)
- [Find marketing manager jobs in Hamburg](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-hamburg-marketing-manager-jobs)
- [Monitor remote product manager jobs](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-remote-product-manager-jobs)
- [Find data analyst jobs in Munich](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-munich-data-analyst-jobs)
- [Scrape software engineer jobs in Berlin](https://apify.com/fetch_cat/stepstone-jobs-scraper/examples/stepstone-berlin-software-engineer-jobs)

### Input settings

| Input | Type | Description |
| --- | --- | --- |
| `query` | string | Job title, keyword, skill, or role. |
| `location` | string | City, region, or country. |
| `startUrls` | array | StepStone search or job detail URLs. |
| `maxItems` | integer | Maximum number of job listings to save. |
| `radius` | integer | Search radius in kilometers. |
| `postedWithin` | string | Optional posting age filter. |
| `maxPages` | integer | Maximum search pages to inspect. |
| `detailConcurrency` | integer | Concurrent job details (1–8; default 8). Lower it for a constrained custom proxy. |
| `runBudgetSeconds` | integer | Work-admission budget (120–840; default 540). Leaves time to save progress and exit before a 600-second run timeout. |
| `proxyConfiguration` | object | German residential Apify Proxy by default. Disable it only if you accept a higher direct-blocking risk. |

### Input recipes

#### Example input

```json
{
  "query": "software engineer",
  "location": "Berlin",
  "maxItems": 25,
  "radius": 30,
  "postedWithin": "any",
  "maxPages": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

### Using StepStone URLs

You can also provide StepStone URLs directly.

Use search URLs when you want the actor to discover listings from a StepStone results page.

Use detail URLs when you already have specific StepStone job pages to extract.

```json
{
  "startUrls": [
    { "url": "https://www.stepstone.de/jobs/software-engineer/in-berlin" }
  ],
  "maxItems": 10
}
```

### Output example

```json
{
  "title": "Senior Software Engineer",
  "company": "Example GmbH",
  "location": "Berlin",
  "jobUrl": "https://www.stepstone.de/stellenangebote/example-job.html",
  "postedAt": "2026-07-01",
  "validThrough": null,
  "employmentType": "FULL_TIME",
  "salary": null,
  "description": "Build and operate modern software products...",
  "requirements": "Experience with TypeScript, cloud services, and agile teams...",
  "skills": ["TypeScript", "AWS"],
  "companyLogo": "https://example.com/logo.png",
  "sourceQuery": "software engineer",
  "sourceLocation": "Berlin",
  "sourceUrl": "https://www.stepstone.de/jobs/software-engineer/in-berlin",
  "scrapedAt": "2026-07-04T08:00:00.000Z"
}
```

### Run diagnostics

Every started run writes a `RUN_SUMMARY` JSON record to the default key-value store. It reports the final status, runtime, pages opened, search-navigation retries, jobs discovered and saved, optimized-detail and fallback counts, search/detail failures, pending jobs, and whether a runtime or maximum charge limit stopped the run. These diagnostics are separate from the paid dataset rows.

The Actor also updates `RUN_CHECKPOINT` after search pages and detail batches. If a broad workload reaches `runBudgetSeconds`, already saved rows remain available, the run exits normally with a `partial` summary, and the checkpoint lists pending job URLs. Keep the Actor's platform timeout at least 60 seconds above `runBudgetSeconds`; saved tasks use the safe 540/600-second pairing by default.

A search page that loads successfully but contains no matching job links is a valid empty result and finishes successfully with `jobsSaved: 0`. The Actor still fails when search navigation fails or when discovered detail pages cannot produce any usable job rows.

### Tips for better results

- 🎯 Use specific job titles for focused recruiting lists.
- 🌍 Use broader locations for labor-market research.
- 🔢 Start with `maxItems: 10` while testing.
- 🧹 Deduplicate downstream by `jobUrl`.
- 📅 Schedule recurring runs to monitor new hiring activity.
- 🧪 Test several keyword variants for the same role.

### Common use cases

#### Recruiting intelligence

Track which employers are hiring for a specific role in Germany.

#### Sales prospecting

Find companies with active hiring signals for HR software, staffing, payroll, training, or relocation services.

#### Labor-market dashboards

Measure demand by keyword, city, company, or posting recency.

#### Competitive hiring analysis

Monitor how often competitors post for specific departments or skills.

#### Salary research

Collect salary text when it is included in public listings.

### Integrations

You can connect results to:

- Google Sheets for lightweight recruiting research.
- Airtable for lead review workflows.
- HubSpot or Salesforce via Make/Zapier.
- BigQuery, Snowflake, or S3 for analytics.
- Slack alerts for new jobs matching a saved query.
- Internal enrichment pipelines using the Apify API.

### API usage

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('fetch_cat/stepstone-jobs-scraper').call({
  query: 'software engineer',
  location: 'Berlin',
  maxItems: 25
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')

run = client.actor('fetch_cat/stepstone-jobs-scraper').call(run_input={
    'query': 'software engineer',
    'location': 'Berlin',
    'maxItems': 25,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~stepstone-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"software engineer","location":"Berlin","maxItems":25}'
```

### MCP integration

Use this actor from MCP-compatible assistants through Apify MCP Server.

MCP URL: `https://mcp.apify.com/?tools=fetch_cat/stepstone-jobs-scraper`

#### Claude Code example

```bash
claude mcp add apify-stepstone-jobs --url "https://mcp.apify.com/?tools=fetch_cat/stepstone-jobs-scraper"
```

#### Claude Desktop example

```json
{
  "mcpServers": {
    "apify-stepstone-jobs": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/stepstone-jobs-scraper"
    }
  }
}
```

#### Example MCP prompts

After connecting the MCP server, try prompts that explicitly ask your assistant to use the StepStone Jobs Scraper MCP tool. Example prompt ideas:

- "Use the StepStone Jobs Scraper MCP tool to find 20 software engineering jobs in Berlin, then return a table with title, company, location, and URL."
- "Use `fetch_cat/stepstone-jobs-scraper` to collect StepStone hiring signals for data analyst roles in Munich and summarize which employers are hiring most often."
- "Run the StepStone Jobs Scraper MCP tool for Java developer jobs in Germany, group the results by company, and summarize the most common skills."
- "Use the MCP scraper to monitor remote-friendly StepStone software roles and highlight any listings posted in the last week."

### Scheduling

Schedule the actor daily or weekly to monitor a saved StepStone query.

Use small result limits for frequent monitoring.

Use larger result limits for monthly market snapshots.

### Data quality notes

Some listings do not include salary.

Some listings do not expose structured skills.

Some listings may have broad regional locations rather than exact offices.

The actor keeps optional fields empty when StepStone does not publish that data.

### FAQ and troubleshooting

#### Why did my run return fewer jobs than `maxItems`?

The query may have fewer public results, or StepStone may not expose every result page for that combination of keyword and location.

Try a broader keyword, larger radius, or broader location.

#### Why are salary fields empty?

Many StepStone postings do not publish salary information.

When salary is missing from the public job page, the actor leaves `salary` empty.

#### What should I do if StepStone blocks a run?

Try a smaller run first.

The default input uses German residential Apify Proxy because direct cloud connections can stall. If you disabled proxy use, restore the default `RESIDENTIAL` / `DE` configuration. Proxy traffic can add Apify platform usage charges outside this Actor's pay-per-event price.

### Limits

Very broad searches can produce many duplicates across pages.

Use `maxItems` to cap output volume.

Large searches may finish with `RUN_SUMMARY.status: "partial"` when the runtime budget is reached. Consume the saved rows and use `RUN_CHECKPOINT.pendingJobUrls` for a follow-up run rather than increasing the platform timeout without a bound.

For production monitoring, run several specific searches instead of one extremely broad query.

### Legality and ethical use

This actor extracts publicly available job listing information.

You are responsible for using the data in compliance with StepStone terms, privacy laws, and applicable regulations.

Do not use scraped data for spam, discrimination, or prohibited automated decisions.

### Related Actors

- [Ashby Jobs Scraper](https://apify.com/fetch_cat/ashby-jobs-scraper)
- [ATS Jobs Scraper](https://apify.com/fetch_cat/ats-jobs-scraper)
- [Dice Jobs Scraper](https://apify.com/fetch_cat/dice-jobs-scraper)
- [Remote.com Jobs Scraper](https://apify.com/fetch_cat/remote-dot-com-jobs-scraper)

### Support

If a run fails or the output looks incomplete, open an issue on Apify and include:

- The run ID or run URL.
- The complete input JSON with secrets removed.
- The expected output and actual output returned by the dataset or run summary.
- A reproducible public URL when the problem concerns a specific StepStone search or job page.

### Privacy and data handling

This Actor only requests the permissions needed to run the input you provide. It uses your input (such as URLs, search terms, identifiers, filters, and limits) only to fetch the requested public data from the relevant source site or API for this Actor, then writes results to your Apify dataset/key-value store.

Data may pass through Apify platform services and Apify Proxy during the run, and requests are sent only to the target site or public data provider required for this Actor's results. FetchCat does not send your inputs or outputs to advertising networks, data brokers, or model-training services, and does not retain run data outside Apify storage after the run except when you explicitly share run details for transient support debugging.

You are responsible for using this Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs. Review the output before storing, sharing, or combining it with other data.

# Actor input Schema

## `query` (type: `string`):

Keyword, job title, skill, or occupation to search on StepStone.

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

City, region, or country for the StepStone search.

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

Optional StepStone search result or job detail URLs. If provided, they are processed in addition to the keyword/location search.

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

Maximum number of job listings to save.

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

Search radius around the selected location.

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

Optional recency filter. StepStone may ignore unsupported values for some searches.

## `maxPages` (type: `integer`):

Maximum search result pages to inspect per search URL.

## `detailConcurrency` (type: `integer`):

Maximum number of job detail requests processed at once. Lower this only when using a constrained custom proxy.

## `runBudgetSeconds` (type: `integer`):

Stop admitting new pages and job details early enough to save a checkpoint and exit cleanly before the platform timeout. The default is safe for the Actor's 600-second saved-task timeout.

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

Connection routing. German residential proxy is the reliability default because StepStone can stall direct cloud traffic. Disable it only when you accept a higher blocking risk.

## Actor input object example

```json
{
  "query": "software engineer",
  "location": "Berlin",
  "startUrls": [
    {
      "url": "https://www.stepstone.de/jobs/software-engineer/in-berlin"
    }
  ],
  "maxItems": 10,
  "radius": 30,
  "postedWithin": "any",
  "maxPages": 3,
  "detailConcurrency": 8,
  "runBudgetSeconds": 540,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "query": "software engineer",
    "location": "Berlin",
    "startUrls": [
        {
            "url": "https://www.stepstone.de/jobs/software-engineer/in-berlin"
        }
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/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 = {
    "query": "software engineer",
    "location": "Berlin",
    "startUrls": [{ "url": "https://www.stepstone.de/jobs/software-engineer/in-berlin" }],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/stepstone-jobs-scraper").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 '{
  "query": "software engineer",
  "location": "Berlin",
  "startUrls": [
    {
      "url": "https://www.stepstone.de/jobs/software-engineer/in-berlin"
    }
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call fetch_cat/stepstone-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetch_cat/stepstone-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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