# XING Jobs Scraper - DACH Jobs, Salaries & Company Data (`topapi/xing-jobs-scraper`) Actor

Scrape XING jobs in Germany, Austria and Switzerland by keyword, location, filters, search URL or company: full description, salary or XING estimate, apply link, remote, career level, skills, company. Monitor mode, company contact add-on. $0.36 per 1,000 jobs, no login.

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

## Pricing

from $0.36 / 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.

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

### What does XING Jobs Scraper do?

**XING Jobs Scraper** collects job postings from [XING](https://www.xing.com/jobs), the professional network of Germany, Austria and Switzerland. One row per job: title, company, location, remote option, employment type, career level, salary (the employer's figure or XING's own estimate), the full description, skills, apply link and the company's size, industry and address. Recruiters, HR-tech and sales teams use it to track who is hiring in the DACH region and at what pay.

- 🔎 **Search like on xing.com/jobs**: keywords × locations with a radius, or paste any XING search, SEO, job or company link
- 🎯 **XING's own filters**: posted within, employment type, career level, remote / hybrid / on-site, 22 disciplines, 23 industries and 121 segments, salary range, promoted ads
- 📄 **The whole posting in every row**: description as text, HTML and Markdown, XING's template sections (company, tasks, profile, benefits, contact), skills and XING's summary
- 💶 **Salary on 88% of jobs** (measured), marked as the employer's figure or XING's estimate
- 🏢 **Company profile add-on**: the employer's XING page with about text, legal notice, followers, size and offices with email, phone and website
- 📈 **Past XING's 1,000-result limit**: a big search is split automatically by discipline, employment type, career level and remote option
- 🔁 **Monitor mode** for scheduled runs: only jobs you have not received yet, with Slack, Discord, Telegram, WhatsApp or webhook alerts
- 🔓 No XING account, no cookies, no API key

### What data can you get from XING?

| | | |
|---|---|---|
| 💼 Job title, `job_id`, URL | 🏢 Company, size, industry, address | 📍 City, postcode, region, country |
| 🏠 Remote / hybrid / on-site | ⏱️ Employment type | 🎓 Career level |
| 🗂️ Discipline and industry | 💶 Salary min / max / median, currency | 🧮 Employer figure or XING estimate |
| 📅 Posted / refreshed, active until | 📝 Full description (text, HTML, Markdown) | 🧩 Template sections: tasks, profile, benefits, contact |
| 🛠️ Skills and keywords | 🔗 Apply link and application type | ✉️ Emails, phones and links written in the posting |
| 🌐 Company website and social links | 🏷️ Paid / top job / XING badge | 🔢 Search position and total |
| ➕ Company page: about, legal notice, followers | ➕ Offices with email, phone, website | 🔁 New / updated, first seen, reposts |

### How to scrape XING with XING Jobs Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) (it comes with monthly free credit).
2. Open **XING Jobs Scraper** and type keywords such as `Softwareentwickler` and a location such as `Berlin`, or paste a link from xing.com/jobs.
3. Pick filters (posted within, employment type, career level, remote, discipline, industry, salary) if you need them.
4. Set **Max jobs** and click **Start**.
5. Download the jobs as JSON, CSV, Excel or HTML, or read them through the API.

### ⬇️ Input

Every field is optional. An empty form returns 50 jobs from XING's whole list (over 560,000 jobs on 2026-10-28) in XING's order.

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `keywords` | list | Job titles, skills or companies, e.g. `Softwareentwickler`, `Data Engineer`. Each keyword is searched in each location. XING links pasted here work too. |
| `location` | list | Cities, regions or postcodes, e.g. `Berlin`, `München`, `Wien`, `Zürich`. Empty = all of XING. |
| `radius` | integer | Kilometres around each location (XING offers 10, 20, 50, 70, 100, 200). |
| `startUrls` | URL list | XING search links (`/jobs/search?…`, `/jobs/t-…`, `/jobs/d-…`, `/jobs/…-jobs-in-…`), job links (`/jobs/…-158830390`) and company pages (`/pages/…`). |
| `companies` | list | XING company pages or slugs, e.g. `deutschebahn`: every open job of that company. |
| **🎯 Filters** (applied by XING) | | |
| `postedWithin` | select | `any`, `24h`, `week`, `month`. Default `any`. |
| `postedAfter` | date | Only jobs posted or refreshed after this date or ISO time; overrides `postedWithin`. |
| `employmentType` | multi-select | Full-time, part-time, freelance, student, seasonal, temporary, volunteer. |
| `careerLevel` | multi-select | Student / intern, entry level, professional, manager, executive, senior executive. |
| `remoteOption` | multi-select | Full remote, hybrid, on-site. |
| `discipline` | multi-select | XING's 22 disciplines (IT and software development, Sales and commerce, HR…). |
| `industry` | multi-select | XING's 23 industries and their 121 segments. |
| `salaryMin` / `salaryMax` | integer | Yearly salary range in EUR. |
| `paidOnly` | boolean | Promoted ads only. |
| `sortBy` | select | `relevance` (XING's order, default) or `date` (newest first). |
| `language` | select | Labels in German (`de`, default) or English (`en`). |
| **✂️ Refine results** (applied before charging) | | |
| `countries` | list | Keep jobs in these countries, e.g. `DE`, `AT`, `CH`. |
| `withSalaryOnly` / `publishedSalaryOnly` | boolean | Only jobs with a salary / only with the employer's own salary. |
| `strictKeywordMatch` | boolean | Only jobs whose title, skills or text contain every keyword word. |
| `withApplyUrlOnly` | boolean | Only jobs that link to the employer's application page. |
| `excludeKeywords` / `excludeCompanies` | list | Drop jobs by word in title or company, or by company. |
| `skipReposts` | boolean | Drop the same job re-posted under a new id. |
| **➕ Extra data** | | |
| `includeCompanyDetails` | boolean | Company profile add-on (priced below). Default off. |
| **🔁 Monitoring** | | |
| `monitorMode`, `monitorStoreName` | boolean, text | Deliver only jobs earlier runs did not deliver. |
| `monitorIncludeUpdated`, `resetMonitor` | boolean | Re-deliver changed jobs; forget the memory. |
| `webhookUrl`, `slackWebhookUrl`, `discordWebhookUrl`, `telegramToken` + `telegramChatId`, `whatsapp…` | text | Alerts with the new jobs after each run. |
| **📦 Output** | | |
| `maxItems` | integer | Total jobs per run, default 50 (0 = no limit). |
| `maxItemsPerSearch` | integer | Cap per keyword × location, link or company. |
| `splitLargeSearches` | boolean | Go past XING's 1,000 results per search (default on). |
| `descriptionFormat`, `descriptionMaxLength` | select, integer | Text / HTML / Markdown, and a length cut. |
| `compact`, `excludeEmptyFields` | boolean | Core fields only (for AI / MCP); drop empty fields. |
| **⚙️ Advanced** | | |
| `proxyConfiguration`, `maxConcurrency` | proxy, integer | Optional proxy; pages read in parallel (default 8). |

Input names used by other XING actors are accepted too (`keyword`, `queries`, `searchQueries`, `startUrl`, `searchUrls`, `results_wanted`, `maxResults`, `limit`, `date_posted`, `daysOld`, `postedWithinDays`, `radiusKm`, `employment_type`, `seniority`, `workplace`, `min_price`, `minSalary`), so an existing API call keeps working.

#### Input JSON

```json
{
  "keywords": ["Data Engineer", "Projektmanager"],
  "location": ["Berlin", "München"],
  "radius": 30,
  "postedWithin": "week",
  "remoteOption": ["PARTLY_REMOTE", "FULL_REMOTE"],
  "careerLevel": ["PROFESSIONAL"],
  "includeCompanyDetails": true,
  "maxItems": 300
}
```

#### Paste a XING link to reuse the filters you set on the site

Set up the search on [xing.com/jobs](https://www.xing.com/jobs) and paste the address into **XING URLs**: keywords, location, radius, career level, employment type, discipline, industry, remote, salary, date and promoted-only all come across. SEO pages such as `xing.com/jobs/d-it-und-softwareentwicklung/l-hamburg` or `xing.com/jobs/projektmanager-jobs-in-muenchen` work the same way. Filters in the form are added on top.

#### XING's search is semantic

XING fills its result pages with related jobs, so a search for `Kubernetes` also returns DevOps and cloud roles that never say "Kubernetes", and a typo still returns jobs. Turn on **Keyword must appear in the job** to keep only jobs whose title, skills or description contain every word you typed.

#### More than 1,000 jobs from one search

XING shows at most 1,000 results per search. With **Split searches past 1,000 jobs** on (the default), a bigger search continues per discipline, then employment type, career level and remote option, and duplicates are dropped, so `Hamburg` + 50 km reached 2,000 different jobs in one run.

### ⬆️ Output

One item per job. A real row from a test run (shortened):

```json
{
  "job_id": "158830390.e07d98",
  "title": "Projektmanager TGA (m/w/d)",
  "company": "Dussmann Service Deutschland GmbH",
  "company_size": "10.001 oder mehr Mitarbeitende",
  "location": "Frankfurt am Main",
  "location_zip": "60489",
  "remote": "Hybrid",
  "job_type": "Vollzeit",
  "career_level": "Mit Berufserfahrung",
  "discipline": "Ingenieurwesen und technische Berufe",
  "salary": "EUR 70,000 - EUR 80,000",
  "salary_raw_minimum": 70000,
  "salary_raw_maximum": 80000,
  "salary_is_estimated": false,
  "date_posted": "2026-10-27T17:49:16Z",
  "active_until": "2026-12-26T17:57:06Z",
  "skills": ["Mängelmanagement", "Risikomanagement", "Active sourcing", "Energietechnik"],
  "url": "https://www.xing.com/jobs/frankfurt-main-projektmanager-tga-158830390",
  "description_text": "Über uns\n\nDussmann ist Lösungspartner aus Leidenschaft …",
  "company_details": { "name": "Dussmann Group", "followers": 1975, "email": "hotline@dussmann.de", "phone": "+49 3020250", "website": "https://www.dussmanngroup.com/" }
}
```

#### Fields

Filled share measured on a 300-job run (3 keywords × Berlin and München, 2026-10-28). The dataset's **Jobs**, **Salary**, **Companies** and **Monitor** views show the main columns.

| Field | Fill | Meaning |
|---|---:|---|
| `job_id`, `job_number`, `slug`, `global_id`, `url` | 100% | XING's ids and the job page |
| `title`, `company` | 100% | As the employer wrote them |
| `company_id`, `company_page_name`, `company_logo` | 82% | XING company record |
| `company_size`, `company_size_min`, `company_size_max` | 73% | Headcount band |
| `company_industry`, `company_street`, `company_zip`, `company_city`, `company_country` | 77-81% | Company address and industry |
| `company_public_profile`, `company_entity_page_id` | 73% | XING company page |
| `company_website`, `social_links` | 20%, 29% | From the posting template (kununu, LinkedIn, Facebook…) |
| `discipline`, `job_category` (industry), `career_level` + their ids | 100% | XING's classification |
| `location`, `locations`, `location_region`, `location_country_code`, `location_city_id` | 100% | Where the job is |
| `location_zip`, `location_street` | 54%, 17% | When the employer gives them |
| `remote`, `remote_options` | 100% | Remote, Hybrid or On-site |
| `salary`, `salary_raw_type`, `salary_raw_minimum`, `salary_raw_maximum`, `salary_raw_currency`, `salary_is_estimated` | 88% | 24% employer range, 63% XING estimate |
| `salary_raw_median` | 63% | Median of XING's estimate |
| `job_type`, `employment_type_id` | 100% | Employment type |
| `date_posted`, `activated_at`, `active_until` | 100% | Dates (ISO) |
| `keywords`, `skills` | 100%, 86% | XING's keywords and extracted skills |
| `language`, `job_code` | 100%, 63% | Posting language, employer reference |
| `apply_url` | 74% | Employer's application page |
| `application_type`, `redirects_to_third_party`, `apply_on_xing_without_account` | 100%, 100%, 26% | How to apply |
| `description_text`, `description_html`, `description_markdown`, `description_type` | 100% | The full posting |
| `company_description`, `responsibilities`, `requirements`, `benefits`, `contact_info`, `sections` | 30-34% | Template postings, split by section |
| `summary_introduction`, `summary_qualifications`, `summary_key_responsibilities` | 49% | XING's summary of the posting |
| `header_image`, `image_urls`, `youtube_video_url` | 31%, 31%, 6% | Template media |
| `extracted_emails`, `extracted_phones`, `extracted_urls` | 33%, 22%, 23% | Contacts written in the posting |
| `highlight`, `non_matching_facts` | 21%, 100% | XING's badge (e.g. "Letzte Chance") and card facts |
| `paid`, `top_job`, `prioritized`, `service_offering_group` | 100% | Ad flags |
| `search_query`, `search_location`, `search_total`, `search_position`, `search_tracking_token`, `search_url` | 100% (`search_url` when a link was given) | Where the row came from |
| `company_details` | with the add-on | Company page (see below) |
| `change_type`, `first_seen_at` | monitor mode | `new` or `updated` |
| `is_repost`, `repost_of_id`, `content_hash` | 100%, 2%, 100% | Repost and change detection |
| `scraped_at` | 100% | When the row was read |

`company_details` (add-on, 35 companies on a 200-job run): `about` and `followers` 35/35, `website` 33/35, `size_min` 33/35, `offices` 34/35, `email` 27/35, `phone` 27/35, `imprint` (legal notice) 18/35, plus `page_url`, `name`, `slogan`, `employees_count`, `address`.

### How can I use XING jobs data?

- 🧲 **Recruiting agencies**: find companies hiring for the roles you place, with the company's email and phone from the add-on.
- 📊 **HR and compensation teams**: benchmark salaries by role, city and career level; employer ranges and XING estimates are kept apart.
- 💼 **B2B sales**: hiring is a buying signal; filter by industry, company size and discipline to build target lists.
- 🛰️ **Job boards and aggregators**: a daily feed of new DACH jobs with full descriptions in monitor mode.
- 🔬 **Labour-market research**: demand for skills, remote share and posting volumes across Germany, Austria and Switzerland.
- 🤖 **AI agents**: compact rows through the API or MCP for job matching and market questions.

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

XING Jobs Scraper is pay-per-result: **$0.36 per 1,000 jobs**, with the full description, salary and company fields in every row. No start fee. Jobs removed by your filters, duplicates and jobs already delivered in monitor mode are never charged.

| Jobs | Price |
|---:|---:|
| 100 | $0.036 |
| 1,000 | $0.36 |
| 10,000 | $3.60 |

| Add-on | Price |
|---|---|
| Company profile (`company-details`) | $0.00054 per company, once per company per run, only when its XING page exists (a 300-job run carried 132 companies: $0.071) |

Apify platform usage (compute, proxy) is included in these prices.

### Integrations, API, scheduling & MCP

- **Schedules:** run it hourly, daily or weekly from the **Schedules** tab; with **Only new jobs** each run returns only jobs you have not received.
- **Alerts:** Slack, Discord, Telegram, WhatsApp or any webhook, straight from the input.
- **No-code:** Make, Zapier, n8n, Google Sheets, Airtable via [Apify integrations](https://docs.apify.com/integrations).
- **API:** call it from Node.js or Python with `apify-client`; code on the [API tab](https://apify.com/topapi/xing-jobs-scraper/api/python) and the [Apify API reference](https://docs.apify.com/api/v2).
- **MCP / AI agents:** connect Claude, Cursor or any MCP client through the [MCP tab](https://apify.com/topapi/xing-jobs-scraper/api/mcp) and ask for XING jobs in plain language; **Compact rows** keeps the answers small.

### More TopApi scrapers

<table>
<tr>
<td>💼 <a href="https://apify.com/topapi/indeed-jobs-scraper">Indeed Jobs Scraper</a>: the same job rows from Indeed's country sites</td>
<td>🌴 <a href="https://apify.com/topapi/welcome-to-the-jungle-jobs-scraper">Welcome to the Jungle Jobs Scraper</a>: job rows from welcometothejungle.com</td>
<td>🧭 <a href="https://apify.com/topapi">All TopApi actors</a></td>
</tr>
</table>

### Limits & empty runs

- **Results per search:** XING returns at most 1,000 jobs per search, 20 per request. Bigger searches are split (see above); with splitting off, a run stops at 1,000 per search.
- **Speed:** 50 jobs in 2.5 seconds, 1,000 jobs in 13 seconds on 256 MB; past the 1,000-job window XING answers its filtered searches more slowly (2,000 jobs in about 100 seconds).
- **Salary:** 12% of jobs carry no salary at all; `salary` is `null` on those, never zero.
- **Geo-fenced jobs:** XING hides some jobs from visitors in some countries (10 of 20 on a page read from Canada); a page that comes back with hidden jobs is read again through an Apify proxy connection.
- **Not available signed out, so not fields:** recruiter names (XING shows the hiring contact only to signed-in members), the address of email applications (1 of 300 jobs applies by email; XING sends it without the address), kununu ratings (the kununu link from the posting is in `social_links`) and "matching facts" (they compare a job with a signed-in member's profile). Emails written in the posting itself are in `extracted_emails`.
- **Empty dataset:** your filters removed every job (the status line says which filter removed how many), or in monitor mode nothing is new. Nothing is charged for an empty run.

### FAQ

#### How many jobs can XING Jobs Scraper collect in one run?

As many as match: set **Max jobs** to `0`. One XING search stops at 1,000 results, and the actor splits bigger searches by discipline, employment type, career level and remote option to keep going.

#### Can I run XING Jobs Scraper on a schedule to get only new jobs?

Yes. Save your input as a task, turn on **Only new jobs (monitor)** and add a daily schedule. Each run asks XING only for jobs refreshed since the previous run and delivers the ones you have not received; a run with nothing new charges nothing.

#### Does XING Jobs Scraper return the full job description?

Yes, in every row and at no extra cost: plain text, HTML and Markdown, plus the template sections (company, tasks, profile, benefits, contact) when the employer used XING's template.

#### Does XING Jobs Scraper give salaries?

On 88% of jobs in our test. `salary_is_estimated` tells you whether the figure is the employer's (`false`) or XING's estimate (`true`); **Employer-published salary only** keeps only the employer's figures.

#### Can XING Jobs Scraper get company contact details?

Yes, with the **Company profile** add-on: the employer's XING page with offices, email, phone, website, about text and legal notice, charged once per company per run.

#### Can I integrate XING Jobs Scraper with other apps?

Yes: Make, Zapier, n8n, Google Sheets, Slack and more via [Apify integrations](https://docs.apify.com/integrations), or [webhooks](https://docs.apify.com/integrations/webhooks) when a run finishes. The built-in alerts post new jobs to Slack, Discord, Telegram, WhatsApp or your webhook.

#### Can I use XING Jobs Scraper with the Apify API?

Yes. Start runs and read datasets with `apify-client` for [Node.js](https://apify.com/topapi/xing-jobs-scraper/api/javascript) or [Python](https://apify.com/topapi/xing-jobs-scraper/api/python). Input names of other XING actors are accepted, so existing calls keep working.

#### Can I use XING Jobs Scraper through an MCP server?

Yes. Open the [MCP tab](https://apify.com/topapi/xing-jobs-scraper/api/mcp), connect Claude Desktop, Cursor or another MCP client, and ask for XING jobs in plain language. Turn on **Compact rows** to keep answers short.

#### Do I need a XING account, cookies or an API key?

No. The actor reads what XING shows to every visitor.

#### Why did my XING Jobs Scraper run return no results?

Usually the refine filters: several together (a country, employer salary only and a strict keyword) can remove every job. The status line and the `RUN_SUMMARY` record give the matches per search and what each filter removed. In monitor mode, an empty run means nothing new since the last run.

#### Is it legal to scrape XING?

XING Jobs Scraper reads only public job postings and public company pages; it does not log in. Postings and company pages can name people, and personal data is regulated (for example by GDPR), so make sure you have a legitimate purpose before you use it.

#### Your feedback

Found a bug or missing a field? Open an issue on the [Issues tab](https://apify.com/topapi/xing-jobs-scraper/issues/open).

# Actor input Schema

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

Job titles, skills or companies, one per line, e.g. "Softwareentwickler", "Data Engineer", "Pflegefachkraft". XING job, search or company URLs pasted here work too.

## `location` (type: `array`):

Cities, regions or postcodes, one per line, e.g. "Berlin", "München", "Wien", "Zürich". Empty = all of XING (Germany, Austria, Switzerland and more).

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

Distance around each location. XING offers 10, 20, 50, 70, 100 and 200 km; any number works. Empty = XING's default for the place.

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

XING search URLs (xing.com/jobs/search?…, /jobs/t-…, /jobs/d-…, /jobs/…-jobs-in-…) with the filters set in the browser, job URLs (xing.com/jobs/…-123456789) and company pages (xing.com/pages/…).

## `companies` (type: `array`):

XING company pages or their slugs, one per line, e.g. "https://www.xing.com/pages/deutschebahn" or "deutschebahn": every open job of that company.

## `postedWithin` (type: `string`):

Only jobs posted or refreshed in this window (XING's own date filter).

## `postedAfter` (type: `string`):

Only jobs posted or refreshed after this date (or ISO time, e.g. 2026-10-01T08:00:00Z). Overrides "Posted within". Pairs with scheduled runs.

## `employmentType` (type: `array`):

Full-time, part-time, freelance, student, seasonal, temporary or volunteer. Several = any of them.

## `careerLevel` (type: `array`):

From student / intern to senior executive. Several = any of them.

## `remoteOption` (type: `array`):

Full remote, hybrid (partly remote) or on-site. Several = any of them.

## `discipline` (type: `array`):

XING's 22 job disciplines, e.g. IT and software development, Sales and commerce, HR. Several = any of them.

## `industry` (type: `array`):

XING's 23 industries and their 121 segments, e.g. Internet and IT › Computer software. Several = any of them.

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

Only jobs whose salary (published or XING's estimate) reaches this yearly amount, e.g. 60000.

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

Only jobs whose salary starts at or below this yearly amount.

## `paidOnly` (type: `boolean`):

Only paid (promoted) job ads, XING's p=1 filter.

## `sortBy` (type: `string`):

XING orders signed-out searches by relevance only; "Newest first" reads up to 1,000 matches and delivers them newest first.

## `language` (type: `string`):

Language of XING's labels (employment type, career level, discipline, country). Job texts stay as the employer wrote them.

## `countries` (type: `array`):

Keep only jobs in these countries (ISO codes), e.g. "DE", "AT", "CH". Empty = all.

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

Only jobs that show a salary (the employer's figure or XING's estimate).

## `publishedSalaryOnly` (type: `boolean`):

Only jobs whose salary comes from the employer, not XING's estimate.

## `strictKeywordMatch` (type: `boolean`):

XING's search is semantic and fills pages with related jobs; on = keep only jobs whose title, skills or text contain every keyword word.

## `withApplyUrlOnly` (type: `boolean`):

Only jobs that link to the employer's own application page (apply_url).

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

Drop jobs whose title or company contains any of these words, e.g. "Praktikum", "Zeitarbeit".

## `excludeCompanies` (type: `array`):

Drop jobs of these companies (name or XING page slug), e.g. recruiting agencies.

## `skipReposts` (type: `boolean`):

Drop a job when the same company posted the same title and text under another id (this run or, in monitor mode, earlier runs).

## `includeCompanyDetails` (type: `boolean`):

Adds the employer's XING page to each job: about text, legal notice, followers, size, offices with email, phone and website. Charged once per company per run, only when the page exists.

## `monitorMode` (type: `boolean`):

Remembers delivered jobs per search in a named store and delivers only new ones; a poll asks XING only for jobs refreshed since the last run. Pairs with a daily schedule.

## `monitorStoreName` (type: `string`):

Named key-value store that keeps the memory. Use one name per schedule.

## `monitorIncludeUpdated` (type: `boolean`):

In monitor mode, deliver a known job again when its title, text, salary or location changed (change_type "updated").

## `resetMonitor` (type: `boolean`):

Forget what earlier runs delivered (this run delivers everything again).

## `webhookUrl` (type: `string`):

POST the new jobs (JSON) to this URL after the run.

## `webhookHeaders` (type: `object`):

Extra headers for the webhook, e.g. {"Authorization": "Bearer …"}.

## `slackWebhookUrl` (type: `string`):

Slack incoming-webhook URL for a message with the new jobs.

## `discordWebhookUrl` (type: `string`):

Discord webhook URL for a message with the new jobs.

## `telegramToken` (type: `string`):

Telegram bot token (with the chat id below).

## `telegramChatId` (type: `string`):

Chat id the Telegram bot posts to.

## `whatsappPhoneNumberId` (type: `string`):

WhatsApp Cloud API phone number id (with token and recipient).

## `whatsappAccessToken` (type: `string`):

WhatsApp Cloud API access token.

## `whatsappTo` (type: `string`):

Recipient phone number in international format.

## `notificationLimit` (type: `integer`):

How many jobs each alert lists.

## `notifyOnlyChanges` (type: `boolean`):

Off = also send an alert when a run finds nothing new.

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

Total jobs per run (0 = no limit). XING serves 1,000 jobs per search; bigger searches are split automatically (see below).

## `maxItemsPerSearch` (type: `integer`):

Cap for each keyword × location, URL or company (0 or empty = no per-search cap).

## `splitLargeSearches` (type: `boolean`):

XING returns at most 1,000 jobs per search; on = a bigger search is re-run per discipline, then employment type, career level and remote option to reach more jobs.

## `descriptionFormat` (type: `string`):

Which forms of the job text each row carries.

## `descriptionMaxLength` (type: `integer`):

Cut text fields to this many characters (0 = full text).

## `compact` (type: `boolean`):

Core fields only (title, company, location, salary, dates, links), trimmed for LLM pipelines.

## `excludeEmptyFields` (type: `boolean`):

Leave out fields XING does not publish for a job instead of null.

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

Optional. The default (no proxy) reads XING directly, with Apify's datacenter and German residential proxies as automatic fallbacks.

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

Search pages read at the same time (each page = 20 jobs).

## Actor input object example

```json
{
  "keywords": [
    "Softwareentwickler"
  ],
  "location": [
    "Berlin"
  ],
  "postedWithin": "any",
  "paidOnly": false,
  "sortBy": "relevance",
  "language": "de",
  "withSalaryOnly": false,
  "publishedSalaryOnly": false,
  "strictKeywordMatch": false,
  "withApplyUrlOnly": false,
  "skipReposts": false,
  "includeCompanyDetails": false,
  "monitorMode": false,
  "monitorStoreName": "xing-jobs-monitor",
  "monitorIncludeUpdated": false,
  "resetMonitor": false,
  "notificationLimit": 10,
  "notifyOnlyChanges": true,
  "maxItems": 50,
  "splitLargeSearches": true,
  "descriptionFormat": "all",
  "descriptionMaxLength": 0,
  "compact": false,
  "excludeEmptyFields": false,
  "maxConcurrency": 8
}
```

# Actor output Schema

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

One item per XING job: posting, salary, apply link, company and the optional company profile.

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

Per-search counts (read, delivered, filtered, duplicates, seen before), date window, egress route and charges.

# 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": [
        "Softwareentwickler"
    ],
    "location": [
        "Berlin"
    ],
    "maxItems": 50
};

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

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

```

## MCP server setup

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