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

\[💰 $0.99 / 1K] Extract public XING job listings across the DACH region for recruiting research, market analysis, salary benchmarking, and hiring intelligence.

- **URL**: https://apify.com/fetchfinch/xing-jobs-scraper.md
- **Developed by:** [Fetch Finch](https://apify.com/fetchfinch) (community)
- **Categories:** Jobs, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.99 / 1,000 job saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## XING Jobs Scraper

Collect structured job listings from [XING](https://www.xing.com/jobs) for recruiting research, hiring intelligence, salary benchmarking, and DACH job-market analysis.

The Actor searches XING's public jobs feed and saves one dataset item per listing. Search by keyword, location, date, or a prepared XING search URL. Results include job, company, location, compensation, application, search metadata, and optional full-description data.

### Ready-to-run examples

Try the published task configurations:

- [Data Analyst jobs in Berlin](https://apify.com/fetchfinch/xing-data-analyst-berlin-en)
- [Softwareentwickler jobs in Berlin](https://apify.com/fetchfinch/xing-softwareentwickler-berlin-de)
- [Remote jobs in Germany](https://apify.com/fetchfinch/xing-remote-jobs-de)
- [New XING jobs from the last 24 hours](https://apify.com/fetchfinch/xing-jobs-last-24h)
- [English and German software jobs in Berlin](https://apify.com/fetchfinch/xing-multilingual-berlin)
- [50 software jobs in Germany](https://apify.com/fetchfinch/xing-software-jobs-pagination)

### Pricing

The Actor costs **$0.99 per 1,000 saved job listings** ($0.00099 per saved job). Pricing is based on jobs saved to the run's default dataset; see the Actor's Pricing tab for the current rate and any applicable Apify subscription discounts.

### Why use this Actor?

- **Fast collection** - Uses XING's public JSON feed directly, without launching a browser.
- **Flexible search** - Filter by keyword, city, region, country, or a saved XING jobs URL.
- **Freshness controls** - Collect jobs from the last 24 hours, week, or month.
- **English and German support** - Run one language mutation or the same search in both languages.
- **Controlled result sizes** - Set both the maximum number of records and result pages.
- **Optional descriptions** - Enrich feed results with public job-page HTML and plain text.
- **Apify-ready output** - Export the dataset as JSON, CSV, Excel, or XML, or connect it to your own workflow through the Apify API.

### Typical use cases

- Build recruiting and talent-market datasets for Germany, Austria, and Switzerland.
- Monitor new job postings for a role, skill, company, or location.
- Compare job volume, employment types, salaries, and demand signals.
- Send structured job records to spreadsheets, databases, dashboards, alerts, or hiring tools.

### Input

The Actor accepts the following input. Field names shown in the Apify Console use camelCase; the runtime also accepts the compatible aliases `date_posted`, `results_wanted`, and `max_pages`.

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `keyword` | String | - | Job title, skill, or search term, such as `Data Analyst` or `Python Developer`. |
| `location` | String | - | City, region, or country, such as `Berlin`, `Bavaria`, or `Germany`. |
| `startUrl` | String | - | A prepared XING jobs search URL. Explicit `keyword` and `location` values take priority over filters read from the URL. |
| `startUrls` | Array | - | A list of prepared XING search URLs. The first non-empty URL is used. Entries may be URL strings or objects containing `url`. |
| `url` | String | - | Compatibility alias for `startUrl`. |
| `language` | `en` or `de` | `en` | Language mutation for localized XING fields. |
| `languages` | Array | - | Run the search once per language, for example `["en", "de"]`. Each result includes its `language`. |
| `datePosted` | String | `ANY_TIME` | One of `ANY_TIME`, `LAST_24_HOURS`, `LAST_WEEK`, or `LAST_MONTH`. |
| `resultsWanted` | Integer | `20` | Maximum records to save per selected language. Range: 1-1000. |
| `maxPages` | Integer | `20` | Maximum XING result pages to process per language. Range: 1-100. |
| `includeDetails` | Boolean | `false` | Fetch each public job page and add `descriptionText` and `descriptionHtml`. This adds requests and runtime. |
| `proxyConfiguration` | Object | - | Optional Apify Proxy configuration for larger or recurring runs, or when XING returns HTTP 403. |

#### Basic search

```json
{
  "keyword": "Data Analyst",
  "location": "Berlin",
  "datePosted": "LAST_WEEK",
  "resultsWanted": 50,
  "maxPages": 5
}
```

#### German search with full descriptions

```json
{
  "keyword": "Softwareentwickler",
  "location": "Deutschland",
  "language": "de",
  "datePosted": "LAST_MONTH",
  "resultsWanted": 25,
  "includeDetails": true
}
```

#### English and German mutations

`resultsWanted` applies separately to each selected language. This example can produce up to 20 records: 10 English and 10 German, subject to the available results.

```json
{
  "keyword": "Software Engineer",
  "location": "Berlin",
  "languages": ["en", "de"],
  "datePosted": "LAST_WEEK",
  "resultsWanted": 10,
  "maxPages": 2
}
```

#### Search from a prepared XING URL

```json
{
  "startUrl": "https://www.xing.com/jobs/t-remote?keywords=Remote&location=Berlin",
  "resultsWanted": 50,
  "maxPages": 5
}
```

### Output

Each dataset item represents one visible XING job listing. Optional fields are omitted when XING does not publish a value.

| Field | Description |
| --- | --- |
| `jobId` | XING job identifier. |
| `globalId` | Global job identifier when available. |
| `slug` | Slug used in the XING job URL. |
| `title` | Published job title. |
| `company` | Employer or company name. |
| `companyId` | XING company identifier when available. |
| `companyLogo` | Company logo URL when available. |
| `location` | Primary job city or location. |
| `locations` | Additional published job locations. |
| `employmentType` | Localized employment type, such as full-time. |
| `salary` | Raw XING salary object when published. |
| `salaryText` | Human-readable salary or salary range. |
| `datePosted` | XING refresh or posting timestamp when available. |
| `activeUntil` | Listing expiration date when available. |
| `applyUrl` | Direct or external application URL. |
| `applicationType` | XING application method type. |
| `summary` | Summary or responsibility bullets when published. |
| `descriptionHighlight` | Search-result description highlight. |
| `descriptionText` | Clean plain-text description when `includeDetails` is enabled and available. |
| `descriptionHtml` | Formatted public description HTML when available. |
| `matchingFacts` | XING facts matching the search. |
| `nonMatchingFacts` | XING facts that do not match the search. |
| `url` | Direct XING job URL. |
| `language` | Language mutation used for this result: `en` or `de`. |
| `searchPosition` | Position of the listing in the search response. |
| `searchTotal` | Total matching results reported by XING. |
| `searchTrackingToken` | Search-result tracking token when available. |
| `searchKeyword` | Keyword used for the search. |
| `searchLocation` | Location used for the search. |
| `prioritized` | XING priority flag when available. |
| `paid` | Paid-listing flag when available. |
| `topJob` | Top-job flag when available. |
| `redirectsToThirdParty` | Whether the application redirects to a third-party site. |
| `detailError` | Error encountered while enriching one job's details, if any. |

#### Example output

```json
{
  "jobId": "148355491.3c4997",
  "globalId": "global-example-id",
  "slug": "junior-data-analyst-berlin",
  "title": "Junior Data Analyst (m/w/d)",
  "company": "Example GmbH",
  "location": "Berlin",
  "locations": ["Berlin"],
  "employmentType": "Full-time",
  "salaryText": "EUR 45,000 - 55,000",
  "datePosted": "2026-09-01T10:24:09Z",
  "applyUrl": "https://example.com/apply",
  "descriptionText": "Join the analytics team and work on data-driven projects.",
  "url": "https://www.xing.com/jobs/junior-data-analyst-berlin-148355491",
  "language": "en",
  "searchPosition": 1,
  "searchKeyword": "Data Analyst",
  "searchLocation": "Berlin"
}
```

### Tips for reliable runs

- Use a specific keyword and location for more relevant results.
- Start with 20-50 records while testing a search, then increase `resultsWanted` and `maxPages`.
- Use `LAST_24_HOURS` for fresh alerts, `LAST_WEEK` for recurring hiring reports, and `LAST_MONTH` for broader research.
- Enable `includeDetails` only when full descriptions are needed; it makes one additional public-page request per listing.
- Use Apify Proxy for larger or recurring runs, or configure it if XING begins returning HTTP 403 responses. The Actor rotates proxy sessions up to three times for feed and detail requests.
- Use `languages: ["en", "de"]` when you need localized versions of the same search. Results are tagged with the language used.
- For recurring monitoring, create an Apify schedule and connect the dataset to a webhook or downstream integration.

### Data availability and limitations

- The Actor collects publicly visible job listings and does not require a XING login.
- Salary, company information, locations, application links, and descriptions are source-dependent and may be missing.
- `datePosted` represents the timestamp exposed by XING, which may be a refresh date rather than the employer's original publication date.
- `includeDetails` enriches listings only when the public job page is available. An individual detail failure is recorded in `detailError` without discarding the listing.
- Remote or hybrid roles can be searched with keywords such as `Remote` or through a prepared XING search URL; the current output does not add a separate normalized remote-status field.
- XING may change its public feed, throttle requests, or temporarily return 403 responses. Proxy configuration can help with larger or recurring runs.

### Export and integrations

Apify datasets can be downloaded as JSON, CSV, Excel, XML, and other supported formats. You can also connect this Actor to:

- Google Sheets, Airtable, and databases
- Looker Studio and other BI tools
- Webhooks, Make, and Zapier
- Your own application through the Apify API

### Legal and responsible use

This Actor is intended for legitimate collection and analysis of publicly available job information. You are responsible for complying with applicable laws, XING's terms, privacy requirements, and any restrictions that apply to your use case. Avoid collecting or processing personal data beyond what is necessary for your stated purpose.

For support or feature requests, use the Actor's Issues tab in Apify Console.

# Actor input Schema

## `keyword` (type: `string`):

Job title, skill, or search term. For example: Data Analyst.

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

City, region, or country. For example: Berlin or Germany.

## `startUrl` (type: `string`):

A prepared XING jobs search URL. Explicit keyword and location inputs take priority.

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

Optional array of XING search URLs. The first non-empty URL is used.

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

One language mutation to use for localized XING fields.

## `languages` (type: `array`):

Optional list of language mutations. If supplied, the search runs once per language.

## `datePosted` (type: `string`):

Only return jobs posted or refreshed within this period.

## `resultsWanted` (type: `integer`):

Maximum number of dataset items to produce per selected language.

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

Maximum number of XING result pages per language.

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

Fetch each public job page and add description HTML/text. This increases requests and run time.

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

Use an Apify residential proxy when XING returns 403 or for larger runs.

## Actor input object example

```json
{
  "language": "en",
  "datePosted": "ANY_TIME",
  "resultsWanted": 20,
  "maxPages": 20,
  "includeDetails": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Structured job listings from the run's default dataset.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("fetchfinch/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 = {}

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

```

## MCP server setup

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