Comment extraire les salaires et avis de Glassdoor pour l'évaluation des compensations
Glassdoor cache ses données derrière un écran de connexion - mais le contenu est déjà dans le JSON de la page, sous le modal. Voici comment trouver un ID d'employeur, lire ce JSON, et évaluer les compensations sans déclencher le blocage.
Glassdoor est le jeu de données de référence pour la recherche sur la compensation et la réputation des employeurs - salaires, évaluations et avis sur des millions d'entreprises. Il impose également un écran de connexion et limite agressivement le débit. Le truc que la plupart des gens manquent : cet écran est cosmétique. Les données de l'entreprise sont déjà chargées dans le JSON de la page, sous le modal. Ce guide montre comment extraire les salaires et avis de Glassdoor pour l'évaluation des compensations - résoudre un ID d'employeur, lire le JSON, et rythmer les requêtes pour ne pas atteindre le mur 403.
Étape 1 : résoudre l'entreprise à un ID d'employeur
Chaque page de Glassdoor est basée sur un ID d'employeur numérique, pas un nom. Il existe un point de terminaison interne de saisie semi-automatique qui associe un nom d'entreprise à son ID - le même qui alimente la boîte de recherche. Interrogez-le et vous obtenez le nom canonique plus l'ID dont vous avez besoin pour construire chaque autre URL :
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"))
Avec l'ID, vous pouvez construire l'URL de présentation (/Overview/Working-at-NAME-EI_IE{id}.htm) et l'URL des avis (/Reviews/NAME-Reviews-E{id}.htm). Pas besoin de navigateur pour l'instant.

Étape 2 : lire le JSON, pas le HTML
Glassdoor est une application Next.js, donc chaque page envoie ses données sous forme de bloc JSON - dans la balise de script __NEXT_DATA__ et un cache Apollo GraphQL. Analysez cela au lieu de scraper le DOM rendu : il contient les évaluations, les chiffres de salaire, le texte des avis, ainsi que des informations firmographiques comme le chiffre d'affaires, le siège social, la taille de l'entreprise, l'année de fondation et l'industrie. C'est bien plus stable que les sélecteurs CSS, que Glassdoor fait tourner derrière les attributs data-test.
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)
Le modal de connexion que vous voyez dans un navigateur est un écran fixe (son identifiant de conteneur est HardsellOverlay) dessiné au-dessus de la page. Comme le contenu sous-jacent est déjà dans le DOM et le JSON, une requête HTTP qui lit le balisage brut ne voit jamais le modal. Si vous rendez avec un navigateur, vous pouvez supprimer l'écran avec une injection CSS d'une ligne (display:none) plutôt que d'essayer de vous connecter.
Pagination des avis et lecture des distributions de salaires
Les avis et les salaires sont paginés, et le curseur de pagination se trouve dans le même JSON que vous avez déjà analysé - pas dans un bouton "suivant" fragile que vous devez cliquer. Lisez les données de la page actuelle, trouvez le curseur ou le numéro de page dans la charge utile, et demandez directement l'URL de la page suivante. C'est pourquoi analyser le JSON est préférable à piloter un navigateur : vous parcourez les pages avec des requêtes HTTP simples, une par page, à votre propre rythme. Extrayez le corps de l'avis, la note étoilée, le titre du poste, le lieu et la date pour chaque entrée, et vous avez un corpus d'avis structuré sur lequel vous pouvez effectuer une analyse de sentiment - le même matériau brut couvert dans notre guide d'extraction d'avis.
Les salaires sont la cible à plus forte valeur ajoutée, et le conseil honnête est de les traiter comme des distributions, pas des valeurs ponctuelles. Un chiffre extrait unique est bruyant ; le signal utile est la plage et la médiane sur de nombreuses soumissions pour un rôle dans un lieu donné. Le JSON expose les chiffres dont vous avez besoin - salaire de base, nombre d'échantillons derrière chaque estimation, devise et lieu - alors agrégés-les vous-même plutôt que de faire confiance à un seul chiffre. Pesez par taille d'échantillon, éliminez les rôles avec trop peu de points de données pour être significatifs, et associez toujours un salaire à son lieu et à la date à laquelle il a été collecté - idéalement via une sortie résidentielle sur ce marché - car les évaluations de compensation deviennent obsolètes et varient énormément selon le marché. Cette discipline est ce qui transforme les lignes extraites en une référence qu'une équipe de recrutement ou de finance peut réellement défendre. Cela vous protège également du piège classique de citer un chiffre accrocheur qui s'avère reposer sur deux soumissions d'il y a trois ans.
Étape 3 : définir la région pour que les données correspondent à votre marché
Glassdoor localise les salaires et le contenu par région via un cookie tldp : 1 est les États-Unis, 2 le Royaume-Uni, 3 le Canada, 4 l'Inde, 5 l'Australie, 6 la France, 7 l'Allemagne. Définissez-le pour évaluer les compensations sur le marché qui vous intéresse réellement - un chiffre de salaire américain est insignifiant pour un rôle au Royaume-Uni. Associez le cookie à une sortie proxy dans le pays correspondant pour que la requête soit cohérente de bout en bout. Notre guide sur la collecte de données B2B couvre le maintien de la cohérence des signaux géographiques tout au long d'un pipeline.
Obtenez des proxies résidentiels géo-ciblés
Gérer la limite de débit 403
Glassdoor répond à une extraction agressive par HTTP 403, pas un CAPTCHA. Traitez un 403 comme un signal de rythme, pas une impasse : reculez de manière exponentielle, passez à une IP fraîche, et ralentissez votre rythme global. Une seule IP de centre de données parcourant la pagination des avis est limitée en une ou deux pages ; répartir les requêtes sur un pool résidentiel et faire des pauses entre elles vous garde sous le 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
Un mot rapide sur l'éthique et la loi : évaluez en agrégé. Les salaires et évaluations sont utiles en tant que distributions ; les avis individuels attachés à des personnes identifiables sont des données personnelles, donc ne reconstruisez pas les profils des évaluateurs, et respectez les conditions de Glassdoor et les directives des robots. Ceci est un conseil, pas un avis juridique - vérifiez votre juridiction. Notre aperçu de la légalité de l'extraction de données en 2026 va plus loin.

