Skip to main content
Thirdwatchthirdwatch
Jobs & recruitment

Track Glassdoor Rating Changes Over Time (2026)

Monitor Glassdoor company-rating drift using Thirdwatch. Weekly snapshots + delta detection + Slack alerts on rating drops.

Apr 27, 2026 · 5 min read · 1,131 words
See the scraper →

Thirdwatch's Glassdoor Scraper makes employer-brand drift tracking a structured workflow with pay-per-result pricing — weekly snapshot of company rating and reviews_count, delta detection, Slack alerting on negative trajectory. Built for HR analytics teams, talent-acquisition strategy functions, M&A diligence analysts, and employer-brand consultants studying competitive positioning.

Why track Glassdoor rating changes over time

Employer-brand health is a leading indicator. According to Glassdoor's 2024 Employer Branding report, companies with sustained 0.3-star Glassdoor rating declines see 18-25% higher voluntary attrition within 12 months and 30%+ slower offer-acceptance rates for senior hires. For HR analytics, talent-acquisition strategy, and M&A diligence teams, rating drift catches signals 6-12 months before they show up in lagging HR metrics.

The job-to-be-done is structured. An HR analytics team monitors rating drift across a 50-company peer set weekly to inform internal benchmarking. A talent-acquisition strategy function tracks competitor employer-brand health to time recruitment campaigns. An M&A diligence analyst studies target-company rating drift over 24 months to validate culture-fit narratives. An employer-brand consultancy serves clients with rating-trajectory dashboards for boardroom reporting. All reduce to weekly company-list snapshot + delta computation + threshold-based alerting.

How does this compare to the alternatives?

Three options for Glassdoor rating-trajectory data:

Approach Cost per 1,000 records weekly Reliability Setup time Maintenance
Manual Glassdoor checks Effectively unbounded analyst time Sampling bias Continuous Doesn't scale
Glassdoor B2B (Indeed Hiring Insights) $20K–$100K/year Authoritative Weeks Annual contract
Thirdwatch Glassdoor Scraper Pay per result production-grade anti-bot tooling stealth, structured output 5 minutes Thirdwatch tracks Glassdoor changes

Glassdoor's B2B Hiring Insights product offers authoritative employer-brand analytics but the per-seat cost limits adoption. Manual tracking is unscalable past 5-10 companies. The Glassdoor Scraper actor page gives you the underlying time-series data for less than 1% of B2B-product cost.

How to track Glassdoor rating changes in 4 steps

Step 1: How do I authenticate against Apify?

Sign in at apify.com (free tier, no credit card), open Settings → Integrations, and copy your personal API token. Every example below assumes the token is in APIFY_TOKEN:

export APIFY_TOKEN="apify_api_xxxxxxxxxxxxxxxx"

Step 2: How do I pull a weekly snapshot for a peer set?

Pass company queries weekly with scrapeType: "reviews" (returns rating + reviews_count + recent themes).

import os, requests, datetime, json, pathlib

ACTOR = "thirdwatch~glassdoor-scraper"
TOKEN = os.environ["APIFY_TOKEN"]

PEER_SET = ["google", "meta", "openai", "anthropic", "stripe",
            "airbnb", "amazon", "microsoft", "netflix", "apple",
            "uber", "lyft", "dropbox", "asana", "atlassian",
            "snowflake", "databricks", "datadog", "mongodb", "twilio"]

resp = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
    params={"token": TOKEN},
    json={"queries": PEER_SET, "scrapeType": "reviews",
          "country": "us", "maxResults": 50},
    timeout=3600,
)
records = resp.json()
ts = datetime.datetime.utcnow().strftime("%Y%m%d")
pathlib.Path(f"snapshots/glassdoor-{ts}.json").write_text(json.dumps(records))
print(f"{ts}: {len(records)} records across {len(PEER_SET)} companies")

20 companies × 50 reviews each = up to 1,000 records weekly — well within budget for a recurring rating sweep.

Step 3: How do I compute rating deltas across snapshots?

Aggregate per-company rating + reviews_count, compute week-over-week delta.

import pandas as pd, glob

snapshots = sorted(glob.glob("snapshots/glassdoor-*.json"))
print(f"{len(snapshots)} weekly snapshots loaded")

dfs = []
for s in snapshots:
    snap_df = pd.DataFrame(json.loads(open(s).read()))
    ts = s.split("-")[-1].split(".")[0]
    snap_df["snapshot_date"] = pd.to_datetime(ts)
    dfs.append(snap_df)

df = pd.concat(dfs, ignore_index=True)
weekly = (
    df.groupby(["company_name", "snapshot_date"])
    .agg(rating=("company_rating", "first"),
         reviews_count=("reviews_count", "first"))
    .reset_index()
)

weekly["rating_delta_4w"] = weekly.groupby("company_name").rating.diff(4)
weekly["reviews_delta_4w"] = weekly.groupby("company_name").reviews_count.diff(4)
print(weekly.tail(10))

The 4-week delta smooths weekly noise and surfaces true drift trajectories. Companies with delta < -0.3 and reviews_delta > 20 are alert-worthy.

Step 4: How do I forward negative-drift alerts to Slack?

Persist alerted (company, week) tuples and forward only new alerts.

import requests as r

snapshot = pathlib.Path("rating-alerts-seen.json")
seen = set(tuple(x) for x in json.loads(snapshot.read_text())) if snapshot.exists() else set()

alerts = weekly[
    (weekly.rating_delta_4w <= -0.3)
    & (weekly.reviews_delta_4w >= 20)
]

new_alerts = alerts[
    ~alerts.apply(lambda x: (x.company_name, str(x.snapshot_date)), axis=1).isin(seen)
]

