---
title: "Glassdoor scraper"
description: "Scrape Glassdoor company pages as JSON: overall rating, sub-ratings, CEO approval, recommend rate and reviews with pros, cons and job title. One API request."
canonical: https://www.zenrows.com/scrape/glassdoor
updated: 2026-10-20
---

# Glassdoor scraper

The Zenrows Glassdoor scraper turns a company reviews page into structured JSON: overall rating, sub-ratings, CEO approval, recommend rate, business outlook, industry average, ratings by employee group, and reviews with title, pros, cons, rating, job title and date. Fetch in Adaptive Stealth Mode opens the page, and Extract returns the fields. Run it from an API call, the CLI or an AI agent.

- Site: glassdoor.com
- Returns: Company ratings, CEO approval and employee reviews

## Run it: one Glassdoor company in, JSON out

```json Input
{
  "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm",
  "mode": "auto",
  "extract": "auto"
}
```

```json Output
{
  "employer": {
    "glassdoor_id": "9079",
    "name": "Google",
    "overview_url": "/Overview/Working-at-Google-EI_IE9079.11,17.htm"
  },
  "rating_summary": {
    "overall_rating": 4.4,
    "industry_name": "Information Technology",
    "industry_avg_rating": 3.8,
    "ceo_name": "Sundar Pichai",
    "ceo_approval_pct": 84,
    "recommend_to_friend_pct": 88,
    "positive_business_outlook_pct": 83,
    "rating_compensation_and_benefits": 4.5,
    "rating_career_opportunities": 4.2,
    "rating_culture_and_values": 4.2
  },
  "reviews": [
    {
      "review_id": "105562541",
      "title": "Great perks, but not as progressive as you think.",
      "overall_rating": 3,
      "date": "Sep 12, 2026",
      "job_title": "Account strategist",
      "pros": "food, amenities, large networking opportunities, strong resume builder. Nice offices. Employees are willing to help and share knowledge.",
      "cons": "Sales at Google is a highly gamified, strictly metrics driven role focused on checking off boxes…",
      "positive_business_outlook": true,
      "review_url": "/Reviews/Employee-Review-Google-E9079-RVW105562541.htm"
    }
  ]
}
```

Request and output of a live call to Google's Glassdoor reviews page on Oct 20, 2026, trimmed for length. A field is returned when the page shows it.

## What data can you scrape from Glassdoor?

A Glassdoor reviews page holds the company's ratings, how employees see the CEO and the business, how different groups rate the employer, and a page of reviews. These are the fields teams use most, with the path where each lives in the JSON.

| Field | What it holds | Example |
|---|---|---|
| `employer.glassdoor_id` | Glassdoor's employer ID, the number after `E` in its URLs | `9079` |
| `employer.name` | The company name | `Google` |
| `employer.overview_url` | Link to the company overview page | `/Overview/Working-at-Google-EI_IE9079.11,17.htm` |
| `rating_summary.overall_rating` | Overall employee rating out of 5 | `4.4` |
| `rating_summary.industry_avg_rating` | Average rating of the company's industry | `3.8` |
| `rating_summary.industry_name` | The industry Glassdoor compares against | `Information Technology` |
| `rating_summary.ceo_name` | The CEO employees rate | `Sundar Pichai` |
| `rating_summary.ceo_approval_pct` | Share of reviewers who approve of the CEO | `84` |
| `rating_summary.recommend_to_friend_pct` | Share who would recommend the employer | `88` |
| `rating_summary.positive_business_outlook_pct` | Share with a positive business outlook | `83` |
| `rating_summary.rating_compensation_and_benefits` | Sub-rating for pay and benefits, next to culture and career ratings | `4.5` |
| `demographic_ratings[]` | Rating and review count by employee group | `{ "group_label": "Veterans", "rating": 4.1 }` |
| `reviews[].title` | The review headline | `Daycare for Adults` |
| `reviews[].pros` / `reviews[].cons` | The two halves of a Glassdoor review | `The compensation is definitely the best part…` |
| `reviews[].overall_rating` | Stars in the review | `3` |
| `reviews[].job_title` | The reviewer's role | `Senior user experience designer` |
| `reviews[].location` | Office location, when given | `Austin, TX` |
| `reviews[].recommends` / `reviews[].approves_of_ceo` | The reviewer's yes or no answers | `true` |

