Hoe Glassdoor Salarissen en Reviews te Scrapen voor Compensatie Benchmarking
Glassdoor verbergt zijn data achter een inlogoverlay - maar de inhoud staat al in de JSON van de pagina, onder de modal. Hier is hoe je een werkgever-ID vindt, die JSON leest en compensaties benchmarkt zonder de blokkade te activeren.
Glassdoor is de referentiedataset voor onderzoek naar compensatie en werkgeversreputatie - salarissen, beoordelingen en reviews van miljoenen bedrijven. Het gooit ook een inlogoverlay voor je neus en beperkt agressief. De truc die de meeste mensen missen: die overlay is cosmetisch. De bedrijfsdata is al geladen in de JSON van de pagina, onder de modal. Deze gids laat zien hoe je Glassdoor salarissen en reviews kunt scrapen voor compensatie benchmarking - los een werkgever-ID op, lees de JSON, en doseer verzoeken zodat je de 403-muur niet raakt.
Stap 1: los het bedrijf op naar een werkgever-ID
Elke Glassdoor-pagina is gekoppeld aan een numerieke werkgever-ID, niet een naam. Er is een interne typeahead endpoint die een bedrijfsnaam aan zijn ID koppelt - dezelfde die de zoekbalk aandrijft. Gebruik deze en je krijgt de canonieke naam plus de ID die je nodig hebt om elke andere URL te bouwen:
import requests
proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}
def find_employer_id(name):
url = "https://www.glassdoor.com/api-web/employer/find.htm"
params = {"autocomplete": "true", "maxEmployersForAutocomplete": 10, "term": name}
r = requests.get(url, params=params, proxies=proxies, timeout=15,
headers={"User-Agent": "Mozilla/5.0"})
return r.json() # -> [{"id": 7853, "shortName": "eBay", ...}, ...]
print(find_employer_id("eBay"))
Met de ID kun je de overzichts-URL (/Overview/Working-at-NAME-EI_IE{id}.htm) en de reviews-URL (/Reviews/NAME-Reviews-E{id}.htm) bouwen. Nog geen browser nodig.

Stap 2: lees de JSON, niet de HTML
Glassdoor is een Next.js app, dus elke pagina levert zijn data als een JSON blob - in de __NEXT_DATA__ script tag en een Apollo GraphQL cache. Parse dat in plaats van de gerenderde DOM te scrapen: het bevat beoordelingen, salarisgegevens, reviewtekst, plus firmografische gegevens zoals omzet, hoofdkantoor, bedrijfsgrootte, oprichtingsjaar en industrie. Het is veel stabieler dan CSS-selectors, die Glassdoor roteert achter data-test attributen.
import json, re
def scrape_overview(name, employer_id):
url = f"https://www.glassdoor.com/Overview/Working-at-{name}-EI_IE{employer_id}.htm"
r = requests.get(url, proxies=proxies, timeout=20,
headers={"User-Agent": "Mozilla/5.0"})
m = re.search(r'<script id="__NEXT_DATA__"[^>]*>(.*?)</script>', r.text, re.S)
data = json.loads(m.group(1))
# firmographics + ratings live inside the Apollo cache under props
return data["props"]["pageProps"]
data = scrape_overview("eBay", 7853)
De inlogmodal die je in een browser ziet is een vaste overlay (de container-ID is HardsellOverlay) die bovenop de pagina wordt getekend. Omdat de onderliggende inhoud al in de DOM en de JSON staat, ziet een HTTP-verzoek dat de ruwe markup leest de modal helemaal niet. Als je wel rendert met een browser, kun je de overlay verwijderen met een eenregelige CSS-injectie (display:none) in plaats van in te loggen.
Pagineren van reviews en lezen van salarisverdelingen
Reviews en salarissen zijn gepagineerd, en de paginering cursor zit in dezelfde JSON die je al hebt geparsed - niet in een fragiele "volgende" knop die je moet klikken. Lees de gegevens van de huidige pagina, vind de cursor of paginanummer in de payload, en vraag de URL van de volgende pagina direct aan. Dit is waarom het parsen van de JSON beter is dan het aansturen van een browser: je doorloopt pagina's met eenvoudige HTTP-verzoeken, één per pagina, op welk tempo je maar wilt. Haal de reviewtekst, sterbeoordeling, functietitel, locatie en datum voor elke vermelding op, en je hebt een gestructureerde reviewcorpus waar je sentimentanalyse op kunt uitvoeren - hetzelfde ruwe materiaal dat wordt behandeld in onze review-scraping gids.
Salarissen zijn het doel met hogere waarde, en het eerlijke advies is om ze als verdelingen te behandelen, niet als puntwaarden. Een enkel gescrapet cijfer is ruis; het nuttige signaal is het bereik en de mediaan over veel inzendingen voor een rol in een bepaalde locatie. De JSON onthult de cijfers die je nodig hebt - basisloon, het aantal steekproeven achter elke schatting, valuta en locatie - dus aggregeer ze zelf in plaats van op één nummer te vertrouwen. Weeg op basis van steekproefgrootte, laat rollen met te weinig gegevenspunten om betekenisvol te zijn weg, en koppel altijd een salaris aan zijn locatie en de datum waarop het werd verzameld - idealiter via een residential exit in die markt - omdat compensatie benchmarks verouderen en sterk variëren per markt. Die discipline is wat gescrapete rijen omzet in een benchmark die een wervings- of financiën team daadwerkelijk kan verdedigen. Het beschermt je ook tegen de klassieke valkuil van het citeren van een enkel opvallend cijfer dat blijkt te rusten op twee inzendingen van drie jaar geleden.
Stap 3: stel de regio in zodat de gegevens overeenkomen met je markt
Glassdoor lokaliseert salarissen en inhoud per regio via een tldp cookie: 1 is de VS, 2 het VK, 3 Canada, 4 India, 5 Australië, 6 Frankrijk, 7 Duitsland. Stel het in om compensatie te benchmarken in de markt die je daadwerkelijk interesseert - een Amerikaans salaris is zinloos voor een rol in het VK. Koppel de cookie aan een proxy exit in het bijbehorende land zodat het verzoek van begin tot eind coherent is. Onze gids voor B2B data collectie behandelt het consistent houden van geo-signalen door een pipeline.
Krijg geo-gerichte residentiële proxies
Omgaan met de 403 rate limit
Glassdoor reageert op agressief scrapen met HTTP 403, niet met een CAPTCHA. Behandel een 403 als een pacing signaal, niet als een doodlopende weg: trek je exponentieel terug, roteer naar een nieuw IP, en vertraag je algehele tempo. Een enkele datacenter IP die door review paginering loopt wordt binnen een pagina of twee vertraagd; het verspreiden van verzoeken over een residential pool en pauzeren ertussen houdt je onder de radar.
import time, random
def get_with_backoff(url, tries=4):
for attempt in range(tries):
r = requests.get(url, proxies=proxies, timeout=20,
headers={"User-Agent": "Mozilla/5.0"})
if r.status_code == 200:
return r
if r.status_code == 403: # rate-limited: pace + rotate
wait = (2 ** attempt) + random.random()
time.sleep(wait) # rotating gateway gives a new IP
return None
Een kort woord over ethiek en wetgeving: benchmark in het geheel. Salarissen en beoordelingen zijn nuttig als verdelingen; individuele reviews gekoppeld aan identificeerbare personen zijn persoonlijke gegevens, dus bouw geen profielen van reviewers opnieuw op, en respecteer de Gebruiksvoorwaarden en robots richtlijnen van Glassdoor. Dit is een richtlijn, geen juridisch advies - controleer je jurisdictie. Ons overzicht van de legaliteit van webscraping in 2026 gaat dieper.

