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

Job ads from XING in Germany, Austria and Switzerland with company size and industry, remote option, career level and a salary range marked as the employer's figure or XING's estimate. Search by keyword and city or paste a XING search link.

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

## Pricing

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

## XING Jobs Scraper

The job market on xing.com/jobs lists jobs in Germany, Austria and Switzerland. This actor turns a XING job search into one row per job: title, company with headcount, industry and headquarters, city and postcode, remote option, employment type, career level, a salary range marked as the employer's figure or XING's own estimate, the full description and the apply link. Type `data engineer` and `Berlin`, then click **Start**. Few employers publish pay: 129 of 1,026 jobs read in September 2026. It costs $0.40 per 1,000 jobs on the Free plan ($0.20 on Business), and the $5 of monthly credit in Apify's Free plan covers about 12,000 jobs.

### Output fields

| Field | Description |
|---|---|
| `title`, `company` | Job title as the employer wrote it, e.g. `Data Engineer (m/w/d)`, and the hiring company or recruitment firm. |
| `companySize`, `companyIndustry`, `companyCity` | With details on: headcount band such as `51-200 employees`, the company's industry such as `Internet and IT`, and the city of its headquarters. |
| `city`, `zipCode`, `countryCode`, `locations` | City of the job and every city it is offered in; with details on, also its postcode when XING has one and `DE`, `AT` or `CH`. |
| `remote` | With details on: one or more of `full_remote`, `partly_remote` and `non_remote`; a few jobs carry two, such as `["partly_remote", "non_remote"]`. |
| `employmentType` | `Full-time`, `Part-time`, `Student` (working students and interns) or `Self-employed` (freelance work). |
| `careerLevel` | With details on: `Student/Intern`, `Entry Level`, `Professional/Experienced`, `Manager/Supervisor` or `Executive (VP, SVP, etc.)`. |
| `salaryMin`, `salaryMax`, `salaryCurrency` | Salary range as numbers in `EUR`, or `CHF` for Swiss jobs, e.g. `70000` to `85000`. Empty when XING has neither a salary nor an estimate. |
| `salaryEstimated` | `false` when the employer published the salary, `true` when the range is XING's estimate for the job. |
| `keyResponsibilities` | Up to three short task sentences that XING writes for about a third of the jobs. |
| `discipline`, `industry` | With details on: the job's discipline, e.g. `IT and software development`, and the industry it is filed under. |
| `skills`, `keywords` | With details on: the search terms XING attaches to the job, such as `stammdaten`. `skills` stays empty, because the public job pages carry no skill list. |
| `language` | Language of the ad as XING records it, `de` or `en`. |
| `description`, `descriptionHtml` | With details on: the whole ad as plain text and as HTML. |
| `externalDescriptionUrl` | Link to the ad when the employer hosts it outside XING, as a web page or a PDF; the two description fields stay empty then. |
| `applyUrl` | The employer's own application page, or the XING job page when applications go through XING. |
| `postedAt`, `refreshedAt`, `activeUntil` | When the job went live (with details on), when it was last refreshed and when XING plans to take it offline, in UTC. |
| `url`, `companyUrl` | The job page and, with details on, the company page on xing.com. |

### How to scrape XING jobs

1. Type **Keywords** as you would on xing.com/jobs: a job title, a skill or a company, such as `data engineer`, `Projektmanager` or `SAP`.
2. Enter a **Location** like `Berlin`, `München`, `Wien` or `Zürich` and, if you want, a **Radius (km)** around it. Without a location the search covers all of XING.
3. Narrow the results with **Remote option**, **Employment types (any of)**, **Career levels (any of)**, **Only jobs with a published salary**, **Minimum yearly salary (EUR)**, **Posted within the last N days** and **Exclude keywords**. Type and level match words in XING's English labels; `Freelance`, `Internship` and `Working student` are understood as `Self-employed` and `Student`. The date filter goes by the later of `postedAt` and `refreshedAt`.
4. To reuse searches made on the website, paste their addresses into **Search links from xing.com (optional)**. The actor takes the keywords, location and radius from each link. Links to XING's job topic pages, such as `https://www.xing.com/jobs/t-developer` or `https://www.xing.com/jobs/data-engineer-jobs-in-berlin`, work as well.
5. Leave **Include full job details** on for the posting date, career level, remote option, postcode, country, company data, description, keywords, discipline, industry and language. It costs the same and opens each job page: 500 jobs took 132 seconds on 11 October 2026, while 300 jobs from the result pages alone took 14 seconds. **Remote option** and **Career levels (any of)** open the job pages even with details off.
6. Click **Start**. Jobs appear in the **Output** tab while the run goes on, and you can download them as CSV, Excel or JSON or fetch them through the API.

As API input, hybrid or remote data engineering jobs within 30 km of Munich posted in the last two weeks:

```json
{
  "keywords": "data engineer",
  "location": "München",
  "radius": 30,
  "remote": ["PARTLY_REMOTE", "FULL_REMOTE"],
  "careerLevels": ["Professional", "Manager"],
  "postedWithinDays": 14,
  "maxItems": 200
}
```

