Glassdoor Şirket Değerlendirmeleri ve Maaş Verilerini Kazıma Rehberi 2026

Glassdoor şirket değerlendirmeleri ve maaş verilerini proxy ile kazıma rehberi: DataDome bypass, GraphQL BFF endpoint'leri, curl_cffi TLS taklidi ve Python örnekleri.

How to Scrape Glassdoor Company Reviews and Salaries in 2026: BFF GraphQL, DataDome, and Proxy Workarounds
Bu makalede

Yasal Uyarı: Bu rehber yalnızca herkese açık, giriş gerektirmeyen verilerin erişimini ele alır. Glassdoor'un Kullanım Şartları'nı, ABD'de CFAA'yı (Computer Fraud and Abuse Act) ve AB'de GDPR'yi ihlal edecek şekilde kazıma yapmayın. Giriş duvarı arkasındaki verileri kazımayın; kişisel verileri işlemeyin. Bu makale eğitim amaçlıdır ve ProxyHat, herhangi bir platformun şartlarının ihlal edilmesini desteklemez.

Glassdoor şirket değerlendirmeleri ve maaş verilerini kazıma işlemi, HR analitiği ve işgücü piyasası veri mühendisleri için kritik bir gereksinim haline gelmiştir. Ancak Glassdoor, DataDome ve Cloudflare Bot Management gibi gelişmiş anti-bot sistemleriyle korunmaktadır. Bu rehberde, herkese açık verileri yapılandırılmış şekilde toplamak için gereken teknik adımları, proxy stratejilerini ve etik sınırları ele alacağız.

Glassdoor'da Halka Açık vs. Giriş Arkasında Kalan Veriler

Glassdoor'da veri erişimi iki katmana ayrılır: giriş gerektirmeyen herkese açık sayfalar ve kimlik doğrulama duvarı arkasındaki içerik. Bir şirketin genel profil sayfası (/Overview/Working-at-<company>-EI_IE<id>.htm) ve değerlendirme listesi (/Reviews/<company>-Reviews-E<id>.htm) herkese açıktır. Bu sayfalarda şirket adı, sektör, çalışan sayısı, ortalama puan ve kısaltılmış değerlendirme metinleri (genellikle ilk 200-300 karakter) görüntülenebilir.

Öte yandan, tam maaş dağılımları, ayrıntılı bonus ve prim verileri, tam değerlendirme metinleri ve interview deneyimleri bir giriş duvarı arkasındadır. Glassdoor, kullanıcıların kendi içeriklerini paylaşması karşılığında bu verilere erişim sunar. Bu rehberde sadece giriş yapmadan erişilebilen herkese açık verileri hedefleyeceğiz; giriş duvarı arkasındaki verilerin kazınması hem ToS ihlalidir hem de CFAA kapsamında yasal risk taşır.

Veri TürüHerkese Açık mı?Tipik URL Formatı
Şirket genel bakışıEvet/Overview/...-EI_IE<id>.htm
Değerlendirme listesi (kısaltılmış)Evet/Reviews/...-E<id>.htm
Ortalama puan ve dağılımEvetReviews sayfasında gömülü
Tam maaş dağılımıHayır (giriş gerekli)/Salary/...-SRCH_KO0,.htm
Tam değerlendirme metniHayır (giriş gerekli)Değerlendirme detay sayfası

Glassdoor'un Anti-Bot Mimarisi: DataDome ve Cloudflare

Glassdoor, bot tespiti için iki katmanlı bir savunma kullanır. İlk katman DataDome, IP itibar puanlaması, JavaScript parmak izi, tarayıcı otomasyon tespiti ve davranışsal analiz yapan bir bot yönetim platformudur. DataDome, her isteği bir risk skoruyla değerlendirir ve şüpheli trafiği bir CAPTCHA veya 403 engelleme sayfasına yönlendirir. İkinci katman Cloudflare Bot Management, TLS parmak izi (JA3/JA4 hash), HTTP/2 frame sıralaması ve header düzeni gibi ağ seviyesi sinyalleri analiz eder.

Standart requests veya urllib kütüphaneleri, Python'un TLS yığınından kaynaklanan belirgin bir JA3 parmak izi üretir. Cloudflare bu parmak izini kolayca tanır ve isteği engeller. Bu sorunu aşmak için curl_cffi kütüphanesi kullanılır — bu kütüphane, libcurl'ün TLS impersonation özelliğini sarmalar ve Chrome, Safari veya Firefox'un TLS el sıkışmasını birebir taklit eder.

