XING Jobs Scraper - German Job Listings & Salary Data avatar

XING Jobs Scraper - German Job Listings & Salary Data

Pricing

from $2.00 / 1,000 per-run start fees

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

XING Jobs Scraper - German Job Listings & Salary Data

Search XING, the German-speaking professional network, and get one row per job advert: title, company, location, contract type, salary range, urgency and a direct link. No login or API key. For recruiters, salary benchmarking and labour-market research.

Pricing

from $2.00 / 1,000 per-run start fees

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Categories

Share

XING Jobs Scraper

This XING scraper turns job adverts on XING, the professional network of the German-speaking market, into a clean table. Search by keyword, optionally narrow it to a city and radius, and get one row per advert with the title, the hiring company, where the job is, the contract type and the advertised salary range. It is built for recruiters, staffing agencies, HR analysts and anyone who needs XING job data as JSON, CSV or Excel without copying adverts by hand.

No XING account, login or API key is needed. You supply search terms; the actor returns the adverts XING shows for them.

What the XING scraper returns per advert

  • title, company, location
  • employment_type — Vollzeit, Teilzeit, Praktikum, Werkstudent and so on
  • salary_min, salary_max, salary_text
  • is_urgent — whether XING flags the advert as urgently sought
  • easy_apply — whether it accepts a one-click application
  • posted — how long ago, when XING says
  • job_id, url, slug
  • search, search_page, position, result_count

Each row also carries normalised metadata: employment_type_code, city, posted_at, salary_currency, salary_is_estimate, search_index, source, platform and fetched_at. They are described under the output section below.

Two things about the data, said plainly

Salary figures can be published ranges or estimates. XING may provide an estimated range alongside an advert. salary_is_estimate identifies that distinction; a null means the page provides no salary metadata. salary_min and salary_max are numbers you can sort on, and salary_text is what the advert actually displays.

posted is usually empty, and that is XING's doing. It labels only recently posted adverts, so about three cards in twenty carry a date at all. A null there means the advert is not new, not that the date was missed. Use posted_at, XING's refresh timestamp, when you need a date on every row that has one.

Input

Supply search as a list of terms. Each term is trimmed and processed in order. The optional location is a city or region; omit it to search all locations. radius is an optional distance in kilometres. maxItems defaults to 100 and caps the entire run at up to 2,000 adverts. maxPages defaults to 10 and caps pages per term at up to 50. The first occurrence of an advert wins within a term. The same advert under another term remains a separate row.

FieldTitleDefaultWhat it does
searchSearch terms—One or more job titles or keywords, e.g. python, Werkstudent Marketing
locationLocationemptyA city or region such as Hamburg; empty searches everywhere
radiusRadius in kmemptyDistance around location
maxItemsMaximum adverts100Cap for the whole run, 1 to 2,000
maxPagesMaximum pages per term10Cap per search term, 1 to 50

XING currently uses semantic search. A term with no literal match can therefore produce related vacancies. The scraper preserves the results XING publishes.

Run sizes

Adverts arrive twenty to a page. Maximum adverts caps the run across every term, and Maximum pages per term is the rail on a broad search.

A run stops early when a page adds nothing new, because XING keeps serving the last page rather than returning an empty one. That means asking for more pages than a search has costs one wasted request, not fifty.

Output and additional metadata

The original fields remain available under their existing names and types. employment_type keeps XING's visible label, such as Vollzeit. employment_type_code adds the normalized equivalent, such as FULL_TIME. source, platform and fetched_at identify the source and collection time. When XING publishes them, city, posted_at and salary_currency provide structured metadata. posted_at is XING's refresh timestamp; posted retains the visible relative date. Missing optional metadata is null.

search_index is the zero-based position of the nonempty search term. This keeps repeated terms distinguishable. position remains the one-based position across the delivered dataset. result_count can be null or XING's capped count; it should not be treated as a complete inventory of all vacancies.

The summary record retains searches, jobs, salary and posted-date counts, urgent-advert count, elapsed time and error count. The standard run output adds delivery and charging totals.

Example output from a recorded run

