# XING Jobs Scraper - Stellenangebote, Salaries, New Jobs (`kamerozkan/xing-jobs-scraper`) Actor

XING jobs scraper for Germany, Austria and Switzerland: job title, company, location, salary range, employment type, career level and posting date from XING Stellenangebote. Monitor mode returns only new jobs since the last run. Plain HTTP, no login.

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

## Pricing

from $0.80 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## XING Jobs Scraper - Stellenangebote, Salaries, New Jobs

XING jobs scraper for XING Stellenangebote in Germany, Austria and Switzerland: search by keyword and city (or paste a XING search URL) and get one clean row per job ad with title, company, location, salary range, job type, career level, industry, posting date and the full description. Turn on **Only new jobs** and schedule it for a daily XING job alert.

### What does XING Jobs Scraper do?

It reads the public XING job search pages (20 jobs per page) and, by default, each job page, and returns structured job ads as JSON, CSV or Excel. The job page adds the full description as plain text, the posting date, the expiry date, career level, industry, postal code and the salary stated in the job ad.

- **Search by keyword and location**: `python developer` in `Berlin`, `SAP Berater` in `Hamburg`, `Pflegefachkraft` in `München`, or leave the location empty for all of XING.
- **Paste XING search URLs**: keep your own filters from the XING website.
- **Salaries**: `salaryMin`, `salaryMax` and `salaryCurrency` as numbers, with `salarySource` telling you whether the range comes from the job ad or from the XING search card.
- **Only new jobs (monitor)**: the actor remembers the jobs it delivered for each search and on the next run returns and charges only jobs it has not seen before.
- **Fast list mode**: turn off **Include job details** for title, company, location, job type and salary range from the search pages only.

No login, no XING account and no API key are needed. Proxy is included in the price.

### Who is it for?

- **Recruiters and staffing agencies** in the DACH region building lead lists of companies that are hiring right now.
- **Sales teams** using new job ads as hiring signals (a company that hires five data engineers needs data tools).
- **HR analytics and compensation teams** benchmarking salary ranges by job title, city and career level.
- **Job boards and app builders** who need a XING jobs API alternative with stable field names.

### What data can you get?

| Field | Example |
|---|---|
| `jobId`, `url` | 157368156, XING job ad link |
| `title` | Python Development Expert for CI Tools (m/w/x) |
| `company` | K-tronik GmbH |
| `location`, `city`, `region`, `postalCode`, `country` | Frankfurt am Main, Frankfurt am Main, Hessen, 60596, DE |
| `employmentType` | Full-time, Part-time, For students |
| `careerLevel` | Professional/Experienced |
| `industry` | Information services |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | 63000, 75000, EUR, YEAR |
| `salaryText`, `salarySource` | €63,000 – €75,000, job ad or search card |
| `datePosted`, `validThrough` | 2026-08-21T10:01:29Z, 2027-08-21T10:01:30Z |
| `easyApply`, `directApply` | true, true |
| `descriptionText` | Full job description as plain text (`descriptionHtml` on request) |
| `searchKeywords`, `searchLocation`, `searchUrl` | The search the job was found with |
| `isNew` | true when the job was not in the previous run (Only new jobs mode) |
| `scrapedAt` | 2026-10-23T12:26:19+00:00 |

### How much does it cost?

You pay only for job rows: **$1.00 per 1,000 jobs** on the Free plan, with lower prices on paid Apify plans:

| Apify plan | Price per 1,000 jobs |
|---|---|
| Free | $1.00 |
| Bronze | $0.90 |
| Silver | $0.85 |
| Gold and above | $0.80 |

Worked examples on the Free plan:

- 200 Python jobs in Berlin with full descriptions: about **$0.20**.
- A recruiter who tracks 10 searches daily with **Only new jobs** on and gets about 30 new jobs per day pays for about 900 jobs a month: about **$0.90 per month**. Jobs already delivered are skipped and not charged.

Search pages, job pages and the proxy are not charged extra. Set **Max jobs** or a maximum cost per run to cap spending.

### How to use it

1. Click **Try for free**.
2. Enter one or more **Search keywords** (for example `python developer`) and a **Location** (for example `Berlin`), or paste **XING search URLs**.
3. Optional: set **Max jobs**, **Max result pages per search**, and turn on **Only new jobs** for a monitor.
4. Click **Start**, then download the results as JSON, CSV or Excel, or read them with the API.
5. For a daily XING job alert, save the input as a task with **Only new jobs** on and add a schedule.

### Input example

```json
{
  "queries": ["data engineer", "SAP Berater"],
  "location": "Hamburg",
  "maxItems": 100,
  "includeDetails": true,
  "onlyNew": false
}
```

### Output example

Real row from a run on 2026-10-23 (search `python developer`):

