Skip to content

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.

Published
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
In this article
  1. What data you can get from Glassdoor
  2. How to scrape Glassdoor without code
  3. How to scrape Glassdoor reviews
  4. How to scrape Glassdoor with the API
  5. With an AI agent (MCP)
  6. A real run: data engineer jobs and Microsoft reviews
  7. What it costs
  8. What to watch out for
  9. Is it legal to scrape Glassdoor?
  10. Why Scrape.ly for Glassdoor data
  11. FAQ
  12. Can you scrape Glassdoor without logging in?
  13. How do I get reviews for several companies at once?
  14. Can I scrape only new Glassdoor reviews?
  15. Does Glassdoor show salaries in job listings?
  16. Can I scrape Glassdoor with Python?
  17. How does Glassdoor compare with Indeed or LinkedIn job data?

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 returns one row per job; the Glassdoor Reviews Scraper 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 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 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.

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 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 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 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:

Text
2026-10-26T14:29:14.778Z [Scrapely] Container started (setup 1.5 s)
2026-10-26T14:29:16.105Z [scrapely.actor] INFO  Searching data engineer in United States, limit 5, proxy DATACENTER
2026-10-26T14:29:19.142Z [scrapely.actor] INFO  Location lookup was blocked.
2026-10-26T14:29:19.142Z [scrapely.actor] WARN  Datacenter was blocked. Retrying through residential.
2026-10-26T14:29:20.551Z [scrapely.actor] INFO  City United States is location 1.
2026-10-26T14:29:22.984Z [scrapely.actor] INFO  Saved 5 jobs. 5 included a description.
2026-10-26T14: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.

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 and LinkedIn Jobs; our job scraping guide compares them on one search.

  • glassdoor
  • jobs
  • employee reviews
  • hr analytics
  • python
  • api

About the author

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.

//Keep reading\\

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.

No credit card. No setup calls.