# Xing Jobs Scraper - German Jobs with Salary Ranges (`scrapesage/xing-jobs-scraper`) Actor

Scrape Xing job listings for the German-speaking market: job title, company, city, employment type and the published salary range in EUR. Search many keywords across many cities in one run, deduplicated. Independent tool, not affiliated with XING.

- **URL**: https://apify.com/scrapesage/xing-jobs-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Jobs, Lead generation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 job scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 - German Jobs with Salary Ranges

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by New Work SE or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "XING" is referenced only to describe the publicly available website this Actor collects data from.

Scrape Xing job listings across the German-speaking market - **job title, hiring company, city, employment type and the published salary range in EUR**. Search many keywords across many cities in one run, deduplicated.

**No Xing login. No API key. No browser.** Reads Xing's public job search directly.

### Why this Xing scraper?

| Data | Typical Xing scrapers | This actor |
|---|---|---|
| Title, company, city | ✅ | ✅ |
| **Published salary range (min + max, EUR)** | ❌ | ✅ - the field German job data is actually bought for |
| Employment type, normalised | partial | ✅ `full-time` / `part-time` / `internship` / `working-student` / … |
| Multi-keyword × multi-city in one run | ❌ | ✅ deduplicated across every combination |
| Partner listings flagged | ❌ | ✅ `isExternalOffer` |
| Additional-locations count | ❌ | ✅ |
| Filter by salary floor / salary-shown / type | ❌ | ✅ **applied during the scrape, so you don't pay for filtered-out rows** |

**18 fields per job.** Roughly 9-11 jobs per page, and pagination keeps going - a 12-page sweep returned **109 unique jobs** for one keyword+city pair.

### ⚠️ Xing is picky about the location field

This is the single thing that trips people up, so the actor is explicit about it. **Verified 2026-08-09 by repeated runs, not one probe:**

| Location value | Result |
|---|---|
| A city - `Berlin`, `München`, `Hamburg`, `Köln`, `Wien`, `Zürich` | ✅ works |
| **`Germany`** (English country name) | ✅ **works** - a nationwide sweep returning jobs from Stuttgart, Duisburg, Landshut and beyond |
| `Deutschland` (German country name) | ❌ zero results |
| A region name, or a keyword with **no** location | ❌ zero results |

If a search comes back empty the run **says exactly that** and lists what to try, rather than finishing silently.

### Use cases

- **Salary benchmarking** - the only reliable way to get Xing's published ranges in bulk.
- **Recruitment market research** - who is hiring for what, in which German cities, at what price.
- **Competitor hiring intel** - track a rival's open roles across cities.
- **Job boards & aggregators** - fill the DACH region.
- **Lead generation** - companies actively hiring are companies actively spending.

### How to use

1. Add **Job keywords** (one per line) and **Locations (cities)**.
2. Optionally set **Max pages per search** and the salary / employment-type filters.
3. Hit **Start**, then export JSON, CSV or Excel.

### Input

```json
{
    "keywords": ["software engineer", "data analyst"],
    "locations": ["Berlin", "München"],
    "maxPagesPerSearch": 5,
    "withSalaryOnly": true,
    "salaryMin": 60000,
    "maxItems": 500
}
```

- **keywords / locations** - every keyword is searched in every location (city, or `Germany` for nationwide). Duplicates across searches are emitted once.
- **keywordsFromFile** - bulk-load keywords: paste a list, or give **one link** to a `.txt`/`.csv`, Google Sheet, Drive share or key-value-store record. A file that cannot be read stops the run with a clear message.
- **maxPagesPerSearch** - depth per keyword+city pair (~9-11 jobs per page).
- **employmentTypeFilter / withSalaryOnly / salaryMin** - filters, applied inside the scrape loop.
- **outputFields** *(pick-list)* - tick exactly the fields you want; all 18 are listed with plain-English labels and their exact key.
- **maxItems**, **proxyConfiguration**.

### Output

```json
{
    "type": "job",
    "jobId": "156310864",
    "isExternalOffer": false,
    "url": "https://www.xing.com/jobs/berlin-software-engineer-156310864",
    "title": "Software Engineer (m/w/d)",
    "company": "Müller Holding GmbH & Co. KG",
    "location": "Berlin",
    "extraLocationCount": 0,
    "employmentType": "full-time",
    "employmentTypeRaw": "Vollzeit",
    "salaryMin": 50000,
    "salaryMax": 66500,
    "salaryCurrency": "EUR",
    "salaryText": "50.000 € – 66.500 €",
    "searchKeyword": "software engineer",
    "searchLocation": "Berlin",
    "searchPage": 1,
    "scrapedAt": "2026-08-09T21:00:00.000Z"
}
```

#### What to expect (field coverage)

Measured over 35 jobs spanning six keyword/city searches (tech, marketing, healthcare, sales, finance):

| Field | Coverage |
|---|---|
| `title`, `company`, `location`, `url`, `isExternalOffer`, search fields | 100% |
| `jobId` | ~94% - a few listings use a non-numeric slug |
| `salaryMin` / `salaryMax` / `salaryText` | ~86% - roughly one card in seven publishes no range |
| `employmentType` / `employmentTypeRaw` | ~63% - **Xing omits the type from the card markup entirely on many listings.** Verified against the raw HTML, not assumed. Turning on the employment-type filter drops those listings. |

### Automate & schedule