## How to scrape Glassdoor with Zenrows

1. **Create a free Zenrows account** and copy your API key from the dashboard.
2. **Find the company's reviews URL.** It follows `/Reviews/<Company>-Reviews-E<id>.htm`. The employer ID after `E` is the same on the company's salaries, jobs and overview pages, so one lookup gives you every page.
3. **Send it with the default configuration**: Adaptive Stealth Mode to open the page and Extract to return the fields.
4. **Read `parsed`** from the response. To track ratings without review text, keep only the `rating_summary` paths.
5. **Run your company list in Batch** once one page comes back the way you want, with the employer ID as your own key.

```python Python
# pip install requests
import requests

params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm",
    "mode": "auto",          # Adaptive Stealth Mode
    "extract": "auto",       # structured JSON
}
response = requests.get("https://api.zenrows.com/v1/", params=params, timeout=180)
response.raise_for_status()

data = response.json()["parsed"]
summary = data["rating_summary"]
print(data["employer"]["name"], summary["overall_rating"], summary["ceo_approval_pct"])
for review in data["reviews"]:
    print(review["date"], review["overall_rating"], review["job_title"], review["title"])
```

```javascript Node.js
// Node 18+ (built-in fetch)
const params = new URLSearchParams({
  apikey: "YOUR_ZENROWS_API_KEY",
  url: "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm",
  mode: "auto",
  extract: "auto",
});

const response = await fetch(`https://api.zenrows.com/v1/?${params}`, {
  signal: AbortSignal.timeout(180_000),
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);

const { parsed } = await response.json();
console.log(parsed.employer.name, parsed.rating_summary.overall_rating);
```

```bash cURL
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.glassdoor.com%2FReviews%2FGoogle-Reviews-E9079.htm&mode=auto&extract=auto"

# Only the fields you need
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.glassdoor.com%2FReviews%2FGoogle-Reviews-E9079.htm&mode=auto&extract=auto&extract_fields=employer.name%2Crating_summary.overall_rating%2Crating_summary.ceo_approval_pct%2Crating_summary.recommend_to_friend_pct"
```

```python Python SDK
# pip install zenrows
from zenrows import ZenRowsClient

client = ZenRowsClient("YOUR_ZENROWS_API_KEY")
response = client.get(
    "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm",
    params={"mode": "auto", "extract": "auto"},
)
for review in response.json()["parsed"]["reviews"]:
    print(review["title"], "| pros:", review["pros"][:60], "| cons:", review["cons"][:60])
