Glassdoor Bewertungen und Gehälter scrapen 2026: BFF GraphQL, DataDome & Proxylösungen

Praktischer Leitfaden für HR-Analytics-Teams: So extrahieren Sie öffentliche Glassdoor-Reviews und Gehaltsdaten über BFF-GraphQL-Endpunkte mit rotierenden Residential Proxies von ProxyHat.

How to Scrape Glassdoor Company Reviews and Salaries in 2026 (BFF GraphQL, DataDome, and Proxies)

Wichtiger Hinweis: Dieser Artikel behandelt ausschließlich den Zugriff auf öffentliche Daten auf Glassdoor. Bevor Sie scrapen, prüfen Sie die Nutzungsbedingungen von Glassdoor sowie geltende Gesetze — insbesondere den Computer Fraud and Abuse Act (CFAA) in den USA und die Datenschutz-Grundverordnung (DSGVO/GDPR) in der EU. Das Scrapen von Daten hinter einer Login-Mauer oder die Verarbeitung personenbezogener Mitarbeiterdaten ohne Rechtsgrundlage kann rechtliche Konsequenzen haben. Wenn eine offizielle Datenlizenz oder API verfügbar ist, sollte diese Vorrang haben.

Wenn Sie als HR-Analytics- oder Arbeitsmarktdaten-Engineer Glassdoor Bewertungen und Gehälter scrapen 2026 möchten, stehen Sie vor einer mehrschichtigen Anti-Bot-Architektur: DataDome, Cloudflare Bot Management, TLS-Fingerprinting und CSRF-geschützte GraphQL-Endpunkte. Dieser Leitfaden zeigt, welche Daten öffentlich zugänglich sind, wie Sie Glassdoors BFF-GraphQL-Schnittstelle ansprechen und warum rotierende Residential Proxies den zuverlässigsten Zugang bieten.

Glassdoor scrapen: Was ist öffentlich und was ist hinter Login?

Glassdoor trennt Inhalte in zwei Kategorien: öffentlich sichtbar ohne Login und auth-gated. Diese Trennung ist entscheidend für jede Scraping-Strategie.

Öffentlich erreichbare Daten

  • Unternehmensprofile: Übersichtsseiten unter /Reviews/<company>-Reviews-E<id>.htm sind ohne Login aufrufbar. Sie enthalten Unternehmensname, Branche, Größe, Hauptsitz und eine zusammengefasste Bewertung.
  • Trunkierte Reviews: Die ersten 2–3 Bewertungen pro Unternehmen sind in gekürzter Form sichtbar — typischerweise Gesamtbewertung (ratingOverall), eine kurze pros- und cons-Zusammenfassung sowie jobTitle.
  • Sterne-Ratings: Durchschnittswerte für Kultur, Work-Life-Balance, Gehalt, Karrierechancen usw. sind auf der Übersichtsseite sichtbar.

Hinter Login-Mauer (auth-gated)

  • Vollständige Gehaltsaufschlüsselungen: Detaillierte Gehaltsdaten mit Erfahrungsstufen, Boni und Aktienoptionen erfordern ein Glassdoor-Konto.
  • Vollständige Review-Texte: Ab der dritten oder vierten Bewertung wird ein Login verlangt, um die gesamten Pros/Cons-Texte zu lesen.
  • Interview-Berichte und Gehaltshistorie: Diese sind ebenfalls auth-gated.

Scrapen Sie niemals Daten hinter einer Login-Mauer mit automatisierten Tools, es sei denn, Sie haben eine ausdrückliche rechtliche Grundlage. Die meisten HR-Analytics-Anwendungsfälle lassen sich mit öffentlichen, aggregierten Review-Daten abdecken.

Glassdoors Anti-Bot-Stack: DataDome, Cloudflare und TLS-Fingerprinting

Glassdoor setzt mehrere sich ergänzende Schutzschichten ein, um automatisierte Zugriffe zu blockieren:

DataDome

DataDome ist eine spezialisierte Bot-Management-Lösung, die IP-Reputation, Browser-Fingerprints, Verhaltensmuster und Header-Konsistenz in Echtzeit auswertet. DataDome vergibt einen Risiko-Score pro Anfrage; bei hohen Scores wird ein CAPTCHA oder ein JavaScript-Challenge ausgelöst. Der IP-Reputations-Teil des Scores gewichtet Datencenter-IPs deutlich negativer als Residential-IPs.

Cloudflare Bot Management