# curl_cffi kurulumu
pip install curl_cffi

# Chrome TLS taklidi ile basit istek
from curl_cffi import requests

resp = requests.get(
    "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm",
    impersonate="chrome",
)
print(resp.status_code)  # 200 beklenir

TLS taklidi tek başına yeterli değildir. DataDome ayrıca IP itibarını da puanlar. Veri merkezi IP'leri (AWS, GCP, Azure blokları) yüksek risk olarak işaretlenir ve genellikle ilk istekte engellenir. Döner residential proxy'ler, gerçek ISP'lerden atanmış IP'ler kullandığı için DataDome'un IP skoringini aşmada çok daha etkilidir. ProxyHat'ın residential ağı, 100 eşzamanlı oturuma kadar ölçeklenebilir ve ~200ms ortalama yanıt süresi sunar.

GraphQL BFF Endpoint'leri ve Yapılandırılmış Veri

Glassdoor'un ön yüzü, HTML render etmek yerine bir Backend-for-Frontend (BFF) GraphQL katmanından yapılandırılmış JSON verisi çeker. Tarayıcı DevTools'unda Network sekmesi incelendiğinde, /bff/graphql veya /graph endpoint'lerine POST istekleri gönderildiği görülür. Bu endpoint'ler sayfalama, filtreleme ve ilişkisel veriyi tek bir istekle döndürür — HTML parse etmekten çok daha verimlidir.

Bu endpoint'lere istek göndermek için birkaç kritik header gerekir:

  • gd-csrf-token: Glassdoor'un CSRF koruması için kullandığı token. Genellikle ilk sayfa yüklemesinde bir cookie veya meta etiket içinde set edilir.
  • Content-Type: application/json: GraphQL istekleri JSON body ile gönderilir.
  • Geçerli DataDome çerezleri: datadome çerezi, başarılı bir JS challenge geçişinden sonra set edilir ve sonraki isteklerde gönderilmelidir.

BFF endpoint'ini kullanmanın avantajı, HTML regex parsing'i yerine doğrudan ratingOverall, pros, cons, jobTitle gibi alanları JSON olarak alabilmenizdir. Dezavantajı ise endpoint'in belgelenmemiş olması ve herhangi bir zamanda değişebilmesidir. Bu nedenle kodunuzu bu değişikliklere dayanıklı yazmanız gerekir.

ProxyHat ile Python Kazıma Örneği

Aşağıdaki örnek, ProxyHat residential proxy'leri üzerinden Glassdoor'un BFF GraphQL endpoint'ine istek gönderir ve kısaltılmış bir değerlendirme düğümünü parse eder. curl_cffi Chrome TLS taklidi için, ProxyHat ise DataDome IP skoringini aşmak için kullanılır.

from curl_cffi import requests
import json
import time

# ProxyHat residential proxy - ABD geo-targeting + sticky session
PROXY = "http://user-country-US-session-reviews01:PASSWORD@gate.proxyhat.com:8080"

PROXIES = {"http": PROXY, "https": PROXY}

HEADERS = {
    "User-Agent": (
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
        "AppleWebKit/537.36 (KHTML, like Gecko) "
        "Chrome/124.0.0.0 Safari/537.36"
    ),
    "Content-Type": "application/json",
    "gd-csrf-token": "YOUR_CSRF_TOKEN_HERE",
    "Origin": "https://www.glassdoor.com",
    "Referer": "https://www.glassdoor.com/Reviews/",
}

GRAPHQL_QUERY = """
query Reviews($employerId: ID!, $cursor: String) {
  reviews(employerId: $employerId, after: $cursor, first: 10) {
    nodes {
      ratingOverall
      pros
      cons
      jobTitle { label }
      reviewDateTime
    }
    pageInfo { endCursor hasNextPage }
  }
}
"""

