Como Raspar Reviews e Salários do Glassdoor em 2026: Guia Técnico

Guia técnico para raspar reviews e salários do Glassdoor em 2026 usando proxies residenciais, BFF GraphQL e curl_cffi. Inclui exemplos em Python e Node.js.

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

Aviso legal: Este artigo aborda apenas acesso a dados públicos. Raspar o Glassdoor pode violar os Termos de Serviço da plataforma. Nos EUA, o Computer Fraud and Abuse Act (CFAA) pode se aplicar a acessos não autorizados. Na UE, o GDPR regula o processamento de dados pessoais de funcionários. Consulte um advogado antes de coletar dados. Este guia é educacional e não constitui aconselhamento jurídico.

Raspar reviews e salários do Glassdoor em 2026 é um desafio técnico significativo para engenheiros de dados de mercado de trabalho. A plataforma combina DataDome, Cloudflare Bot Management e fingerprints TLS para bloquear coleta automatizada. Este guia mostra como acessar dados públicos de reviews usando proxies residenciais rotativos, endpoints BFF GraphQL não documentados e técnicas de impersonação TLS — sempre dentro dos limites éticos e legais.

Como raspar reviews e salários do Glassdoor em 2026

O Glassdoor protege seus dados com múltiplas camadas de defesa anti-bot. Antes de escrever uma linha de código, é essencial entender o que está acessível publicamente, o que exige login e quais defesas você enfrentará. Raspar Glassdoor não é uma tarefa trivial — requer proxies residenciais de qualidade, headers corretos e estratégias de pacing.

O que é acessível sem login vs. protegido por autenticação

O Glassdoor divide seus dados em duas categorias principais:

  • Público sem login: Páginas de overview de empresa em /Reviews/<company>-Reviews-E<id>.htm mostram avaliações truncadas, ratings gerais (ratingOverall), pros e cons resumidos, e informações básicas como tamanho da empresa e setor.
  • Protegido por login (auth-walled): Dados salariais do Glassdoor completos, reviews individuais com texto integral, entrevistas detalhadas e fotos da empresa exigem uma conta autenticada. Tentar raspar dados salariais sem login retorna apenas dados agregados limitados.

Para HR-analytics e análise de mercado de trabalho, os dados públicos truncados já oferecem valor considerável: ratings gerais, distribuição de avaliações por departamento e tendências temporais. Para dados salariais detalhados, considere obter uma licença oficial de dados do Glassdoor.

A stack anti-bot do Glassdoor: DataDome + Cloudflare

O Glassdoor emprega duas camadas de proteção que trabalham em conjunto:

DataDome: scoring de IP e análise comportamental

DataDome é uma solução anti-bot especializada que analisa cada requisição em tempo real. Ela atribui um score de risco baseado em:

  • Reputação do IP (datacenter vs. residencial vs. conhecido como malicioso)
  • Padrões de navegação (tempo entre requisições, sequência de páginas)
  • Headers HTTP e sua consistência com o User-Agent declarado
  • Cookies de sessão (datadome cookie setado após desafio JS)

IPs de datacenter são frequentemente bloqueados imediatamente. Proxies residenciais com IPs de ISPs reais têm taxa de sucesso significativamente maior.

Cloudflare Bot Management: desafio JS e fingerprinting TLS

Cloudflare Bot Management adiciona uma camada adicional com:

  • Desafio JavaScript: O navegador deve executar JS para resolver um desafio criptográfico antes de receber o cookie cf_clearance.
  • TLS fingerprinting (JA3/JA4): A assinatura TLS do cliente é comparada com bancos de dados de fingerprints conhecidos. Bibliotecas HTTP padrão como requests do Python têm fingerprints JA3 distintos de navegadores reais.

É por isso que curl simples e requests do Python frequentemente recebem HTTP 403 imediato. A solução é usar curl_cffi, uma biblioteca Python que usa libcurl com impersonação TLS do Chrome.

Endpoints BFF GraphQL não documentados do Glassdoor

O Glassdoor usa uma arquitetura BFF (Backend-for-Frontend) com endpoints GraphQL que retornam JSON estruturado. Os endpoints relevantes são:

  • https://www.glassdoor.com/bff/graphql — endpoint principal para reviews, avaliações e dados de empresa
  • https://www.glassdoor.com/graph — endpoint alternativo para queries GraphQL

Estes endpoints requerem:

  • Header gd-csrf-token — token CSRF obtido da página inicial da empresa
  • Header Content-Type: application/json
  • Cookies válidos do DataDome (datadome) e Cloudflare (cf_clearance)
  • User-Agent consistente com o fingerprint TLS usado

A vantagem do BFF GraphQL sobre o scraping HTML é significativa: você recebe JSON estruturado com campos como ratingOverall, pros, cons, jobTitle, reviewDateTime, sem precisar parsear HTML frágil.

Exemplo prático em Python: POST para BFF GraphQL via ProxyHat

Abaixo está um exemplo completo de scraper de reviews Glassdoor usando ProxyHat com proxies residenciais e curl_cffi para impersonação TLS.

Passo 1: Instalar dependências

pip install curl_cffi

Passo 2: Obter o token CSRF da página pública

from curl_cffi import requests as cffi_requests
import re

# Proxy residencial ProxyHat com sessao sticky
proxy_url = "http://user-session-abc123:pass@gate.proxyhat.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}

# Acessar pagina publica da empresa para obter gd-csrf-token
response = cffi_requests.get(
    "https://www.glassdoor.com/Reviews/Acme-Corp-Reviews-E12345.htm",
    proxies=proxies,
    impersonate="chrome",
    timeout=30,
)

# Extrair token CSRF do HTML
csrf_match = re.search(r'gd-csrf-token["\s:=]+([a-f0-9-]+)', response.text)
csrf_token = csrf_match.group(1) if csrf_match else ""

# Capturar cookies (datadome, cf_clearance)
cookies = response.cookies

Passo 3: POST para o endpoint BFF GraphQL

import json

headers = {
    "Content-Type": "application/json",
    "gd-csrf-token": csrf_token,
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Referer": "https://www.glassdoor.com/Reviews/Acme-Corp-Reviews-E12345.htm",
}

query = """
query EmployerReviews($employerId: Long!, $limit: Int!, $cursor: String) {
  employerReviews(employerId: $employerId, limit: $limit, cursor: $cursor) {
    reviewList {
      ratingOverall
      pros
      cons
      jobTitle
      reviewDateTime
    }
    pageInfo {
      nextCursor
      hasNext
    }
  }
}
"""

payload = {
    "query": query,
    "variables": {
        "employerId": 12345,
        "limit": 10,
        "cursor": None,
    },
}

response = cffi_requests.post(
    "https://www.glassdoor.com/bff/graphql",
    data=json.dumps(payload),
    headers=headers,
    cookies=cookies,
    proxies=proxies,
    impersonate="chrome",
    timeout=30,
)

data = response.json()
for review in data.get("data", {}).get("employerReviews", {}).get("reviewList", []):
    print(f"Rating: {review['ratingOverall']}")
    print(f"Cargo: {review['jobTitle']}")
    print(f"Pros: {review['pros'][:100]}...")
    print(f"Contras: {review['cons'][:100]}...")
    print("---")

Exemplo em Node.js com ProxyHat

const { ProxyAgent } = require("undici");

const proxyUrl = "http://user-session-abc123:pass@gate.proxyhat.com:8080";
const agent = new ProxyAgent(proxyUrl);

async function fetchGlassdoorReviews(employerId, cursor) {
  const query = `
    query EmployerReviews($employerId: Long!, $limit: Int!, $cursor: String) {
      employerReviews(employerId: $employerId, limit: $limit, cursor: $cursor) {
        reviewList { ratingOverall pros cons jobTitle reviewDateTime }
        pageInfo { nextCursor hasNext }
      }
    }
  `;

  const response = await fetch("https://www.glassdoor.com/bff/graphql", {
    method: "POST",
    dispatcher: agent,
    headers: {
      "Content-Type": "application/json",
      "gd-csrf-token": process.env.GD_CSRF_TOKEN,
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    },
    body: JSON.stringify({
      query,
      variables: { employerId, limit: 10, cursor },
    }),
  });

  return response.json();
}

Paginação, sessões sticky e estratégias de pacing

Paginação com cursores

O BFF GraphQL usa paginação baseada em cursor. Cada resposta inclui pageInfo.nextCursor e pageInfo.hasNext. Para coletar todas as reviews de uma empresa com 500+ avaliações, você precisa seguir os cursores:

cursor = None
all_reviews = []

while True:
    payload["variables"]["cursor"] = cursor
    response = cffi_requests.post(
        "https://www.glassdoor.com/bff/graphql",
        data=json.dumps(payload),
        headers=headers,
        cookies=cookies,
        proxies=proxies,
        impersonate="chrome",
        timeout=30,
    )
    data = response.json()

    reviews = data["data"]["employerReviews"]["reviewList"]
    all_reviews.extend(reviews)

    page_info = data["data"]["employerReviews"]["pageInfo"]
    if not page_info["hasNext"]:
        break
    cursor = page_info["nextCursor"]

    # Pacing: 3-5 segundos entre requisicoes
    import time
    time.sleep(4)

Sessões sticky para manter cookies válidos

O DataDome associa cookies de sessão ao IP que os recebeu. Se você rotacionar o IP a cada requisição, os cookies datadome se tornam inválidos e você recebe um desafio JS. A solução é usar sessões sticky do ProxyHat:

# Sessao sticky mantem o mesmo IP por toda a sessao
proxy_url = "http://user-session-acme123:pass@gate.proxyhat.com:8080"

# Para rotacionar apos N requisicoes, mude o ID da sessao
# Ex: user-session-acme123 -> user-session-acme124

Recomendamos manter uma sessão por pelo menos 50 requisições, depois rotacionar criando uma nova sessão com ID diferente. Isso equilibra confiabilidade e distribuição de carga.

Pacing e retry logic

  • Delay entre requisições: 3-5 segundos para imitar navegação humana
  • Limite de concorrência: máximo 5-10 requisições simultâneas por sessão
  • Retry em HTTP 403: aguardar 60 segundos, criar nova sessão com novo IP, repetir
  • Retry em HTTP 429: respeitar o header Retry-After ou aguardar 120 segundos
  • Jitter aleatório: adicionar ±1 segundo de variação aos delays para evitar padrões detectáveis

Tabela comparativa: tipos de proxy para raspar Glassdoor

Tipo de Proxy Fingerprint de IP Custo relativo Taxa de sucesso vs. DataDome Ideal para
Residencial IP de ISP real $$ 85-95% Reviews Glassdoor, BFF GraphQL
Datacenter IP de datacenter conhecido $ 10-30% Dados públicos simples sem anti-bot
Mobile IP de operadora celular $$$ 90-98% Anti-bot agressivo, alta confiabilidade

Para raspar Glassdoor, proxies residenciais oferecem o melhor equilíbrio entre custo e confiabilidade. Proxies datacenter são quase inúteis contra DataDome. Proxies mobile são superiores mas significativamente mais caros — reserve-os para casos de alta criticidade. Consulte os planos do ProxyHat para opções de proxies residenciais.

Scraping ético e quando usar APIs oficiais

Raspar dados de reviews de funcionários envolve considerações éticas e legais sérias:

Princípios éticos

  • Agregue, não identifique: Colete apenas dados agregados e não-pessoais. Não tente identificar autores individuais de reviews.
  • Não raspe atrás de login: Dados protegidos por autenticação estão claramente marcados como não-públicos. Acessá-los sem autorização pode violar o CFAA nos EUA.
  • Respeite o robots.txt: Verifique sempre https://www.glassdoor.com/robots.txt antes de coletar.
  • Rate limiting responsivo: Não sobrecarregue os servidores. Mantenha pacing de 3-5 segundos entre requisições.

GDPR e dados de funcionários na UE

Reviews do Glassdoor frequentemente contêm informações que podem identificar funcionários (cargo, localização, período de emprego). Sob o GDPR, estes dados podem ser considerados dados pessoais. Se você processa dados de funcionários localizados na UE:

  • Considere se a agregação remove suficientemente a identificabilidade
  • Não armazene dados pessoais sem base legal
  • Considere anonimização ou pseudonimização dos dados coletados
  • Documente sua base legal para processamento

Quando uma licença oficial de dados é a escolha certa

Para casos de uso comercial sério (HR-analytics empresarial, relatórios de mercado de trabalho para clientes), uma licença oficial de dados do Glassdoor é frequentemente a melhor opção:

  • Dados completos incluindo salários (não disponíveis publicamente)
  • Sem risco legal ou de ToS
  • Dados limpos, estruturados e atualizados
  • Suporte e SLA garantidos

O custo de uma licença deve ser comparado ao custo de engenharia, infraestrutura de proxies e risco legal do scraping. Para dados de reviews truncados apenas, o scraping de dados públicos pode ser viável. Para dados salariais completos, a licença oficial é a única opção ética e legal.

Principais takeaways

Raspar Glassdoor em 2026 requer uma combinação de proxies residenciais rotativos, impersonação TLS com curl_cffi, sessões sticky para manter cookies do DataDome válidos, e pacing responsivo. O endpoint BFF GraphQL oferece JSON estruturado superior ao parsing HTML. Sempre verifique robots.txt, respeite Termos de Serviço e considere licenças oficiais para dados salariais completos.

  • Dados públicos incluem reviews truncados e ratings gerais; dados salariais completos exigem login
  • DataDome + Cloudflare exigem proxies residenciais e impersonação TLS (curl_cffi)
  • BFF GraphQL em /bff/graphql retorna JSON estruturado com gd-csrf-token
  • Sessões sticky do ProxyHat mantêm cookies válidos através de paginação
  • Pacing de 3-5 segundos e jitter aleatório evitam detecção comportamental
  • Para dados salariais completos, considere uma licença oficial de dados

Pronto para começar? Explore os planos de proxies residenciais do ProxyHat, veja as localizações disponíveis, ou consulte a documentação completa do ProxyHat. Para mais guias técnicos, visite nossa página de web scraping e SERP tracking.

Pronto para começar?

Acesse mais de 50M de IPs residenciais em mais de 148 países com filtragem por IA.

Ver preçosProxies residenciais
← Voltar ao Blog