Auf der Netzwerkebene setzt Glassdoor Cloudflare Bot Management ein. Dies umfasst JavaScript-Challenges, TLS-Fingerprinting (JA3/JA4) und Header-Reihenfolgen-Analysen. Ein einfacher requests.get()-Aufruf mit Python-Default-Headern wird von Cloudflare oft bereits auf TLS-Ebene blockiert, bevor die Anwendungsschicht erreicht wird.

Warum curl_cffi nötig ist

Die Standardbibliothek requests verwendet die TLS-Implementierung von Python/urllib3, deren JA3-Fingerprint sich deutlich von echten Browsern unterscheidet. Cloudflare erkennt diesen Unterschied und blockiert die Anfrage. Die Bibliothek curl_cffi nutzt die kompilierte libcurl mit BoringSSL und kann den TLS-Fingerprint von Chrome oder Firefox imitieren. Dies ist für Glassdoor-Scraping praktisch obligatorisch:

pip install curl_cffi
from curl_cffi import requests as cffi_requests

# Chrome-TLS-Fingerprint imitieren
session = cffi_requests.Session(impersonate="chrome131")
resp = session.get("https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm")
print(resp.status_code)  # 200 statt 403

Der undokumentierte BFF-GraphQL-Endpunkt

Glassdoor betreibt eine Backend-for-Frontend (BFF) GraphQL-Schnittstelle, die die Web-UI mit strukturierten Daten versorgt. Die relevanten Endpunkte sind:

  • https://www.glassdoor.com/bff/graphql — primärer GraphQL-Endpunkt für Reviews, Bewertungen und Unternehmensdaten.
  • https://www.glassdoor.com/graph — alternativer GraphQL-Pfad, teilweise für andere Content-Typen.

Diese Endpunkte sind nicht offiziell dokumentiert, aber sie akzeptieren Standard-GraphQL-POST-Requests mit JSON-Body. Eine kritische Anforderung ist der gd-csrf-token-Header, den Glassdoor auf der HTML-Seite oder in einem Cookie bereitstellt. Ohne diesen Header gibt der Server einen 403 Forbidden-Status zurück.

GraphQL-Query-Beispiel für Reviews

{
  "operationName": "EmployerReviews",
  "variables": {
    "employerId": 9079,
    "first": 10,
    "after": null
  },
  "query": "query EmployerReviews($employerId: Long!, $first: Int, $after: String) { employer(id: $employerId) { reviews(first: $first, after: $after) { edges { node { ratingOverall pros cons jobTitle { title } } } pageInfo { endCursor hasNextPage } } } }"
}

Die Antwort liefert strukturierte JSON-Daten mit ratingOverall (1–5 Sterne), pros, cons und jobTitle — alles Felder, die auch in der öffentlichen, trunkierten Review-Ansicht sichtbar sind.

Praktische Implementierung: Python mit ProxyHat Residential Proxies

Der folgende Code zeigt einen vollständigen Workflow: TLS-Imitation über curl_cffi, Routing über ProxyHats gate.proxyhat.com:8080, CSRF-Token-Extraktion und GraphQL-POST.

import re
import json
from curl_cffi import requests as cffi_requests

PROXY_URL = "http://user-country-US:pass@gate.proxyhat.com:8080"

def scrape_glassdoor_reviews(employer_id: int, max_pages: int = 5):
    session = cffi_requests.Session(impersonate="chrome131")
    session.proxies = {"https": PROXY_URL, "http": PROXY_URL}

    # 1. CSRF-Token von der Übersichtsseite extrahieren
    overview_url = f"https://www.glassdoor.com/Reviews/Employer-Reviews-E{employer_id}.htm"
    resp = session.get(overview_url, timeout=30)
    if resp.status_code != 200:
        raise Exception(f"Overview failed: {resp.status_code}")

    csrf_match = re.search(r'gd-csrf-token["\']?\s*[:=]\s*["\']([^"\']+)', resp.text)
    csrf_token = csrf_match.group(1) if csrf_match else None
    if not csrf_token:
        raise Exception("CSRF token not found")

    # 2. GraphQL-Request vorbereiten
    graphql_url = "https://www.glassdoor.com/bff/graphql"
    headers = {
        "Content-Type": "application/json",
        "gd-csrf-token": csrf_token,
        "Origin": "https://www.glassdoor.com",
        "Referer": overview_url,
    }

    cursor = None
    all_reviews = []

    for page in range(max_pages):
        payload = {
            "operationName": "EmployerReviews",
            "variables": {
                "employerId": employer_id,
                "first": 10,
                "after": cursor,
            },
            "query": """query EmployerReviews($employerId: Long!, $first: Int, $after: String) {
              employer(id: $employerId) {
                reviews(first: $first, after: $after) {
                  edges { node { ratingOverall pros cons jobTitle { title } } }
                  pageInfo { endCursor hasNextPage }
                }
              }
            }""",
        }

        r = session.post(graphql_url, json=payload, headers=headers, timeout=30)
        if r.status_code == 403:
            print(f"Blocked on page {page}, rotating IP...")
            # Neue Session mit anderem Proxy-User für neue IP
            session = cffi_requests.Session(impersonate="chrome131")
            session.proxies = {"https": PROXY_URL, "http": PROXY_URL}
            continue

        data = r.json()
        reviews = data.get("data", {}).get("employer", {}).get("reviews", {})
        for edge in reviews.get("edges", []):
            node = edge["node"]
            all_reviews.append({
                "rating": node.get("ratingOverall"),
                "pros": node.get("pros", "")[:200],
                "cons": node.get("cons", "")[:200],
                "jobTitle": node.get("jobTitle", {}).get("title", ""),
            })

        page_info = reviews.get("pageInfo", {})
        if not page_info.get("hasNextPage"):
            break
        cursor = page_info.get("endCursor")

    return all_reviews

