XING Jobs Scraper - German Job Listings & Salary Data API avatar

XING Jobs Scraper - German Job Listings & Salary Data API

Pricing

from $4.45 / 1,000 results

Go to Apify Store
XING Jobs Scraper - German Job Listings & Salary Data API

XING Jobs Scraper - German Job Listings & Salary Data API

Extract public XING job postings across the DACH market: title, company, location, employment type, career level, industry and XING's own structured salary estimate with minimum, median and maximum.

Pricing

from $4.45 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

ParseForge

XING Jobs Scraper - German Job Listings & Salary Data API

Scrape public job postings from XING, the professional network of the DACH region, and get back 43 flat fields per job — including XING's own salary band with minimum, median and maximum, the employer's company size and industry, the career level, the discipline, and the full advert body. No login, no API key, no cookies. Export to CSV, JSON, Excel, or XML.

XING has no public jobs API. Its search endpoint answers anonymous callers but hands back a walled UnauthorizedJob for every hit — an id and nothing else. This Actor takes the surface XING does publish for search engines, roughly 650,000 live postings, and resolves each one to its complete public payload.

Who uses itWhat they scrape XING for
Salary benchmarking and comp teamsA modelled salary band on ~85% of postings, broken into min, median and max, with city, discipline and career level attached
Recruiters and staffing agenciesFresh DACH vacancies with the employer named, the company size, and whether you can apply on XING or get bounced to a careers site
Job boards and aggregatorsA daily German-market feed in one fixed schema, deduplicated by a stable numeric job id
Labour-market researchersVolume by city, discipline, industry and seniority across Germany, Austria and Switzerland
Sales teams selling to HRCompanies actively hiring, with headcount bracket, industry and their XING company page

What it does

This Actor collects XING job postings by keyword, by city, or by exact URL, and returns each one as a flat row.

🇩🇪 The DACH market, not just Germany. Postings carry an ISO country code — DE, AT or CH — and a filter to keep only the ones you want.

💶 Salary as three numbers, not a string. salaryMin, salaryMedian and salaryMax come back as integers with a currency, plus a salaryIsEstimate flag telling you whether XING modelled the band or the employer typed it.

🏢 The employer, not just its name. companySize as a headcount bracket, companyIndustry, the XING company page URL, and a stable companyId you can join on across runs.

📍 Location split into columns. City, region, country, country code, street and postal code as separate fields — plus XING's internal cityId, which is stable across spellings.

🗂️ XING's own taxonomy. discipline from XING's list of 17 job families, industry from its list of around 55, and careerLevel from six seniority bands.

📝 The advert body, HTML or plain text. Optional, like the salary band, the employer profile and the full address — each is a checkbox that is off until you want it, and billed only then.

Results export to CSV, JSON, Excel, or XML, or stream from the API.

What you can do with XING data

📊 Benchmark German salaries by role and city.

Pull every IT posting in München with a salary band and read the median directly — no scraping salary text out of prose, no currency parsing.

🎯 Track who is hiring, and how hard.

postedAt, refreshedAt and daysOnline on every row show which vacancies keep getting refreshed — the ones an employer is struggling to fill.

📈 Build a DACH labour-market panel.

Run it on a schedule and key on jobId. New ids are new vacancies; ids that vanish are filled or expired.

🧠 Feed a recruiting or matching product.

keywords, discipline, careerLevel and remoteOptions give you the structured signals a matching model needs, without an NLP pass over the advert.

Why choose this scraper

What you get
Salary in three numberssalaryMin, salaryMedian, salaryMax and a currency, on roughly 85% of postings. The median is the field competitors do not return. Optional, so you only pay for it when you want it.
Predictable billOne per-row price by default. Every extra data block is a checkbox that is off until you tick it, so a run cannot surprise you with charges you did not ask for.
43 fields per jobEvery field XING publishes to anonymous callers, verified against the live endpoint rather than guessed.
No proxy, no loginXING answers plain requests. The Actor runs proxy-free by default, so a run costs you nothing in proxy traffic.
16 filters that cut the billKeyword, city, salary range, employment type, career level, discipline, industry, country, language, remote option, posting age and direct-apply. Filtered rows are never written and never charged.
Company beyond the namecompanyId, companySize, companyIndustry and the XING company page, when the employer has one.
Direct-apply flagdirectApply and redirectsToThirdPartyUrl tell you whether the posting is a real XING vacancy or an aggregator bounce.
Honest emptiesA field XING does not publish for a job is absent, never a guessed value and never a null.
Stable join keyjobId is XING's own numeric id and survives title edits and refreshes.
Four export formatsCSV, JSON, Excel, and XML, from the dashboard or the API.

How it compares

The competitor columns below reflect what each Actor's own public listing states, not a test run of it.

