XING Jobs Scraper API - Germany, Austria, Switzerland
Pricing
from $0.51 / 1,000 job returneds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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-30Java 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:
| Field | Present |
|---|---|
title, companyName, jobUrl, city, countryCode | 100% |
employmentType, careerLevel, industry, discipline | 100% |
postedAt, refreshedAt, activeUntil | 100% |
workplaceType / remoteOptions | 100% |
region | 95% |
companyLogo | 89% |
companySize, companyUrl | ~68% |
applyUrl | 63% |
jobCode | 58% |
zipCode | 36% |
street | 26% |
About salary — read this before you rely on it
XING publishes three different things, and this actor keeps them apart:
| What | salaryIsEstimate |
|---|---|
| A salary the employer published | false |
| XING's own estimate for that role | true |
| Nothing at all | null |
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
| Input | What it does |
|---|---|
location + radius | City or region, plus a radius in km |
remoteOption | remote, hybrid or onsite |
employmentType | Vollzeit, Teilzeit, Selbstständig, Studierende, Aushilfe, Saisonarbeit, Ehrenamt |
careerLevel | Student through executive |
postedWithin | Last 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 |
salaryMin | Minimum yearly salary in EUR |
resultLanguage | de 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:
| Event | Price |
|---|---|
| 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.