The input and row below are a real result of this actor, fetched from XING on 2026-10-04. Live adverts and relative posting dates change over time.

{
"search": [
"python"
]
}
{
"job_id": "157772111",
"url": "https://www.xing.com/jobs/eggenstein-leopoldshafen-devops-engineer-ansible-python-container-157772111",
"slug": "eggenstein-leopoldshafen-devops-engineer-ansible-python-container-157772111",
"title": "DevOps Engineer - Ansible / Python / Container (m/w/d)",
"company": "Workwise GmbH",
"location": "Eggenstein-Leopoldshafen",
"employment_type": "Vollzeit",
"salary_min": 53206,
"salary_max": 66839,
"salary_text": "53.206 € – 66.839 €",
"is_urgent": true,
"easy_apply": true,
"posted": null,
"search": "python",
"search_index": 0,
"search_page": 1,
"result_count": 999,
"position": 1,
"source": "xing-jobs-scraper",
"platform": "xing",
"fetched_at": "2026-10-04T11:18:15.354Z",
"employment_type_code": "FULL_TIME",
"city": "Eggenstein-Leopoldshafen",
"posted_at": "2026-09-24T11:35:26Z",
"salary_currency": "EUR",
"salary_is_estimate": false
}

Errors

CodeMeaning
bad_inputNo search terms supplied
no_resultsThe search ran and matched nothing
fetch_failedA page could not be read after several attempts

A search with no matches retains the historical fetch_failed code in the errors record. The run succeeds with an empty dataset. A page that fails after some adverts have been collected keeps those adverts and records the failure.

Use cases for XING job data

  • Recruiting and sourcing. Find which companies are hiring for a role in a city, with the contract type and salary band, and feed them into a CRM.
  • Salary benchmarking. Collect the published and estimated salary ranges for a job title across Germany and compare them by city or employer.
  • Labour-market research. Track how many adverts appear for a skill such as Python, SAP or nursing, week by week, and where they are.
  • Lead generation for staffing agencies. Companies that advertise urgently (is_urgent) or repeatedly are the ones most open to outside help.
  • Job boards and aggregators. Pull fresh German-language vacancies with a stable job_id and a direct url to the original advert.

XING scraper compared with the alternatives

XING offers official interfaces for employers who publish and manage their own postings; those are partner integrations, not a way to search the whole job market. Copying adverts by hand works for ten rows, not for a weekly benchmark. Generic scraping tools need you to build and maintain the selectors yourself when XING changes its pages.

This actor is a ready-made XING jobs scraper: a list of search terms in, one consistent row per advert out, with numeric salary fields, a normalised contract type and deduplication within each term. It runs on the Apify platform, so you can schedule it, call it through the Apify API, or connect it to Make, Zapier, Google Sheets and webhooks.

For the same question on other markets, use LinkedIn Jobs Scraper, Indeed Jobs Scraper, StepStone Scraper or Glassdoor Jobs Scraper. For the hiring companies rather than the adverts, look at the LinkedIn company actors.

Pricing

The existing price is unchanged: $0.002 for a valid run (run_start) and $0.0004 per delivered advert (job). A valid search with no results has only the start event. An input consisting entirely of whitespace has no events. A 100-advert run therefore costs $0.042 in actor event charges.

Users without a paid Apify plan receive at most 10 adverts per run. Only adverts delivered within that cap are charged. Results are delivered before the corresponding advert events are charged.

FAQ

Do I need a XING account or API key to use this XING scraper? No. The actor reads the public job search, so you only supply search terms.

Can I search one city, or the whole country? Both. Set location and optionally radius for one area, or leave them empty and use the location column to see where each advert is.

Why do I get adverts that do not contain my exact keyword? XING uses semantic search and returns related vacancies too. The actor keeps what XING shows; filter on title afterwards if you need exact matches.

Why is posted empty on most rows? XING only labels recent adverts with a relative date. Use posted_at when a timestamp is available.

Does it scrape XING profiles or companies? No. This actor covers job adverts. Company names come with every advert in the company field.

What happens when a search finds nothing? The run succeeds with an empty dataset and you pay only the start fee.