```

## Input

The scraper takes one Glassdoor URL per request, plus the options below. The same parameters go into every task of a Batch job, so the input for an employer benchmark is a list of reviews URLs with these settings.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `url` | string | required | A company reviews page, `/Reviews/<Company>-Reviews-E<id>.htm`, or a later page of it (`_P2.htm`) |
| `mode` | string | `auto` | Adaptive Stealth Mode: starts with the lightest setup and adds rendering and protected-site handling only when the page needs them |
| `extract` | string | `auto` | Returns the page's fields as JSON in `parsed`, next to the raw `html` |
| `extract_fields` | string | all fields | Comma-separated paths to keep, such as `employer.name,rating_summary` |
| `proxy_country` | string | any | Two-letter country code. Glassdoor runs country sites (glassdoor.co.uk, glassdoor.de) whose default reviews follow the country |
| `wait_for` | string | none | A CSS selector to wait for before the page is read |
| `session_id` | integer | none | Reuse the same session while you page through one company's reviews, up to 10 minutes |

```json Batch input
{
  "type": "regular",
  "status": "closed",
  "zenrows_params": {
    "mode": "auto",
    "extract": "auto"
  },
  "tasks": [
    { "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm", "external_id": "E9079" },
    { "url": "https://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm", "external_id": "E1651" },
    { "url": "https://www.glassdoor.com/Reviews/Amazon-Reviews-E6036.htm", "external_id": "E6036" }
  ]
}
```

## Output

Every response is JSON with two keys: `html`, the page as Glassdoor served it, and `parsed`, the structured record. A reviews page returns four groups: `employer`, `rating_summary`, `demographic_ratings` and `reviews`. The blocks below split one trimmed live response into the company view and the reviews.

```json Company ratings
{
  "employer": {
    "glassdoor_id": "9079",
    "name": "Google",
    "overview_url": "/Overview/Working-at-Google-EI_IE9079.11,17.htm",
    "logo_url": "/imgproxy/mvQ1l1RYdAABHLXfxYj1dFrFzljCcneYkLuZicrUmcE/rs::72:72/aHR0cHM6Ly9tZWRpYS5nbGFzc2Rvb3IuY29tL3NxbC85MDc5L2dvb2dsZS1zcXVhcmVsb2dvLTE0NDExMzA3NzMyODQucG5n"
  },
  "rating_summary": {
    "overall_rating": 4.4,
    "industry_name": "Information Technology",
    "industry_avg_rating": 3.8,
    "ceo_name": "Sundar Pichai",
    "ceo_approval_pct": 84,
    "recommend_to_friend_pct": 88,
    "positive_business_outlook_pct": 83,
    "rating_career_opportunities": 4.2,
    "rating_compensation_and_benefits": 4.5,
    "rating_culture_and_values": 4.2
  },
  "demographic_ratings": [
    { "group_label": "Caregivers", "rating": 4.3, "rating_count": 136 },
    { "group_label": "Veterans", "rating": 4.1, "rating_count": 124 },
    { "group_label": "People with disabilities", "rating": 3.8, "rating_count": 327 }
  ]
}
```

```json Employee reviews
{
  "reviews": [
    {
      "review_id": "105678361",
      "review_url": "/Reviews/Employee-Review-Google-E9079-RVW105678361.htm",
      "title": "Creative culture diminished by layoffs and AI reliance",
      "overall_rating": 3,
      "date": "Sep 21, 2026",
      "job_title": "Senior user experience designer",
      "location": "Austin, TX",
      "pros": "Historically, Google had an incredible company culture where morale was high and creativity thrived…",
      "cons": "Following continuous rounds of layoffs, the environment shifted from celebrating creativity to being dominated by perfectionism…",
      "recommends": null,
      "approves_of_ceo": null
    },
    {
      "review_id": "103439304",
      "review_url": "/Reviews/Employee-Review-Google-E9079-RVW103439304.htm",
      "title": "Daycare for Adults",
      "overall_rating": 3,
      "date": "Apr 5, 2026",
      "job_title": "Sales associate",
      "location": "Dublin, Dublin",
      "pros": "The compensation is definitely the best part. Between the base salary, equity, and bonuses, you’re very well taken care of…",
      "cons": "Oh boy, it really became a mess lately... The actual office culture feels incredibly childish…",
      "recommends": true,
      "approves_of_ceo": true
    }
  ]
}
```

Links in the response are relative to `https://www.glassdoor.com`, so prefix them before you store them. For a spreadsheet, `pd.json_normalize(parsed["reviews"])` in pandas gives one row per review; for an LLM, ask for the page as Markdown.

## Scrape Glassdoor from your coding agent

Claude Code, Cursor, Codex and any MCP client can compare employers on Glassdoor from a prompt.

The agent sends the same Fetch and Extract request a developer would, so it reads the JSON above. Connect the Zenrows MCP server once, or give the agent the CLI and let it run commands in the terminal.

```bash Connect the MCP server (Claude Code)
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp
```