def fetch_reviews(employer_id, cursor=None, max_retries=3):
    variables = {"employerId": employer_id, "cursor": cursor}
    payload = {"query": GRAPHQL_QUERY, "variables": variables}

    for attempt in range(max_retries):
        try:
            resp = requests.post(
                "https://www.glassdoor.com/bff/graphql",
                json=payload,
                headers=HEADERS,
                proxies=PROXIES,
                impersonate="chrome",
                timeout=30,
            )

            if resp.status_code == 403:
                print(f"DataDome block (attempt {attempt+1}), retrying...")
                time.sleep(5 * (attempt + 1))
                continue

            if resp.status_code == 429:
                print("Rate limited, backing off 60s...")
                time.sleep(60)
                continue

            data = resp.json()
            reviews = data.get("data", {}).get("reviews", {})
            nodes = reviews.get("nodes", [])
            page_info = reviews.get("pageInfo", {})

            for node in nodes:
                print(f"Rating: {node.get('ratingOverall')}")
                print(f"Title: {node.get('jobTitle', {}).get('label')}")
                pros = node.get('pros', '') or ''
                cons = node.get('cons', '') or ''
                print(f"Pros: {pros[:120]}")
                print(f"Cons: {cons[:120]}")
                print("---")

            return page_info.get("endCursor"), page_info.get("hasNextPage", False)

        except Exception as e:
            print(f"Error on attempt {attempt+1}: {e}")
            time.sleep(5 * (attempt + 1))

    return None, False

# Örnek kullanım
cursor = None
has_next = True
page = 0

while has_next and page < 50:
    cursor, has_next = fetch_reviews("E9079", cursor)
    page += 1
    time.sleep(3)  # Pacing: istekler arası 3 saniye bekle

Bu kod, her sayfada 10 değerlendirme çeker, DataDome engellerini üstel geri çekilme ile yönetir ve sayfalar arası 3 saniye pacing uygular. Sticky session (-session-reviews01) aynı IP'den gelen isteklerin DataDome çerezleriyle tutarlı kalmasını sağlar.

Node.js ile Alternatif Örnek

const { HttpsProxyAgent } = require('https-proxy-agent');
const fetch = require('node-fetch');

const proxyUrl = 'http://user-country-US-session-reviews01:PASSWORD@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent(proxyUrl);

async function fetchReviews(employerId, cursor = null) {
    const query = `
        query Reviews($employerId: ID!, $cursor: String) {
            reviews(employerId: $employerId, after: $cursor, first: 10) {
                nodes { ratingOverall pros cons jobTitle { label } }
                pageInfo { endCursor hasNextPage }
            }
        }`;

    const resp = await fetch('https://www.glassdoor.com/bff/graphql', {
        method: 'POST',
        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, cursor },
        }),
    });

    if (resp.status === 403) throw new Error('DataDome block');
    const data = await resp.json();
    return data.data.reviews;
}

fetchReviews('E9079').then(r => {
    r.nodes.forEach(n => console.log(n.ratingOverall, n.pros?.slice(0, 80)));
}).catch(console.error);

Sayfalama, Sticky Session'lar ve Pacing

Glassdoor'un GraphQL API'si cursor tabanlı sayfalama kullanır. Her yanıt, pageInfo.endCursor ve pageInfo.hasNextPage alanlarını içerir. Sonraki sayfayı çekmek için cursor parametresine endCursor değerini geçirin. Cursor'lar opak string'lerdir ve genellikle 1-2 saat sonra expire olur; bu nedenle uzun süren kazıma işlerinde checkpoint mekanizması kurmanız önerilir.

Sticky Session Stratejisi

DataDome, bir IP'ye set edilen datadome çerezini sonraki isteklerde doğrular. Eğer her istekte IP değişirse, çerez geçersiz hale gelir ve JS challenge tetiklenir. ProxyHat'ın sticky session özelliği, belirli bir süre (genellikle 10-30 dakika) boyunca aynı IP'yi korumanızı sağlar:

# Sticky session - aynı IP'yi 10-30 dk korur
http://user-country-US-session-myjob01:PASSWORD@gate.proxyhat.com:8080

# Yeni session = yeni IP
http://user-country-US-session-myjob02:PASSWORD@gate.proxyhat.com:8080

Pacing ve Rate Limit Stratejisi

  • İstekler arası 3-5 saniye bekleme — insan davranışını taklit eder.
  • Maksimum 50 istek/dakika — DataDome'un davranışsal eşiğinin altında kalın.
  • Her 100 istekte bir session değiştir — IP bazlı rate limit'i aşmak için.
  • Rastgele jitter ekleyin — sabit aralıklar bot tespitini tetikler: time.sleep(3 + random.uniform(0, 2))

Challenge-Retry Mantığı

DataDome bir 403 döndürdüğünde, şu adımları izleyin:

  1. 5 saniye bekleyin ve aynı session ile yeniden deneyin.
  2. Tekrar 403 alırsanız, yeni bir session ID ile IP değiştirin.
  3. Hâlâ 403 alırsanız, 60 saniye bekleyin ve yeni bir CSRF token almak için ana sayfayı ziyaret edin.
  4. Üst üste 3 başarısız denemeden sonra o employer ID'sini karantinaya alın ve sonraki iş parçasına geçin.

