# Xing Scraper — Jobs, Companies, Profiles & Contact Emails (`memo23/xing-scraper`) Actor

Xing scraper — jobs, companies & profiles in one actor at $1.19 / 1,000 results. Paste any xing.com URL (search, /jobs/{slug}, /pages/{slug}, /profile/{id}) or filter by keyword + location + discipline + radius. 35+ fields per row: salary, Kununu, employees, social links. JSON or CSV.

- **URL**: https://apify.com/memo23/xing-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 607 total users, 80 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.19 / 1,000 results

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 Scraper — Jobs, Companies & Profiles ($1.19 / 1k)

### How it works

![How Xing Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-xing.png)

All-in-one **Xing** scraper at **$1.19 per 1,000 results**. Paste any `xing.com` URL — job search, single job, **company page**, or **member profile** — and get a flat row per record with 35+ fields. Or skip URLs entirely: search by keyword + location + discipline, or paste a **bulk list of company slugs**.

| Input you provide | Row(s) emitted |
|---|---|
| `xing.com/jobs/search?keywords=…` | One `job` row per listing across all pages |
| `xing.com/jobs/{slug}` (single job) | One `job` row |
| `xing.com/pages/{company-slug}` | One `company` row with employees, jobs, locations |
| `xing.com/profile/{user}` | One `profile` row with work timeline, education, skills |
| `keyword` + `location` + `discipline` | Generates a canonical search URL, then same as row 1 |
| `companyTargets: ["bayer", "sap", …]` | One `company` row per slug — same shape as the URL-driven path |

> Pure HTTP. No browser, no third-party CAPTCHA service, no CF-bypass proxy.

***

### Why use this scraper?

- **Only Xing actor on Apify Store that handles all four URL types** (jobs search, single job, company page, member profile) — most competitors only do one.
- **$1.19 / 1k — matches the category leader's price while doing 3× more** (jobs + companies + profiles, not jobs-only).
- **Bulk-companies shortcut**: paste a list of slugs (`bayer`, `sap`, `basf`) without building URLs — same convenience as `maximedupre/xing-companies-scraper`, but plus jobs and profiles in the same run.
- **Salary + Kununu rating + apply URL** captured on every job row — no second fetch needed.
- **Full company pages** parsed from the SSR Apollo state: followers, employees with profile URLs, every job posting, all office locations with coordinates and contact info.
- **Built-in filters** for employment type, career level, remote option, and salary range — narrow your dataset without post-processing.
- **GDPR-aware**: only public profile data, no logged-in scraping, no private fields.

***

1. **Classifier.** Each input URL is matched against `jobs/{slug}`, `pages/{slug}`, `profile/{user}`, or treated as a search URL. The classifier picks the matching GraphQL operation and headers.
2. **Fetch.** Requests go through Apify Residential proxy via `got-scraping`. For company pages, the SSR HTML is parsed with Cheerio for the `window.crate.serverData.APOLLO_STATE` blob; everything else is GraphQL.
3. **Pagination.** Job-search results paginate via GraphQL `offset/limit` until `maxItems` is hit or the result set ends.
4. **Emit.** Each row is flattened (no `__typename`, no nested noise) and pushed to the Apify dataset. The job row is the same shape whether it came from a search page or a direct `/jobs/{slug}`.

***

### Supported inputs

#### Job search URLs

```
https://www.xing.com/jobs/search?keywords=developer&location=berlin&radius=10
https://www.xing.com/jobs/search?keywords=designer&location=munich&facets%5B%5D=discipline&discipline=Design
```

#### Single job URLs

```
https://www.xing.com/jobs/senior-backend-engineer-12345678
```

#### Company pages

```
https://www.xing.com/pages/spectrumag
https://www.xing.com/pages/sap
```

#### Member profiles

```
https://www.xing.com/profile/Marko_RoeperGrewe
```

#### Filter-only mode (no URL)

Provide `keyword` + `location` + optional `discipline`/`radius` — the actor builds the canonical search URL and runs it.

#### Bulk companies (URL or slug shortcut)

Skip building URLs for each company — paste the slugs directly:

```json
"companyTargets": [
  "https://www.xing.com/pages/sap",
  "bayer",
  "basf",
  "spectrumag"
]
```

Each entry can be a full URL or a bare slug (anything that follows `xing.com/pages/`). Entries are merged into `startUrls` at run time and routed to the same `company` row handler — so output is identical to the URL path.

