Glassdoor Scraper
Pricing
from $3.49 / 1,000 results
Glassdoor Scraper
Scrape Glassdoor reviews, interviews, salaries, jobs, company overviews, office locations, benefits and culture ratings. No login or cookies. Search jobs with filters, monitor new reviews and score jobs against your skills. Export JSON, CSV, Excel.
Pricing
from $3.49 / 1,000 results
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
Glassdoor Scraper
Glassdoor Scraper extracts company data from Glassdoor: employee reviews, interview reports, salaries, jobs, company overviews, office locations, benefit reviews and culture ratings. Paste company URLs and choose a data type, or run a filtered job search. You don't need a Glassdoor account, cookies or an API key.
| One actor for all eight Glassdoor data types, with one flat row per item. Mix any companies in one run, monitor new reviews on a schedule, and score jobs against your own skills. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Apify Actor: parsebird/glassdoor-scraper. Scrapes Glassdoor company data and job searches without login or cookies. Call via ApifyClient: client.actor("parsebird/glassdoor-scraper").call(run_input={"startUrls": [{"url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm"}], "command": "reviews", "sortReviewsBy": "DATE", "maxItems": 100}). Give startUrls, or searchJobsByKeyword with searchKeyword and/or searchLocation. Inputs: startUrls (array of {url}, any Glassdoor company tab), command ("reviews" | "interviews" | "locations" | "salaries" | "jobs" | "overview" | "benefits" | "culture"; omitted = follow each URL's tab), includes (string[] keyword filter), maxItems (integer per URL and per job search, 0 = all, default 100), sortReviewsBy ("RELEVANCE" | "DATE" | "DATE_ASC" | "RATING" | "RATING_ASC"), reviewsStartDate, interviewsStartDate, benefitsStartDate (YYYY-MM-DD), monitoringModeForReviews (only reviews newer than the previous run), includeAllReviews (every language), includeCompanyReviewStats, includeCompanyInterviewStats, includeCompanyBenefitsStats, includeAllSalaries (every country), saveOnlyUniqueItems (default true), maxConcurrency, minConcurrency, maxRequestRetries, proxy. Job search: searchJobsByKeyword (boolean), searchKeyword, searchLocation, sortBy ("date_desc" | "date_asc"), maxDaysOld ("1" | "3" | "7" | "14" | "30"), remoteWorkType ("0" | "1" = remote only), applicationType ("0" | "1" = Easy Apply only), jobType ("CF3CP" full-time | "75GKK" part-time | "NJXCK" contract | "4HKF7" temporary | "7SBAT" temp-to-hire | "internship" | "apprenticeship" | "entrylevel"), minSalary, maxSalary (strings), minRating ("1.0"-"4.0"), employerSize ("1"-"5"), radius ("0" | "5" | "10" | "15" | "25" | "50" | "100"), industryNid, sgocId (Glassdoor IDs as strings), deepSearch (boolean), expandKeywords (string[]), resumeKeywords (array of {keyword}; adds description, matchScore, matchedSkills, missingSkills). Output: one flat row per item, with fields that depend on command; see the README. Pricing: pay per result, plus a small run start fee. Full API spec: https://apify.com/parsebird/glassdoor-scraper/api. Get your token: https://console.apify.com/settings/integrations.
What is Glassdoor Scraper?
Glassdoor Scraper turns Glassdoor company pages and job searches into a dataset. Paste a company address from any tab, choose what you want, and click Start. To try it, keep the prefilled Google address, which saves 20 reviews.
It works as a Glassdoor API alternative, since Glassdoor has no open public API for this data. Download the results as JSON, CSV or Excel, or read them through the Apify API.
What can Glassdoor Scraper do?
- โญ Scrape reviews. Get pros, cons, advice and every sub-rating. Sort them, filter by keyword or date, and read every language.
- ๐ Monitor new reviews. Schedule a run that saves only reviews newer than the previous run.
- ๐ฌ Scrape interviews. Get difficulty, experience, outcome, the process description and interview questions.
- ๐ฐ Scrape salaries. Get pay percentiles by job title for one country or all of them, or the detail for one job title.
- ๐ผ Scrape jobs. List a company's open jobs, or search all of Glassdoor with filters for date, pay, job type, remote work, rating, company size, radius, industry and job function.
- ๐ฏ Score jobs against your skills. Add resume keywords to get a match score and the full description for each job.
- ๐ข Get company data. Read overviews, office locations, benefit reviews and culture ratings by demographic group.
- ๐ Add company stats. Attach review, interview or benefit statistics to each row.
Because it runs on Apify, you also get:
- Scheduling to refresh your data daily, weekly or at any interval
- API access with Python and JavaScript clients
- Integrations with Make, Zapier, Google Sheets, Slack and webhooks
- Export to JSON, CSV, Excel, XML and HTML
What data can you extract from Glassdoor?
Which fields you get depends on the data type. These are the main ones.
| Data type | Main fields |
|---|---|
reviews | reviewId, reviewDateTime, summary, pros, cons, advice, ratingOverall and 9 other ratings, jobTitle, location, employmentStatus, isCurrentJob, lengthOfEmployment, countHelpful, employer, employerResponses, and companyReviewStats when turned on |
interviews | id, reviewDateTime, jobTitle, location, difficulty, experience, outcome, source, durationDays, processDescription, negotiationDescription, userQuestions, and companyInterviewStats when turned on |
salaries | jobTitle, salaryCount, payPeriod, currency, employer, country, and mean and percentiles for base, total, bonus, stock, commission, profit sharing and tips |
jobs | listingId, jobTitleText, employerNameFromSearch, locationName, ageInDays, payCurrency, payPeriod, payPeriodAdjustedPay, rating, easyApply, sponsored, remoteWorkTypes, jobLink, seoJobLink, and description, matchScore, matchedSkills, missingSkills with resume keywords |
overview | id, shortName, headquarters, size, revenue, type, yearFounded, website, primaryIndustry, ratings, counts, overview, competitors, awards, bestPlacesToWork, squareLogoUrl |
locations | id, addressLine1, cityName, administrativeAreaName1, countryName, postalCode, latitude, longitude, metroId |
benefits | id, rating, createDate, currentJob, userEnteredJobTitle, city, state, benefitComments, and companyBenefitStats when turned on |
culture | category, such as gender or ethnicity, and categoryRatings with review counts and every rating for each group |
Fields a reviewer left out, or that Glassdoor doesn't list, are null or empty.
How to scrape Glassdoor step by step
- Open Glassdoor Scraper and sign in to Apify.
- Add Company URLs, such as
https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm. Or turn on Search jobs by keyword and enter a keyword and location. - Choose a Data type.
- Set Max items, the most rows to save for each URL and for the job search.
- Open the other sections for dates, sorting, statistics and job filters.
- Click Start and wait for the run to finish.
- Download your Glassdoor data as JSON, CSV or Excel from the Output tab.
Which Glassdoor URLs can you use?
| Tab | Address format |
|---|---|
| Reviews | /Reviews/{Company}-Reviews-E{id}.htm |
| Jobs | /Jobs/{Company}-Jobs-E{id}.htm |
| Salaries | /Salary/{Company}-Salaries-E{id}.htm |
| Interviews | /Interview/{Company}-Interview-Questions-E{id}.htm |
| Overview | /Overview/Working-at-{Company}-EI_IE{id}.htm |
| Benefits | /Benefits/{Company}-Benefits-EI_IE{id}.htm |
Only the employer ID matters, so any tab works with any Data type. A salary address that names a job title returns one detailed row for that title.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| startUrls | array | โ | Glassdoor company addresses from any tab |
| command | string | Follows each URL's tab | reviews, interviews, locations, salaries, jobs, overview, benefits or culture |
| includes | string[] | โ | Keep only rows containing at least one of these words |
| maxItems | integer | 100 | Most rows per URL and per job search. 0 means everything available. |
| sortReviewsBy | string | RELEVANCE | RELEVANCE, DATE, DATE_ASC, RATING or RATING_ASC |
| reviewsStartDate | string | โ | Skip older reviews. Format: 2026-01-31. |
| monitoringModeForReviews | boolean | false | Save only reviews newer than the previous run |
| includeAllReviews | boolean | false | Read reviews in every language |
| includeCompanyReviewStats | boolean | false | Add companyReviewStats to each review |
| interviewsStartDate | string | โ | Skip older interviews |
| includeCompanyInterviewStats | boolean | false | Add companyInterviewStats to each interview |
| benefitsStartDate | string | โ | Skip older benefit reviews |
| includeCompanyBenefitsStats | boolean | false | Add companyBenefitStats to each benefit review |
| includeAllSalaries | boolean | false | Read salaries in every country Glassdoor lists |
| saveOnlyUniqueItems | boolean | true | Skip rows already saved in this run |
| maxConcurrency, minConcurrency | integer | 3, 1 | Requests at once. Glassdoor rate-limits fast clients. |
| maxRequestRetries | integer | 4 | Retries for a failed request |
| proxy | object | โ | Leave empty. Residential proxies are built in at no extra cost. |
Job search parameters
| Parameter | Type | Description |
|---|---|---|
| searchJobsByKeyword | boolean | Turn on job search |
| searchKeyword, searchLocation | string | Job title or skill, and a city, state or country |
| sortBy | string | date_desc or date_asc. Empty means most relevant. |
| maxDaysOld | string | 1, 3, 7, 14 or 30 |
| remoteWorkType | string | 1 for remote only |
| applicationType | string | 1 for Easy Apply only |
| jobType | string | CF3CP full-time, 75GKK part-time, NJXCK contract, 4HKF7 temporary, 7SBAT temp-to-hire, internship, apprenticeship or entrylevel |
| minSalary, maxSalary | string | Yearly amounts |
| minRating | string | 1.0, 2.0, 3.0 or 4.0 |
| employerSize | string | Glassdoor's bands from 1 (tiny) to 5 (huge) |
| radius | string | Miles from a city: 0, 5, 10, 15, 25, 50 or 100 |
| industryNid | string | Industry ID, such as 10013 for Information Technology or 10012 for Healthcare |
| sgocId | string | Job function ID, such as 1011 for Information Technology or 1009 for Healthcare |
| deepSearch | boolean | Also search the most common job titles in the results, and merge without duplicates |
| expandKeywords | string[] | Extra job titles to search when Deep search is on |
| resumeKeywords | array | Skills as {"keyword": "ICU"}. Adds a match score to each job without changing which jobs come back. |
These filters also apply to a company's jobs, when the data type is jobs.
Every review of a company, with statistics, newest first:
{"startUrls": [{ "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm" }],"command": "reviews","includeAllReviews": true,"includeCompanyReviewStats": true,"sortReviewsBy": "DATE","maxItems": 1000}
A wide job search, scored against your skills:
{"searchJobsByKeyword": true,"searchKeyword": "registered nurse","searchLocation": "Chicago, IL","jobType": "CF3CP","minSalary": "70000","deepSearch": true,"expandKeywords": ["nurse practitioner"],"resumeKeywords": [{ "keyword": "ICU" }, { "keyword": "pediatrics" }],"saveOnlyUniqueItems": true,"maxItems": 500}
Output example
A review:
{"__typename": "EmployerReviewRG","reviewId": 106216861,"reviewDateTime": "2026-11-04T20:27:36.683","summary": "Good benefits and nice campus with no complaints","pros": "good benefits and compensation, nice campus","cons": "i dont really have anything to complain","advice": null,"ratingOverall": 5,"ratingWorkLifeBalance": 5,"ratingCompensationAndBenefits": 5,"ratingCareerOpportunities": 5,"ratingCultureAndValues": 5,"ratingDiversityAndInclusion": 5,"ratingSeniorLeadership": 5,"isCurrentJob": false,"employmentStatus": "REGULAR","lengthOfEmployment": 0,"location": { "id": 1147442, "name": "Sunnyvale, CA", "type": "CITY" },"employer": {"id": 9079,"shortName": "Google","largeLogoUrl": "https://media.glassdoor.com/sqll/9079/google-squarelogo-1441130773284.png","regularLogoUrl": "https://media.glassdoor.com/sql/9079/google-squarelogo-1441130773284.png"},"languageId": "eng","countHelpful": 0,"countNotHelpful": 0}
A salary:
{"__typename": "AggregatedSalaryEstimatesResult","jobTitle": { "id": 4279, "gocId": 100063, "text": "Software Engineer" },"employer": { "id": 9079, "name": "Google Inc.", "primaryIndustryId": 200063 },"country": { "id": 1, "name": "United States" },"currency": { "code": "USD", "symbol": "$" },"payPeriod": "ANNUAL","salaryCount": 51625,"confidence": "CONFIDENT","basePayStatistics": {"mean": 176776.22,"percentiles": [{ "ident": "P10", "value": 144297.03 },{ "ident": "P50", "value": 176776.22 },{ "ident": "P90", "value": 216566.01 }]}}
A job from a search with resume keywords:
{"listingId": 1010011509199,"__typename": "JobViewHeader","jobTitleText": "Registered Nurse - TEAM LEADER-WOMEN/CHILDREN L&D Experience Required","employerNameFromSearch": "Methodist Hospitals","employer": { "id": 20261 },"locationName": "Gary, IN","ageInDays": 246,"rating": 3.4,"easyApply": false,"sponsored": false,"jobTypeKeys": ["search-jobs.job-type-options.fulltime"],"description": "<div>Overview: ...</div>","matchScore": 0,"matchedSkills": [],"missingSkills": ["ICU", "pediatrics"]}
These examples are shortened, and other data types have the fields listed above.
How to use the Glassdoor API in Python and JavaScript
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("parsebird/glassdoor-scraper").call(run_input={"startUrls": [{"url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm"}],"command": "reviews","sortReviewsBy": "DATE","maxItems": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["reviewDateTime"], item["ratingOverall"], item["summary"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('parsebird/glassdoor-scraper').call({searchJobsByKeyword: true,searchKeyword: 'registered nurse',searchLocation: 'Chicago, IL',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((job) => console.log(job.jobTitleText, job.employerNameFromSearch, job.locationName));
Get your token in Apify Console. See every option on the API tab.
Use cases
- Employer brand monitoring: schedule a run to catch new reviews of your company, or a competitor's.
- Salary benchmarking: compare pay percentiles by job title, company and country.
- Interview preparation: collect a company's interview questions and processes by job title.
- Recruiting and sales leads: see which companies are hiring for a role, with pay ranges and locations.
- Job hunting: rank search results by how well they match your skills.
- Workplace research: analyse ratings by demographic group, or the themes in pros and cons.
How does Glassdoor Scraper work?
- It reads the employer ID from each URL, and your job search if you turned it on.
- It opens a Glassdoor session through residential proxies and paces its requests.
- It moves through the data page by page until it reaches Max items, your date cutoff or the end.
- It skips rows that are duplicates or don't match your keywords, and saves the rest as it goes, so a stopped run keeps its results.
How much does it cost to scrape Glassdoor?
Glassdoor Scraper uses pay-per-event pricing. Compute and proxy costs are included in the event price.
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
apify-actor-start, per run | $0.005 | $0.005 | $0.005 | $0.005 |
result-scraped, per 1,000 | $4.49 | $3.99 | $3.79 | $3.49 |
A start event fires once per run for each GB of run memory, and the default memory stays within one. A result event fires for each row saved, whatever the data type. So 1,000 reviews cost about $4.50 on the Free tier and $3.50 on Gold.
Duplicates and rows dropped by your keyword filter cost nothing. Each overview is one row, each culture category such as gender is one row, and a salary address that names a job title is one row. To cap your spending, set a maximum cost per run in the run options. The run stops at that limit and keeps what it saved.
Is it legal to scrape Glassdoor?
Glassdoor Scraper only collects data that Glassdoor shows publicly, without logging in. Web scraping of public data is generally legal, but what you may do with the data depends on your purpose and your country. You can read more in Is web scraping legal?
Reviews are anonymous, but their text, job titles and locations can still be personal data, so laws such as the GDPR and CCPA may apply if you store or use them. Review text may be protected by copyright. Check Glassdoor's terms too, and ask a lawyer if you are unsure. This section is not legal advice.
Other scrapers you may like
- ZipRecruiter Jobs Scraper: job listings from ZipRecruiter
- Totaljobs Scraper: UK job listings from Totaljobs
- FlexJobs Jobs Scraper: remote and flexible jobs from FlexJobs
- TrustRadius Review Scraper: software reviews from TrustRadius
- Owler Company Scraper: company profiles from Owler
- hh.ru Jobs Scraper: job listings from hh.ru
FAQ
Do I need a Glassdoor account or cookies? No. Glassdoor Scraper needs no login, no cookies and no setup.
Is there a limit on how many reviews I can get?
The scraper doesn't stop at 200 reviews. In our tests it read 3,000 Google reviews in one run, and Glassdoor returned pages far beyond that. Set Max items to 0 for everything.
What does "Include reviews in every language" change?
With it off, you get Glassdoor's default view, which was 51,198 of Google's 74,074 reviews in our test. With it on, the scraper reads each language in turn, so DATE order applies within each language rather than across the whole run.
Can I sort reviews by most helpful?
No. Glassdoor's data offers relevance, date and rating orders, which is what the scraper provides. You can sort your dataset by countHelpful afterwards.
How does monitoring work? With Save only new reviews on, the scraper remembers the newest review it saw for each company and set of settings, in a key-value store in your account. The next run saves only newer reviews. If a run is stopped by your cost limit, the marker doesn't move, so nothing is skipped.
How many interviews can I get? Glassdoor stops each sort order at 10,000 interviews. For longer histories, the scraper also reads newest first and oldest first and removes repeats at no charge, so it can reach about 20,000 or more of a company's interviews, but maybe not all of them.
Why did one job search return only about 500 jobs? Glassdoor stops a single search at about 500 listings, some of them repeated. Turn on Deep search or add Extra keywords to reach more. Repeats are removed at no charge.
Why do I see jobs of another type? Glassdoor treats job type as a preference. In our tests, full-time returned 30 of 30 full-time jobs, while internship and temporary returned a mix.
How is matchScore calculated? It's the percentage of your resume keywords found in the job description as whole words, ignoring case. Fetching descriptions makes these runs slower. A 500-job run took about three minutes in our test.
Where do my rows go if I mix tabs without choosing a data type? The first type goes to the run's default dataset. Each other type gets its own dataset, and the log gives its ID. To keep everything in one place, choose a Data type.
Why is a salary address returning one row? It names a job title, so you get one detailed row with the estimates for that title, the filters used, and the countries available. Use the company's main salary address for a row per job title.
Which countries do salaries cover?
The United States by default, or the country in your URL, such as _IN2 for the United Kingdom. Turn on Include salaries in every country for all the countries Glassdoor lists.
Why did a company return no office locations?
Glassdoor doesn't list offices for every company. Google had none in our test. The run logs a warning and charges nothing. latitude and longitude are null when Glassdoor has no position.
Which benefit reviews do I get?
Those on Glassdoor's United States benefits page for the company, newest first. For Google that was 8,651 reviews, while the company's overall benefit count, in counts.benefitCount of its overview, is higher.
Why does Google show activeStatus as INACTIVE?
That's the value Glassdoor returns. It doesn't appear to mean a company has closed, so don't rely on it.
Can I schedule recurring runs? Yes. Use Apify Schedules to run daily, weekly or at any interval.
Something doesn't work. Where do I report it? Open a ticket on the Issues tab. Include your run link so we can look into it.