# XING Jobs Scraper - German Job Listings (`s-r/xing-jobs-scraper`) Actor

Search XING, the German-speaking professional network, and get one row per job advert: title, company, location, contract type and the advertised salary range.

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

## Pricing

Pay per event

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

Job adverts from XING, the professional network of the German-speaking market,
as a clean table. Search by keyword and get one row per advert with the title,
the hiring company, where the job is, the contract type and the advertised
salary range.

Narrow it geographically with **Location** and **Radius in km**, or leave both
empty to search the whole market and let the location column tell you where
things are.

### What you get per advert

- `title`, `company`, `location`
- `employment_type` — Vollzeit, Teilzeit, Praktikum, Werkstudent and so on
- `salary_min`, `salary_max`, `salary_text`
- `is_urgent` — whether XING flags the advert as urgently sought
- `easy_apply` — whether it accepts a one-click application
- `posted` — how long ago, when XING says
- `job_id`, `url`, `slug`
- `search`, `search_page`, `position`, `result_count`

### Two things about the data, said plainly

**Salaries are ranges, and most adverts have one.** German job adverts publish
pay far more often than the English-speaking market does; roughly seventeen in
twenty carry a figure. `salary_min` and `salary_max` are numbers you can sort
on, and `salary_text` is what the advert actually displays.

**`posted` is usually empty, and that is XING's doing.** It labels only
recently posted adverts, so about three cards in twenty carry a date at all. A
null there means the advert is not new, not that the date was missed.

### Run sizes

Adverts arrive twenty to a page. **Maximum adverts** caps the run across every
term, and **Maximum pages per term** is the rail on a broad search.

A run stops early when a page adds nothing new, because XING keeps serving the
last page rather than returning an empty one. That means asking for more pages
than a search has costs one wasted request, not fifty.

### Errors

| Code | Meaning |
|---|---|
| `bad_input` | No search terms supplied |
| `no_results` | The search ran and matched nothing |
| `fetch_failed` | A page could not be read after several attempts |

`no_results` and `fetch_failed` are deliberately different. A term nobody is
hiring for and a page that would not load look identical if you only count rows.

### Related actors

For the same question on other markets, use **LinkedIn Jobs Scraper**,
**Indeed Jobs Scraper**, **StepStone Scraper** or **Glassdoor Jobs Scraper**.
For the hiring companies rather than the adverts, look at the LinkedIn company
actors.

# Actor input Schema

## `search` (type: `array`):

One per line, exactly what you would type into XING's job search.

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

A city or region, for example Berlin. Leave empty to search everywhere.

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

Only meaningful together with a location.

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

Across all terms. Twenty arrive per page.

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

The rail on a broad search.

## Actor input object example

```json
{
  "search": [
    "python",
    "data engineer"
  ],
  "maxItems": 100,
  "maxPages": 10
}
```

# Actor output Schema

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

One row per advert.

## `summary` (type: `string`):

Searches walked and adverts returned.

## `errors` (type: `string`):

Searches that could not be read.

# 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 = {
    "search": [
        "python"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("s-r/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 = { "search": ["python"] }

# Run the Actor and wait for it to finish
run = client.actor("s-r/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 '{
  "search": [
    "python"
  ]
}' |
apify call s-r/xing-jobs-scraper --silent --output-dataset

```

## MCP server setup

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