Xing Jobs Scraper – Pay Per Job, No Browser avatar

Xing Jobs Scraper – Pay Per Job, No Browser

Pricing

from $0.70 / 1,000 jobs

Go to Apify Store
Xing Jobs Scraper – Pay Per Job, No Browser

Xing Jobs Scraper – Pay Per Job, No Browser

Scrapes Xing job offers (Germany, Austria, Switzerland) over plain HTTP. Input: keywords plus optional location, employment, career level, remote and date filters. Output: jobId, title, company, location, salary, apply URL per job and, with fetchDetails, the full description. $1 per 1,000 jobs.

Pricing

from $0.70 / 1,000 jobs

Rating

0.0

(0)

Developer

Ivan Alexeev

Ivan Alexeev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Security

Limited permissions

Share

What does Xing Jobs Scraper do?

It collects job offers from the Xing job search (xing.com/jobs), the job board of Germany, Austria and Switzerland, for the keywords you give it, optionally limited to a city and radius, an employment type, a career level, a remote option or a posting period. For each offer you get:

  • Title, company, logo, location (first city plus every city of a multi-location posting)
  • Employment type (Vollzeit, Teilzeit, …) and the salary: Xing's estimate with median, or the range or single amount the employer stated
  • Apply URL when the application runs on the employer's site, and flags for external, paid, prioritized and top-job listings
  • With Fetch job pages on: the full description (plain text and HTML), posting date, career level, remote options, industry, discipline, zip code, region, country, keywords, qualifications and language
  • A stable numeric jobId and the search metadata: keyword, position, total results and whether that total is exact

It is made for recruiters watching a market, job boards and aggregators that need DACH offers, salary researchers, and anyone who wants a daily CSV of new postings for a few search terms.

Why this Xing scraper?

  • No browser. Xing renders its search and job pages on the server, so the scraper reads them with plain HTTP requests. A run of 10 jobs with full details takes a few seconds on 256 MB of memory.
  • Datacenter proxy by default. The pages are served to Apify's default datacenter pool, which keeps the platform cost per job near zero. Residential proxy stays available as an option.
  • Pay per job, nothing else. You pay for jobs written to the dataset plus one actor-start event of $0.00005 per run. Failed requests, duplicates and empty searches cost nothing.
  • Honest failures. If every search fails the run fails, so a scheduled job can't quietly return nothing. Pages without the expected markup are saved as DEBUG_*.html in the run's key-value store.

How to use it

