XING Jobs Scraper API - Germany, Austria, Switzerland avatar

XING Jobs Scraper API - Germany, Austria, Switzerland

Pricing

from $0.51 / 1,000 job returneds

Go to Apify Store
XING Jobs Scraper API - Germany, Austria, Switzerland

XING Jobs Scraper API - Germany, Austria, Switzerland

Scrape XING job postings across the DACH region: title, company, full address, employment type, career level, remote/hybrid/on-site flag, exact posted date, apply link and salary when XING shows one. No login. At $0.51 per 1,000 jobs, the lowest price of any XING jobs scraper on Apify.

Pricing

from $0.51 / 1,000 job returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

XING Jobs Scraper API — Germany, Austria & Switzerland

Pulls job postings off XING (xing.com), the professional network used across the German-speaking market. Give it a keyword, a city, or a XING search URL. You get structured rows back: title, company, full address, employment type, career level, remote/hybrid/on-site, the exact timestamp the posting went live, the apply link, and the salary when XING has one.

No login. No cookies to paste. No browser, so a 300-posting run finishes in about 28 seconds.


What one row looks like

Real output from a live run:

{
"jobId": "156657850.09f9ef",
"title": "Founding Software Engineer (m/w/d)",
"companyName": "Mathe Buddy",
"jobUrl": "https://www.xing.com/jobs/geislingen-steige-founding-software-engineer-156657850",
"applyUrl": "https://api.relaxx.center/r/c6d0f2b4e7af4f719e3c9e635ed1c626?pid=2616477",
"city": "Geislingen an der Steige",
"region": "Baden-Württemberg",
"zipCode": "73312",
"street": "Bahnhofstraße 27",
"country": "Deutschland",
"countryCode": "DE",
"employmentType": "Vollzeit",
"careerLevel": "Mit Berufserfahrung",
"industry": "Schulen, Kindergärten",
"discipline": "IT und Softwareentwicklung",
"remoteOptions": ["NON_REMOTE"],
"workplaceType": "On-site",
"isRemote": false,
"isHybrid": false,
"isOnsite": true,
"salaryMin": 70000,
"salaryMax": 95000,
"salaryCurrency": "EUR",
"salaryIsEstimate": false,
"postedAt": "2026-07-23T16:18:26Z",
"refreshedAt": "2026-08-07T16:18:26Z",
"activeUntil": "2026-09-21T16:18:28Z",
"postingLanguage": "de"
}

Two more from the same runs:

  • Softwareentwickler:in (m/w/d) — agmadata GmbH — Garrel — Vollzeit — EUR 50,000–75,000 (employer figure) — on-site — posted 2026-07-30
  • Java Web-/ Softwareentwickler (m/w/d) — Statistisches Landesamt Rheinland-Pfalz — Bad Ems — Vollzeit — EUR 45,500–54,500 (XING estimate) — hybrid — posted 2026-07-27

Field coverage — measured, not promised

Across 365 unique postings from six live runs:

FieldPresent
title, companyName, jobUrl, city, countryCode100%
employmentType, careerLevel, industry, discipline100%
postedAt, refreshedAt, activeUntil100%
workplaceType / remoteOptions100%
region95%
companyLogo89%
companySize, companyUrl~68%
applyUrl63%
jobCode58%
zipCode36%
street26%

About salary — read this before you rely on it

XING publishes three different things, and this actor keeps them apart:

WhatsalaryIsEstimate
A salary the employer publishedfalse
XING's own estimate for that roletrue
Nothing at allnull

The split moves with the search, a lot. Across 365 German-heavy postings it was 15% employer-published, 73% XING estimate, 12% blank. On a mixed DE/AT/CH sample of 296 it was 26% / 52% / 22%. On 164 Vienna postings it was 10% / 28% / 62% — Austrian ads carry far less salary data than German ones. So: roughly one posting in five carries a real employer number, most of the rest carry XING's guess, and in Austria most carry nothing.

A XING scraper that puts a salary on nearly every row is handing you the estimate without saying so. Check salaryIsEstimate before you show a figure to anyone.


How to use it

By keyword and city

{
"searchQueries": ["Softwareentwickler", "Data Analyst"],
"location": "Berlin",
"radius": 30,
"remoteOption": "hybrid",
"postedWithin": "week",
"maxItems": 200
}

By pasted URL — a whole search page, or a single posting:

{
"startUrls": [
{ "url": "https://www.xing.com/jobs/search?keywords=data%20analyst&location=Berlin" },
{ "url": "https://www.xing.com/jobs/berlin-senior-software-engineer-155853218" }
]
}

