---
title: "How to Scrape Glassdoor Jobs and Reviews | Scrape.ly"
description: "Scrape Glassdoor jobs with pay ranges and employee reviews with sub-ratings, no login. Real runs, costs, Python and API code, and what to watch out for."
url: https://scrape.ly/blog/scrape-glassdoor
markdown: https://scrape.ly/blog/scrape-glassdoor.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# How to Scrape Glassdoor Jobs and Reviews

Scrape Glassdoor job listings with pay ranges and company ratings, and employee reviews with every sub-rating, without logging in. No-code steps, curl, Python, Node.js and MCP, plus two real runs from 26 October 2026 and their exact cost.

[Openrole Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/openrole.md)

- Published

  Oct 26, 2026

- Reading time

  8 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls a company review card with a briefcase and five gold stars out of an office building with lit windows, two glass doors and a potted plant, and drops it into a crate of job cards](https://scrape.ly/media/scrape-glassdoor.png?w=1080)

To scrape Glassdoor, use two ready-made Actors: one turns a job search into rows with pay ranges, company ratings and full descriptions, the other turns a company page into employee reviews with every sub-rating. Neither needs a Glassdoor account, cookies or a browser on your side, and both export JSON, CSV or Excel.

This guide covers the fields you get, the no-code steps with Store presets, the same jobs in curl, Python, Node.js and through an AI agent, and two real runs from 26 October 2026: the five newest data engineer jobs in the US, and the five newest Microsoft employee reviews with the company's rating summary.

## What data you can get from Glassdoor

The [Glassdoor Jobs Scraper](https://scrape.ly/store/openrole/glassdoor-jobs-scraper.md) returns one row per job; the [Glassdoor Reviews Scraper](https://scrape.ly/store/openrole/glassdoor-reviews-scraper.md) returns one row per review.

| Jobs field                         | What it holds                                                                                   |
| ---------------------------------- | ----------------------------------------------------------------------------------------------- |
| `id`, `title`, `url`, `seoUrl`     | Listing ID, job title and links                                                                 |
| `employer`                         | Employer ID, name, overview URL and logo                                                        |
| `location`                         | City, its Glassdoor ID and country                                                              |
| `pay`                              | `min`, `max`, `currency`, `period` and `source` (`EMPLOYER_PROVIDED` or `ESTIMATED`), or `null` |
| `rating`, `easyApply`, `ageInDays` | Company rating, Easy Apply flag, days since posting                                             |
| `description`                      | The listing's HTML                                                                              |

| Reviews field                                                              | What it holds                                                                        |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| `summary`, `pros`, `cons`, `advice`                                        | The review headline and text                                                         |
| `ratingOverall` and six sub-ratings                                        | Work-life balance, culture, diversity, career, compensation, senior leadership (1–5) |
| `ratingCeo`, `ratingBusinessOutlook`, `ratingRecommendToFriend`            | CEO approval, outlook and recommendation                                             |
| `reviewDateTime`, `isCurrentJob`, `employmentStatus`, `lengthOfEmployment` | When, and the reviewer's status                                                      |
| `jobTitle`, `location`, `employer`                                         | Role, city and company                                                               |
| `employerResponses`, `countHelpful`                                        | Company replies and helpful votes                                                    |
| `companyReviewStats`                                                       | The company's rating summary, when you turn it on                                    |

What you won't get: the Reviews Scraper collects reviews only, not salaries, interviews or benefits, and neither Actor reads anything behind a Glassdoor login.

## How to scrape Glassdoor without code

**Jobs.** Open the Glassdoor Jobs Scraper and pick the [Newest data engineer jobs in the US](https://scrape.ly/store/openrole/glassdoor-jobs-scraper/presets/search.md) preset. We lowered `limit` from 15 to 5:

```json
{
  "keywords": "data engineer",
  "location": "United States",
  "limit": 5,
  "sortBy": "date_desc",
  "daysOld": 30,
  "easyApply": false,
  "remoteWorkType": false
}
```

Click **Start**, then export the dataset. The fields that matter most:

- `keywords` and `location`: what you'd type into Glassdoor's search boxes.
- `limit`: jobs to save, up to 1,000 (Glassdoor serves roughly 900 per search).
- `daysOld`, `easyApply`, `remoteWorkType`, `minRating`, `radius`, `employerSizes`: filters.
- `excludeJobIds`: listing IDs you already have, so a scheduled run saves only new jobs.

## How to scrape Glassdoor reviews

Open the Glassdoor Reviews Scraper and pick the [Microsoft employee reviews](https://scrape.ly/store/openrole/glassdoor-reviews-scraper/presets/company-reviews.md) preset. We kept the company URL, cut `maxReviews` to 5, sorted by date and turned on the rating summary:

```json
{
  "startUrls": [{ "url": "https://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm" }],
  "maxReviews": 5,
  "language": "auto",
  "sortReviewsBy": "DATE",
  "includeAllReviews": false,
  "includeCompanyStats": true
}
```

Any company page with an employer ID works (Reviews, Overview, Jobs or Salaries, on any country site such as glassdoor.fr), and a bare employer ID such as `1651` does too. Add `keyword` to keep only reviews that mention a word, `newerThan` (`YYYY-MM-DD`) for incremental runs, and `language` or `includeAllReviews` for non-English reviews.

Scrape.ly Store Glassdoor Reviews Scraper Paste Glassdoor company pages and get employee reviews with pros, cons, every sub-rating, CEO approval and the company's rating summary. $3.02 per 1,000 reviews.

[Try it free](https://scrape.ly/store/openrole/glassdoor-reviews-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to scrape Glassdoor with the API

Create a token under **Settings → API & Integrations** in the dashboard and store it as `SCRAPELY_TOKEN`. Both runs below finished in about 10 seconds or less, so the synchronous endpoint returns the rows in one call:

```shell
curl -X POST "https://api.scrape.ly/v2/actors/openrole~glassdoor-jobs-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"keywords": "data engineer", "location": "United States", "limit": 5, "sortBy": "date_desc", "daysOld": 30}'
```

It returns a JSON array; add `?format=csv` for CSV. For hundreds of jobs or thousands of reviews, the sync call can pass its 45-second wait and answer `408` while the run keeps going (calling again starts a second run). Use `POST /v2/actors/openrole~glassdoor-reviews-scraper/runs`, poll `/v2/actor-runs/RUN_ID?waitForFinish=60` until `SUCCEEDED`, then read `/v2/actor-runs/RUN_ID/dataset/items`, as the [API docs](https://scrape.ly/docs/api-actors.md) describe.

In Python (`pip install scrapely-client-python`), this script pulls the newest reviews of a company, capped at 5 cents, and averages the sub-ratings the reviewers actually filled in:

```python
import os
from decimal import Decimal
from statistics import mean

from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

run = client.actor("openrole/glassdoor-reviews-scraper").call(
    run_input={
        "startUrls": [{"url": "https://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm"}],
        "maxReviews": 5,
        "sortReviewsBy": "DATE",
    },
    max_total_charge_usd=Decimal("0.05"),
)
reviews = list(client.dataset(run.default_dataset_id).iterate_items())

for field in ["ratingOverall", "ratingWorkLifeBalance", "ratingCompensationAndBenefits"]:
    scores = [r[field] for r in reviews if r.get(field)]  # 0 or None means "not rated"
    print(f"{field:32} {mean(scores):.1f} from {len(scores)} of {len(reviews)} reviews")
```

In JavaScript or Node.js (`npm install scrapely-client`):

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('openrole/glassdoor-jobs-scraper').call({
  keywords: 'data engineer',
  location: 'United States',
  limit: 5,
  sortBy: 'date_desc',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const job of items) console.log(job.title, job.employer.name, job.pay?.min, job.pay?.max);
```

For an API-style overview of both Actors, see the [Glassdoor API](https://scrape.ly/api/glassdoor-api.md) page.

### With an AI agent (MCP)

Scrape.ly runs a hosted MCP server at `https://mcp.scrape.ly`. In Claude Code, run `claude mcp add --transport http scrapely https://mcp.scrape.ly` and sign in with `/mcp`. In Cursor, add it to `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://mcp.scrape.ly?actors=openrole/glassdoor-jobs-scraper,openrole/glassdoor-reviews-scraper",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

Then ask: "Use scrapely to get the 20 newest Glassdoor reviews of Microsoft and summarize what employees say about work-life balance, with the average sub-rating." The [MCP docs](https://scrape.ly/docs/mcp.md) cover ChatGPT, VS Code, Windsurf and the other clients.

## A real run: data engineer jobs and Microsoft reviews

**Jobs.** We ran the jobs input on 26 October 2026. It saved 5 jobs, all with a description, in 10.1 seconds:

| Title                           | Employer           | Location       | Pay (annual)      | Pay source | Rating | Age (days) |
| ------------------------------- | ------------------ | -------------- | ----------------- | ---------- | ------ | ---------- |
| Principal Data Engineer         | XpertDox, LLC      | Scottsdale, AZ | $150,000–$190,000 | employer   | —      | 3          |
| Generative AI Data Engineer     | Embedded Alliance  | Herndon, VA    | $120,000–$210,000 | employer   | 4.9    | 4          |
| Data Engineer, Talent Community | Lennar Corporation | Miami, FL      | $80,328–$149,946  | estimated  | 3.4    | 24         |
| Data Pipeline Engineer          | DCI Solutions      | Washington, DC | $160,000–$200,000 | employer   | 3.8    | 2          |
| Senior AWS IAM & Data Engineer  | CGI Group Inc.     | Lafayette, LA  | $102,000–$178,500 | employer   | 3.7    | 25         |

Every job had a pay range, four of five from the employer and one Glassdoor estimate, which is the difference to keep when you benchmark salaries. Two of the five took Easy Apply. The log shows the part you never have to handle:

```plaintext
20261026T14:29:14.778Z [Scrapely] Container started (setup 1.5 s)
20261026T14:29:16.105Z [scrapely.actor] INFO  Searching data engineer in United States, limit 5, proxy DATACENTER
20261026T14:29:19.142Z [scrapely.actor] INFO  Location lookup was blocked.
20261026T14:29:19.142Z [scrapely.actor] WARN  Datacenter was blocked. Retrying through residential.
20261026T14:29:20.551Z [scrapely.actor] INFO  City United States is location 1.
20261026T14:29:22.984Z [scrapely.actor] INFO  Saved 5 jobs. 5 included a description.
20261026T14:29:23.434Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=false
```

**Reviews.** The reviews run saved 5 reviews in 4.5 seconds. Reviewers are employees, so we show them as `[reviewer 1]` to `[reviewer 5]` and leave out their job title, city and tenure, which together with a date can point to one person:

| Reviewer      | Date       | Overall | Work-life balance | Compensation | CEO        | Headline                                        |
| ------------- | ---------- | ------- | ----------------- | ------------ | ---------- | ----------------------------------------------- |
| \[reviewer 1] | 2026-10-24 | 4       | 4                 | 4            | —          | Benefits and culture changing for the worse     |
| \[reviewer 2] | 2026-10-24 | 5       | not rated         | not rated    | —          | Good pay overshadowed by layoffs                |
| \[reviewer 3] | 2026-10-23 | 3       | 2                 | 4            | Disapprove | Good pay, but local leadership is lacking       |
| \[reviewer 4] | 2026-10-23 | 5       | 5                 | 5            | Approve    | Great place to work                             |
| \[reviewer 5] | 2026-10-23 | 4       | 5                 | 5            | No opinion | High-impact role with a challenging environment |

With `includeCompanyStats` on, every row also carried the company summary: 69,801 reviews in total (66,265 in English, then 1,008 in Portuguese and 896 in French), an overall rating of 4.0, diversity and inclusion 4.1, work-life balance and compensation 3.9, culture and career 3.8, senior management 3.4, and 75% who would recommend Microsoft to a friend. Note the gap: two of the five newest reviews mention layoffs while the all-time average sits at 4.0. Sorting by date and scheduling the run is how you see that kind of shift early.

## What it costs

Both Actors charge per row saved, with platform usage (compute, proxy and browser) included. Prices checked on the Store pages on 26 October 2026:

- **Jobs:** $0.000039 per job ($0.039 per 1,000).
- **Reviews:** $0.00302 per review ($3.02 per 1,000).

**Our runs:** 5 jobs × $0.000039 = $0.000195, and 5 reviews × $0.00302 = $0.0151, at list price. Our account was billed $0.000156 and $0.01208 after its plan's Store discount. The residential retry in the jobs log cost nothing extra.

**At scale:** a daily check of 1,000 new jobs costs $0.039; the newest 1,000 reviews of each of 10 competitors cost 10 × $3.02 = $30.20 once, then only the new reviews on later runs with `newerThan`.

## What to watch out for

- **Blocks.** Glassdoor sits behind bot protection. The Jobs Scraper switches from datacenter to residential addresses by itself when it's refused, as our log shows, and both Actors run on Scrape.ly's proxies, so you never manage IPs.
- **"Not rated" is 0, not 1.** In our run, `[reviewer 2]` skipped the work-life balance and compensation questions and those sub-ratings came back as `0`; CEO approval and outlook come back `null` when skipped. Exclude both before you average, as the Python script does.
- **Date sort isn't strict.** With `sortBy: "date_desc"`, our five jobs were 3, 4, 24, 2 and 25 days old. The order is Glassdoor's; sort by `ageInDays` yourself if order matters.
- **Search caps.** One job search tops out around 900 jobs (about 30 pages). Split big searches by city or filters.
- **Empty descriptions and pay.** Glassdoor sometimes withholds a description or publishes no pay range; the row is still saved with `description` empty or `pay: null`.
- **Language.** Reviews are read in one language per run, following the country site. Use `includeAllReviews` for a global company.
- **Personal data.** Reviews are written by employees. Keep only the fields you need, and don't publish job title, city and date together.

## Is it legal to scrape Glassdoor?

Both Actors read only what Glassdoor shows without a login: public job search results and public company reviews. Glassdoor's terms of use apply to how you access the site, and job ads and reviews are copyrighted text, so read the terms and avoid republishing full descriptions or review text. Reviews are also personal data under the GDPR and similar laws even without names, because role, location and date can identify an employee; collect what you need, store it securely and honor deletion requests. Recruiter names in job descriptions deserve the same care. This is not legal advice; ask a lawyer before building a commercial product on Glassdoor data.

## Why Scrape.ly for Glassdoor data

- **No browser fight.** Glassdoor's pages are guarded by bot checks, and DIY guides rely on generated CSS class names that change. The Actors read Glassdoor's own data, retry through residential addresses on their own, and return stable field names.
- **Jobs and reviews in one place.** Two Actors, the same token, the same export formats, and a company's employer ID links its jobs to its reviews.
- **Pennies per run.** $0.039 per 1,000 jobs and $3.02 per 1,000 reviews, platform usage included, with a maximum charge per run.
- **Agent-ready.** The same Actors run from Claude, Cursor or ChatGPT through the hosted MCP server.

## FAQ

### Can you scrape Glassdoor without logging in?

Yes. Both Actors read public job search results and public company reviews, with no Glassdoor account and no cookies.

### How do I get reviews for several companies at once?

Paste several company URLs or employer IDs into `startUrls`. `maxReviews` applies to each company, and up to four companies are read at the same time.

### Can I scrape only new Glassdoor reviews?

Yes. Sort by `DATE` and set `newerThan` to the date of your last run, then schedule it. For jobs, pass the IDs you already stored in `excludeJobIds`.

### Does Glassdoor show salaries in job listings?

Often. In our run all five jobs had a pay range, four provided by the employer and one estimated by Glassdoor. The `pay.source` field tells you which.

### Can I scrape Glassdoor with Python?

Yes. Install `scrapely-client-python`, call `openrole/glassdoor-jobs-scraper` or `openrole/glassdoor-reviews-scraper`, and iterate over the dataset, as in the script above. The scraping runs in the cloud.

### How does Glassdoor compare with Indeed or LinkedIn job data?

Glassdoor adds company ratings and employee reviews to each job. For volume across boards, combine it with the [Indeed scrapers](https://scrape.ly/scrapers/indeed.md) and LinkedIn Jobs; our [job scraping](https://scrape.ly/blog/job-scraping.md) guide compares them on one search.

Scrape.ly Store Glassdoor Jobs Scraper Job title and location in, job rows out: pay range, company rating, Easy Apply and the full description. $0.039 per 1,000 jobs.

[Try it free](https://scrape.ly/store/openrole/glassdoor-jobs-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Openrole](https://scrape.ly/blog/author/openrole.md) Actor publisher on the Scrape.ly Store

Every open role, wherever it is posted: job boards, company ATS pages and freelance markets in dozens of countries. For recruiters, labour-market analysts and job aggregators. A Scrapely studio.

- [Website](https://scrape.ly/users/openrole.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head pulls a company card out of an office tower with the blue LinkedIn logo on its sign and drops it into a crate](https://scrape.ly/media/scrape-linkedin.png?w=750)](https://scrape.ly/blog/scrape-linkedin.md)
  ### [How to Scrape LinkedIn: Companies, Jobs, Posts and Ads (2026)](https://scrape.ly/blog/scrape-linkedin.md)
  [Scrape LinkedIn company pages, job ads, posts and ads with ready-made scrapers that need no LinkedIn login. A real run on Google, Notion and Stripe with its exact cost, code for the API and AI agents, and what hiQ v. LinkedIn means for you.](https://scrape.ly/blog/scrape-linkedin.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a review card with five gold stars out of a Google Maps pin standing on a folded map](https://scrape.ly/media/scrape-google-maps-reviews.png?w=750)](https://scrape.ly/blog/scrape-google-maps-reviews.md)
  ### [How to Scrape Google Maps Reviews: Text, Stars, Dates and Owner Replies](https://scrape.ly/blog/scrape-google-maps-reviews.md)
  [Scrape Google Maps reviews for any place URL or place ID: review text, stars, dates, owner replies and visit details. A real run on the Eiffel Tower, its exact cost, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-google-maps-reviews.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a photo and price off an auction board topped with the eBay logo and drops it into a crate](https://scrape.ly/media/how-to-scrape-ebay.png?w=750)](https://scrape.ly/blog/how-to-scrape-ebay.md)
  ### [How to Scrape eBay: Listings, Prices, Conditions and Sold Counts](https://scrape.ly/blog/how-to-scrape-ebay.md)
  [Scrape eBay listings by keyword or URL and get title, price, condition, seller, sold count, shipping and identifiers as rows, with eBay's bot check handled for you. A real run, its cost, and code for curl, Python and Node.js.](https://scrape.ly/blog/how-to-scrape-ebay.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