reviews = scrape_glassdoor_reviews(9079, max_pages=5)
print(f"Extracted {len(reviews)} reviews")
for r in reviews[:3]:
    print(f"  {r['rating']}★ — {r['jobTitle']}: {r['pros'][:60]}...")

Node.js-Beispiel mit SOCKS5

Für Node.js-Umgebungen können Sie den SOCKS5-Endpunkt von ProxyHat verwenden:

const { SOCKSProxyAgent } = require('socks-proxy-agent');

const agent = new SOCKSProxyAgent("socks5://user-country-US:pass@gate.proxyhat.com:1080");

fetch("https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm", {
  agent,
  headers: {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Accept": "text/html,application/xhtml+xml",
    "Accept-Language": "en-US,en;q=0.9",
  },
})
.then(r => console.log("Status:", r.status))
.catch(e => console.error(e));

Proxy-Typen im Vergleich: Warum Residential Proxies für Glassdoor gewinnen

DataDome bewertet IP-Reputation als Teil seines Risikomodells. Der IP-Typ ist ein wesentlicher Faktor:

Proxy-TypDataDome-ErkennungsrisikoErfolgsrate (typisch)KostenEmpfohlen für Glassdoor?
DatacenterHoch — IP-Blöcke als Rechenzentrum markiert30–50%NiedrigNein
Residential (rotierend)Niedrig — IPs von echten ISPs85–95%MittelJa — bevorzugt
MobileSehr niedrig — IPs von Mobilfunknetzbetreibern90–98%HochJa — für kritische Workloads

Rotierende Residential Proxies bieten die beste Balance aus Erfolgsrate und Kosten. Mit ProxyHat können Sie pro Anfrage eine neue IP erhalten, indem Sie den Username ohne -session--Flag verwenden. Für paginierte Requests, die denselben DataDome-Cookie benötigen, verwenden Sie eine sticky Session:

# Rotierend — neue IP pro Request
http://user-country-US:pass@gate.proxyhat.com:8080

# Sticky Session — gleiche IP für mehrere Requests
http://user-session-myjob123:pass@gate.proxyhat.com:8080

Pagination, Sticky Sessions und Challenge-Retry-Logik

Pagination-Cursor

Der GraphQL-Endpunkt verwendet Cursor-basierte Pagination über pageInfo.endCursor und pageInfo.hasNextPage. Übergeben Sie endCursor als after-Variable im nächsten Request. Typischerweise werden 10–20 Reviews pro Seite zurückgegeben.

Sticky Sessions für DataDome-Cookies

DataDome setzt einen Cookie (datadome), der an die IP gebunden ist, unter der er ausgestellt wurde. Wenn Sie die IP zwischen paginierten Requests wechseln, verliert der Cookie seine Gültigkeit und Sie erhalten einen Challenge. Verwenden Sie daher für eine komplette Paginations-Sequenz eine sticky Session:

# Gleiche Session-ID für alle Pagination-Requests
SESSION_ID = f"glassdoor-{employer_id}-{int(time.time())}"
proxy = f"http://user-session-{SESSION_ID}:pass@gate.proxyhat.com:8080"

Pacing und Rate-Limiting