```json MCP config (Cursor, Claude Desktop, Windsurf)
{
  "mcpServers": {
    "zenrows": {
      "command": "npx",
      "args": ["-y", "@zenrows/mcp"],
      "env": { "ZENROWS_API_KEY": "YOUR_ZENROWS_API_KEY" }
    }
  }
}
```

```bash Or run the CLI
npx -y @zenrows/cli init
zenrows extract "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm"
```

```text Then ask your agent
Use Zenrows to open the Glassdoor reviews pages of Google, Microsoft
and Amazon. Compare their overall rating, CEO approval and recommend
rate in a table, then summarize the three most common cons in each
company's recent reviews.
```

## Scrape Glassdoor at scale with Batch and Crawl

**Batch** runs a list of Glassdoor URLs as one job, in parallel, with your own ID on each result. Put a peer group of employers in it each month to track ratings over time, or list `_P2.htm`, `_P3.htm` and later pages of one company to collect its review history.

**Crawl** finds a company's pages for you. Start it on the company overview page and keep the links that contain the employer ID, such as `E9079`, and it returns the reviews, salaries and jobs pages it reaches for that employer.

```bash Batch (cURL)
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "regular",
    "status": "closed",
    "zenrows_params": { "mode": "auto", "extract": "auto" },
    "tasks": [
      { "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm", "external_id": "E9079" },
      { "url": "https://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm", "external_id": "E1651" }
    ]
  }'

# Read the results when the job finishes
curl "https://async.api.zenrows.com/v1/jobs/JOB_ID/results?status=successful" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY"
```

```bash Batch (CLI)
# employers.jsonl: one {"url": "https://www.glassdoor.com/Reviews/...", "external_id": "...", "extract": "auto"} per line
zenrows batch create employers.jsonl --wait
zenrows batch results <job-id> --out glassdoor.jsonl
```

```bash Crawl (cURL)
curl -X POST "https://api.zenrows.com/v1/crawls" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.glassdoor.com/Overview/Working-at-Google-EI_IE9079.11,17.htm",
    "depth": 2,
    "max_pages": 100,
    "include_patterns": ["-E9079"]
  }'
```

**Scheduled jobs** run the same Batch job on a timetable, on Zenrows' side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can tell your app when a run finishes, and you can pause or resume the schedule at any time, with no cron server to keep alive.

```bash Scheduled job (cURL)
# Runs every day on Zenrows' side; each run keeps its own results
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "type": "scheduled",
      "status": "closed",
      "schedule": {
        "rate": {
          "every": 1,
          "unit": "day"
        }
      },
      "zenrows_params": {
        "mode": "auto",
        "extract": "auto"
      },
      "tasks": [
        {
          "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm",
          "external_id": "glassdoor"
        }
      ]
    }'

# Or at set times: "schedule": { "calendar": { "times_of_day": ["09:00"],
#   "cadence": { "weekly": { "days": ["mon", "thu"] } } }, "timezone": "Europe/Madrid" }
```

## What teams do with Glassdoor data

| Use case | Data they pull | Who runs it |
|---|---|---|
| Employer brand benchmarking | Overall and sub-ratings, recommend rate and CEO approval against a peer group | HR, talent acquisition and employer brand teams |
| Recruiting intelligence | Cons and job titles in competitors' reviews, to pitch candidates | Recruiters and sourcing teams |
| Investment and alternative data | Rating trends, business outlook and review volume over time | Hedge funds, VCs and equity analysts |
| Culture and engagement research | Pros, cons and ratings by employee group | People analytics and DEI teams |
| Sales account research | Employer rating, industry and recent review themes for target accounts | B2B sales and account-based marketing teams |
| Text analytics and LLMs | Review text with ratings and roles, as JSON or Markdown | Data science and AI teams |

## Tips for scraping Glassdoor

