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

Scrape XING jobs (Stellenangebote) by keyword, city or search URL: title, company, location, employment type, salary range, posted date and apply link. Optional job details add the full description, career level, remote option and company size. Gets past XING's 1,000-jobs-per-search limit.

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

## Pricing

from $1.00 / 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

### 🚀 XING Jobs Scraper: Stellenangebote, Salaries and Companies

Export **XING job postings** (Stellenangebote) from Germany, Austria and Switzerland as JSON, CSV or Excel. The **XING Jobs Scraper** takes keywords, a city or a XING job search URL and returns each job's title, company, location, employment type, salary range, posted date and apply link. Turn on job details for the full description, career level, discipline, remote option and company size. It works as a ready-made XING jobs API: no account, no key.

### 🎯 Use Cases

- **Jobs in Berlin, Hamburg or München**: export every open position in a city, or only the ones for your keyword, and filter them in a spreadsheet.
- **Remote jobs in Germany**: collect fully remote and hybrid roles from XING with their remote option on every row.
- **Job market and salary research**: compare salary ranges, career levels and employment types across roles and cities.
- **Recruiting leads**: find companies that are hiring right now, with company size, industry and their XING company page.
- **Job alerts and job boards**: run a search daily with "Posted within: last 24 hours" and push new jobs into your own board, Slack or CRM.
- **Job scraping for AI**: feed clean job descriptions into matching, classification or RAG pipelines.

### ✨ Features

- **Any XING job search**: keywords plus a location, a location alone, or a search URL copied from your browser. Its filters (remote option, career level, employment type, sort) and its page are kept.
- **Job URLs too**: paste XING job links to get those jobs with full details.
- **Salary as numbers**: minimum, maximum and median with currency, and whether the range is stated by the employer or estimated by XING.
- **Full job details (optional)**: description as text and HTML, career level, discipline, industry, remote/hybrid/on-site, company page, size and industry, address and the posting's keywords.
- **Past the 1,000-result limit**: XING lists at most 1,000 jobs per search. Set "Max jobs per search" above 800 and a large search is split into narrower ones, so one search can return several thousand jobs. The run's status says when a search was split or still hit the limit.
- **No duplicates**: a job found by two searches, or on two pages, is saved and charged once.
- **Fair billing**: expired jobs are skipped and not charged, and the run stops at your maximum charge.

### 🛠️ How It Works

1. **Enter searches**: keywords like `software engineer`, a XING job search URL, or XING job URLs, one per line. Add a location for keyword searches.
2. **Set Max jobs per search** (default 50) and, if you need them, turn on **Include job details**.
3. **Run the scraper** and download the jobs, or pull them through the Apify API.

### ⚙️ Input

| Field                   | What it does                                                                                                      |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Searches**            | Keywords, XING job search URLs or XING job URLs, one per line. Leave empty and set a location for all jobs there. |
| **Location**            | City or region for keyword searches, e.g. `Berlin`, `München`, `Hamburg`. Empty = all of XING.                    |
| **Posted within**       | Any time, last 24 hours, last 7 days or last 30 days.                                                             |
| **Max jobs per search** | How many jobs to save per search. Default 50. Above 800, large searches are split to get past XING's limit.       |
| **Include job details** | Opens each job page for the full description and the extra fields below. Charged per job.                         |

```json
{
    "searches": [
        "software engineer",
        "https://www.xing.com/jobs/search?keywords=pflege&location=Hamburg&remoteOption=PARTLY_REMOTE.ca71ca"
    ],
    "location": "Berlin",
    "postedWithin": "LAST_WEEK",
    "maxItems": 200,
    "includeDetails": true
}
```

### 💰 Pricing

Pay only for the jobs you get. No monthly rental.

| Event           | Price                            | What you get                                                            |
| --------------- | -------------------------------- | ----------------------------------------------------------------------- |
| **Job**         | $0.001 per job ($1.00 per 1,000) | One job from a search with all search fields                            |
| **Job details** | $0.001 per job ($1.00 per 1,000) | Full job page for one job: only with "Include job details" or a job URL |
| **Actor start** | $0.00005 per run                 | Charged once when the run starts.                                       |

Examples: 50 jobs = $0.05 · 1,000 jobs = $1.00 · 1,000 jobs with details = $2.00.

### 📊 Sample Output Data

A job with details (long fields shortened):

