Tony Wang5 Min. LesezeitStellenanzeigen scrapen 2026 (14 ATS-Plattformen & Python)
Stellenanzeigen 2026 scrapen: Greenhouse, Workday, Lever und 10 weitere ATS — eigene Integrationen oder eine strukturierte API mit Dataset.
Warum Stellenanzeigen scrapen?
Daten zu Stellenanzeigen sind die Basisschicht für Recherchen zum Arbeitsmarkt und für Recruiting-Produkte:
- Recherche zu Einstellungssignalen — verfolgen, welche Unternehmen aktiv einstellen, aufgeschlüsselt nach Abteilung, Standort und Rolle.
- Vergütungs- und Marktbenchmarking — ausgeschriebene Rollen und Anforderungen branchenübergreifend aggregieren.
- Recruiting- und Sourcing-Tools — offene Stellen vieler Unternehmen in einem einzigen Feed bündeln.
- Unternehmensrecherche — aus dem eigenen Ausschreibungsvolumen eines Unternehmens im Zeitverlauf auf Wachstum oder Schrumpfung schließen.
Ist es legal, Stellenanzeigen zu scrapen?
Option 1: DIY, eine Integration pro ATS
Die praktische Schwierigkeit ist nicht der Bot-Schutz — es ist das Fehlen eines Standards. Die Karriereseite eines Unternehmens ist nur ein dünner Wrapper um das jeweils genutzte ATS, und jedes ATS stellt einen anderen (oft undokumentierten) JSON-Endpunkt bereit:
import requests
# Greenhouse — Token identifiziert das Unternehmen
gh = requests.get("https://boards-api.greenhouse.io/v1/boards/stripe/jobs").json()
# Lever — anderer Host, anderes Format
lever = requests.get("https://api.lever.co/v0/postings/netflix").json()
# Workday — tenant + datacenter + site, POST statt GET, und wieder ein anderes Format
wd = requests.post(
"https://acme.wd1.myworkdayjobs.com/wday/cxs/acme/External/jobs",
json={"limit": 20, "offset": 0},
).json()
Jede Integration ist ein eigenes kleines Projekt:
- Über ein Dutzend Anbieter, über ein Dutzend Schemas. Greenhouse verschachtelt Requisitions unter
jobs[]mit einer numerischenid; Lever liefert eine flache Liste mit einer String-idals Schlüssel und HTML-formatierten Beschreibungsfeldern; Workday verlangt einen POST mittenant,datacenterundsite, die du pro Unternehmen erst herausfinden musst, und paginiert mitlimit/offsetstatt mit einem Token. Multipliziere das mit iCIMS, SmartRecruiters, Recruitee, Rippling, Oracle Recruiting, UKG, Personio, Ashby, Eightfold und Teamtailor, und du pflegst am Ende über ein Dutzend Parser. - Du musst zuerst herausfinden, welches ATS ein Unternehmen nutzt. Es gibt kein Verzeichnis dafür — entweder du rätst anhand des URL-Musters der Karriereseite (
boards.greenhouse.io/<company>,jobs.lever.co/<company>,<company>.wd1.myworkdayjobs.com), oder du crawlst die Seite und erkennst die eingebetteten API-Aufrufe. - Workday allein lohnt sich zu implementieren. Gemessen am Enterprise-Ausschreibungsvolumen ist es eine der größten ATS-Plattformen — wer es überspringt, weil die POST-basierte, tenant-gebundene API mehr Aufwand ist als ein einfacher GET-Endpunkt, verpasst einen nennenswerten Teil des Marktes.
- Geschlossene und veraltete Stellenanzeigen driften still ab. Die meisten Anbieter löschen eine geschlossene Requisition nicht sofort hart, sodass ein naiver Full-Refresh tagelang veraltete «offene» Rollen mitschleppen kann; du musst Statusänderungen erkennen und abgleichen, nicht nur neue Anzeigen anhängen.
Option 2: No-Code-Tools
Generische Web-Scraper können eine einzelne Karriereseite abrufen, aber der eigentliche Flaschenhals — die Integration von über einem Dutzend verschiedenen ATS-Backends und die Normalisierung ihrer Schemas — ist dasselbe Problem, egal ob du dich durch ein visuelles Tool klickst oder Python schreibst. Ein Tool, das auf ein bestimmtes Seitenformat zugeschnitten ist, löst das Problem der Anbieterfragmentierung nicht.
Option 3: Eine strukturierte Jobs-API
Eine Jobs-Scraping-API deckt 14 ATS-Plattformen ab — Ashby, Eightfold, Greenhouse, iCIMS, Lever, Oracle Recruiting, Personio, Recruitee, Rippling, SmartRecruiters, Teamtailor, UKG, Workable und Workday — hinter einem einzigen Schema, plus ein Lookup, das dir sagt, welches ATS ein Unternehmen tatsächlich nutzt.
Herausfinden, über welches ATS ein Unternehmen Stellen ausschreibt:
curl "https://api.crawlora.net/api/v1/jobs/company-search?slug=stripe" \
-H "x-api-key: $CRAWLORA_API_KEY"
Sobald du den Anbieter kennst, das Board eines Unternehmens abrufen — hier gezeigt für Greenhouse und Workday, die übrigen 11 folgen demselben Muster mit ihrem eigenen Pfad:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/jobs"
greenhouse_board = requests.get(f"{base}/greenhouse/board", headers=h, params={"token": "stripe"}).json()["data"]
workday_board = requests.get(f"{base}/workday/board", headers=h, params={
"tenant": "acme", "datacenter": "wd1", "site": "External", "limit": 50,
}).json()["data"]
Oder du überspringst die anbieterspezifischen Aufrufe komplett und durchsuchst alle abgedeckten Unternehmen auf einmal über den normalisierten Datensatz:
api_base = "https://api.crawlora.net/api/v1"
postings = requests.get(f"{api_base}/datasets/jobs/search", headers=h, params={
"q": "data engineer", "location": "Tokyo", "remote": "true", "page_size": 50,
}).json()["data"]
datasets/jobs/search akzeptiert die Filter company, provider, department, location, employment_type und remote, sowie include_closed, falls du den Statusverlauf brauchst statt nur offener Rollen. datasets/jobs/companies listet auf, welche Unternehmen gerade einstellen und über welchen Anbieter, mit einem min_open_roles-Filter — nützlich, um aktive Arbeitgeber zu finden, ohne ihr ATS vorab zu kennen.
Was du erfassen kannst
Pro Stellenanzeige: Titel, Abteilung, Standort(e), Beschäftigungsart, Remote-Kennzeichen, Veröffentlichungs-/Aktualisierungsdatum, Status offen/geschlossen und die vollständige Beschreibung — plus, von welchem Unternehmen und welchem ATS-Anbieter sie stammt. jobs/hiring-signals aggregiert das Board eines Unternehmens zu Rollups (Anzahl offener Rollen nach Abteilung und Standort im Zeitverlauf), ohne jede einzelne Anzeige abzurufen.
Einschränkungen und häufige Herausforderungen
- Kein einheitliches Schema. Jedes ATS hat eigene Feldnamen und eine eigene Verschachtelung; normalisiere bei der Aufnahme, nicht pro Report.
- Du brauchst den Anbieter, bevor du direkt abfragen kannst. Nutze ein Unternehmens-Lookup statt das URL-Muster der Karriereseite zu erraten, oder frage die einheitliche Datensatzsuche statt der anbieterspezifischen Endpunkte ab.
- Geschlossene Stellenanzeigen verschwinden nicht sofort. Verfolge den Status explizit (
include_closedbei der Datensatzsuche), statt anzunehmen, dass eine fehlende Anzeige einfach geschlossen wurde. - Die API von Workday ist POST-basiert und tenant-gebunden, anders als die GET-basierten APIs der meisten anderen ATS-Plattformen — plane dafür separaten Aufwand ein, wenn du die Anbieter selbst integrierst.
Wo das zum Einsatz kommt
- Recherche zu Einstellungssignalen und Markt — verfolgen, welche Unternehmen und Branchen aktiv einstellen. Verwandte Use Cases findest du im Hub job market research.
- Recruiting- und Talent-Sourcing-Tools — offene Stellen vieler Unternehmen in einem durchsuchbaren Feed bündeln.
- Das Job Postings Dataset — dieselbe Abdeckung bereits vorab erfasst und abfragbar, ohne einen eigenen Crawl zu betreiben. Siehe auch Workday runs the job market dafür, was die aggregierten Ausschreibungsdaten tatsächlich zeigen.
Quellen
Jetzt loslegen
Erst kostenlos testen: Führe eine beliebige öffentliche URL durch den Free Web Scraper, oder prüfe mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — keine Anmeldung nötig.
Teste die Board-Endpunkte im Playground, sieh dir das Schema in den API-Docs an, und wirf einen Blick auf die Preise. Eine Stellenanzeige ist nur die halbe Geschichte — kombiniere sie mit dem dahinterstehenden Unternehmen. How to scrape LinkedIn behandelt die Unternehmensseiten, Mitarbeiterzahlen und Produktlistungen, zu denen die Anzeigen gehören, und how to scrape Yahoo Finance behandelt die Fundamentaldaten, an denen sich die Einstellungsgeschwindigkeit ablesen lässt — denn die Personalplanung eines börsennotierten Unternehmens bewegt sich meist früher als seine Guidance. Wenn du strukturierte Listing-Märkte vergleichen willst: how to scrape used car listings folgt denselben Aggregator-Mustern, und how to scrape Fiverr behandelt die Freelance-Seite desselben Arbeitsmarkts. Für das größere Toolkit: how to choose a web scraping API, und is web scraping legal.
Teil unserer how-to-scrape-Guide-Serie — jede Plattform, die wir abdecken, an einem Ort.
Häufig gestellte Fragen
Ist es legal, Stellenanzeigen zu scrapen?
Job-Board-Seiten auf Greenhouse, Workday, Lever und ähnlichen ATS-Plattformen sind öffentlich und ohne Anmeldung zugänglich, und veröffentlichte Fakten (Titel, Standort, Abteilung) sind nicht urheberrechtlich geschützt. Manche ATS-Nutzungsbedingungen schränken den automatisierten Zugriff selbst auf öffentliche Anzeigen ein — prüfe daher die Bedingungen des jeweiligen ATS und des einstellenden Unternehmens und veröffentliche vollständige Beschreibungen nicht komplett neu.
Gibt es eine einzige API, die alle Stellenanzeigen abdeckt?
Nein. Unternehmen veröffentlichen Stellen über eines von mehr als einem Dutzend Applicant-Tracking-Systemen (ATS) — Workday, Greenhouse, Lever, iCIMS und weitere — jeweils mit eigenem Endpunkt und eigenem JSON-Format. Es gibt keine einzige anbieterunabhängige öffentliche API.
Wie finde ich heraus, welches ATS ein Unternehmen nutzt?
Es gibt kein öffentliches Verzeichnis dafür. Du kannst anhand des URL-Musters der Karriereseite raten (z. B. boards.greenhouse.io/<company>, jobs.lever.co/<company>), die Seite crawlen, um den eingebetteten API-Aufruf zu erkennen, oder ein Unternehmens-Lookup nutzen, das den Anbieter direkt zurückgibt.
Warum braucht Workday eine gesonderte Behandlung?
Anders als die meisten anderen ATS-Plattformen, die einen einfachen GET-Endpunkt bereitstellen, verlangt Workday eine POST-Anfrage, die an einen tenant, ein datacenter und eine site gebunden ist, die du pro Unternehmen erst herausfinden musst — und es ist gemessen am Enterprise-Ausschreibungsvolumen eine der größten ATS-Plattformen, weshalb sich der zusätzliche Integrationsaufwand lohnt.
Verschwinden geschlossene Stellenanzeigen sofort?
In der Regel nicht. Die meisten ATS-Plattformen löschen eine geschlossene Requisition nicht sofort hart, sodass ein naiver Full-Refresh tagelang veraltete «offene» Rollen mitschleppen kann — verfolge den Status explizit, statt anzunehmen, dass eine fehlende Anzeige einfach geschlossen wurde.