# StepStone & Xing Jobs Scraper - Germany, Austria, Switzerland (`automly/stepstone-xing-jobs-scraper`) Actor

Scrape StepStone and XING jobs in Germany, Austria and Switzerland by keyword, location, radius, date, employment type, remote work, experience, salary or company, or from any link: title, company, salary, location, full description, requirements, benefits and company profile.

- **URL**: https://apify.com/automly/stepstone-xing-jobs-scraper.md
- **Developed by:** [Automly](https://apify.com/automly) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 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

## StepStone & Xing Jobs Scraper - Germany, Austria, Switzerland

### What is StepStone & Xing Jobs Scraper?

**StepStone & Xing Jobs Scraper** lets you **scrape job listings from StepStone and XING Jobs**, the two biggest job boards of the German-speaking market, in one run: title, company, location, postal code, employment type, remote or hybrid work, experience level, salary (as written and as numbers, with a flag when the salary is the site's own estimate), posting and expiry dates, the **full job description**, **requirements**, **benefits**, industry and the **company profile** published with the job. Type a keyword and a city or paste any StepStone or XING link, click **Start**, and download the jobs as Excel, CSV or JSON.

- 🇩🇪🇦🇹🇨🇭 **Two job boards, one table:** StepStone (Germany, Austria, Netherlands, Belgium) and XING Jobs (Germany, Austria, Switzerland) in the same format
- 🔎 **Filters both sites share:** keywords, location and radius, date posted, employment type, remote work, experience level, minimum salary and company
- 📈 **Past the site limits:** XING shows at most 1,000 jobs per search; bigger searches are read in parts to get far past it
- 💶 **Salary data:** minimum, maximum, currency and period, with a clear mark when the figure is an estimate rather than the employer's own
- 🔒 **No contact details:** the ad's contact section is left out, and emails and phone numbers are removed from the text
- 🔓 **No login:** no StepStone or XING account needed

### What can StepStone & Xing Jobs Scraper do?

- **Scrape StepStone job search results** for any keyword, like `python entwickler`, `pflegefachkraft` or `projektmanager`
- **Scrape XING jobs** for the same keywords in the same run, or one site only
- **Search by city and radius**, like `München` within 30 km, `Wien` or `Zürich` (umlauts can be written out: `Muenchen`)
- **Filter by date posted** (last 24 hours, 7 days, 30 days), **employment type** (full time, part time, permanent, fixed term, freelance, internship, working student, apprenticeship, trainee), **remote, hybrid or on-site**, **experience level** and **minimum yearly salary**
- **Get every job of one company**, like `Siemens` or `Deutsche Bahn`
- **Paste search or job links** from either site; a search link keeps the filters you set on the site
- **Choose the StepStone country**: stepstone.de, stepstone.at, stepstone.nl or stepstone.be
- Export to Excel, CSV, JSON, HTML or XML, or send the data to Google Sheets, Make, Zapier and more

### What data can you extract from StepStone and XING?

| | | |
|---|---|---|
| 💼 Job title, job ID and link | 🏢 Company and logo | 📍 Location, postal code, country |
| 🕒 Employment type | 🏠 Remote, hybrid or on-site | 🎓 Experience level |
| 💰 Salary text, min, max, currency, period | 🧮 Estimated or employer salary | 📅 Posted date and online-until date |
| 📝 Full description | ✅ Requirements | 🎁 Benefits |
| 🏭 Industry | 🏛️ Company size, industries, founded, headquarters | 📖 Company "about us" text and profile link |

### How to scrape StepStone and XING jobs

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open **StepStone & Xing Jobs Scraper**.
3. Choose the job sites (StepStone, XING or both), enter search keywords and a location, or paste StepStone or XING links, one per line.
4. Pick the filters you want and the most jobs to save.
5. Click **Start**, then download the jobs as Excel, CSV, JSON or HTML.

### How much does it cost to scrape StepStone and XING jobs?

You pay only for the jobs you get. A job from the search lists is a **job**; a job saved with **Include full job details** turned on (the default), or from a single job link, is a **job with full details**. Every row of a run is the same kind, so the count of jobs you are charged for is the count of rows you get. See the **Pricing** tab for the price on your plan.

Every Apify account gets **$5 of free usage each month**, enough to try the scraper on real searches.

### Input example

```json
{
    "site": "both",
    "keywords": ["python entwickler"],
    "location": "München",
    "radius": 30,
    "datePosted": "7",
    "employmentTypes": ["full_time"],
    "remote": "hybrid",
    "maxResults": 100,
    "includeDetails": true
}
```

**Max jobs** caps the whole run: with both sites the jobs are shared evenly between StepStone and XING, and if one site has fewer jobs the other fills the rest.

### Output example

```json
{
    "jobId": "157469012",
    "site": "xing.com",
    "url": "https://www.xing.com/jobs/muenchen-python-development-expert-157469012",
    "title": "Python Development Expert (m/w/d)",
    "companyName": "YER",
    "location": "München",
    "postalCode": "81671",
    "country": "DE",
    "employmentType": "Full-time",
    "remote": "hybrid",
    "experienceLevel": "Professional/Experienced",
    "salaryText": "58,500 - 76,500 EUR per year",
    "salaryMin": 58500,
    "salaryMax": 76500,
    "salaryCurrency": "EUR",
    "salaryPeriod": "year",
    "salaryIsEstimate": true,
    "postedAt": "2026-08-26T16:48:00Z",
    "validThrough": "2027-08-26T16:48:03Z",
    "snippet": "Entwicklung von Python-Modulen mit GitLab.",
    "descriptionText": "Für unseren Kunden, ein namhaftes Unternehmen ...",
    "requirements": "- Abgeschlossenes Studium der Informatik ...",
    "benefits": "- 30 Tage Jahresurlaub ...",
    "industry": "Aviation",
    "companyProfile": {
        "size": "1,001-5,000 employees",
        "industries": ["HR services and consulting"],
        "founded": null,
        "headquarters": "München, Germany",
        "about": null,
        "profileUrl": "https://www.xing.com/pages/yerdeutschland"
    },
    "companyLogo": "https://www.xing.com/imagecache/...",
    "source": "python entwickler in München (XING)",
    "scrapedAt": "2026-10-05T02:04:13Z"
}
```

Dates are ISO 8601 in UTC. A run report (Storage → Key-value store → `report-summary`) lists, for every search, how many jobs the site lists, how many were saved and how the location was read.

### Tips

- **Salary estimates:** both sites show their own salary estimate on many jobs. `salaryIsEstimate` is `true` for those and `false` when the employer published the salary.
- **Sort order:** "Newest first" applies to StepStone; XING lists jobs by relevance.
- **Filters one site does not have:** StepStone has no on-site-only filter and filters 24 hours or 7 days only; the scraper applies on-site and 30 days to what StepStone shows. "Permanent" and "trainee" are StepStone filters.
- **Expired jobs:** a job link whose job has expired or was removed is reported as not found, and the run still succeeds.

### FAQ

**Is it legal to scrape StepStone and XING?**
The scraper collects only job ads that anyone can see without logging in; it leaves out the ad's contact section and removes emails and phone numbers from the text. Check the rules that apply to how you use the data (for example GDPR) with your legal advisor.

**Do I need a StepStone or XING account?**
No.

**Can I get jobs from Switzerland?**
Yes, from XING: search a Swiss city like `Zürich`, `Basel` or `Bern`. StepStone has no Swiss site.

**Why did I get fewer jobs than the site shows?**
The site's count can include related jobs and repeats; each job is saved once per run. The run report shows the site's count next to the jobs saved.

**Can I use it with the Apify API, Make, Zapier or n8n?**
Yes. Start runs and fetch results through the Apify API or any of the Apify integrations.

### Your feedback

Found a bug or need a field that is missing? Open an issue on the **Issues** tab and we will look at it quickly.

# Actor input Schema

## `site` (type: `string`):

Which job sites to search, e.g. both. With both, each search is run on StepStone and on XING and the results are shared evenly between them.

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

Job titles, skills or companies to search for, one per line, e.g. "python entwickler", "pflegefachkraft" or "projektmanager". Each keyword is its own search.

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

City or region, e.g. Berlin, München, Wien or Zürich. Leave empty for the whole country. Umlauts can be written out (Muenchen).

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

Distance around the location, e.g. 30 km.

## `stepstoneCountry` (type: `string`):

Which StepStone site the keywords search, e.g. stepstone.de. XING covers Germany, Austria and Switzerland in one search. Links always use their own site.

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

Search result pages or job pages from either site, e.g. https://www.stepstone.de/jobs/python/in-berlin?radius=30 or https://www.xing.com/jobs/search?keywords=python\&location=Berlin. A search link keeps the filters set on the site.

## `maxResults` (type: `integer`):

Most jobs the whole run saves, e.g. 100. The run stops exactly there.

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

Adds the full description, requirements, benefits, industry and the company profile to every job. Turn off for a faster, cheaper list with the main fields.

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

Only jobs posted in this period, e.g. last 7 days.

## `employmentTypes` (type: `array`):

Only these employment types, e.g. full time. Leave empty for all. Permanent and trainee are StepStone filters; the others work on both sites.

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

Only remote, hybrid or on-site jobs, e.g. hybrid.

## `experience` (type: `string`):

Only jobs for this experience level, e.g. experienced.

## `salaryMin` (type: `integer`):

Only jobs paying at least this gross yearly salary, e.g. 60000. The sites compare it with the salary they show, which can be their own estimate.

## `companyName` (type: `string`):

Only jobs from this company, e.g. Siemens. Matched by name; with no keyword, the company name is also the search.

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

Order StepStone jobs are collected in, e.g. newest first. XING lists its jobs by relevance.

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

The default works for most runs. If results come back empty, try a different proxy option.

## Actor input object example

```json
{
  "site": "both",
  "keywords": [
    "python entwickler"
  ],
  "location": "Berlin",
  "radius": 30,
  "stepstoneCountry": "de",
  "maxResults": 50,
  "includeDetails": true,
  "datePosted": "any",
  "remote": "any",
  "experience": "any",
  "sortBy": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `results` (type: `string`):

No description

## `report` (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": [
        "python entwickler"
    ],
    "location": "Berlin",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/stepstone-xing-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 = {
    "keywords": ["python entwickler"],
    "location": "Berlin",
    "maxResults": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automly/stepstone-xing-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 '{
  "keywords": [
    "python entwickler"
  ],
  "location": "Berlin",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automly/stepstone-xing-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automly/stepstone-xing-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/9tdnw1kkoCIXwfIH2/builds/yEwqvV0AN7rWnGQ8C/openapi.json