```json
{
    "id": "157639041",
    "url": "https://www.xing.com/jobs/berlin-lead-software-engineer-developer-mission-planning-157639041",
    "title": "Lead Software Engineer / Developer (m/w/d) - Mission Planning",
    "companyName": "Hensoldt",
    "companyLogo": "https://www.xing.com/imagecache/public/scaled_original_image/...",
    "location": "Berlin",
    "locations": ["Berlin"],
    "employmentType": "Full-time",
    "postedAt": "2026-10-19T11:10:49Z",
    "expiresAt": "2026-11-03T11:10:51Z",
    "salary": { "min": 73500, "max": 96500, "median": 82000, "currency": "EUR", "isEstimate": true },
    "snippet": "Technische Führung komplexer Großprojekte. Verantwortung für Missionsplanungssystem-Architektur. Mentoring und Wissensvermittlung im Team.",
    "applyUrl": "https://jobdb.softgarden.de/jobdb/public/jobposting/applyonline/click?jp=67217675&utm_source=xing.com",
    "isTopJob": false,
    "description": "HENSOLDT – Innovationen für eine sicherere Welt\nHENSOLDT ist ein führendes europäisches Hightech-Unternehmen ...",
    "descriptionHtml": "HENSOLDT – Innovationen für eine sicherere Welt\n<p><b>HENSOLDT</b> ist ein führendes europäisches ...",
    "firstPublishedAt": "2026-09-04T11:10:49Z",
    "careerLevel": "Professional/Experienced",
    "discipline": "IT and software development",
    "industry": "Aerospace",
    "remote": ["On-site"],
    "isRemote": false,
    "companyUrl": "https://www.xing.com/pages/hensoldt",
    "companySize": "5,001-10,000 employees",
    "companyIndustry": "Electrical engineering",
    "address": { "city": "Berlin", "postalCode": null, "region": "Land Berlin", "country": "DE" },
    "keywords": ["lead", "software", "engineer", "softwareentwicklung"],
    "language": "de",
    "search": "software engineer"
}
```

`postedAt` is the date XING shows on the job (posted or last refreshed); `firstPublishedAt` is when it first went online. `salary.isEstimate` is `true` when the range is XING's estimate rather than the employer's. Fields from `description` down are only present with job details. `search` is the input line that found the job.

### 🔁 Schedule and Integrate

For job alerts and job boards, run it **once a day** with "Posted within: last 24 hours" and the same searches: each run returns the new postings. Set it up in Apify **Schedules**. Send the jobs to **Google Sheets**, **Zapier**, **Make**, **n8n** or a webhook with Apify **integrations**, so new jobs land where your team already works.

### 🤖 Use with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (`https://mcp.apify.com`). An agent can call it with:

```json
{ "searches": ["data analyst"], "location": "Hamburg", "maxItems": 20, "includeDetails": true }
```

### ❓ FAQ

**Does XING have an official jobs API?** XING does not offer a public API for searching its job postings. This Actor needs no key, account or approval and returns the public job postings anyone can see on XING, with salary ranges and company data.

**Do I need a XING account?** No. The Actor reads the public job pages that XING shows without logging in.

**How many jobs can I get per search?** XING itself lists at most 1,000 jobs per search. With "Max jobs per search" above 800, the Actor splits a large search into narrower ones (by remote option, career level and employment type) and has returned over 2,700 jobs for one city search. For more, add a location or filters, or run several searches.

**Why is a field empty?** Not every job shows a salary, a summary or a company logo, and some companies have no XING company page, so `companyUrl` and `companySize` can be `null`. The remote option, career level and description come with job details only.

**How do I scrape XING jobs in Berlin or another city?** Leave Searches empty and set Location to the city to get every job there, or add keywords to narrow it down. "Posted within" keeps only recent jobs.

**What are alternatives to XING for jobs in Germany?** StepStone, Indeed and LinkedIn list many of the same German jobs. The scrapers below export them in a similar format.

### 🔗 Related Scrapers

- [StepStone Jobs Scraper](https://apify.com/piotrv1001/stepstone-jobs-scraper): jobs from Germany's largest job board, to cover the same searches beyond XING.
- [StepStone Austria Jobs Scraper](https://apify.com/piotrv1001/stepstone-at-jobs-scraper): the Austrian market, with the same fields.
- [Jobs.ch Jobs Scraper](https://apify.com/piotrv1001/jobs-ch-jobs-scraper): Swiss job postings, for DACH-wide research.
- [Indeed Jobs Scraper](https://apify.com/piotrv1001/indeed-jobs-scraper): Indeed jobs in any country, with full descriptions.
- [LinkedIn Jobs Search Scraper](https://apify.com/piotrv1001/linkedin-jobs-search-scraper): LinkedIn job search results for the same roles and cities.

# Actor input Schema

## `searches` (type: `array`):

One per line: job keywords (e.g. "software engineer"), a XING job search URL copied from your browser (its filters and page are kept), or a XING job URL. Leave empty and set a location to get every job there.

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

City or region for keyword searches, e.g. "Berlin", "München" or "Hamburg". Leave empty to search all of XING. Not used for pasted URLs.

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

Only jobs posted or refreshed in this period.

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

Stop each search after this many jobs. XING lists up to 1,000 jobs per search; above 800, a large search is split into narrower ones to get more. Your maximum charge per run also caps the run.

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

Open each job page for the full description, career level, discipline, industry, remote/hybrid option, company size and address. Charged as an extra event per job.

## Actor input object example

```json
{
  "searches": [
    "software engineer"
  ],
  "location": "Berlin",
  "postedWithin": "any",
  "maxItems": 50,
  "includeDetails": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `details` (type: `string`):

No description

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

No description

# 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 = {
    "searches": [
        "software engineer"
    ],
    "location": "Berlin"
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/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 = {
    "searches": ["software engineer"],
    "location": "Berlin",
}

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

```

## MCP server setup

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