Glassdoor toleriert typischerweise 1–2 Requests pro Sekunde pro IP. Überschreiten Sie dies nicht, um keinen DataDome-Challenge auszulösen. Eine bewährte Strategie:

  • Verzögerung: 1–3 Sekunden zwischen Requests mit Randomisierung.
  • Maximal 50 Requests pro Session, dann neue Session und neue IP.
  • Retry bei 403: Bei einem Block wechseln Sie die IP über eine neue Session-ID und wiederholen den Request mit exponentiellem Backoff (2s, 4s, 8s).

Challenge-Retry-Logik

import time
import random

def fetch_with_retry(session, url, method="GET", **kwargs):
    for attempt in range(4):
        resp = session.request(method, url, timeout=30, **kwargs)
        if resp.status_code == 200:
            return resp
        if resp.status_code == 403:
            wait = (2 ** attempt) + random.uniform(0.5, 1.5)
            print(f"403 on attempt {attempt+1}, waiting {wait:.1f}s")
            time.sleep(wait)
            # Neue Session erstellen
            session = cffi_requests.Session(impersonate="chrome131")
            session.proxies = {"https": PROXY_URL, "http": PROXY_URL}
        else:
            resp.raise_for_status()
    raise Exception("Max retries exceeded")

ProxyHat-spezifisches Setup

ProxyHat bietet rotierende Residential Proxies über ein zentrales Gateway. Die Konfiguration erfolgt ausschließlich über den Username — keine separate Proxy-Verwaltungs-API nötig. Die ProxyHat-Dokumentation enthält alle verfügbaren Parameter.

Geo-Targeting

Glassdoor ist primär ein US-Dienst, aber Bewertungen existieren für Unternehmen weltweit. Für US-Unternehmensdaten verwenden Sie user-country-US. Für europäische Unternehmen:

# Deutschland
http://user-country-DE:pass@gate.proxyhat.com:8080

# Großbritannien
http://user-country-GB:pass@gate.proxyhat.com:8080

# Stadt-Level (z.B. Berlin)
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080

Eine vollständige Liste der verfügbaren Standorte finden Sie auf unserer Proxy-Locations-Seite. Preisinformationen finden Sie auf der Preisseite.

Verwendung mit dem ProxyHat SDK

Wenn Sie das ProxyHat Python-SDK verwenden, wird die Proxy-Verwaltung weiter vereinfacht:

from proxyhat import ProxyClient

client = ProxyClient(username="user", password="pass")
proxy = client.get_residential_proxy(country="US", session="glassdoor-001")
# proxy.proxy_url = "http://user-country-US-session-glassdoor-001:pass@gate.proxyhat.com:8080"

Weitere Anwendungsfälle für Web-Scraping finden Sie auf unserer Web-Scraping-Use-Case-Seite und SERP-Tracking-Use-Case-Seite.

Ethisches Scraping und offizielle APIs

Das Scrapen von Glassdoor-Daten sollte mit Bedacht und innerhalb rechtlicher Grenzen erfolgen:

Aggregierte, nicht-personenbezogene Daten

Fokussieren Sie sich auf aggregierte Review-Metriken — durchschnittliche Bewertungen, Verteilung von Pros/Cons-Themen, Gehaltsbänder — anstatt einzelne Reviews zu identifizieren. Review-Autoren auf Glassdoor verwenden Pseudonyme, aber die Kombination von Jobtitel, Standort und Zeitraum kann in kleinen Unternehmen zur Identifikation führen. Vermeiden Sie die Speicherung oder Weitergabe solcher Kombinationen.

DSGVO-Betrachtung für EU-Daten

Wenn Sie Bewertungen von EU-Mitarbeitern verarbeiten, fällt die DSGVO zur Anwendung. Bewertungen können als personenbezogene Daten eingestuft werden, wenn sie identifizierbar sind. Die Europäische Kommission stellt Leitlinien zur DSGVO bereit. Stellen Sie sicher, dass Sie eine Rechtsgrundlage haben (z.B. berechtigtes Interesse für aggregierte Analyse) und dass Betroffenenrechte (Auskunft, Löschung) gewahrt bleiben.

Kein Scrapen hinter Login

Glassdoor verlangt ein Konto für vollständige Reviews und Gehaltsdetails. Das automatisierte Erstellen von Konten oder das Scrapen hinter Login verstößt gegen die Glassdoor-Nutzungsbedingungen und kann rechtliche Konsequenzen nach sich ziehen. Beschränken Sie sich auf öffentlich zugängliche, trunkierte Daten.