### Example output

One job from a run on 11 October 2026. `description` and `descriptionHtml` are cut after the company profile; the full ad ends with the recruiter's name and phone number.

```json
{
  "key": "xing:158474883",
  "jobId": "158474883",
  "title": "Data Engineer (m/w/d) - German C1 level required",
  "url": "https://www.xing.com/jobs/berlin-data-engineer-german-c1-level-required-158474883",
  "applyUrl": "https://michaelpage.de/job-apply/data-engineer-mwd-german-c1-level-required/ref/jn-092026-7111240?utm_source=xing&utm_medium=jobboard&utm_campaign=onlineadverts",
  "company": "Michael Page",
  "companyUrl": "https://www.xing.com/pages/michaelpage",
  "companyLogo": "https://www.xing.com/imagecache/public/scaled_original_image/eyJ1dWlkIjoiNjA5OWEyMDYtZGYwYy00MDI1LWI5ZjYtNWU0ZDlhYjFiYzVmIiwiYXBwX2NvbnRleHQiOiJlbnRpdHktcGFnZXMiLCJtYXhfd2lkdGgiOjk2LCJtYXhfaGVpZ2h0Ijo5Nn0?signature=d662ba7eed192e1f8d6894bb873021516750a8d6f224803f73832d59a584ce74",
  "companySize": "5,001-10,000 employees",
  "companyIndustry": "HR services and consulting",
  "companyKununuRating": null,
  "companyCity": "Düsseldorf",
  "city": "Berlin",
  "zipCode": null,
  "countryCode": "DE",
  "country": "Germany",
  "locations": [
    "Berlin"
  ],
  "remote": [
    "non_remote"
  ],
  "employmentType": "Full-time",
  "careerLevel": "Professional/Experienced",
  "discipline": "IT and software development",
  "industry": "Real estate",
  "salaryMin": 70000,
  "salaryMax": 85000,
  "salaryCurrency": "EUR",
  "salaryEstimated": false,
  "keyResponsibilities": [
    "Verantwortung für die Zielarchitektur der Datenplattform.",
    "Entwicklung von ETL-/ELT-Prozessen und Datenpipelines.",
    "Etablierung von Engineering-Standards und Dokumentationsrichtlinien."
  ],
  "skills": [],
  "keywords": [
    "property",
    "business",
    "intelligence",
    "information",
    "technology",
    "berlin",
    "michael page",
    "land berlin",
    "deutschland"
  ],
  "language": "de",
  "description": "Intro\nAufbau einer modernen Datenplattform mit hohem Gestaltungsspielraum\n\nPrivate Equity Umgebung mit viel Dynamik und guten Entwicklungsperspektiven\nFirmenprofil\n\nUnser Mandant ist ein mittelständisches Unternehmen in einer dynamischen Wachstums- und Transformationsphase. Unterstützt durch professionelle Investoren werden strategische Zukunftsprojekte vorangetrieben, insbesondere im Bereich Daten, Technologie und Digitalisierung. ...",
  "descriptionHtml": "<h3>Intro</h3>Aufbau einer modernen Datenplattform mit hohem Gestaltungsspielraum<br>\n                                Private Equity Umgebung mit viel Dynamik und guten Entwicklungsperspektiven<h3>Firmenprofil</h3><p>Unser Mandant ist ein mittelständisches Unternehmen in einer dynamischen Wachstums- und Transformationsphase. Unterstützt durch professionelle Investoren werden strategische Zukunftsprojekte vorangetrieben, insbesondere im Bereich Daten, Technologie und Digitalisierung. ...",
  "externalDescriptionUrl": null,
  "postedAt": "2026-10-10T08:04:00Z",
  "refreshedAt": "2026-10-10T08:04:00Z",
  "activeUntil": "2026-11-09T08:04:22Z",
  "searchQuery": "\"data engineer\" in Berlin",
  "scrapedAt": "2026-10-11T15:52:15.219Z"
}
```

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

| | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| 1,000 jobs | $0.40 | $0.32 | $0.26 | $0.20 |

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

A run that saves 10,000 XING jobs with full details comes to $4.00 on the Free plan and $2.00 on Business. The actor applies the remote, type, level, salary and date filters after XING answers, and the jobs they remove are not charged; neither are repeated jobs or jobs that the new-only mode holds back.

### Limits

- XING shows at most 2,000 results per search, 20 per page. XING lists some jobs more than once: on 11 October 2026 the first 360 results for `software` held 311 different jobs. Run broad searches city by city.
- All filters except keywords, location and radius work on those 2,000 results, so a narrow filter on a broad search returns only the matches among them. Put the condition into the keywords or the location when you need every match.
- Of the 1,026 jobs read in September 2026, 129 had a salary from the employer, 624 only XING's estimate and 273 neither. Student jobs seldom have either: 20 of 24 `Werkstudent` jobs in Vienna came without one in October 2026.
- XING attaches no period to a salary. Its estimates are yearly and so are most published salaries, but 17 of those 129 were monthly or hourly amounts, such as `2500` to `4500` or `17` to `20`. **Minimum yearly salary (EUR)** compares the numbers as they are, so such jobs drop out, and Swiss francs count as 1.05 euros each.
- `companyKununuRating` stayed empty on all 1,180 jobs read in September and October 2026, and `skills` stays empty too: the public job pages carry neither.
- `zipCode` was filled on 395 of the 1,026 jobs, and `companySize` was missing on 260.

### Daily alerts for new XING jobs

Turn on **Return only jobs new since the last run**, save the input as a task and schedule it every morning. Runs started from the API without a task need the same **Watch name** each time, such as `berlin-data`. Each run then returns only the jobs that earlier runs under that name did not, and a job stays on the list of known jobs for 90 days after it first came back.

### FAQ

#### Is it legal to scrape XING?

The actor reads the job ads XING shows to visitors who are not logged in, and only the pages that XING's robots.txt allows: the public search result pages and the job pages. It never opens member profiles. XING's job template has a contact block with recruiters' names and phone numbers, which the actor leaves out. Ads written as free text keep whatever the employer put in them, and 170 of 908 descriptions in a September 2026 run included an email address. You are responsible for how you store and use that text.

#### Does it cover Austria and Switzerland?

Yes. A September 2026 search for `software` with no location returned 785 jobs in Germany, 69 in Austria and 54 in Switzerland. Set **Location** to `Wien`, `Graz`, `Zürich` or `Basel` to stay in one region; Swiss jobs show salaries and estimates in `CHF`.

### Related scrapers

- [Arbeitsagentur Jobs Scraper](https://apify.com/deriverge/arbeitsagentur-jobs-scraper)
- [karriere.at Jobs Scraper](https://apify.com/deriverge/karriere-at-jobs-scraper)
- [jobs.ch Scraper](https://apify.com/deriverge/jobs-ch-scraper)
- [Career Site Jobs Search](https://apify.com/deriverge/career-site-jobs-search)

### Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the **Issues** tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the **API** tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/deriverge/xing-jobs-scraper/changelog.md

# Actor input Schema

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

What to search for, as on xing.com/jobs: a job title, skill or company, for example "data engineer", "Projektmanager" or "SAP".

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

City or region, for example Berlin, München, Hamburg, Wien or Zürich. Leave empty for all of XING.

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

Search around the location within this many kilometres, for example 20 or 50.

## `searchUrls` (type: `array`):

XING job search addresses, for example https://www.xing.com/jobs/search?keywords=developer\&location=Hamburg or https://www.xing.com/jobs/t-developer?location=Hamburg. Each link is its own search.

## `remote` (type: `array`):

Keep only jobs with one of these options. Leave empty for all. Each job page is opened to check it.

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

Keep only jobs whose employment type contains one of these words, for example Full-time, Part-time, Freelance, Internship or Working student.

## `careerLevels` (type: `array`):

Keep only jobs whose career level contains one of these words, for example Entry, Professional, Manager or Executive. Each job page is opened to check it.

## `salaryOnly` (type: `boolean`):

Keep only jobs whose employer publishes a salary; XING's own estimates do not count.

## `minSalary` (type: `integer`):

Keep only jobs whose published salary reaches this amount per year. Implies published salaries only.

## `postedWithinDays` (type: `integer`):

Keep only jobs published or refreshed recently, for example 7.

## `excludeKeywords` (type: `array`):

Drop jobs whose title or company contains any of these, for example Werkstudent or a recruiting agency.

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

Opens each job page for the posting date, career level, remote option, postcode, country, company size, industry and headquarters, the full description, keywords, discipline and language. The price is the same. Turned off, the run reads only the results pages, about 20 times fewer requests, and those fields stay empty.

## `newOnly` (type: `boolean`):

Keeps a snapshot per watch name (or per saved task) and returns only jobs that were not there before. Schedule it daily for a job alert.

## `watchName` (type: `string`):

Name of the snapshot used by the new-only mode, for example "berlin-data". Runs from a saved task get one automatically.

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

Hard cap on returned jobs. XING shows up to 2,000 results per search; split big searches by city.

## Actor input object example

```json
{
  "keywords": "data engineer",
  "location": "Berlin",
  "salaryOnly": false,
  "includeDetails": true,
  "newOnly": false,
  "maxItems": 20
}
```

# Actor output Schema

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

One row per job with company, salary, remote option, level, skills, description and apply link.

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

Jobs read and returned per search, how many each filter dropped, and request counts.

# 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": "data engineer",
    "location": "Berlin",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("deriverge/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": "data engineer",
    "location": "Berlin",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("deriverge/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": "data engineer",
  "location": "Berlin",
  "maxItems": 20
}' |
apify call deriverge/xing-jobs-scraper --silent --output-dataset

```

## MCP server setup

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