> Company **names with spaces** (e.g. `"Bayer AG"`) aren't auto-resolved yet — paste the slug instead. Invalid entries are skipped with a warning in the log, not silently dropped.

#### Advanced filters (post-fetch)

Set any of these to narrow the dataset to only matching rows:

| Filter | Works without `includeListingDetails` | Notes |
|---|:---:|---|
| `employmentType` | ✓ | Multi-select: `FULL_TIME`, `PART_TIME`, `INTERN`, `CONTRACTOR`, `FREELANCE`, `TEMPORARY`, `OTHER` |
| `salaryMin` / `salaryMax` | ✓ | Annual €. Set 0 to disable. Matches against the row's salary range. |
| `careerLevel` | ✗ | Requires `includeListingDetails: true` — the field only appears in detail rows. |
| `remoteOption` | ✗ | Requires `includeListingDetails: true` — same reason. |

Filters are applied **after** rows are fetched, so you still pay for the raw rows that get dropped. For typical search sizes the difference is negligible.

#### Unsupported

- Logged-in-only views (private profiles, premium contact info)
- `xing.com/communities/*`, `xing.com/news/*`, `xing.com/insights/*`
- Job applications (we only read, never apply)

***

### Use cases

| Audience | What they pull |
|---|---|
| **Recruiters / talent ops** | Job listings (salary, employment type, apply URL) by region + discipline; build a German-market vacancy feed |
| **Sales / lead-gen** | Company pages — followers, employee count, office addresses, websites → outbound list |
| **HR-tech & ATS vendors** | Combined job + company rows to enrich applicant submissions with employer Kununu rating |
| **Market researchers** | Discipline + location aggregates for DACH labour-market reports |
| **Recruiting CRMs** | Profile timeline + skills → enrichment for German candidate records |

***

### Input configuration

| Field | Type | Required | Notes |
|---|---|---|---|
| `startUrls` | array of `{ url }` | one of these is required | Mix any URL types (search, job, profile, company). |
| `companyTargets` | array of strings | one of these is required | Bulk-companies shortcut: each entry is a full URL OR a bare slug (`"bayer"`). Merged into `startUrls` at run time. |
| `keyword` | string | one of these is required | Job title / skill keywords. Overrides `title`. |
| `title` | string | — | Alias for `keyword` (legacy). Ignored if `keyword` is set. |
| `location` | string | — | E.g. `Berlin`, `Munich`. Used when no URL is provided, or to fill gaps when a URL omits it. |
| `discipline` | string | — | Xing discipline label, e.g. `Technology`. |
| `radius` | integer | — | Search radius in km. Default `10`. |
| `employmentType` | array of enums | — | Multi-select. Drops jobs that don't match. Default: keep all. |
| `careerLevel` | array of enums | — | Multi-select. Requires `includeListingDetails: true`. |
| `remoteOption` | array of enums | — | Multi-select (`FULL_REMOTE`, `PARTLY_REMOTE`, `NON_REMOTE`). Requires `includeListingDetails: true`. |
| `salaryMin` | integer | — | Min annual salary in EUR. `0` disables. |
| `salaryMax` | integer | — | Max annual salary in EUR. `0` disables. |
| `maxItems` | integer | — | Hard cap on emitted rows. Free users capped at 100. |
| `maxConcurrency` | integer | — | Default `10`. Crank up for paid runs on big seeds. |
| `minConcurrency` | integer | — | Default `1`. |
| `maxRequestRetries` | integer | — | Default `3`. |
| `proxy` | object | — | Apify proxy config. Defaults to `RESIDENTIAL`. |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.xing.com/jobs/search?keywords=developer&location=berlin&radius=10" },
    { "url": "https://www.xing.com/pages/spectrumag" },
    { "url": "https://www.xing.com/profile/Marko_RoeperGrewe" }
  ],
  "maxItems": 200,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

Or, with no URLs:

```json
{
  "keyword": "Senior Backend Engineer",
  "location": "Berlin",
  "discipline": "Technology",
  "radius": 25,
  "employmentType": ["FULL_TIME"],
  "salaryMin": 60000,
  "maxItems": 100
}
```

Or, bulk-companies via slugs:

```json
{
  "companyTargets": [
    "https://www.xing.com/pages/sap",
    "bayer",
    "basf",
    "spectrumag"
  ],
  "maxItems": 100
}
```