Veelgestelde vragen
Hoe scrape ik Glassdoor reviews met Python?
Los het bedrijf op naar zijn werkgever-ID via de interne typeahead endpoint, bouw de reviews-URL met die ID, en parse de __NEXT_DATA__ JSON in de pagina in plaats van de HTML. Routeer verzoeken via residentiële proxies en trek je terug bij een 403. De reviewtekst, beoordelingen en paginering cursors zitten allemaal in die JSON payload.
Kan ik langs de Glassdoor inlogmuur komen?
Meestal is dat niet nodig. De inlogprompt is een cosmetische overlay die bovenop inhoud wordt getekend die al in de pagina en zijn JSON is geladen. Een eenvoudig HTTP-verzoek dat de ruwe markup leest rendert de modal nooit. Als je een echte browser gebruikt, verberg de overlay dan met een CSS display:none injectie in plaats van in te loggen.
Waarom geeft Glassdoor 403-fouten terug?
Een 403 is Glassdoor die je rate-limiteert, meestal omdat te veel verzoeken te snel van één IP kwamen. Vertraag, voeg exponentiële backoff toe, en roteer door een residentiële proxy pool zodat verzoeken zich verspreiden over veel IP's. Het is een pacing probleem, geen permanente blokkade - een stabiele, mensachtige timing lost het op.
Is het legaal om Glassdoor te scrapen?
Het verzamelen van openbare, geaggregeerde bedrijfsgegevens voor benchmarking is over het algemeen minder risicovol, maar de Gebruiksvoorwaarden van Glassdoor beperken geautomatiseerde toegang en individuele reviews kunnen persoonlijke gegevens zijn. Houd het geaggregeerd, reconstrueer geen identificeerbare personen, en respecteer robots en Gebruiksvoorwaarden. Dit is algemene richtlijn, geen juridisch advies - beoordeel je eigen gebruiksgeval.
Het hele werk bestaat uit drie stappen: los de werkgever-ID op, lees de JSON die de pagina al bevat, en doseer verzoeken over schone IP's zodat 403's zeldzaam blijven. Doe dat en Glassdoor wordt een live compensatie-benchmarking feed in plaats van een inlogmuur waar je steeds tegenaan botst.