- **Key everything on the employer ID.** `E9079` appears in the reviews, salaries and jobs URLs and in `employer.glassdoor_id`. Store it once and build the other URLs from it.
- **Page through with `_P<n>`.** Page two of a company's reviews is `/Reviews/Google-Reviews-E9079_P2.htm`. Loop until `reviews[]` comes back empty.
- **Keep nulls as nulls.** Reviewers skip questions, so `recommends`, `approves_of_ceo` and `location` are often null. Treat null as "not answered", never as "no".
- **Compare against the industry figure.** `industry_avg_rating` is on every page, which makes a company's rating readable without building your own benchmark.
- **Pick the country site that matches your workforce.** glassdoor.co.uk and glassdoor.de put local reviews first, so request the site for the market you study.
- **Snapshot monthly, not daily.** Ratings move slowly on large employers, and a monthly series is easier to read than daily noise.

## Frequently asked questions

### Is it legal to scrape Glassdoor?

Collecting the public parts of Glassdoor, such as company ratings, CEO approval and the text of anonymous reviews, is common for HR benchmarking and investment research. Reviews can still contain details that identify a person, and personal data falls under laws such as the GDPR and the CCPA, so keep only what you need and do not try to identify reviewers. Check Glassdoor's terms of use for your use case and ask a lawyer if you are unsure.

### Is there an official Glassdoor API?

Not for new developers. Glassdoor closed its public API years ago, and data access today runs through partnerships. Teams that need ratings and reviews for a list of companies collect the public pages with a scraper.

### What Glassdoor pages can I scrape?

Company reviews pages, including later pages of reviews and the country sites. Salaries, jobs and overview pages of the same employer share its ID and go in the same way. Anything that needs a Glassdoor account to view stays out of scope.

### Can I scrape Glassdoor reviews?

Yes. Each reviews page returns the reviews it shows with title, pros, cons, rating, date, job title, location and the reviewer's answers on recommending the company and approving of the CEO. Request _P2.htm and later pages for older reviews.

### Can I scrape Glassdoor salaries and jobs?

Send the company's salaries URL ( /Salary/<Company>-Salaries-E<id>.htm ) or jobs URL ( /Jobs/<Company>-Jobs-E<id>.htm ) the same way. For job listings across many employers, a job board scraper such as Indeed or LinkedIn Jobs is often the better source.

### How do I scrape Glassdoor with Python?

Send a GET request to https://api.zenrows.com/v1/ with your API key, the Glassdoor URL, Adaptive Stealth Mode and Extract, as in the Python example above. The response's parsed key holds the employer, ratings and reviews as a dictionary. The zenrows package on PyPI wraps the same request.

### How many Glassdoor companies can I scrape?

Send one URL per request, or a whole list as a Batch job that runs the URLs in parallel and keeps your own ID on each result. One Batch job accepts more than 10,000 URLs, inline or as a CSV file.

### Can AI agents scrape Glassdoor with Zenrows?

Yes. Connect the Zenrows MCP server to Claude, Cursor, Codex or any MCP client, or give your agent the Zenrows CLI. Name the employers you want to compare and the agent calls Fetch and Extract for you.

### Can I scrape Glassdoor on a schedule?

Yes. Create a scheduled Batch job with your Glassdoor URLs and the same settings as a single request, and Zenrows runs it on its side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can notify your app when a run finishes, and the schedule can be paused or resumed at any time.

### Which integrations work with the Glassdoor scraper?

Zenrows works with n8n, Make, Zapier, Clay, Dify, LangChain, LlamaIndex, CrewAI and Mastra, plus the Python, Node.js and Go SDKs and any HTTP client. Clay users add Glassdoor ratings to account lists; n8n users write monthly snapshots to a sheet. See the integrations page for the full list.

### What format does the data come in?

JSON by default, with the structured record in parsed and the original page in html . You can also ask for the page as Markdown or plain text, which is what most LLM and RAG pipelines want. For customer reviews of a company, see the Trustpilot scraper .

All scrapers: https://www.zenrows.com/scrape. Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