for _, a in new_alerts.iterrows():
    r.post("https://hooks.slack.com/services/.../...",
           json={"text": (f":warning: *{a.company_name}* rating dropped "
                          f"{a.rating_delta_4w:+.2f} stars over 4 weeks "
                          f"(now {a.rating}, +{int(a.reviews_delta_4w)} reviews). "
                          f"Possible culture/policy change.")})

new_keys = [(a.company_name, str(a.snapshot_date)) for _, a in new_alerts.iterrows()]
snapshot.write_text(json.dumps(list(seen | set(new_keys))))
print(f"{len(new_alerts)} new rating-drop alerts forwarded")

Schedule the actor on Apify's scheduler at weekly cadence (0 0 * * 1) and the loop runs unattended.

Sample output

A single Glassdoor company-record (reviews scrapeType) looks like this. Five rows weigh ~6 KB.

{
  "company_name": "Stripe",
  "company_rating": 4.4,
  "reviews_count": 1842,
  "company_size": "1001-5000",
  "company_industry": "Internet & Software Services",
  "ceo_approval": 92,
  "recommend_to_friend": 87,
  "pros": ["Smart team", "Strong leadership", "Equity upside"],
  "cons": ["High pressure", "Long hours during product launches"]
}

company_rating is the headline metric; reviews_count provides the volume context for delta significance. ceo_approval and recommend_to_friend are secondary culture-health metrics — drops in these often precede overall rating drops by 2-4 weeks. company_size and company_industry provide cohort context for benchmark comparisons (a 0.3-star drop at a 10K-employee company is more significant than at a 100-person startup).

Common pitfalls

Three things go wrong in rating-trajectory pipelines. Review-volume bias — rating moves at low-review companies (under 50 reviews) reflect statistical noise rather than real signal; always require a minimum reviews_count threshold (200+ for headline alerts). Coordinated review bombs — disgruntled employee groups occasionally coordinate negative reviews after layoffs; check for >10 negative reviews within a 7-day window before declaring a real culture issue. Glassdoor moderation lag — Glassdoor occasionally removes reviews after publication (policy violations, employer disputes), causing apparent rating "improvements" that don't reflect underlying culture change; cross-reference with employee-pulse signals when interpreting positive drifts.

Thirdwatch's actor handles the anti-bot work and proxy rotation so you can focus on the data. Pair Glassdoor with LinkedIn Profile Scraper to identify departed employees who may explain culture-drift causes. A fourth subtle issue worth flagging: Glassdoor's overall rating computation gives extra weight to recent reviews (last 12 months vs older), so a company that had a great 2022 but mediocre 2025 will show a declining headline rating even if 2025 reviews are stable; for true culture-trajectory analysis, compute trailing-12-month rating deltas separately rather than relying solely on the headline number Glassdoor displays. A fifth pattern unique to longitudinal tracking: companies undergoing acquisitions or rebrands sometimes get split into multiple Glassdoor entries (legacy entity + acquired entity); for unified time-series, manually merge entity-pairs and recompute combined rating with reviews_count weighting before publishing trend dashboards. A sixth and final pitfall: Glassdoor's CEO approval rating moves on much shorter timescales than overall rating — a single high-profile CEO comment or policy reversal can shift CEO approval 10-15 points in a week while overall rating barely moves; for early-warning systems, weight CEO approval delta 2-3x more heavily than overall-rating delta in alert thresholds.

Related use cases

Frequently asked questions

Why track Glassdoor rating changes specifically?

Glassdoor's overall company rating is the canonical employer-brand metric — recruiter teams reference it for talent-attraction analysis and HR teams reference it for retention-risk signal. A 0.3-0.5 star drop within a quarter is materially predictive of attrition issues; a 0.5+ rise often correlates with strategic culture investment paying off. For HR analytics, talent-acquisition strategy, and competitive employer-brand intelligence, rating drift is the single highest-signal KPI on Glassdoor.

What rating-change threshold matters?

0.2-star moves over 4 weeks are statistical noise (sub-50-review companies). 0.3-star moves at companies with 200+ reviews are meaningful early signals. 0.5+ star moves at any review count are alert-worthy — indicates either a high-impact policy change or a coordinated review-bombing event. Always check `reviews_count` delta alongside rating delta — if 50+ new reviews drove the move, it's a real signal.

How fresh do rating snapshots need to be?

Weekly cadence is the sweet spot for HR analytics. Below weekly, you miss inflection points; above weekly, the rating-change signal is too small to act on between snapshots. For competitive M&A diligence (rating drift around layoff announcements), daily cadence catches the immediate response. For long-term employer-brand reporting, monthly is sufficient.

Can I track rating changes per location or department?

Yes, indirectly. Glassdoor returns location- and department-tagged reviews via the reviews scrapeType. Aggregate ratings within (company, location) or (company, department) bins to compute per-cell deltas. About 60% of large-employer reviews include location tags; 40% include department tags. Cross-tabulating both produces the highest-resolution employer-brand drift maps.

How do I alert on negative drift?

Persist (company, snapshot_date, rating, reviews_count) tuples and compute 4-week rolling deltas. Trigger Slack alerts when delta < -0.3 AND reviews_count delta > 20 (real signal, not noise). For high-stakes accounts (M&A targets, IPO candidates), tighten to delta < -0.2 AND reviews_count delta > 10. The actor's structured output makes this dashboard a half-day build.

How does this compare to Comparably or Indeed Reviews?

Comparably and Indeed Reviews offer competing employer-brand datasets but neither has Glassdoor's depth (1.4M+ companies, decade+ of historical reviews). For M&A diligence and serious employer-brand research, Glassdoor is the canonical source. Comparably skews toward tech and culture-conscious employers; Indeed Reviews tilts toward retail and operations roles. Use all three for triangulation; Glassdoor for the primary signal.

Related

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.