With the posting text — set includeDescription: true. It arrives in the same request, so it costs no extra time and no extra charge. You get descriptionHtml and descriptionText. Measured coverage: about 1 posting in 4 carries text XING holds itself. The other three quarters are ads XING syndicates from an employer's own site, and XING does not store the body — for those, applyUrl is the link to the full ad.


Filters

InputWhat it does
location + radiusCity or region, plus a radius in km
remoteOptionremote, hybrid or onsite
employmentTypeVollzeit, Teilzeit, Selbstständig, Studierende, Aushilfe, Saisonarbeit, Ehrenamt
careerLevelStudent through executive
postedWithinLast 24 hours / week / month — this is XING's own refresh window, so a posting first published in June can appear in "last week" if the employer bumped it. postedAt always holds the true first-published timestamp
salaryMinMinimum yearly salary in EUR
resultLanguagede or en for XING's own labels

What this does not do

  • It does not go past ~1,000 postings per individual search. That is XING's ceiling, not one we added — asking XING for result number 1,000 returns an error. Split the work across several keywords or cities; each search gets its own 1,000-row budget.
  • It does not return the full text for every posting. See the note above: roughly a quarter.
  • It does not return recruiter or applicant contact details. XING does not publish them.
  • It does not scrape XING member profiles or company pages. Jobs only.
  • It does not log in, so postings XING shows only to signed-in members are not in the output.
  • It does not invent a salary. No figure from XING means null, not a guess.
  • It is not a live feed. It reads what XING shows at the moment you run it.

Cost

Pay per event, whole price on the table:

EventPrice
Actor start$0.001 per run
Job returned$0.51 per 1,000 postings

100 postings ≈ $0.052. 1,000 postings ≈ $0.51.

Nothing is charged for a run that returns no postings, for the sample row an empty run emits, or for a request that fails. Those rows are marked _sample or _diagnostic and carry charged: false.


FAQ

Is there an official XING jobs API? XING retired its public developer API for outside developers years ago. This actor talks to the same public, logged-out endpoint that xing.com's own job search page uses, so there is no key and no account to manage.

Do I need a XING account or cookies? No. Nothing signs in and nothing is kept between runs.

Which countries does XING cover? Germany, Austria and Switzerland, with the odd posting from a neighbour like Luxembourg. The mix in your output follows your search — a plain German keyword run came back 95% German, while adding "location": "Wien" returned mostly Austrian postings. XING is not a useful source outside the DACH region.

Are postings in German or English? Mostly German — 345 of 365 in our runs. postingLanguage tells you per posting. XING's own labels (employmentType, careerLevel, industry) follow the resultLanguage setting.

How accurate is the posted date? It is XING's own timestamp, to the second, in ISO 8601 — not a parsed "vor 3 Tagen". postedAt is when the posting first went live, refreshedAt is the last time it was bumped, and activeUntil is when XING will take it down.

Can I tell remote jobs from hybrid ones? Yes. workplaceType is Remote, Hybrid or On-site, backed by isRemote / isHybrid / isOnsite booleans and the raw remoteOptions array from XING. Present on 100% of rows. In our runs: 48% on-site, 39% hybrid, 13% remote.

Does every job have a salary? No — see the salary section. About one in five carries an employer-published figure; most of the rest carry XING's own estimate, flagged by salaryIsEstimate.

Can I get the full job description? For about a quarter of postings, yes — set includeDescription: true. For the rest, XING only holds a link to the employer's ad, which you get as applyUrl.

How do I get more than 1,000 results? Run several keywords, or the same keyword against several cities. Each search has its own ceiling.

What happens if XING blocks the run? Nothing is charged. The dataset gets a row marked _diagnostic with an errorCode and a plain explanation.

Can I schedule it? Yes — it is a normal Apify actor. Pair a Schedule with postedWithin: "day" for a daily feed of fresh DACH postings.

Can I use my own proxies? Yes, via proxyConfiguration. You should not need to: XING serves a reduced job board to some countries, and the actor already routes through addresses that get the full board.


Output fields

jobId, globalId, title, jobUrl, applyUrl, companyName, companyId, companyUrl, companyLogo, companySize, city, region, zipCode, street, country, countryCode, locations, employmentType, careerLevel, industry, discipline, remoteOptions, workplaceType, isRemote, isHybrid, isOnsite, salaryMin, salaryMax, salaryMedian, salaryCurrency, salaryIsEstimate, salaryText, postedAt, refreshedAt, activeUntil, isPaidListing, isTopJob, appliesOffXing, jobCode, keywords, postingLanguage, descriptionHtml, descriptionText, searchQuery, searchLocation, page, position, scrapedAt.