***

### Output overview

One flat row per record. Three row shapes (`job`, `company`, `profile`) — same dataset, distinguish by the presence of `scrapedType` or the unique fields.

#### Job row (sample, shortened)

```jsonc
{
  "id": "12345678",
  "url": "https://www.xing.com/jobs/senior-backend-engineer-12345678",
  "title": "Senior Backend Engineer (m/w/d)",
  "companyName": "Spectrum AG",
  "location": "Berlin",
  "country": "Deutschland",
  "remoteOptions": "REMOTE_FRIENDLY",
  "salaryMin": 70000,
  "salaryMax": 95000,
  "salaryCurrency": "EUR",
  "employmentType": "FULL_TIME",
  "careerLevel": "SENIOR",
  "discipline": "Engineering",
  "industry": "Software",
  "datePosted": "2026-05-20T08:00:00Z",
  "validThrough": "2026-07-20T08:00:00Z",
  "description": "We're looking for a Senior Backend Engineer to …",
  "keywords": "Node.js, TypeScript, PostgreSQL, AWS",
  "applyUrl": "https://www.xing.com/jobs/apply/12345678",
  "companyLogo": "https://images.xing.com/...",
  "companyUrl": "https://www.xing.com/pages/spectrumag",
  "kununuRating": 4.3,
  "kununuCompanyUrl": "https://www.kununu.com/de/spectrum-ag",
  "socialWebsite": "https://spectrum.example",
  "socialLinkedin": "https://linkedin.com/company/spectrum",
  "scrapedAt": "2026-05-28T07:00:00Z"
}
```

#### Company row (sample, shortened)

```jsonc
{
  "scrapedType": "company",
  "url": "https://www.xing.com/pages/spectrumag",
  "id": "98765",
  "name": "Spectrum AG",
  "profilePicture": "https://images.xing.com/...",
  "followers": 12450,
  "employeesNumber": 320,
  "industry": "Software",
  "foundedYear": 2010,
  "websiteUrl": "https://spectrum.example",
  "kununuRating": 4.3,
  "headline": "Building the future of B2B SaaS",
  "summary": "Spectrum AG is a Berlin-based …",
  "description": "Full company about-us text …",
  "employees": [
    { "name": "Anna Müller", "url": "https://www.xing.com/profile/anna_muller", "occupations": ["VP Engineering"] }
  ],
  "jobs": [
    { "title": "Senior Backend Engineer", "url": "https://www.xing.com/jobs/...", "location": { "city": "Berlin" } }
  ],
  "locations": [
    {
      "label": "HQ Berlin",
      "city": "Berlin",
      "address": "Friedrichstr. 100",
      "postCode": "10117",
      "coordinates": { "latitude": 52.5176, "longitude": 13.3884 },
      "country": { "countryCode": "DE", "localizationValue": "Germany" },
      "contactInfo": { "phoneNumber": "+49 30 12345678", "websiteURL": "https://spectrum.example" }
    }
  ],
  "scrapedAt": "2026-05-28T07:00:00Z"
}
```

#### Profile row (sample, shortened)

```jsonc
{
  "scrapedType": "profile",
  "url": "https://www.xing.com/profile/Marko_RoeperGrewe",
  "name": "Marko Roeper-Grewe",
  "isPremium": true,
  "occupation": "Head of Engineering",
  "location": "Berlin, Germany",
  "tags": ["Node.js", "TypeScript", "Team Leadership"],
  "timeline": [
    { "time": "2023 – present", "occupation": "Head of Engineering", "organizationName": "Spectrum AG" },
    { "time": "2020 – 2023", "occupation": "Engineering Manager", "organizationName": "Previous Co" }
  ],
  "education": [
    { "title": "M.Sc. Computer Science", "school": "TU Berlin" }
  ],
  "languages": [
    { "name": "German", "level": "First Language" },
    { "name": "English", "level": "Fluent" }
  ],
  "interests": ["distributed systems", "mentoring"],
  "scrapedAt": "2026-05-28T07:00:00Z"
}
```

***

### Key output fields

#### Job rows