Pair with Apify **Schedules** to re-run a keyword×city matrix weekly and push new roles into Sheets, Slack or your ATS.

### Use with AI assistants (MCP)

Expose this actor to Claude, ChatGPT or any MCP client via the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) and ask for German salary data in plain language.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### Pricing

Pay per event: **$0.002 per job**. Jobs removed by your filters are **not** charged.

### Integrate with any app

Connect the dataset to thousands of apps - no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** - multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** - push new records straight into your CRM or spreadsheet.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** - get notified when a scheduled run finds something new.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** - auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** - pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** - trigger runs from commits or releases.

### More scrapers from scrapesage

Related Actors in the same category:

- **[MyCareersFuture Scraper](https://apify.com/scrapesage/mycareersfuture-scraper)** - Singapore Jobs, Salaries & Leads
- **[Foundit Scraper](https://apify.com/scrapesage/foundit-scraper)** - Jobs, Salaries, Skills & Recruiter Leads
- **[Glassdoor Scraper](https://apify.com/scrapesage/glassdoor-scraper)** - Company Reviews, Ratings & Interviews
- **[Multi-ATS Job Scraper](https://apify.com/scrapesage/multi-ats-job-scraper)** - Greenhouse, Lever, Ashby, Workday
- **[Y Combinator Scraper](https://apify.com/scrapesage/ycombinator-scraper)** - Companies, Founders & Jobs

### FAQ

**Why did my search return nothing?** Almost always the location. Use a **city**, or the English `Germany` for a nationwide sweep. `Deutschland` and an empty location both return zero. The run message tells you when this happens.

**Are the salaries real?** They are the ranges Xing publishes on the listing. Where an employer publishes none, the salary fields are null and `salaryText` is null too.

**Does it cover Austria and Switzerland?** Yes - use `Wien`, `Graz`, `Zürich`, `Basel` as locations.

**Can I import a long keyword list?** Yes - paste it or link a file. A broken link stops the run with the reason instead of scraping something you didn't ask for.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by New Work SE or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.**

"XING" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official XING product, is not authorised or certified by New Work SE, and does not distribute XING software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

### Need help?

Open an issue on the actor's **Issues** tab - feature requests genuinely do get built.

***

*Not affiliated with, endorsed by, or sponsored by XING or New Work SE. "XING" is a trademark of its respective owner and is used here only to describe what this tool reads. Scrapes public pages only.*

# Actor input Schema

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

Job titles or skills to search, one per line - e.g. <code>software engineer</code>, <code>Pflegefachkraft</code>, <code>Vertrieb</code>. Every keyword is searched in every location. <b>Leave empty and the run returns a small free sample.</b>

## `locations` (type: `array`):

A <b>city</b> - <code>Berlin</code>, <code>München</code>, <code>Hamburg</code>, <code>Köln</code>, <code>Wien</code>, <code>Zürich</code> - or the <b>English</b> country name <code>Germany</code> for a nationwide sweep (verified 2026-08-09: returns jobs across Stuttgart, Duisburg, Landshut and more). ⚠️ <code>Deutschland</code>, a region name, and a keyword with no location all return <b>zero</b> on Xing - the run says so rather than failing silently.

## `keywordsFromFile` (type: `string`):

Bulk-load the keyword list. Either <b>paste the whole list</b> (one per line), or give <b>a single link</b> to a public <code>.txt</code>/<code>.csv</code>, a Google Sheet or Drive share link, or an Apify key-value-store record. Blank lines, <code>#</code> comments, CRLF and a UTF-8 BOM all parse. A file that cannot be read stops the run with a clear message.

## `maxPagesPerSearch` (type: `integer`):

How deep to paginate each keyword+city pair. Xing returns roughly 9-11 jobs per page and keeps going for many pages, so 5 pages is about 50 jobs per search.

## `employmentTypeFilter` (type: `array`):

Keep only these employment types. Leave empty for all. Note that Xing omits the type on some cards - those are dropped when this filter is on.

## `withSalaryOnly` (type: `boolean`):

Skip listings with no published salary range. About 1 in 7 Xing cards has no salary.

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

Keep only jobs whose upper salary bound is at least this. 0 disables the filter.

## `outputFields` (type: `array`):

Pick the fields you want and every record is trimmed to exactly those - handy for lean CSV/Sheets exports. <b>Nothing to memorise:</b> open the dropdown and tick, or start typing (<code>salary</code>, <code>company</code>) to filter.

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

Maximum number of jobs to output across all keyword/city combinations. Duplicates across searches are counted once.

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

Proxy settings. Xing serves its public job search cleanly to Apify datacenter proxies, which are used by default. If you ever see blocks, switch to Residential.

## Actor input object example

```json
{
  "keywords": [
    "software engineer"
  ],
  "locations": [
    "Berlin"
  ],
  "maxPagesPerSearch": 5,
  "withSalaryOnly": false,
  "salaryMin": 0,
  "maxItems": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped jobs as JSON items in the default dataset.

# 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"
    ],
    "locations": [
        "Berlin"
    ],
    "keywordsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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"],
    "locations": ["Berlin"],
    "keywordsFromFile": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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"
  ],
  "locations": [
    "Berlin"
  ],
  "keywordsFromFile": ""
}' |
apify call scrapesage/xing-jobs-scraper --silent --output-dataset

```

## MCP server setup

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