# XING Jobs Scraper (`scrapeai/xing-jobs-scraper`) Actor

Scrape job listings from XING (xing.com) with AI salary estimates, company details, full job descriptions, employment types, and apply URLs. Supports keywords, location, DACH region search, and direct URLs.

- **URL**: https://apify.com/scrapeai/xing-jobs-scraper.md
- **Developed by:** [ScrapeAI](https://apify.com/scrapeai) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## XING Jobs Scraper 🚀

Extract rich, structured job listings, AI salary estimates, company metadata, and full job descriptions from **[XING](https://www.xing.com/jobs/search)** — Europe's leading professional business network across Germany, Austria, and Switzerland (DACH region).

***

### ✨ Features

- 🔍 **Dynamic Keyword & Location Search** — Query any job title, role, or skill across German, Austrian, Swiss, or European cities.
- 💶 **AI Salary Insights** — Scrape minimum, maximum, median salaries, and currency estimates provided by XING's market benchmark models.
- 🏢 **Company Intelligence** — Extract verified company names, internal company IDs, and high-resolution company logos.
- 📝 **Full Job Descriptions** — Retrieve complete formatted descriptions including responsibilities, required skills, company profiles, and employee benefits.
- 🏠 **Remote & Hybrid Policy** — Filter and identify remote work options (`Full Remote`, `Hybrid`, `On-site`).
- 👔 **Employment & Career Level** — Extract contract types (`Full-time`, `Part-time`, `Self-employed`, `Internship`) and seniority level (`Professional/Experienced`, `Executive`, etc.).
- 🔗 **Direct Application Links** — Access third-party and employer direct apply URLs when available.
- ⚡ **High-Speed Headless Crawling** — Powered by Crawlee & Playwright with anti-blocking fingerprint rotation and resource optimization.
- 📑 **Smart Multi-page Pagination** — Automatically navigates through search result pages until reaching your requested `maxJobs` limit.

***

### 💡 Use Cases

- **DACH Recruitment & Headhunting**: Discover active job postings across Germany, Austria, and Switzerland.
- **Salary Benchmarking & Compensation Analysis**: Analyze European tech, engineering, and management salary ranges.
- **Market & Competitor Intelligence**: Track hiring surges, tech stack requirements, and open positions across competitors.
- **Lead Generation for B2B Services**: Connect with companies actively scaling specific departments or engineering teams.

***

### 📥 Input Parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `keywords` | `string` | `"Software Engineer"` | Job title or search terms (e.g. `Data Scientist`, `DevOps Engineer`, `Marketing Manager`). |
| `location` | `string` | `"Germany"` | City, region, or country (e.g. `Berlin`, `Munich`, `Hamburg`, `Vienna`, `Zurich`). |
| `scrapeJobDetails` | `boolean` | `true` | When enabled, visits individual listing pages to fetch full job descriptions, tasks, requirements, benefits, and logos. |
| `maxJobs` | `integer` | `20` | Maximum number of job postings to scrape (1–1000). |
| `startUrls` | `array` | `[]` | Optional list of specific XING search URLs or direct job posting URLs to scrape. |
| `proxyConfiguration` | `object` | `RESIDENTIAL` | Proxy settings. Using Apify Residential proxies is strongly recommended for reliable results. |

***

### 📤 Output Data Structure

The Actor pushes comprehensive job objects to the default Apify Dataset. Below is the full list of extracted fields:

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | `string` | Unique identifier for the posting on XING. |
| `title` | `string` | Job title. |
| `company` | `string` | Employer or hiring agency name. |
| `companyId` | `string` | XING company ID. |
| `companyLogo` | `string` | URL of the company's 96px logo image. |
| `location` | `string` | Primary city / location. |
| `locations` | `array[string]` | All locations associated with the listing. |
| `street` | `string` | Street address (when disclosed). |
| `zipCode` | `string` | Postal / zip code. |
| `region` | `string` | Federal state or region (e.g. *Baden-Württemberg*, *Bayern*). |
| `country` | `string` | Country name (e.g. *Germany*, *Austria*, *Switzerland*). |
| `countryCode` | `string` | ISO two-letter country code (`DE`, `AT`, `CH`). |
| `employmentType` | `string` | Employment model (`Full-time`, `Part-time`, `Self-employed`, etc.). |
| `remoteOption` | `string` | Flexibility policy (`Hybrid`, `Full Remote`, `On-site`). |
| `careerLevel` | `string` | Career seniority level (`Professional/Experienced`, `Entry Level`, etc.). |
| `discipline` | `string` | Professional discipline / category. |
| `industry` | `string` | Industry sector of the hiring organization. |
| `salaryMin` | `number` | Estimated minimum annual salary. |
| `salaryMax` | `number` | Estimated maximum annual salary. |
| `salaryMedian` | `number` | Estimated median annual salary. |
| `salaryCurrency` | `string` | Currency code (`EUR`, `CHF`). |
| `topJob` | `boolean` | Indicates if the posting is a featured top job. |
| `prioritized` | `boolean` | Indicates if the listing has prioritized ranking. |
| `paid` | `boolean` | Indicates if the listing is a sponsored employer post. |
| `postedDate` | `string` | ISO timestamp when the job was posted / refreshed. |
| `activeUntil` | `string` | ISO timestamp until when the listing is active. |
| `applyUrl` | `string` | Direct application URL. |
| `jobUrl` | `string` | Canonical link to the job listing on XING. |
| `description` | `string` | Plain-text consolidated overview of the role. |
| `responsibilities` | `string` | Duties and core responsibilities. |
| `skillsAndRequirements` | `string` | Candidate profile, qualifications, and skills. |
| `benefits` | `string` | Company perks, compensation package, and benefits. |
| `companyDescription` | `string` | Employer profile and introduction. |
| `contactInfo` | `string` | Recruiter contact details and application instructions. |
| `keywords` | `array[string]` | Tags and keywords matched by XING. |
| `language` | `string` | Language code of the job listing (`en`, `de`). |
| `source` | `string` | Always `"XING"`. |
| `scrapedAt` | `string` | ISO timestamp when the scraper processed the job. |

***

### 📊 Sample Output (JSON)

```json
{
  "jobId": "157112449.f868db",
  "title": "Software Engineer (m/f/d) in Telemetry Team",
  "company": "Advantest Europe GmbH",
  "companyId": "53733.cb85b3",
  "companyLogo": "https://www.xing.com/imagecache/public/scaled_original_image/eyJ1dWlkIjoiODhiNGI0MTQtZTA5Ni00MGE5LTg4MDEtYzliNmEyMzY5NTFlIiwiYXBwX2NvbnRleHQiOiJlbnRpdHktcGFnZXMiLCJtYXhfd2lkdGgiOjk2LCJtYXhfaGVpZ2h0Ijo5Nn0?signature=272b3d21e911db4634c33a8af818892e3bcb63755cd5304effd9065e5097ff2e",
  "location": "Böblingen",
  "locations": [
    "Böblingen"
  ],
  "street": "Herrenberger Str. 130",
  "zipCode": "71034",
  "region": "Baden-Württemberg",
  "country": "Germany",
  "countryCode": "DE",
  "employmentType": "Full-time",
  "remoteOption": "Hybrid",
  "careerLevel": "Professional/Experienced",
  "discipline": "IT and software development",
  "industry": "Semiconductors and electronic components",
  "salaryMin": 66000,
  "salaryMax": 84000,
  "salaryMedian": 80500,
  "salaryCurrency": "EUR",
  "topJob": false,
  "prioritized": false,
  "paid": true,
  "postedDate": "2026-08-13T08:11:34.000Z",
  "activeUntil": "2027-08-10T00:12:36.000Z",
  "applyUrl": "https://www.jobware.de/job/software-engineer-m-f-d-in-telemetry-team.2031183355.html",
  "jobUrl": "https://www.xing.com/jobs/boeblingen-software-engineer-telemetry-team-157112449",
  "description": "Company:\nIoT, 5G and Artificial Intelligence. Unthinkable without us. As the global market leader of automated test systems...\n\nResponsibilities:\nWe are looking for a software engineer (m/f/d) with a background in systems programming and data engineering...\n\nSkills & Qualifications:\nBachelor's or master's degree in computer science, electrical engineering, or related field...\n\nBenefits & What We Offer:\nFlexible working hours, 30 vacation days, attractive bonus program, company pension scheme...",
  "responsibilities": "We are looking for a software engineer with systems programming experience to join our telemetry team...",
  "skillsAndRequirements": "Bachelor's or master's degree in computer science. Solid understanding of Linux, Git, and automated testing.",
  "benefits": "Flexible and trust-based working hours, 30 vacation days, mobile working, bonus program, pension scheme.",
  "companyDescription": "IoT, 5G and Artificial Intelligence. As the global market leader of automated test systems in semiconductor...",
  "contactInfo": "Take your next career step with us! Apply now via our online application tool.",
  "keywords": [
    "software",
    "engineer",
    "engineering",
    "linux",
    "cloud",
    "telemetry"
  ],
  "language": "en",
  "source": "XING",
  "scrapedAt": "2026-08-21T13:05:00.000Z"
}
```

***

### ⚙️ Running via Apify API / Python / Node.js

#### Apify Python Client

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "keywords": "Data Engineer",
    "location": "Berlin",
    "maxJobs": 50,
    "scrapeJobDetails": True
}

run = client.actor("username/xing-jobs-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["company"], item["salaryMin"], item["salaryMax"])
```

#### Apify JavaScript / Node.js Client

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('username/xing-jobs-scraper').call({
    keywords: 'Full Stack Developer',
    location: 'Munich',
    maxJobs: 50,
    scrapeJobDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} jobs:`, items);
```

***

### 🔒 Tips & Best Practices

1. **Use Residential Proxies**: XING employs anti-scraping protections. Always keep Apify Residential proxies enabled for production runs.
2. **Speed Optimization**: When you only need high-level lists and salary benchmarks without full body text, set `"scrapeJobDetails": false` for ultra-fast scraping.
3. **DACH Regional Scope**: XING is heavily focused on Germany (`DE`), Austria (`AT`), and Switzerland (`CH`). Job queries for these regions yield the highest volume and richest data.

# Actor input Schema

## `keywords` (type: `string`):

Job title or search keywords (e.g. 'Software Engineer', 'Product Manager', 'Data Analyst').

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

City, region, or country (e.g. 'Berlin', 'Munich', 'Germany', 'Vienna', 'Zurich'). Leave blank for all locations.

## `scrapeJobDetails` (type: `boolean`):

When enabled, fetches full job descriptions, responsibilities, requirements, benefits, company logos, and detailed location metadata.

## `maxJobs` (type: `integer`):

Maximum number of jobs to scrape (1–1000).

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

Direct URLs to XING job search pages or specific job listings. Overrides keywords and location if provided.

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

Proxy settings for scraping XING. RESIDENTIAL proxy group is recommended for reliable access.

## Actor input object example

```json
{
  "keywords": "Software Engineer",
  "location": "Germany",
  "scrapeJobDetails": true,
  "maxJobs": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset containing all scraped XING job listings

# 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",
    "location": "Germany",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeai/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": "Software Engineer",
    "location": "Germany",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeai/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": "Software Engineer",
  "location": "Germany",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapeai/xing-jobs-scraper --silent --output-dataset

```

## MCP server setup

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