# XING Jobs Scraper: Germany, Austria & Switzerland Jobs (`rjmacarthy/xing-jobs-scraper`) Actor

Scrape XING jobs in Germany, Austria & Switzerland: full descriptions, posted salaries and XING salary estimates (flagged), remote/hybrid, career level, company data, all search filters, browser-URL input and an "only new jobs" mode. No login, no browser.

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

## Pricing

from $1.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?

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: Germany, Austria & Switzerland Jobs

**XING Jobs Scraper** extracts job postings from **XING** (xing.com/jobs), the leading professional network and job board in Germany, Austria and Switzerland (DACH). It returns clean, structured job data: title, company, city and country, remote / hybrid / on-site, employment type, career level, discipline and industry, **structured salaries (posted ranges and XING's own salary estimates, clearly flagged)**, posting and expiry dates, full description, skills, apply link and XING company data.

Unlike the other XING scrapers in the Store, it supports **every XING search filter** (or simply **paste a XING search URL from your browser**), returns salaries as numbers with an `isEstimate` flag instead of a text blob, has an **"only new jobs" mode** for scheduled alerts, charges **no start fee**, and uses the **same output schema as our Dice and SEEK job scrapers**, so you can merge all your job data in one pipeline. It reads XING's public job API, so it is fast (20 complete jobs per request), needs no login, no browser and no proxy, and you **only pay for the jobs you get**.

### What data can you get from XING?

| Field | Example |
|---|---|
| `title`, `company` | `Software Developer für KI-Projekte (m/w/d)`, `Pexon Consulting GmbH` |
| `location`, `city`, `region`, `postalCode`, `countryCode` | `Berlin, Germany`, `Berlin`, `Land Berlin`, `10243`, `DE` |
| `workplaceType`, `isRemote`, `remoteOptions` | `hybrid`, `false`, `["PARTLY_REMOTE"]` |
| `employmentType` (+ XING label) | `FULL_TIME` (`Full-time` / `Vollzeit`) |
| `careerLevel` (+ XING label) | `PROFESSIONAL` (`Professional/Experienced`) |
| `discipline`, `industry` | `IT and software development`, `Consulting` |
| `salary` `{min, max, median, currency, interval, isEstimate}` | `56000`, `74500`, `63000`, `EUR`, `year`, `true` |
| `salaryIsEstimate` | `true` when the figure is XING's estimate, `false` when the employer posted it |
| `postedAt`, `refreshedAt`, `validThrough` | ISO dates |
| `url`, `applyUrl`, `applyType`, `appliesOnXing` | XING job page, employer apply page, `external` / `xing` |
| `skills`, `keywords` | `["Python", "AWS", "FastAPI"]` |
| `summary`, `keyResponsibilities`, `keyQualifications` | XING's short AI summary of the ad, when it has one |
| `descriptionText`, `descriptionHtml` | Full job description (contact e-mails and phone numbers removed) |
| `companyProfile` | Legal name, XING company page, logo, industry, company size, headquarters; kununu rating fields when XING provides them |
| `id`, `scrapedAt`, `sourceUrl`, `detailsFetched` | `xing:149675415`, run metadata |

### Use cases

- **Job market and salary research for the DACH region.** Pull thousands of postings with structured salary ranges and XING's salary estimates per role, city, career level and industry.
- **Job alerts and job boards.** Schedule a search with **Only new jobs** and send new postings to Slack, e-mail, Google Sheets or your own job board.
- **Recruiting and sales intelligence.** See which companies are hiring for which roles, where, at what level and how fast, with company size and industry for every employer.
- **Remote and hybrid work tracking.** Filter for fully remote or hybrid jobs and follow how employers in Germany, Austria and Switzerland offer them.
- **One jobs dataset across boards.** The output schema matches our Dice and SEEK scrapers (`id`, `company`, `title`, `location`, `workplaceType`, `employmentType`, `salary`, `postedAt`, `jobUrl`, `applyUrl`, `descriptionText` ...).

### How to scrape XING jobs

1. Click **Try for free** or **Start**.
2. Enter **Keywords** and, optionally, a **City**, **Radius**, **Country** and filters. Or paste XING search URLs (or single job URLs) into **Or paste XING URLs**.
3. Set **Max jobs per search** (default 100).
4. Click **Start**, then download the jobs as JSON, CSV, Excel or HTML, or fetch them through the API.

#### Input example: search form

```json
{
    "keywords": "data engineer",
    "location": "München",
    "radius": 50,
    "country": "DE",
    "remoteOptions": ["FULL_REMOTE", "PARTLY_REMOTE"],
    "employmentTypes": ["FULL_TIME"],
    "careerLevels": ["PROFESSIONAL", "MANAGER"],
    "disciplines": ["1011"],
    "postedWithinDays": 7,
    "salaryMin": 60000,
    "maxJobs": 200,
    "includeDescription": true
}
```

#### Input example: URLs from your browser

```json
{
    "startUrls": [
        { "url": "https://www.xing.com/jobs/search?keywords=Projektmanager&location=Hamburg&radius=50&remoteOption=PARTLY_REMOTE.ca71ca" },
        { "url": "https://www.xing.com/jobs/berlin-python-developer-financial-services-all-genders-156675213" }
    ],
    "maxJobs": 100
}
```

#### Input example: daily alert for new jobs in Switzerland

```json
{
    "keywords": "SAP Berater",
    "country": "CH",
    "onlyNewJobs": true,
    "stateKey": "sap-switzerland",
    "maxJobs": 0
}
```

#### Filters

| Input | Values |
|---|---|
| `country` | `ALL` (default), `DE`, `AT`, `CH` |
| `remoteOptions` | `FULL_REMOTE`, `PARTLY_REMOTE` (hybrid), `NON_REMOTE` (on-site) |
| `employmentTypes` | `FULL_TIME`, `PART_TIME`, `CONTRACTOR` (freelance), `INTERN` (students), `TEMPORARY`, `SEASONAL`, `VOLUNTARY` |
| `careerLevels` | `STUDENT_INTERN`, `ENTRY_LEVEL`, `PROFESSIONAL`, `MANAGER`, `DIRECTOR`, `EXECUTIVE` |
| `disciplines` | XING's 22 job functions, e.g. `1011` IT and software development, `1018` Project management, `1021` Sales and commerce (pick from the list in the input form; English or German names also work) |
| `industries` | XING's 23 industries, e.g. `90000` Internet and IT, `120000` Banking and financial services |
| `postedWithinDays` | any number of days, `0` = any time |
| `salaryMin` / `salaryMax` | annual gross, as on xing.com (0 to 200,000) |
| `sortBy` | `relevance` (XING's order) or `date` (newest first) |

### Output example

A real item from the prefilled search (description shortened):

```json
{
  "id": "xing:149675415",
  "source": "xing",
  "jobId": "149675415",
  "title": "Software Developer für KI-Projekte (m/w/d)",
  "company": "Pexon Consulting GmbH",
  "location": "Berlin, Germany",
  "locations": ["Berlin, Germany"],
  "city": "Berlin",
  "region": "Land Berlin",
  "postalCode": "10243",
  "countryCode": "DE",
  "country": "Germany",
  "isRemote": false,
  "workplaceType": "hybrid",
  "remoteOptions": ["PARTLY_REMOTE"],
  "employmentType": "FULL_TIME",
  "employmentTypeLabel": "Full-time",
  "careerLevel": "PROFESSIONAL",
  "careerLevelLabel": "Professional/Experienced",
  "discipline": "IT and software development",
  "disciplineId": "1011",
  "industry": "Other services",
  "industryId": "230500",
  "salary": {
    "min": 56000,
    "max": 74500,
    "median": 63000,
    "currency": "EUR",
    "interval": "year",
    "text": "EUR 56,000 - 74,500 per year (XING estimate)",
    "isEstimate": true,
    "source": "xing-estimate"
  },
  "salaryIsEstimate": true,
  "postedAt": "2026-01-20T08:14:00.000Z",
  "refreshedAt": "2026-01-20T08:14:00.000Z",
  "validThrough": "2027-01-20T08:14:03.000Z",
  "url": "https://www.xing.com/jobs/berlin-software-developer-ki-projekte-149675415",
  "jobUrl": "https://www.xing.com/jobs/berlin-software-developer-ki-projekte-149675415",
  "applyUrl": "https://www.xing.com/jobs/berlin-software-developer-ki-projekte-149675415",
  "applyType": "xing",
  "appliesOnXing": true,
  "redirectsToThirdParty": false,
  "summary": "Pexon Consulting sucht einen Backend-Entwickler in Berlin. Das Unternehmen ist auf die Entwicklung moderner Backend-Systeme und KI-Projekte spezialisiert.",
  "keyResponsibilities": ["Entwicklung robuster Backend-Services mit Python.", "Integration und Management von APIs.", "Gestaltung und Verwaltung von Datenbanken."],
  "keyQualifications": ["Mindestens 3 Jahre Erfahrung in Entwicklung.", "Kenntnisse in Cloud Computing erforderlich.", "Verhandlungssichere Deutsch- und Englischkenntnisse."],
  "skills": [],
  "keywords": ["pexon consulting gmbh", "berlin", "land berlin", "deutschland"],
  "descriptionText": "Du möchtest moderne Backend-Systeme entwickeln und gleichzeitig an innovativen KI-Projekten mitarbeiten? In dieser Rolle entwickelst du skalierbare Cloud-Anwend …",
  "descriptionHtml": "<p>Du möchtest moderne Backend-Systeme entwickeln und gleichzeitig an innovativen <strong> …",
  "language": "de",
  "jobCode": "15568202,71ca0ee38774aa04cc60",
  "isTopJob": false,
  "isPaidListing": true,
  "companyProfileUrl": "https://www.xing.com/pages/pexon-consulting-gmbh",
  "companyLogoUrl": "https://www.xing.com/imagecache/public/scaled_original_image/…",
  "companyProfile": {
    "id": "1974086",
    "name": "Pexon Consulting GmbH",
    "xingUrl": "https://www.xing.com/pages/pexon-consulting-gmbh",
    "logoUrl": "https://www.xing.com/imagecache/public/scaled_original_image/…",
    "industry": "Consulting",
    "size": "51-200 employees",
    "city": "Eschborn",
    "country": "Germany",
    "kununuRating": null,
    "kununuReviewCount": null,
    "kununuRecommendationRate": null,
    "kununuUrl": null
  },
  "detailsFetched": true,
  "sourceUrl": "https://www.xing.com/jobs/search?keywords=python%20developer&location=Berlin&cityId=2950159.e2912c&radius=20",
  "scrapedAt": "2026-11-02T13:38:51.670Z"
}
```

Notes on the fields:

- **Salary.** XING shows either a salary the employer posted (`salary.source: "xing"`, `isEstimate: false`) or its own estimate for the role (`source: "xing-estimate"`, `isEstimate: true`, with a `median`). XING gives amounts without a period; `interval` is inferred from the amount (XING's figures are annual gross; single amounts under 15,000 are monthly, under 200 hourly). Currency is as XING gives it (EUR, or CHF for some Swiss jobs).
- **Dates.** `postedAt` is when the job first went live; `refreshedAt` is when it was last (re)published, which is the date XING displays and what **Posted within** filters on.
- **Apply.** `applyType` is `external` (the employer's site, `applyUrl` points there) or `xing` (apply on XING; `applyUrl` is the XING job page).
- **Labels** (`employmentTypeLabel`, `careerLevelLabel`, `discipline`, `industry`, `companyProfile.size`) are in English by default; set **Label language** to German to get XING's German labels. Descriptions stay in the language they were written in.

A `RUN_SUMMARY` record in the run's key-value store lists, for every search: jobs output, jobs listed, already-seen jobs, total results reported by XING, the resolved city, request counts and any warnings.

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

This Actor uses **pay-per-event** pricing: **$0.001 per job** in your dataset (event `job`). There is **no start fee** and no subscription.

| Jobs | Price |
|---|---|
| 20 (the prefilled example) | $0.02 |
| 100 | $0.10 |
| 1,000 | **$1.00** |
| 10,000 | $10.00 |

Duplicates across your searches, jobs already seen in incremental mode, jobs outside your chosen country and failed searches cost nothing. Your Apify plan's free monthly credit applies. To cap spending, set **Maximum cost per run** in the run options; the scraper stops cleanly when the budget is reached and says so in the status message.

### Scheduling and "only new jobs" alerts

1. Turn on **Only new jobs** and give the monitor a name in **Monitor name** (e.g. `python-berlin`).
2. Save the configuration as a **Task** and add a **Schedule** (e.g. every morning).
3. The first run outputs all current matching jobs (up to **Max jobs per search**) and saves them as the baseline.
4. Later runs ask XING only for jobs posted or refreshed since the previous run (with a 3-day overlap) and output **only jobs not seen before**. A daily run usually needs one or two requests.

The memory is kept in a named key-value store (`xing-jobs-scraper-state` by default) under the monitor name and is shared by all searches in the run, so a job matching two of your searches is output and charged once. If **Max jobs per search** cut the previous run short, the next run reads the whole search again, so no job is skipped. Don't run two runs with the same monitor name at the same time.

### Tips and limits

- **1,000 results per search.** XING serves at most 1,000 results per search. The log and `RUN_SUMMARY` say when a search is larger; split it by city, discipline, career level or **Posted within** to reach the rest.
- **Country-wide searches in Austria and Switzerland.** XING has no public country filter. With **Country** = `AT` or `CH` and no city, the scraper searches XING's 20 largest cities of that country (Wien, Graz, Linz, Salzburg ... / Zürich, Genf, Basel, Lausanne, Bern ...), which covers most jobs but not small towns: add a **City** and **Radius** for other regions. With a city, **Country** makes sure the right town is used ("Freiburg" in Switzerland is Fribourg) and drops jobs located in other countries.
- **Remote jobs anywhere.** Like xing.com, a city search also returns fully remote jobs from elsewhere. Set **Country** to keep only jobs located in that country.
- **Newest first.** XING's search only sorts by relevance. **Sort order = Newest first** reads all results of the search (up to 1,000, about 50 requests) and sorts them by date, so combine it with **Posted within** for speed. For alerts, **Only new jobs** is the better tool.
- **XING's AI search.** Keywords go through XING's semantic search, as on xing.com, so results include closely related titles (e.g. "Python developer" also finds "Backend Engineer (Python)").
- **kununu ratings.** The output has kununu fields, but in our tests XING did not provide kununu ratings to logged-out visitors (they were empty for every company, including large employers). They will fill automatically if XING exposes them; don't buy this Actor for kununu data.
- **Unofficial interface.** XING has no public API for job seekers. This Actor uses the same public endpoints xing.com uses, which XING can change. If the API rejects the detailed query, the scraper falls back to the fields xing.com's own search page requests; if the API fails entirely, it reads the data embedded in xing.com pages. The parsing is covered by tests against saved responses.
- **Blocking.** No proxy is needed in normal use. If XING ever refuses requests (HTTP 403/429), the run stops with a clear message and keeps the jobs already saved; enable **Proxy configuration** (residential, country DE) and run again.

### What this scraper does not collect

Only public job postings and public company information. It never requests recruiters' or hiring managers' names, e-mail addresses, phone numbers or XING profiles (XING's job-contact and HR-contact data, "apply by e-mail" addresses and message contacts are not queried). The contact section of XING's structured job ads is not read, and e-mail addresses and phone numbers that employers write into the free-text description are replaced with `[e-mail removed]` / `[phone removed]` (a contact card made of name, title and phone number is dropped).

### FAQ

**Do I need a XING account, cookies or a proxy?**
No. XING job listings are public. The proxy option is there in case XING blocks requests from Apify's servers.

**How fast is it?**
Each request returns 20 complete jobs including descriptions. The prefilled search (20 jobs) finishes in about 2 seconds; 1,000 jobs take about a minute at the default polite pace of one request per second.

**Why is `salary` null for some jobs?**
XING shows no posted salary and no estimate for those jobs (often student jobs, apprenticeships or very specialised roles).

**Why does a city search return jobs in other cities?**
Those are fully remote jobs (XING includes them, like the website) or jobs within your **Radius**. Set **Radius** to 0 for the city only and **Country** to drop other countries.

**Can I scrape a single job?**
Yes. Paste job URLs (`https://www.xing.com/jobs/<title>-<id>`) into **Or paste XING URLs**; each one is fetched with full details.

**Is it legal to scrape XING?**
The scraper only collects job postings that employers publish publicly to attract applicants, plus public company information, and it does not collect personal contact data. You are responsible for making sure your use complies with XING's terms, the GDPR and other laws that apply to you. If in doubt, ask a lawyer.

### Integrations and API

- **API.** Start runs and fetch results with the [Apify API](https://docs.apify.com/api/v2) or the JavaScript and Python clients:

  ```bash
  curl -X POST "https://api.apify.com/v2/acts/rjmacarthy~xing-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"keywords":"python developer","location":"Berlin","maxJobs":50}'
  ```

- **Make, Zapier and n8n.** Send new jobs to Google Sheets, Airtable, Slack, e-mail or your CRM without code.

- **Webhooks.** Trigger your own pipeline when a run finishes.

- **AI agents (MCP).** Use the Actor as a tool through the Apify MCP server, e.g. "find hybrid SAP jobs in Zürich posted this week".

- **Google Sheets, Slack, Airbyte, Keboola and more** through Apify integrations.

### Changelog

- **0.1 (November 2026)** - First release: XING job API with full descriptions in the search results, all xing.com filters, browser search and job URLs, DE/AT/CH country handling, structured salaries with estimate flag, company data, incremental "only new jobs" mode, page-data fallback.

### Ready-to-run examples

- [Scrape Python developer jobs in Berlin from XING](https://apify.com/rjmacarthy/xing-jobs-scraper/examples/python-developer-jobs-berlin-xing)
- [Scrape project manager jobs in Vienna from XING](https://apify.com/rjmacarthy/xing-jobs-scraper/examples/project-manager-jobs-vienna-xing)

### More scrapers by the same developer

- [Apna Jobs Scraper - India Jobs by Keyword, City & Category](https://apify.com/rjmacarthy/apna-jobs-scraper)
- [Arbeitsagentur Jobs Scraper - German Jobbörse (Public API)](https://apify.com/rjmacarthy/arbeitsagentur-jobs-scraper)
- [ATS Jobs Scraper: Greenhouse, Lever, Ashby & Workday](https://apify.com/rjmacarthy/ats-jobs-scraper)
- [Cutshort Jobs Scraper - India Startup & Tech Jobs](https://apify.com/rjmacarthy/cutshort-jobs-scraper)
- [Dice Jobs Scraper](https://apify.com/rjmacarthy/dice-jobs-scraper)
- [Instahyre Jobs Scraper: India Tech Jobs, Salary & Skills](https://apify.com/rjmacarthy/instahyre-jobs-scraper)

Browse all my Actors on [my Apify Store profile](https://apify.com/rjmacarthy).

### Support

Found a search that doesn't work, or need a field? Open an issue on the **Issues** tab with your input. Fixes are usually quick.

# Actor input Schema

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

What you would type in XING's job search box, e.g. "python developer", "Projektmanager" or a company name. XING's search understands German and English. Leave empty for all jobs.

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

City or town to search in, e.g. "Berlin", "München", "Wien" or "Zürich". It is matched against XING's city list (within the chosen country). Leave empty to search the whole country.

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

Search radius around the city in kilometres. 0 = the city only. Only used when a city is set.

## `country` (type: `string`):

DE, AT or CH: the city is looked up in this country and only jobs located there are output. A country-wide search in Austria or Switzerland (no city) covers the 20 largest cities of that country. ALL = Germany, Austria and Switzerland together.

## `remoteOptions` (type: `array`):

Only jobs with these work arrangements. Leave empty for all.

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

Only jobs with these employment types. Leave empty for all.

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

Only jobs for these career levels. Leave empty for all.

## `disciplines` (type: `array`):

Only jobs in these XING disciplines. Leave empty for all.

## `industries` (type: `array`):

Only jobs from employers in these XING industries. Leave empty for all.

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

Only jobs posted or refreshed on XING in the last N days (the date XING shows on each job). 0 = any time.

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

XING's salary filter: annual gross salary in EUR (CHF in Switzerland), matched against posted salaries and XING's own salary estimates. Leave empty for no minimum.

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

Upper end of XING's salary filter (annual gross). Leave empty for no maximum.

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

Search URLs copied from your browser (https://www.xing.com/jobs/search?keywords=...) and/or single job URLs (https://www.xing.com/jobs/berlin-python-developer-156675213). Each search URL is scraped with its own keywords and filters; when you add URLs, the search fields above are ignored (Country still filters the results).

## `maxJobs` (type: `integer`):

Stop after this many jobs from each search (each search URL counts as one search). 0 = no limit; XING itself returns at most 1,000 results per search.

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

Add the full job description as HTML and plain text. It arrives with the search results, so it costs no extra requests. E-mail addresses and phone numbers in descriptions are removed.

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

Relevance is XING's own order and the fastest. "Newest first" reads all results of the search (XING only sorts by relevance) and sorts them by date; combine it with "Posted within" to keep it quick.

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

Language of XING's labels in the output (employment type, career level, discipline, industry, company size). Job descriptions stay in the language they were written in.

## `onlyNewJobs` (type: `boolean`):

Remember which jobs were already output and only output (and charge for) jobs that are new since the previous run. The first run outputs all matching jobs (up to the limit) and saves them as the baseline. Later runs ask XING only for jobs posted or refreshed since the previous run, so they are fast. Ideal for scheduled job alerts.

## `stateKey` (type: `string`):

Name of this monitor's memory. Runs with the same name share the list of already-seen jobs. Use different names for independent monitors (e.g. "python-berlin" vs "sap-zurich").

## `stateStoreName` (type: `string`):

Named key-value store in your account where incremental state is kept (letters, digits and dashes).

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

Not needed normally. If XING starts refusing requests (HTTP 403/429), enable Apify Proxy (RESIDENTIAL with country DE is the most reliable).

## `searchSource` (type: `string`):

auto: XING's job API, falling back to the data embedded in xing.com pages if the API fails. api / html force one source (html gives listing fields only, plus one extra request per job for the description).

## Actor input object example

```json
{
  "keywords": "python developer",
  "location": "Berlin",
  "radius": 20,
  "country": "ALL",
  "postedWithinDays": 0,
  "maxJobs": 20,
  "includeDescription": true,
  "sortBy": "relevance",
  "language": "en",
  "onlyNewJobs": false,
  "stateKey": "default",
  "stateStoreName": "xing-jobs-scraper-state",
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "searchSource": "auto"
}
```

# Actor output Schema

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

One item per job: company, title, location, workplace type, employment type, career level, salary, posting date and job URL.

## `jobsFull` (type: `string`):

Every field for each job, including structured salary, skills, company profile and the full description in HTML and plain text.

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

Per-search status, counts, request statistics and any warnings.

# 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": "python developer",
    "location": "Berlin",
    "maxJobs": 20,
    "includeDescription": true,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rjmacarthy/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": "python developer",
    "location": "Berlin",
    "maxJobs": 20,
    "includeDescription": True,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rjmacarthy/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": "python developer",
  "location": "Berlin",
  "maxJobs": 20,
  "includeDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rjmacarthy/xing-jobs-scraper --silent --output-dataset

```

## MCP server setup

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