InputDescription
keywordsJob searches, one search per entry, up to 100. Example: ["python", "data engineer"].
locationOptional city or region as free text, e.g. "Berlin", "Wien", "Zürich".
radiusKilometres around the location (0–200). Used only with a location.
maxItemsPerSearchUnique jobs per keyword (1–1,000). Xing shows at most 1,000 results per search.
fetchDetailsOpen every job page for the description and the other detail fields. Default on.
sincePeriodOnly jobs posted or refreshed in the last 24 hours or the last week.
employmentTypeOne of Xing's employment types: Vollzeit, Teilzeit, Selbstständig, Studierende, Saisonarbeit, Aushilfe, Ehrenamt.
careerLevelStudent/Praktikant, Berufseinsteiger, Mit Berufserfahrung, Manager, Direktor, Geschäftsführer.
remoteOptionRemote (100 %), Teilweise remote or Vor Ort.
sortrelevance (Xing's ranking) or date (newest first).
maxConcurrency, maxRetriesParallel requests (1–5) and attempts per page (1–3).
proxyConfigurationApify Proxy, datacenter pool by default.
{
"keywords": ["python", "data engineer"],
"location": "Berlin",
"radius": 50,
"maxItemsPerSearch": 100,
"fetchDetails": true,
"sincePeriod": "LAST_WEEK"
}

Each filter takes a single value per run; Xing accepts only one. To combine, say, Vollzeit and Teilzeit, run two tasks.

Output fields

FieldTypeNotes
jobId, xingIdinteger, stringNumeric posting id (stable across runs) and Xing's own id such as 158550928.e8b783
url, title, companyNamestringAlways filled
companyUrl, logoUrlstring or nullCompany page on Xing (most postings have none) and logo
location, locationsstring or null, arrayFirst city and every city of the posting
employmentTypestring or nullGerman label as on the site, e.g. Vollzeit
salaryobject or null{type, currency, min, max, median}; type is estimate (Xing's estimate, has median), range or single (employer-stated). Null when Xing shows no salary
applyUrl, applicationTypestring or null, stringExternal application URL, only for UrlApplication postings; otherwise the application runs on Xing
isExternalListing, isPaidListing, isPrioritized, isTopJobbooleanListing flags from the search result
refreshedAt, activeUntilstringISO 8601 timestamps
keyResponsibilitiesarrayXing's summary bullets, empty when the site has none
postedAtstring or nullPosting date (activatedAt); job page only
careerLevel, industry, disciplinestring or nullGerman labels; job page only
remoteOptionsarrayFULL_REMOTE, PARTLY_REMOTE, NON_REMOTE; job page only
country, zipCode, regionstring or nullCountry code such as DE, AT, CH; job page only
keywords, qualifications, languagearray, array, stringJob page only
description, descriptionHtmlstring or nullFull description as text (sections separated by blank lines, lists as - bullets) and as HTML; job page only
detailErrorstring or nullSet when the job page could not be fetched or parsed; the card fields above are still filled
keyword, position, totalResults, totalIsExactstring, integer, integer, booleanSearch metadata: the keyword, the job's rank in that search (1 = first), Xing's result count and whether it is exact
scrapedAtstringISO 8601 UTC
{
"keyword": "python",
"position": 1,
"totalResults": 426,
"totalIsExact": true,
"jobId": 156675213,
"url": "https://www.xing.com/jobs/berlin-python-developer-financial-services-all-genders-156675213",
"title": "Python Developer Financial Services (all genders)",
"companyName": "Exxeta",
"location": "Berlin",
"employmentType": "Vollzeit",
"salary": {"type": "estimate", "currency": "EUR", "min": 59000, "max": 86000, "median": 76000},
"applyUrl": "https://career.exxeta.com/Python-Developer-Financial-Services-all-genders-de-j1018.html",
"postedAt": "2026-09-17T05:36:36Z",
"careerLevel": "Mit Berufserfahrung",
"remoteOptions": ["NON_REMOTE"],
"industry": "Beratung, Consulting",
"description": "Standorte: Karlsruhe, Berlin, …\nDein Herz schlägt für die Softwareentwicklung …",
"scrapedAt": "2026-10-30T14:20:21Z"
}

How much does it cost to scrape Xing jobs?

You pay per job written to the dataset. Platform usage (compute and the datacenter proxy) is included in that price; without a browser it amounts to a few cents per thousand jobs anyway.

PlanPrice per 1,000 jobs
Free$1.00
Starter (Bronze)$0.90
Scale (Silver)$0.80
Business (Gold) and above$0.70

Each run also charges $0.00005 for the actor start. Example: 1,000 jobs with full details on the free plan cost $1.00 for the jobs plus $0.00005 for the start; the few cents of platform usage for the roughly 1,050 requests are already covered. Set a maximum total charge on the run and the scraper stops once it is used up: it checks the remaining budget before every search page and every job page.

Use the data in Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("murmuring_headlamp/xing-jobs-fast").call(
run_input={"keywords": ["data engineer"], "location": "Berlin", "maxItemsPerSearch": 100}
)
jobs = client.dataset(run["defaultDatasetId"]).list_items().items

FAQ

I searched for something rare and still got 20 jobs. Why? Xing's search is semantic: when nothing matches well it pads the list with related offers and reports the total as "at least 1,000". Check totalIsExact: true means Xing counted real matches, false means you are looking at fallback results.

Why does the fully remote filter ignore my location? The site drops the location from a fully remote search; the results cover all of Germany, Austria and Switzerland. Use partly remote or on site if the city matters.

Why do I get at most 1,000 jobs per keyword? Xing serves 50 pages of 20 results and refuses deeper offsets. Split broad searches by city, employment type or posting period to get more.

Why is applyUrl empty for many jobs? It is filled only when the application runs on an external site (applicationType is UrlApplication). For the others candidates apply through Xing, and the job url is the place to send them.

Is the salary real? type: "estimate" is Xing's own estimate for the role and region, with a median. range and single are what the employer wrote into the posting.

Why are the labels German? Employment type, career level, industry and discipline come exactly as Xing shows them (Vollzeit, Mit Berufserfahrung, …), so they match the site's filters. remoteOptions and country are codes.

A job page failed. The item keeps its search card fields and detailError says why (for example an offer removed between the search and the fetch). Such items are still charged, since the job was found.

Is it legal? The scraper reads public job offers, does not log in and collects no candidate data. It is not affiliated with XING or New Work SE. Respect the site's terms and robots rules, and you are responsible for how you use the results.

This Actor is not affiliated with XING or New Work SE.