Proxy Tipi Karşılaştırması: Glassdoor Kazıma için

ÖzellikResidentialDatacenterMobile
DataDome bypass başarısıYüksek (%85-95)Düşük (%10-20)Çok yüksek (%90-98)
Ortalama gecikme~200ms~50ms~400ms
Başabaş maliyetOrtaDüşükYüksek
Önerilen kullanımGenel kazımaTest/geliştirmeHard-target siteler

Glassdoor için residential proxy'ler en iyi dengeyi sunar. Mobile proxy'ler daha yüksek başarı oranı sağlasa da maliyet ve gecikme dezavantajları vardır. Datacenter IP'leri ise DataDome tarafından neredeyse anında engellenir. ProxyHat'ın residential ağında fiyatlandırma sayfasını inceleyerek uygun planı seçebilirsiniz.

Yaygın Hatalar ve Edge Case'ler

1. CSRF Token Expire

gd-csrf-token genellikle 1-2 saat sonra expire olur. Uzun kazıma işlerinde, her 100 istekte bir ana sayfayı ziyaret ederek yeni token alın. Token'ı cookie'den değil, HTML <meta> etiketinden veya JavaScript değişkeninden çıkarın.

2. DataDome Çerez Kaybı

IP değişimi sırasında datadome çerezi geçersiz hale gelir. Sticky session kullanın ve session değiştirdiğinizde çerezleri de sıfırlayın. Çerez sıfırlama sonrası ilk istekte muhtemelen bir JS challenge alınacaktır — bunu otomatik çözmek için Playwright veya Puppeteer ile headless browser kullanabilirsiniz.

3. GraphQL Schema Değişiklikleri

BFF endpoint'i belgelenmemiştir ve Glassdoor schema'yı değiştirebilir. Kodunuzu defensive yazın: .get() ile null-safe erişim kullanın ve beklenmeyen alan adlarını loglayın. Düzenli aralıklarla DevTools'tan güncel query'leri teyit edin.

4. Cooldown Periyotları

Glassdoor belirli employer ID'leri için yüksek istek hacmi algıladığında o employer'ı geçici olarak rate limit'e alabilir. 429 yanıtı aldığınızda en az 60 saniye bekleyin ve farklı bir employer'a geçin. ProxyHat'ın 100+ lokasyon seçeneği ile coğrafi dağıtım yaparak bu riski azaltabilirsiniz.

Etik Kazıma ve Resmi API Kullanımı

Glassdoor'dan veri toplarken etik sınırlara dikkat etmek hem yasal hem de teknik sürdürülebilirlik açısından kritiktir. İşte temel ilkeler:

  • Sadece agregat, kişisel olmayan veri toplayın. Değerlendirme puanları, pros/cons metinleri ve iş unvanları yeterlidir. Yorum yazarının adını, e-postasını veya diğer kişisel bilgilerini çıkarmaya çalışmayın.
  • Giriş duvarı arkasını kazımayın. Giriş yaparak erişilen veriler ToS altında korunur ve CFAA kapsamında erişim ihlali sayılabilir.
  • GDPR uyumu: AB merkezli çalışanların değerlendirmeleri kişisel veri sayılabilir. AB'den erişiyorsanız veya AB vatandaşlarının verisini işliyorsanız, GDPR Madde 6'da belirtilen meşru çıkar temelini belgeleyin ve veri minimize ilkesine uyun.
  • robots.txt'yi kontrol edin. Glassdoor'un robots.txt dosyası bazı yolları disallow edebilir — bu yolları kazımayın.
  • Hız sınırlarına saygı gösterin. Sunucuyu zorlamayın; makul pacing ile hem sizin hem platformun kaynaklarını koruyun.

Resmi API veya Veri Lisansı Ne Zaman Kullanılmalı?

Eğer organizasyonunuz düzenli ve yüksek hacimli Glassdoor verisine ihtiyaç duyuyorsa, resmi bir veri lisansı veya API erişimi en doğru yoldur. Glassdoor'un işveren ürünleri kapsamında veri lisanslama seçenekleri mevcuttur. Resmi lisans, yasal riski tamamen ortadan kaldırır, SLA garantisi sağlar ve veri kalitesini güvence altına alır.

Kazıma, tek seferlik araştırma veya POC çalışmaları için uygundur. Üretim seviyesinde sürekli veri akışı gerektiren projelerde ise resmi kanallar tercih edilmelidir. Daha fazla kazıma kullanım senaryosu için web scraping kullanım sayfamızı inceleyebilirsiniz.