Wann eine offizielle Datenlizenz das Richtige ist

  • Wenn Sie Daten in einem kommerziellen Produkt verwenden, das öffentlich verfügbar ist.
  • Wenn Sie große Datenmengen benötigen und SLA-Garantien fordern.
  • Wenn Sie Daten weiterverkaufen oder lizenzieren.
  • Wenn die rechtliche Prüfung ein offizielles Datenabkommen empfiehlt.

Glassdoor bietet über Glassdoor for Employers API-Zugänge und Datenlizenzen für Unternehmen an. Für kommerzielle HR-Analytics-Produkte ist dies oft der sicherere Weg.

Key Takeaways

  • Öffentliche vs. auth-gated Daten: Unternehmensprofile und trunkierte Reviews sind ohne Login zugänglich; vollständige Gehaltsdaten und Review-Texte erfordern ein Konto.
  • Anti-Bot-Stack: DataDome + Cloudflare erfordern TLS-Fingerprint-Imitation via curl_cffi — Standard requests wird auf TLS-Ebene blockiert.
  • BFF-GraphQL: Der Endpunkt /bff/graphql liefert strukturierte JSON-Daten, erfordert aber den gd-csrf-token-Header.
  • Residential Proxies: Rotierende IPs von echten ISPs umgehen DataDomes IP-Scoring effektiver als Datacenter-IPs (85–95% vs. 30–50% Erfolgsrate).
  • Sticky Sessions: Verwenden Sie -session--Flags für paginierte Requests, um DataDome-Cookies gültig zu halten.
  • Pacing: 1–2 Requests/Sekunde pro IP mit Randomisierung; maximal ~50 Requests pro Session.
  • Ethik & Recht: Nur öffentliche, aggregierte Daten; DSGVO beachten; offizielle Lizenz für kommerzielle Produkte erwägen.

Häufig gestellte Fragen

Was bedeutet „Glassdoor Bewertungen und Gehälter scrapen 2026"?

Es beschreibt den Prozess, öffentlich zugängliche Unternehmensbewertungen und Gehaltsinformationen von Glassdoor mittels automatisierter Skripte zu extrahieren. Im Jahr 2026 ist dies aufgrund verbesserter Anti-Bot-Systeme wie DataDome und Cloudflare Bot Management technisch anspruchsvoller geworden und erfordert TLS-Fingerprint-Imitation, GraphQL-Endpunkte und Residential Proxies.

Warum ist das Scrapen von Glassdoor für Proxy-Nutzer relevant?

Glassdoor setzt IP-basiertes Bot-Scoring ein. Datacenter-IPs werden häufig blockiert, während Residential- und Mobile-Proxies von echten ISPs stammen und daher eine höhere Erfolgsrate bieten. Proxy-Nutzer profitieren von rotierenden IPs, die DataDome-Challenges reduzieren, und von Geo-Targeting, um länderspezifische Unternehmensdaten abzurufen.

Welcher Proxy-Typ funktioniert am besten für Glassdoor-Scraping?

Rotierende Residential Proxies sind die beste Wahl für Glassdoor. Sie bieten eine Erfolgsrate von typischerweise 85–95%, da die IPs von echten ISPs stammen und von DataDome nicht als Rechenzentrum markiert werden. Mobile Proxies sind noch zuverlässiger (90–98%), aber teurer. Datacenter-Proxies sind nicht empfehlenswert, da sie oft bereits auf TLS-Ebene blockiert werden.

Wie vermeidet man Blöcke beim Glassdoor-Scraping?

Verwenden Sie curl_cffi mit Chrome-TLS-Imitation, rotierende Residential Proxies mit Geo-Targeting, sticky Sessions für paginierte Requests, ein Pacing von 1–2 Requests pro Sekunde mit Randomisierung und einen Challenge-Retry-Mechanismus mit exponentiellem Backoff. Extrahieren Sie den gd-csrf-token-Header von der Übersichtsseite, bevor Sie GraphQL-Requests senden.

Ist das Scrapen von Glassdoor legal?

Das Scrapen öffentlicher Daten ist in vielen Rechtsräumen legal, aber die Nutzungsbedingungen von Glassdoor verbieten automatisierte Zugriffe. Im US-Raum ist der CFAA relevant, in der EU die DSGVO. Vermeiden Sie das Scrapen hinter Login, aggregieren Sie Daten statt einzelne Reviews zu identifizieren, und erwägen Sie eine offizielle Datenlizenz für kommerzielle Anwendungen.

Bereit loszulegen?

Zugang zu über 50 Mio. Residential-IPs in über 148 Ländern mit KI-gesteuerter Filterung.

Preise ansehenResidential Proxies
← Zurück zum Blog