- **Identity:** `id`, `slug`, `url`, `title`
- **Company:** `companyName`, `companyLogo`, `companyUrl`, `companyAddress`, `companySize`, `kununuRating`
- **Compensation:** `salaryMin`, `salaryMax`, `salaryMedian`, `salaryCurrency`
- **Classification:** `employmentType`, `careerLevel`, `discipline`, `industry`, `remoteOptions`
- **Content:** `description` (full text), `keywords` (skills list), `applyUrl`
- **Social:** `socialWebsite`, `socialFacebook`, `socialTwitter`, `socialYoutube`, `socialLinkedin`, `socialInstagram`

#### Company rows

- **Identity:** `id`, `name`, `url`, `profilePicture`
- **Scale:** `followers`, `employeesNumber`, `companySizeRange.min/max`
- **About:** `headline`, `summary`, `description`, `foundedYear`, `websiteUrl`, `legalNotice`
- **Relations:** `employees[]`, `jobs[]`, `locations[]`
- **Trust:** `kununuRating`, `industry`

#### Profile rows

- **Identity:** `id`, `name`, `firstName`, `lastName`, `pageName`, `displayName`
- **Status:** `isPremium`, `occupation`, `location`, `city`, `country`
- **Timeline:** `timeline[]` (jobs in chronological order)
- **Education:** `education[]`, `highestEducationDegree`, `highestEducationSchool`
- **Skills:** `tags[]`, `languages[]`, `interests[]`, `wants[]`

***

### Pricing

| Event | When | Rate |
|---|---|---|
| `apify-actor-start` | Once at run start, per GB of allocated memory | $0.007 |
| `apify-default-dataset-item` | Per scraped row (job / company / profile) | $0.00119 |

So a typical run that scrapes 1,000 job rows on 1 GB memory costs ~$1.19 + $0.007 ≈ **$1.20 total**.

Free users are capped at 100 items per run; paid users have no cap beyond `maxItems` and `ACTOR_MAX_PAID_DATASET_ITEMS`.

***

### What makes this richer than the competition

| Capability | Jobs-only competitors | Companies-only competitors | This actor |
|---|---|---|---|
| Job listings + salary + Kununu | ✓ | ✗ | ✓ |
| Pagination across job-search results | ✓ | ✗ | ✓ |
| Company pages (followers, employees, locations) | ✗ | ✓ | **✓** |
| Member profiles (timeline, skills, languages) | ✗ | ✗ | **✓** |
| Bulk-companies shortcut (slug list, no URLs) | ✗ | ✓ | **✓** |
| Multi-select filters (employment type, salary, remote) | partial | ✗ | **✓** |
| Mixed URL types in one run | ✗ | ✗ | **✓** |
| Pure HTTP (no browser) | ✓ | ✓ | ✓ |
| Price | $1.19–$2.99 / 1k | varies | **$1.19 / 1k (all-in-one)** |

***

### FAQ

**Q: Do I need a Xing account or API key?**
No. The actor uses Xing's public GraphQL endpoint with a built-in client identity. You only need your Apify account.

**Q: I have a list of 200 company names — do I have to convert each to a URL?**
No. Use `companyTargets` and paste either URLs *or* bare slugs (`bayer`, `sap`, `spectrumag`). The actor expands each to `https://www.xing.com/pages/{slug}` automatically. Company names with spaces (`"Bayer AG"`) aren't auto-resolved yet — use the slug.

**Q: I set `careerLevel` / `remoteOption` but nothing was filtered. Why?**
Those two filters live only in the **job detail** response, not in the search-results page. Set `includeListingDetails: true` and they'll work. `employmentType` and salary filters work without details.

**Q: Can I scrape private profiles or premium contact info?**
No. The actor only reads what an unauthenticated Xing visitor would see. Private/premium fields are not exposed.

**Q: Do company pages return ALL employees?**
Only what Xing renders publicly on the company `/pages/{slug}` SSR view (typically a few dozen senior employees). For a complete employee directory you would need each member's `/profile/{user}` page.

**Q: What if a job URL has no salary?**
Salary fields will be `undefined`. Most Xing jobs do publish salary ranges; some companies opt out.

**Q: Can I scrape Xing.de competitors (e.g. LinkedIn, Indeed)?**
No — this actor only handles `xing.com` domains. Look at the **Explore More Scrapers** section below for related actors.

**Q: How does pagination work?**
For search URLs, the actor fetches 20 results per page and continues until either `maxItems` is hit or Xing returns fewer than 20 results.

**Q: My run failed with a 401 / 403 — what now?**
Usually a stale Xing token or a flagged IP. Re-run; the proxy session rotates. If it persists, open an issue (link below) and we'll refresh the embedded token.