Key Takeaways

Özet:

  • Glassdoor'da şirket değerlendirmelerinin kısaltılmış hali herkese açıktır; tam maaş verileri giriş duvarı arkasındadır ve kazınmamalıdır.
  • DataDome + Cloudflare bot tespitini aşmak için curl_cffi (Chrome TLS taklidi) + residential proxy kombinasyonu gerekir.
  • GraphQL BFF endpoint'i (/bff/graphql) yapılandırılmış JSON döndürür; gd-csrf-token header'ı zorunludur.
  • Sticky session ile DataDome çerez tutarlılığını koruyun; 3-5 saniye pacing ve 50 istek/dakika limitine uyun.
  • Sadece agregat, kişisel olmayan veri toplayın; GDPR ve CFAA sınırlarına saygı gösterin; üretim için resmi veri lisansı düşünün.

Hazır olduğunuzda, ProxyHat dokümantasyonu üzerinden proxy konfigürasyon detaylarını inceleyebilir ve fiyatlandırma sayfasından uygun planı seçebilirsiniz. SERP takibi ve rekabet analizi için SERP tracking kullanım senaryosunu da değerlendirmenizi öneririz.

Sık sorulan sorular

Glassdoor şirket değerlendirmeleri ve maaş verileri nasıl scrape edilir?

Glassdoor'da herkese açık şirket değerlendirmeleri, /Reviews/ sayfalarından veya /bff/graphql BFF endpoint'ine POST isteği gönderilerek scrape edilebilir. curl_cffi ile Chrome TLS taklidi yapmak ve residential proxy kullanmak DataDome ve Cloudflare engellerini aşmak için gereklidir. gd-csrf-token header'ı ve geçerli DataDome çerezleri isteklere dahil edilmelidir. Maaş verilerinin tam dağılımı ise giriş duvarı arkasındadır ve kazınması ToS ihlalidir.

Glassdoor kazıma için hangi proxy tipi en iyisidir?

Glassdoor kazıma için residential proxy'ler en iyi dengeyi sunar. DataDome, veri merkezi IP'lerini yüksek risk olarak işaretler ve genellikle ilk istekte engeller. Residential proxy'ler gerçek ISP'lerden atanmış IP'ler kullandığı için %85-95 bypass başarısı sağlar. Mobile proxy'ler daha yüksek başarı oranı sunsa da maliyet ve gecikme dezavantajları vardır. Sticky session özelliği ile DataDome çerez tutarlılığı korunabilir.

Glassdoor'da DataDome engellemeleri nasıl aşılır?

DataDome engellemelerini aşmak için üç katmanlı bir strateji gerekir: Birincisi, curl_cffi ile Chrome TLS parmak izi taklidi yapın — standart Python requests kütüphanesi JA3 hash ile anında tanınır. İkincisi, residential proxy ile gerçek ISP IP'si kullanın — veri merkezi IP'leri DataDome tarafından engellenir. Üçüncüsü, sticky session ile aynı IP'den gelen isteklerin DataDome çerezleriyle tutarlı kalmasını sağlayın ve istekler arası 3-5 saniye pacing uygulayın.

Glassdoor'da hangi veriler giriş yapmadan erişilebilir?

Glassdoor'da giriş yapmadan erişilebilen veriler şunlardır: şirket genel bakış sayfası (sektör, çalışan sayısı, ortalama puan), değerlendirme listesi sayfasındaki kısaltılmış değerlendirme metinleri (ilk 200-300 karakter), ve ortalama puan dağılımı. Tam maaş dağılımı, ayrıntılı bonus verileri, tam değerlendirme metinleri ve interview deneyimleri ise giriş duvarı arkasındadır. Bu girişle korunan verilerin kazınması CFAA ve Glassdoor ToS ihlali olabilir.

Glassdoor kazıma yasal mıdır?

Glassdoor'dan herkese açık, giriş gerektirmeyen verilerin toplanması genel olarak yasal olsa da, Glassdoor'un Kullanım Şartları kazımayı kısıtlayabilir. ABD'de CFAA, yetkisiz erişimi suç sayar; giriş duvarı arkasındaki verilerin kazınması risklidir. AB'de GDPR, çalışan değerlendirmelerini kişisel veri olarak değerlendirebilir. Etik kazıma için sadece agregat ve kişisel olmayan veri toplayın, robots.txt'ye saygı gösterin ve üretim seviyesi ihtiyaçlar için resmi veri lisansı düşünün.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön