# XING Jobs Scraper — DACH Jobs, Salaries & Full Ads, No Phones (`highbrow_fame/xing-jobs`) Actor

Job ads from XING in Germany, Austria and Switzerland: title, company, town, type, career level, remote, salary (published or XING's estimate), dates and the full ad. No contact persons, no phones.

- **URL**: https://apify.com/highbrow\_fame/xing-jobs.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.80 / 1,000 job delivereds

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?

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 — DACH Jobs, Salaries & Full Ads, No Phones

Get job ads from XING, the jobs and business network of Germany, Austria and Switzerland: title, company with its XING page, size and industry, town, postcode, state and country, employment type, career level, discipline, remote options, the salary — kept apart as published by the employer or estimated by XING — the publication dates, XING's short summary with tasks and requirements, the apply link and the full ad text. Paste your XING search links, or type keywords and towns.

**Why this one**

- 🔗 **Your search, as you set it up.** Set up a search on xing.com and paste the link — keyword, town, radius, employment type, career level, remote, salary and date filters are kept. XING's job pages work too (https://www.xing.com/jobs/jobs-in-hamburg). Or type **Keywords** and **Towns** here and pick the filters below.
- 💶 **Salaries, honestly labelled.** XING shows its own estimate when the employer names no pay. `salaryType` tells them apart: in a live run of 2,250 jobs, 252 had a salary published by the employer, 1,468 only XING's estimate, 530 none.
- 📄 **The full ad in the same request.** Every job comes with its complete text, XING's summary, tasks and requirements, and the apply link — no extra page per job.
- 🆕 **New jobs only.** **Posted within** the last 24 hours, 7 or 30 days, as XING counts it. A live run read the "java" jobs of the last 7 days in all of XING — 834 — in 68 seconds, without the full ads.
- ⚡ **Fast.** No browser. A live run read four searches — all jobs in Hamburg, full-time hybrid "software" jobs around Munich paying 50,000-120,000 €, "buchhaltung" in Vienna from the last month, and "pflege" in Zürich — 2,250 jobs with full ads in 121 seconds.
- 🔒 **No contact persons, no phones.** Job ads name recruiters and HR staff with their numbers ("Ihr Ansprechpartner … Tel. …"). Those lines, contact blocks, phone numbers and e-mail addresses are taken out of every text; a template ad's contact section is never read. Companies are named; people are not.
- 💸 **You pay only for jobs delivered.** A link that is not a XING job search, a town XING does not know, or a search with no jobs comes back as a free record with the reason.

### What you get

For every job:

| Field | What it is |
|---|---|
| `title`, `jobId`, `url` | the job on XING |
| `company`, `companyXingPage`, `companySize`, `companyIndustry`, `companyLogo` | who is hiring, as the ad names it, and its XING company page; `employerWithheld` is true when the employer is a private person (see the FAQ) |
| `location`, `postcode`, `region`, `country` | the main workplace ("München", "80637", "Bayern", "DE") |
| `locations` | every workplace of the ad ("80637 München", "10178 Berlin") |
| `remoteOptions` | `full-remote`, `partly-remote`, `on-site` — one or more |
| `employmentType`, `employmentTypeText` | `full-time`, `part-time`, `freelance`, `student`, `temporary`, `seasonal`, `voluntary` — and XING's own words ("Vollzeit") |
| `careerLevel`, `careerLevelText` | `student`, `entry`, `experienced`, `manager`, `director`, `executive` — and XING's words |
| `discipline`, `industry` | XING's job field ("IT und Softwareentwicklung") and the employer's industry |
| `salaryMin`, `salaryMax`, `salaryCurrency` | the salary; usually a year, some employers enter a month |
| `salaryType` | `published` (the employer's figure) or `xing-estimate` (XING's estimate, with `salaryMedian`); empty when there is neither |
| `postedAt`, `refreshedAt`, `activeUntil` | first published, last refreshed (XING's "posted" date and its date filter use this one), online until |
| `isPromoted`, `language` | a paid, pushed listing; the language of the ad |
| `summary`, `responsibilities`, `requirements` | XING's short summary of the ad and its main tasks and requirements (not every ad has them) |
| `applyUrl` | the employer's application page, when the ad sends you there |
| `description` | the full ad as plain text, without contact persons, phone numbers and e-mail addresses (**Full job ad text**, on by default) |
| `input`, `place`, `position`, `scrapedAt` | which search it came from, the town XING matched, its place in the results, when it was read |
| `status`, `error` | `OK`, or why a search gave nothing |

#### Example

A real record from a live run — full-time hybrid "software" jobs within 50 km of Munich paying 50,000-120,000 €, 25 September 2026 (logo link and description shortened):

```json
{
  "input": "https://www.xing.com/jobs/search?keywords=software&location=München&radius=50&employmentType=FULL_TIME.ef2fe9&remoteOption=PARTLY_REMOTE.ca71ca&salary=50000_120000",
  "place": "München, Bayern, Deutschland",
  "position": 31,
  "jobId": "157858510",
  "title": "Software-Berater digital threads | Workshops, Modellierung, digital twin, digital thread (mwd)",
  "company": "Vesterling AG",
  "employerWithheld": false,
  "companyXingPage": "https://www.xing.com/pages/vesterling",
  "companySize": "51-200 Mitarbeitende",
  "companyIndustry": "Personaldienstleistungen und -beratung",
  "companyLogo": "https://www.xing.com/imagecache/public/scaled_original_image/…",
  "location": "München",
  "postcode": "80637",
  "region": "Bayern",
  "country": "DE",
  "locations": ["80637 München"],
  "remoteOptions": ["full-remote", "partly-remote", "on-site"],
  "employmentType": "full-time",
  "employmentTypeText": "Vollzeit",
  "careerLevel": "experienced",
  "careerLevelText": "Mit Berufserfahrung",
  "discipline": "Produktmanagement",
  "industry": "Automobil- und Fahrzeugbau",
  "salaryMin": 55000,
  "salaryMax": 90000,
  "salaryMedian": null,
  "salaryCurrency": "EUR",
  "salaryType": "published",
  "postedAt": "2026-09-14T07:45:36Z",
  "refreshedAt": "2026-09-14T07:45:36Z",
  "activeUntil": "2026-10-14T07:45:39Z",
  "isPromoted": true,
  "language": "de",
  "summary": "Ein IT-Beratungshaus sucht einen Software-Berater in München. Das Unternehmen bietet individuelle Softwarelösungen und Beratungsleistungen für die digitale Transformation.",
  "responsibilities": ["Beratung und Konzeption von Softwarelösungen.", "Entwicklung von Datenmodellen mit UML.", "Zusammenarbeit mit Fachexperten in Projekten."],
  "requirements": ["Abgeschlossenes Studium in Wirtschaftsinformatik.", "Langjährige Erfahrung in Anforderungsanalyse.", "Kenntnisse in Digital Thread und Java."],
  "url": "https://www.xing.com/jobs/muenchen-software-berater-digital-threads-workshops-modellierung-digital-twin-digital-thread-mwd-157858510",
  "applyUrl": "https://www.vesterling.com/jobs?utm_source=xing.com#!/onlineapplication/23378/XING",
  "description": "Vesterling Personalberatung für Technologie:\nWir sind Pioniere im Technology Recruiting und vermitteln Informatiker und Ingenieure in Festanstellung. …",
  "status": "OK",
  "scrapedAt": "2026-09-25T15:59:31.197Z"
}
```

### How to use it

1. Paste **Search links** from xing.com, one per line — or type **Keywords** and/or **Towns**. Every keyword is searched in every town; a keyword alone searches all of XING, a town alone gives all its jobs.
2. Optionally pick a **Radius** around the towns, **Employment type**, **Career level**, **Remote work**, a **Salary** range and **Posted within**.
3. Set **Max jobs per search**, and turn off **Full job ad text** if the other fields are enough (smaller download).
4. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

For a daily feed of new jobs, save your input as a task with **Posted within** set to the last 24 hours and schedule it every morning.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per job delivered** — see the price on this page. The full ad text costs nothing extra. Links that are not XING job searches, towns XING does not know and searches without jobs are free.

### FAQ

**How many jobs per search?** XING shows at most 2,000 places of one search, and the same job can come again further down the list — it is delivered once. A live run of all jobs in Hamburg (XING counts 23,446) stopped there with 1,622 different jobs. For more, split the search by keyword, town, employment type or date.

**Why are some jobs not about my keyword?** XING's job search is semantic: it looks for jobs that are similar in meaning, and it always finds something — even for a made-up word. The order is XING's relevance order.

**Why was my place not found?** XING searches by town. A town it does not know, a postcode, a state ("Bayern") or a country would be ignored by XING and the search would run everywhere, so the run looks each place up in XING's town list first and says so when it is not there. Leave the town empty to search all of XING.

**Why does a fully remote search ignore my town?** XING drops the town for fully remote jobs (on its site too): a fully remote job can be done from anywhere. Choose "Partly remote" as well, or leave remote empty, to keep the town.

**What is a XING estimate?** When an employer publishes no salary, XING shows its own estimate for the job. It comes with `salaryType: "xing-estimate"` and a median, so you can use it or leave it out. XING's salary filter counts estimates too.

**Why are contact persons missing?** They are personal data. Every job has its `url`, and `applyUrl` when the employer has an application page. When an employer is a private person — a household, or a name without a company — the name is left out and `employerWithheld` is true (5 of 2,250 jobs in a live run). A company page on XING that carries a person's name (a sole trader) keeps its name as published.

**Is this affiliated with XING?** No. This is an independent tool that reads the job ads XING publishes on its website.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

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

Set up a job search on xing.com with the filters you want and paste the address of the results page, or a XING job page such as https://www.xing.com/jobs/jobs-in-berlin. One per line.

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

Or search here without a link: job titles or keywords (java, pflege, buchhaltung, data analyst). Each keyword is searched in each town below, or everywhere when there is no town. The filters below apply.

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

Towns in Germany, Austria or Switzerland (Berlin, München, Hamburg, Wien, Zürich). XING searches by town: states, countries and postcodes are not places on XING. A town without keywords gives all its jobs.

## `radius` (type: `string`):

For the towns above: how far around the town.

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

Optional: only jobs of any of these kinds.

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

Optional: only jobs at any of these levels.

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

Optional: only jobs with any of these options. Fully remote on its own searches everywhere — XING drops the town for it, as on its site.

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

Optional: only jobs whose salary reaches at least this much a year (in the ad's currency). XING counts both published salaries and its own estimates. 0: no limit.

## `salaryMax` (type: `integer`):

Optional: only jobs whose salary starts at or below this. 0: no limit.

## `postedWithinDays` (type: `string`):

Optional: only jobs published or refreshed recently, as XING counts it.

## `maxListingsPerSearch` (type: `integer`):

Stops each search after this many jobs. XING shows at most 2,000 jobs of one search.

## `includeDescription` (type: `boolean`):

Adds the full ad text (without contact persons, phone numbers and e-mail addresses). Costs nothing extra; the download is larger.

## `maxConcurrency` (type: `integer`):

How many searches to work on at the same time.

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

Used only when XING turns a request down: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.xing.com/jobs/search?keywords=java&location=Berlin"
  ],
  "radius": "0",
  "salaryMin": 0,
  "salaryMax": 0,
  "postedWithinDays": "0",
  "maxListingsPerSearch": 30,
  "includeDescription": true,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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 = {
    "searchUrls": [
        "https://www.xing.com/jobs/search?keywords=java&location=Berlin"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/xing-jobs").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 = {
    "searchUrls": ["https://www.xing.com/jobs/search?keywords=java&location=Berlin"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/xing-jobs").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 '{
  "searchUrls": [
    "https://www.xing.com/jobs/search?keywords=java&location=Berlin"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/xing-jobs --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,highbrow_fame/xing-jobs"
        }
    }
}
```

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/nlMSbSeM0FDbNcmPq/builds/hjIHGi6RdvzAUCIgX/openapi.json