FeatureParseForgeshahidirfanmemo23fatihtahtasolidcode
Salary minimum and maximumYesNot statedNot statedYesYes
Salary medianYesNoNoNoNo
Company size and industryYesNot statedCompany pages, billed separatelyYesNot stated
Discipline and career levelXING's own taxonomy, filterableNot statedFilterableNot statedNot stated
Filter before you pay16 filters, rejected rows unbilledNot statedKeyword, location, disciplineNot statedKeyword and city
Fetch an exact posting by URLYes, URL, slug or bare idNot statedYes, any xing.com URLNot statedNot stated
Profiles and company pagesNo, jobs onlyYesYesNoNo
Runs without a proxyYesNot statedNot statedNot statedNot stated
Base price per result$0.005$0.001$0.00119$0.00079$0.001

If you need XING profiles or company pages as well as jobs, memo23's actor covers all three. Come here when the job data itself is the product — particularly if you need the salary median or want to filter hard before paying.

What a job looks like

Every posting returns as one flat JSON row. Here is a real record, unedited apart from a shortened description:

{
"jobId": "157336394",
"jobHashId": "157336394.b53792",
"slug": "herford-software-entwickler-microsoft-dynamics-365-business-central-157336394",
"url": "https://www.xing.com/jobs/herford-software-entwickler-microsoft-dynamics-365-business-central-157336394",
"title": "Software-Entwickler*in Microsoft Dynamics 365 Business Central",
"company": "ATEGRAM GmbH",
"companyId": "2021241.c27f57",
"companyUrl": "https://www.xing.com/pages/ategram-gmbh",
"companySize": "51-200 Mitarbeitende",
"companyIndustry": "Großhandel",
"city": "Herford",
"region": "Nordrhein-Westfalen",
"country": "Deutschland",
"countryCode": "DE",
"street": "Mindener Str. 9",
"zipCode": "32049",
"cityId": 2906121,
"salaryCurrency": "EUR",
"salaryMin": 54500,
"salaryMax": 68500,
"salaryMedian": 62500,
"salaryIsEstimate": true,
"employmentType": "Teilzeit",
"careerLevel": "Mit Berufserfahrung",
"industry": "Großhandel",
"discipline": "IT und Softwareentwicklung",
"remoteOptions": ["NON_REMOTE"],
"isRemote": false,
"language": "de",
"keywords": ["softwareentwickler", "projektleitung", "wirtschaftsinformatik"],
"jobCode": "10001-1003559130-S",
"applicationType": "JobXingApplication",
"directApply": true,
"redirectsToThirdPartyUrl": false,
"isPaidListing": false,
"isTopJob": false,
"postedAt": "2026-08-20T00:19:07Z",
"refreshedAt": "2026-08-20T00:19:07Z",
"activeUntil": "2027-08-20T00:20:35Z",
"daysOnline": 0,
"description": "<P>Zur Verstärkung unseres Teams suchen wir …</P>",
"descriptionFormat": "html",
"scrapedAt": "2026-08-20T13:38:10.863Z"
}

Configure the run

SettingWhat it does
keyword / keywordsJob title, skill or keyword. Matched against the posting title, XING's own keyword tags, and the URL slug. A job matching any keyword is kept.
city / citiesCity name. Umlauts are handled in both spellings, so München, Munchen and muenchen all match.
jobUrlsExact postings to fetch, skipping discovery. Accepts a full URL, a bare slug, or the numeric job id.
maxItemsCeiling on rows written. Not a target — a narrow filter returns fewer.
maxSitemapShardsHow deep discovery may dig, 1 to 13. It stops as soon as it has enough, so a broad run reads one shard.

| descriptionFormat | html keeps XING's markup, text flattens it to readable plain text. | | sortBy | Discovery order (fastest), newest first, highest salary first, or title A–Z. | | proxyConfiguration | Off by default. XING answers plain requests; enable only if your runs start getting rate-limited. |

Narrow the run with filters

Every filter runs before the row is written, so rows you filter out are never charged.

FilterWhat it keeps
salaryMin / salaryMaxPostings whose band overlaps the range you gave. Postings with no band are dropped by these.
onlyWithSalaryOnly postings carrying a salary band at all.
employmentTypesVollzeit, Teilzeit, Studierende, Aushilfe, Selbstständig, Praktikum.
careerLevelsSix seniority bands, from Berufseinsteiger·in to Geschäftsführer·in.
disciplinesXING's 17 job families. Matched as a substring, so IT finds IT und Softwareentwicklung.
industriesFree text against XING's ~55 industry labels, for example Software, Gesundheit, Automobil.
countriesDE, AT, CH.
languagesGerman or English adverts.
remoteOptionsOn site, hybrid, or fully remote.
postedWithinDaysPostings activated in the last N days.
onlyDirectEmployerDrops postings that bounce the applicant to an external careers site.

Why discovery works the way it does

XING's search API answers without a login, but every result comes back as UnauthorizedJob — the posting id and nothing else. Measured 20/08/2026: zero of ten search hits resolved to a readable job.

The sitemap XING publishes for search engines is a different story. It carries roughly 650,000 postings across 13 shards, and the jobs on it resolve to their full public payload. Around 15% sit behind the login wall anyway — they are skipped, logged, and never charged.

That is why the keyword and city filters are matched against the slug during discovery: it lets the Actor throw away non-matching postings before spending a request on them.

Pricing

This Actor is pay per event, and a run left at its defaults has exactly one per-row price. Every optional data block is off by default: if you do not tick it, you do not receive it and you are not charged for it. Nothing is billed for rows a filter rejected.

EventPriceWhen it fires
result-item$0.005One job row. Covers the title, employer name, city and country, employment type, career level, industry, discipline, keywords, dates and apply flags.
sitemap-scan$0.003One sitemap shard read. A broad run reads one; only a narrow filter reaches more.
apify-actor-start$0.02Once when the run starts, per GB of memory.

Optional, and off unless you ask for them:

EventPriceSwitched on by
salary-data$0.001includeSalary — minimum, median and maximum with a currency. ~85% of postings carry one.
company-data$0.0006includeCompanyProfile — company id, XING page, headcount bracket, industry. ~67% carry them.
location-detail$0.0004includeLocationDetail — street, postal code, region, city id.
description-text$0.0006includeDescription — the full advert body. ~91% carry one.

A default run costs $0.005 per job, or $5.00 per 1,000. With all four optional blocks switched on it is $0.0076 per job, or $7.60 per 1,000.

The salary filters are the exception worth knowing about: salaryMin and salaryMax work whether or not includeSalary is on. You can filter to the jobs that pay over €70,000 without buying the salary column.

Free users

Apify free-plan runs are capped at 100 jobs per run. Everything else works the same: all 43 fields, all 16 filters, and every optional block available to tick. Upgrade your Apify plan to lift the cap.

Run it

  1. Open the Actor in Apify Console and set a keyword, a city, or both.
  2. Set maxItems to the number of jobs you want.
  3. Click Start, then export the dataset as CSV, JSON, Excel, or XML.

Or from the API:

curl -X POST "https://api.apify.com/v2/acts/parseforge~xing-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"keyword":"entwickler","city":"Berlin","salaryMin":55000,"maxItems":100}'

Use with AI agents (MCP)

The Actor is exposed over Apify's MCP server, so an agent can call it as a tool:

https://mcp.apify.com/sse?actors=parseforge/xing-scraper

Ask things like "find Berlin software jobs on XING paying over 70,000 euros" and the agent fills the input itself.

Troubleshooting

No jobs came back.

The filters are ANDed. A keyword plus a city plus a salary floor plus a discipline can genuinely match nothing in the shards read. Drop one filter at a time, and raise maxSitemapShards if it is not already 13.

Fewer rows than maxItems.

maxItems is a ceiling. Discovery stops when the shard budget is exhausted, and roughly 15% of sitemap postings are login-walled by XING. The log prints exactly how many were walled, expired, or filtered.

Why is street, zipCode or jobCode empty?

XING only carries them when the employer filled them in — measured at 53%, 57% and 61% of postings. An absent field is the source's real state, not a parsing failure.

Why is companyId missing on some rows?

About a third of employers post without a XING company page. company still holds the name they published.

Why are salaries "estimates"?

XING models a band for most postings from role, location and seniority. salaryIsEstimate is true in that case. It is XING's own figure, published on its own pages.

Why is the run slow with a narrow filter?

Each sitemap shard is a 1 MB download holding 50,000 URLs. A filter matching almost nothing forces the Actor through more of them. Widen the filter or lower maxSitemapShards.

A field stopped filling.

XING changed its GraphQL schema. Email us with your run ID so we can update the query.

FAQ

QuestionAnswer
Do I need a XING account or API key?No. XING has no public jobs API. This reads public data only, so there is nothing to register or authenticate.
Does it cover Austria and Switzerland?Yes. Postings carry an ISO country code and countries filters on it, though the market is overwhelmingly German.
Does it scrape XING profiles or company pages?No. This Actor is jobs only.
Are the salaries real or estimated?Mostly estimated — XING models a band and publishes it on the posting. salaryIsEstimate marks which.
Can I fetch one specific posting?Yes. Put its URL, slug or numeric id in jobUrls.
How current is the data?The sitemap is rebuilt daily and the Actor reads the newest shard first. postedAt and daysOnline are on every row.
How many jobs are reachable?Around 650,000 across the 13 shards, of which roughly 85% resolve to a full public payload.
How many rows per run?Free plan: 100. Paid: up to 100,000, bounded by how many postings match your filters and by the run timeout.
Does it need a proxy?No. It runs proxy-free by default.
Is this an official XING product?No. It is unofficial and reads only publicly available XING data.
  • Bayt Scraper: Middle East job listings across 18 markets.
  • InfoJobs Scraper: Spanish job board listings with salary and contract data.
  • D&B Scraper: company profiles, DUNS numbers, revenue and key principals.

Browse the full ParseForge collection for more scrapers.

🆘 Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by XING, New Work SE, or its owners. It collects only publicly available XING data — job postings published for search engines — and no personal profiles. You are responsible for using the data in compliance with XING's terms and applicable laws, including GDPR. Job postings are corporate publications; do not use this data to identify, profile, or target individuals.