Glassdoor Jobs, Reviews & Salary Scraper avatar

Glassdoor Jobs, Reviews & Salary Scraper

Pricing

from $6.00 / 1,000 glassdoor result scrapeds

Go to Apify Store
Glassdoor Jobs, Reviews & Salary Scraper

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

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, company and salary rows share one flat shape, so a single export covers them all.
  • Salary numbers, not just text. Job rows turn $125K–$183K/yr into salaryMin, salaryMax, salaryCurrency and salaryPeriod.
  • 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. maxJobs and maxReviewsPerCompany split the overall maxResults budget between jobs and reviews.
  • Job filters. daysOld, jobType, remoteOnly and includeNoSalaryJobs narrow 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"
}
FieldTypeWhat it controls
searchQuery, location, countrystringJob keyword, city or region, and two-letter country. Defaults software engineer, New York, NY, US.
startUrlsarrayGlassdoor company, review, salary or overview URLs as { "url": "..." }.
companyNamesarrayCompany names such as Stripe when you have no URLs.
includeJobs, includeReviews, includeCompanies, includeSalariesbooleanWhich record types to collect. Salaries default to false.
maxResultsintegerBillable rows across all types. Default 25.
maxJobs, maxReviewsPerCompany, maxPagesPerTargetintegerBudget for jobs, reviews per company and review pages per URL.
daysOld, jobType, remoteOnly, includeNoSalaryJobsmixedJob recency, type, remote filter and whether to keep jobs without pay.
sortReviewsBy, responseFormatstringReview order (default, recent, popular) and review detail level (detailed, concise).
deduplicate, maxConcurrency, proxyConfigurationmixedDuplicate 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.

recordTypeOne row representsKey fields
jobOne job listingtitle, companyName, companyRating, location, remoteType, easyApply, salaryText, salaryMin, salaryMax, description, jobUrl, applyUrl
reviewOne employee reviewrating, reviewTitle, pros, cons, reviewDate, jobTitle, recommendToFriend, employerResponse
companyOne company profilecompanyRating, companyReviewCount, website, industry, headquarters, size, revenue, ceoName, about
salaryOne pay rowsalaryTitle, salaryLocation, salaryMedian, salaryBasePay, salaryAdditionalPay, salarySampleCount
diagnosticA free note about a targetdiagnosticStatus, 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. diagnostic rows 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 ApifyClient
client = 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 situationHelpful actionExpected outcome
Salary benchmarkingSet includeNoSalaryJobs to falseOnly jobs with published pay
Reviews and company factsTurn includeJobs off and provide startUrls or companyNamesThe full maxResults budget goes to reviews and profiles
A large employerSet maxReviewsPerCompanyBalanced coverage across several companies
Fresh openings onlySet daysOld to 1 or 7Recently posted roles
Remote hiring researchTurn on remoteOnlyRemote 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.