Questions fréquemment posées
Comment extraire les avis de Glassdoor avec Python ?
Résolvez l'entreprise à son ID d'employeur via le point de terminaison interne de saisie semi-automatique, construisez l'URL des avis avec cet ID, puis analysez le JSON __NEXT_DATA__ dans la page plutôt que le HTML. Routez les requêtes via des proxies résidentiels et reculez sur tout 403. Le texte des avis, les évaluations et les curseurs de pagination se trouvent tous dans cette charge utile JSON.
Puis-je passer le mur de connexion de Glassdoor ?
Généralement, vous n'en avez pas besoin. L'invite de connexion est un écran cosmétique dessiné au-dessus du contenu déjà chargé dans la page et son JSON. Une requête HTTP simple qui lit le balisage brut ne rend jamais le modal. Si vous utilisez un vrai navigateur, cachez l'écran avec une injection CSS display:none au lieu de vous connecter.
Pourquoi Glassdoor renvoie-t-il des erreurs 403 ?
Un 403 est Glassdoor vous limitant en débit, généralement parce que trop de requêtes proviennent d'une IP trop rapidement. Ralentissez, ajoutez un recul exponentiel, et passez par un pool de proxies résidentiels pour que les requêtes se répartissent sur de nombreuses IP. C'est un problème de rythme, pas un blocage permanent - un timing régulier et humain le résout.
L'extraction de Glassdoor est-elle légale ?
La collecte de données publiques et agrégées d'entreprises pour l'évaluation est généralement moins risquée, mais les conditions de Glassdoor restreignent l'accès automatisé et les avis individuels peuvent être des données personnelles. Gardez-le agrégé, ne reconstruisez pas des personnes identifiables, et respectez les robots et les conditions. Ceci est un conseil général, pas un avis juridique - évaluez votre propre cas d'utilisation.
Tout le travail se résume à trois étapes : résoudre l'ID de l'employeur, lire le JSON que la page contient déjà, et rythmer les requêtes sur des IP propres pour que les 403 restent rares. Faites cela et Glassdoor devient un flux d'évaluation des compensations en direct au lieu d'un mur de connexion sur lequel vous rebondissez sans cesse.