```json
{
  "jobId": "157368156",
  "url": "https://www.xing.com/jobs/muenchen-python-development-expert-for-ci-tools-157368156",
  "title": "Python Development Expert for CI Tools (m/w/x)",
  "company": "K-tronik GmbH",
  "location": "München",
  "city": "München",
  "region": "Bayern",
  "country": "DE",
  "employmentType": "Full-time",
  "careerLevel": "Professional/Experienced",
  "industry": "Information services",
  "salaryMin": 63000,
  "salaryMax": 75000,
  "salaryCurrency": "EUR",
  "salaryText": "€63,000 – €75,000",
  "salarySource": "search card",
  "datePosted": "2026-08-21T10:01:29Z",
  "validThrough": "2027-08-21T10:01:30Z",
  "easyApply": true,
  "directApply": true,
  "searchKeywords": "python developer",
  "searchLocation": null,
  "searchUrl": "https://www.xing.com/jobs/search?keywords=python+developer",
  "scrapedAt": "2026-10-23T12:26:19+00:00"
}
```

`descriptionText` is left out above for length. The OUTPUT record of the run shows the jobs per search, how many already seen jobs were skipped and any page that could not be loaded.

### Integrations and API

Run it from your code with the Apify API or the `apify-client` package, schedule it in Apify, or connect it to Make, n8n, Zapier, Google Sheets or a webhook (for example a Slack message for every new job with `salaryMin` above 70,000).

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("kamerozkan/xing-jobs-scraper").call(run_input={
    "queries": ["data engineer"],
    "location": "Berlin",
    "maxItems": 100,
    "onlyNew": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["company"], item["salaryMin"], item["salaryMax"], item["url"])
```

### FAQ

**Does it work for Austria and Switzerland?** Yes. Use a city such as `Wien`, `Graz`, `Zürich` or `Basel` as the location. Salaries in CHF come back with `salaryCurrency` CHF.

**Where does the salary come from?** From the job ad when the employer states it (`salarySource: "job ad"`, with `salaryPeriod`), otherwise from the salary range XING shows on the search card (`salarySource: "search card"`). Jobs without either have no salary fields.

**How does Only new jobs work?** The actor stores the job ids it delivered for each search (same keyword and location, or same URL) in a key-value store in your own Apify account. The next run with the same search skips those ids, so you pay only for new jobs. The first run is the baseline and returns everything.

**How many jobs can I get per search?** XING shows 20 jobs per page; **Max result pages per search** (default 10) controls the depth. Add more specific keywords or cities to cover more jobs.

**Why is `postalCode` empty for some jobs?** Some employers publish only a city.

**Is it legal to collect this data?** It collects public job ads that XING shows to every visitor: company job postings, no member profiles and no logins. Job descriptions can contain the company's application contact. You are responsible for how you use the data, including GDPR.

### Support and feedback

- Found a bug or missing a field? Open an issue on the **Issues** tab of this Actor with your run link. We reply within
  48 hours and ship most fixes within a few days.
- Have an idea for a feature? Issues are the fastest way to get it built.
- If the Actor saves you time, a short review on this page helps other users find it.

# Actor input Schema

## `queries` (type: `array`):

Job titles or skills, one search per line, exactly as you would type them on XING, for example: python developer, SAP Berater, Pflegefachkraft.

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

City or region for all keyword searches, for example Berlin, München, Wien or Zürich. Leave empty to search everywhere.

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

Optional: paste XING job search URLs with your own filters, for example https://www.xing.com/jobs/search?keywords=sap\&location=Hamburg. Read in addition to the keywords.

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

Stop after this many jobs in total. You are charged per job, so this also caps the cost of the run.

## `maxPagesPerSearch` (type: `integer`):

XING shows 20 jobs per result page. 10 pages = up to 200 jobs per search.

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

Open each job page for the full description, posting date, career level, industry, postal code and the salary from the job ad. Turn off for a faster list with title, company, location, job type and salary range only. Same price either way.

## `includeDescriptionHtml` (type: `boolean`):

Also return the job description as HTML (descriptionHtml). The plain text version (descriptionText) is always included with job details.

## `onlyNew` (type: `boolean`):

Remember the jobs delivered for each search and on the next run return (and charge) only jobs not seen before. Schedule the actor daily for a XING job alert.

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

Apify Proxy. By default the run uses datacenter proxy and switches to residential if XING blocks it; choose proxy groups here to override.

## Actor input object example

```json
{
  "queries": [
    "python developer"
  ],
  "location": "Berlin",
  "maxItems": 20,
  "maxPagesPerSearch": 10,
  "includeDetails": true,
  "includeDescriptionHtml": false,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per result in the 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 = {
    "queries": [
        "python developer"
    ],
    "location": "Berlin",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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