**Q: Is there a CSV export?**
Yes — Apify Console offers JSON, CSV, XLSX, RSS, HTML out of the box on every dataset.

***

### Support

- **Open an issue:** https://console.apify.com/actors/memo23/xing-scraper/issues
- **Email:** muhamed.didovic \[at] gmail.com
- **Bug reports:** include the run ID and the URL that misbehaved.

***

### Additional services

Need bespoke Xing extraction (e.g. industry-wide weekly company sweeps, candidate enrichment at scale, custom-field mapping into Salesforce / HubSpot / Greenhouse)? Reach out via the email above — happy to scope custom work.

***

### Explore more scrapers

- **[Stepstone Scraper](https://apify.com/memo23/stepstone-search-cheerio-ppr)** — DACH job board with similar pricing
- **[LinkedIn Jobs Scraper](https://apify.com/curious_coder/linkedin-jobs-scraper)** — global jobs at scale
- **[Kununu Scraper](https://apify.com/blackfalcondata/kununu-scraper)** — company ratings to pair with this actor's `kununuRating` field
- **[Arbeitsagentur Jobs Feed](https://apify.com/blackfalcondata/arbeitsagentur-jobs-feed)** — German federal jobs feed
- **[German Imprint Scraper](https://apify.com/dominic-quaiser/imprint-contact-scraper)** — pair company `websiteUrl` with imprint contacts for outbound

***

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/xing-scraper`).

**Purpose:** Scrape xing.com jobs, company pages, and member profiles in one actor — one flat row per record; the differentiator is mixing all three URL types (plus a filter-only search and a bulk-company slug shortcut) in a single run at ~$1.19/1k rows.

**Minimal input:**

```json
{ "startUrls": [{ "url": "https://www.xing.com/jobs/search?keywords=developer&location=berlin&radius=10" }], "maxItems": 50 }
```

Filter-only variant (no URL): `{ "keyword": "developer", "location": "Berlin", "maxItems": 50 }`

**Output:** three row shapes in one dataset (tell them apart by `scrapedType` / unique fields). Job rows: id, url, title, companyName, companyUrl, location, country, salaryMin, salaryMax, salaryCurrency, employmentType, careerLevel, discipline, industry, remoteOptions, datePosted, validThrough, description, keywords, applyUrl, kununuRating, socialWebsite/socialLinkedin. Company rows: id, name, url, followers, employeesNumber, industry, foundedYear, websiteUrl, kununuRating, headline, summary, description, employees\[], jobs\[], locations\[{label, city, address, postCode, coordinates {latitude, longitude}, country {countryCode}, contactInfo {phoneNumber, websiteURL}}]. Profile rows: name, isPremium, occupation, location, tags\[], timeline\[{time, occupation, organizationName}], education\[{title, school}], languages\[{name, level}], interests\[].

**Behaviors an agent should know:**

- Provide exactly one seed: `startUrls`, `companyTargets`, or the filter fields (`keyword`+`location`). URLs take precedence; filter fields only fill gaps a search URL omits.
- Always set `maxItems` (default 100) — free Apify accounts are hard-capped at 100 rows/run regardless.
- `companyTargets` accepts full `/pages/{slug}` URLs or bare slugs (`"bayer"`); names with spaces aren't resolved.
- `employmentType` and salary filters work on basic search; `careerLevel` and `remoteOption` filters require `includeListingDetails: true` (they only appear in job-detail rows). Filters run post-fetch, so dropped rows are still billed.
- Public unauthenticated data only — no private/premium profiles or contact info. Handles `xing.com` domains only.
- Billing: pay-per-event — `apify-actor-start` $0.007 per GB at start, plus `apify-default-dataset-item` $0.00119 per row (~$1.19/1k). See the Pricing tab on the actor page.

***

### ⚠️ Disclaimer

This Actor accesses publicly available data on Xing (operated by New Work SE) for legitimate research, market intelligence, and business-analysis purposes. Use of this Actor must comply with Xing's Terms of Service and all applicable laws, **including the EU General Data Protection Regulation (GDPR)**, the German Federal Data Protection Act (BDSG), and any other applicable jurisdictional privacy regulation. The Actor's authors are not affiliated with New Work SE or Xing.

Users must:

- Respect rate limits and avoid overloading Xing's infrastructure
- Not use scraped data to violate user privacy or Xing's Terms of Service
- Comply with GDPR when processing personal data of EU residents (lawful basis, retention limits, data-subject rights)
- Not republish scraped content in violation of copyright
- Not use the data for unsolicited bulk contact (anti-spam / UWG)

We do not store any scraped data; the Actor returns it directly to your Apify dataset for your authorized use.

***

### SEO Keywords

xing scraper, xing jobs scraper, xing companies scraper, xing profile scraper, xing bulk company slugs, xing search by keyword, xing salary filter, xing remote jobs filter, xing api alternative, xing data extraction, xing bulk export, dach jobs scraper, germany jobs scraper, austria jobs scraper, switzerland jobs scraper, xing.de scraper, kununu data extraction, b2b lead generation germany, recruitment data dach, sales prospecting dach, talent intelligence, hr data scraper, professional network scraper, no-code xing scraper, apify xing actor, xing json export, xing csv export

# Actor input Schema

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

Listing or detail URLs: jobs search, single job, profile, or company page. Leave empty to use **Search by filters** or **Company targets** instead.

## `companyTargets` (type: `array`):

Paste a list of Xing companies — each entry can be a **full URL** (e.g. `https://www.xing.com/pages/bayer`) or a **bare slug** (e.g. `bayer`). Entries are merged into Start URLs at run time. Company names with spaces are not supported yet — use the slug from the company's Xing URL.

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

Job title or skill keywords (e.g. "Remote"). If set, it overrides **Job title (keywords)**.

## `title` (type: `string`):

Same as **Keyword** — use either field. Ignored when **Keyword** is set.

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

Geographic area, e.g. Berlin. Use with Keyword and/or Discipline when you have no start URL.

## `discipline` (type: `string`):

Professional field, e.g. Technology. Must match Xing's discipline label for your UI language.

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

Search radius around the location in kilometers.

## `includeListingDetails` (type: `boolean`):

When enabled, the actor opens each job's detail page to add the full description and extended fields (one extra request per listing, so runs are slower). Default: false — list-level fields only.

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

Keep only jobs matching one of the selected types. Multi-select. Leave empty for all. (Applied after scraping — works with basic search.)

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

Keep only jobs at the selected seniority. Multi-select. Leave empty for all. (Requires `includeListingDetails: true` — careerLevel only appears in detail rows.)

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

Keep only jobs matching the selected remote-work option. Multi-select. Leave empty for all. (Requires `includeListingDetails: true` — remoteOptions only appears in detail rows.)

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

Filter to jobs with a salary at or above this annual minimum (EUR). Leave 0 to disable.

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

Filter to jobs with a salary at or below this annual maximum (EUR). Leave 0 to disable.

## `enrichEmails` (type: `boolean`):

If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.

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

Maximum number of items (job / company / profile rows) to scrape per run. Example: 50. Default 100. Free Apify accounts are hard-capped at 100 rows per run regardless of a higher value.

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

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `proxy` (type: `object`):

Residential proxies recommended. The default works out of the box.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.xing.com/jobs/search?facets%5B%5D=discipline&keywords=developer&location=berlin&nrs=1&page=1&radius=10&section=jobs&id=0390a64d302a857fd8f6787292ca4bd9"
    }
  ],
  "title": "Developer",
  "location": "Berlin",
  "radius": 10,
  "includeListingDetails": false,
  "salaryMin": 0,
  "salaryMax": 0,
  "enrichEmails": false,
  "maxItems": 100,
  "maxConcurrency": 100,
  "minConcurrency": 1,
  "maxRequestRetries": 3,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.xing.com/jobs/search?facets%5B%5D=discipline&keywords=developer&location=berlin&nrs=1&page=1&radius=10&section=jobs&id=0390a64d302a857fd8f6787292ca4bd9"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/xing-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 = {
    "startUrls": [{ "url": "https://www.xing.com/jobs/search?facets%5B%5D=discipline&keywords=developer&location=berlin&nrs=1&page=1&radius=10&section=jobs&id=0390a64d302a857fd8f6787292ca4bd9" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/xing-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 '{
  "startUrls": [
    {
      "url": "https://www.xing.com/jobs/search?facets%5B%5D=discipline&keywords=developer&location=berlin&nrs=1&page=1&radius=10&section=jobs&id=0390a64d302a857fd8f6787292ca4bd9"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/xing-scraper --silent --output-dataset

```

## MCP server setup

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