Glassdoor Jobs, Reviews & Salary Scraper
Pricing
from $6.00 / 1,000 glassdoor result scrapeds
Glassdoor Jobs, Reviews & Salary Scraper
Scrape public Glassdoor jobs, reviews, company profiles and salary pages for recruiting, employer research, salary benchmarking and HR analytics. Each record is one job, review, company or salary, with source URL.
Pricing
from $6.00 / 1,000 glassdoor result scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
What is Glassdoor Jobs, Reviews & Salary Scraper?
Glassdoor Jobs, Reviews & Salary Scraper extracts public Glassdoor job listings, employee reviews, company profiles and salary pages into one dataset with a recordType on every row. Job rows carry the title, company, company rating, location, remote type, salary text with numeric min and max, description and job URL; review, company and salary rows carry ratings, pros and cons, firmographics and pay figures when Glassdoor shows them. Recruiters, HR analysts, compensation teams and AI agents use it for hiring research, employer reputation analysis and salary benchmarking.
Why teams use it
- Four record types, one schema.
job,review,companyandsalaryrows share one flat shape, so a single export covers them all. - Salary numbers, not just text. Job rows turn
$125K–$183K/yrintosalaryMin,salaryMax,salaryCurrencyandsalaryPeriod. - Several ways in. Start from a job keyword and location, from company names, or from Glassdoor company, review or salary URLs.
- Budget per data type.
maxJobsandmaxReviewsPerCompanysplit the overallmaxResultsbudget between jobs and reviews. - Job filters.
daysOld,jobType,remoteOnlyandincludeNoSalaryJobsnarrow the job feed.
Best fit for this Actor
- Designed for public Glassdoor data where a recruiter or analyst wants jobs, reviews, company facts and pay in one run.
- Best fit for employer-brand research, competitive hiring intelligence and salary benchmarking for a role and city.
- When employee reviews are the main goal, use Glassdoor Reviews Scraper for a review-focused workflow.
- To compare the same role across several boards, start with Jobs Scraper — Indeed, LinkedIn & Glassdoor and keep this Actor for Glassdoor-specific company and salary detail.
Example workflow: salary benchmark for a new role
A talent-acquisition lead is opening a software engineering manager role in New York. She starts with searchQuery: "software engineering manager", location: "New York, NY", includeJobs on, includeNoSalaryJobs off and maxJobs at 50. The dataset returns comparable listings with salaryMin, salaryMax and companyRating. She computes the median range, compares it with her planned band, then runs a second task with includeJobs off and companyNames set to her top three competitors to read their reviews and company profiles. She exports both datasets into the hiring brief for her leadership team.
Input
Job search example:
{"searchQuery": "software engineer","location": "New York, NY","country": "US","includeJobs": true,"includeReviews": false,"includeCompanies": false,"includeSalaries": false,"maxResults": 25,"maxJobs": 25,"daysOld": 14,"jobType": "all","remoteOnly": false,"includeNoSalaryJobs": true}
Company reviews and profile example:
{"startUrls": [{ "url": "https://www.glassdoor.com/Reviews/Apify-Reviews-E3100324.htm" }],"companyNames": [],"includeJobs": false,"includeReviews": true,"includeCompanies": true,"maxResults": 50,"maxReviewsPerCompany": 50,"sortReviewsBy": "recent"}
| Field | Type | What it controls |
|---|---|---|
searchQuery, location, country | string | Job keyword, city or region, and two-letter country. Defaults software engineer, New York, NY, US. |
startUrls | array | Glassdoor company, review, salary or overview URLs as { "url": "..." }. |
companyNames | array | Company names such as Stripe when you have no URLs. |
includeJobs, includeReviews, includeCompanies, includeSalaries | boolean | Which record types to collect. Salaries default to false. |
maxResults | integer | Billable rows across all types. Default 25. |
maxJobs, maxReviewsPerCompany, maxPagesPerTarget | integer | Budget for jobs, reviews per company and review pages per URL. |
daysOld, jobType, remoteOnly, includeNoSalaryJobs | mixed | Job recency, type, remote filter and whether to keep jobs without pay. |
sortReviewsBy, responseFormat | string | Review order (default, recent, popular) and review detail level (detailed, concise). |
deduplicate, maxConcurrency, proxyConfiguration | mixed | Duplicate removal, browser pages at once and proxy settings (Residential by default). |
Output
Every row has a recordType. Fields that belong to other record types stay null.
recordType | One row represents | Key fields |
|---|---|---|
job | One job listing | title, companyName, companyRating, location, remoteType, easyApply, salaryText, salaryMin, salaryMax, description, jobUrl, applyUrl |
review | One employee review | rating, reviewTitle, pros, cons, reviewDate, jobTitle, recommendToFriend, employerResponse |
company | One company profile | companyRating, companyReviewCount, website, industry, headquarters, size, revenue, ceoName, about |
salary | One pay row | salaryTitle, salaryLocation, salaryMedian, salaryBasePay, salaryAdditionalPay, salarySampleCount |
diagnostic | A free note about a target | diagnosticStatus, diagnosticMessage |
All rows also carry source, sourceUrl, glassdoorUrl, provenance, searchQuery, requestedLocation, requestedCountry and scrapedAt. A job row looks like this (null fields for other record types trimmed for reading):
{"recordType": "job","source": "glassdoor","sourceUrl": "https://www.glassdoor.com/Job/jobs.htm?sc.keyword=Google&locT=N&locKeyword=New+York%2C+NY&jobType=all&fromAge=14","glassdoorUrl": "https://www.glassdoor.com/job-listing/policy-strategist-kids-and-families-google-JV_IC1132348_KO0,35_KE36,42.htm?jl=1010253819537","scrapedAt": "2026-10-01T12:53:13.678Z","companyName": "Google","companyRating": 4.4,"companyReviewCount": null,"industry": null,"jobId": "1010253819537","title": "Policy Strategist, Kids and Families","location": "New York, NY","remoteType": "On-site or hybrid","employmentType": null,"easyApply": false,"salaryText": "$164K–$239K/yr","salaryMin": 164000,"salaryMax": 239000,"salaryCurrency": "USD","salaryPeriod": "year","datePosted": null,"description": "Advanced degree in an academic field focused on pediatric or adolescent development, child protection policy, or the psychological impact of digital products… Skills: Childhood development, Product management, Risk management, Communication skills","jobUrl": "https://www.glassdoor.com/job-listing/policy-strategist-kids-and-families-google-JV_IC1132348_KO0,35_KE36,42.htm?jl=1010253819537","applyUrl": "https://www.glassdoor.com/job-listing/policy-strategist-kids-and-families-google-JV_IC1132348_KO0,35_KE36,42.htm?jl=1010253819537","searchQuery": "Google","requestedLocation": "New York, NY","requestedCountry": "US","reviewId": null,"rating": null,"pros": null,"cons": null,"salaryId": null,"salaryMedian": null}
Each run writes OUTPUT and RUN_SUMMARY to the default key-value store with the outcome (COMPLETE, PARTIAL, VALID_EMPTY and others) and counts per record type.
Pricing
This Actor uses Pay per event plus Apify platform usage. The events are:
- Actor Start, once per run.
- Glassdoor result scraped, once for each job, review, company or salary row saved to the dataset.
diagnosticrows are free.
Worked example: a job search with maxResults at 25 that saves 25 jobs costs one Actor Start event plus 25 result events, plus the browser and residential proxy usage of the run. Review and company runs use more browser time than job searches. Check the live Pricing tab on this page for current event prices.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~glassdoor-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery": "data analyst", "location": "London", "country": "GB", "includeJobs": true, "includeReviews": false, "includeCompanies": false, "maxResults": 25}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/glassdoor-scraper").call(run_input={"searchQuery": "product manager", "location": "Austin, TX", "includeReviews": False,"includeCompanies": False, "includeNoSalaryJobs": False, "maxResults": 25})for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row["recordType"] == "job":print(row["companyName"], row["title"], row["salaryMin"], row["salaryMax"])
Use it with AI agents (MCP)
Connect the Actor to Claude, ChatGPT, Cursor or another MCP client through Apify MCP, then ask:
Find 25 data analyst jobs in London on Glassdoor that list a salary. Return company, title, salary range and company rating, and give me the median salary range.
The agent reads rows with get-dataset-items, groups them by recordType, and can cite jobUrl and scrapedAt as provenance. OUTPUT.outcome reports how the run ended. Cost scales with saved rows, so maxResults keeps the scope bounded.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Salary benchmarking | Set includeNoSalaryJobs to false | Only jobs with published pay |
| Reviews and company facts | Turn includeJobs off and provide startUrls or companyNames | The full maxResults budget goes to reviews and profiles |
| A large employer | Set maxReviewsPerCompany | Balanced coverage across several companies |
| Fresh openings only | Set daysOld to 1 or 7 | Recently posted roles |
| Remote hiring research | Turn on remoteOnly | Remote listings only |
Builder's note
I built this for people who ask a whole employer question at once: what a company is hiring for, what it pays and what its employees say. I designed one flat schema with a recordType discriminator so jobs, reviews, company profiles and salary rows can land in one spreadsheet or one agent context. I found budget control matters most on mixed runs, which is why jobs and reviews each have their own cap inside maxResults.
FAQ
Do I need a Glassdoor account?
No. The Actor reads public Glassdoor pages and uses no login.
Why does my run return only jobs?
With all types switched on, jobs can fill the maxResults budget first. Turn includeJobs off, or raise maxResults above maxJobs, to leave room for reviews, companies and salaries.
Are salaries verified pay data?
Salary fields reflect what Glassdoor publishes on the listing or salary page.
Responsible use
This Actor collects public Glassdoor pages and URLs you supply. Reviews can include job titles and other personal details, so use the data with a lawful basis, respect Glassdoor's terms and privacy laws such as the GDPR and CCPA, and keep it to legitimate research and hiring purposes. Glassdoor is a trademark of its owner, and this independent Actor is not affiliated with or endorsed by Glassdoor. For questions, open a ticket in the Issues tab.