Glassdoor Jobs & Employer Snapshot Scraper avatar

Glassdoor Jobs & Employer Snapshot Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Glassdoor Jobs & Employer Snapshot Scraper

Glassdoor Jobs & Employer Snapshot Scraper

๐Ÿ”Ž Glassdoor Jobs Scraper collects fresh job listings from Glassdoor โ€” titles, companies, locations, salaries, ratings, descriptions & links. โš™๏ธ Fast, reliable, export to CSV/JSON. ๐Ÿš€ Perfect for recruiters, HR analytics, labor market research & competitive intel.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

80

Total users

14

Monthly active users

2 days ago

Last modified

Share

Glassdoor Jobs Scraper โ€” Salaries, Ratings and CEO Data

Glassdoor Jobs & Employer Snapshot Scraper searches Glassdoor job listings and attaches the employer's full ratings breakdown, CEO name and approval rating, and an employer-vs-industry ratings benchmark to every row โ€” parsed from the same Employer Overview page the job search already loads, at no extra request cost. Every result ships as clean, structured JSON with fields like job_salary, company_ratings, company_ceo, and company_ratings_vs_industry_benchmark โ€” no HTML parsing required. Open the run form and start pulling jobs with employer intelligence attached.

What is Glassdoor Jobs & Employer Snapshot Scraper?

It's an Apify Actor that searches Glassdoor job listings by keyword, location, salary and a dozen other filters, then enriches every result with the posting employer's full ratings snapshot โ€” career opportunities, pay & benefits, culture, work-life balance, management, diversity & inclusion, a rating-count histogram, CEO detail, and an industry-benchmark comparison. No Glassdoor account or login is required โ€” it fetches the same publicly rendered search and Overview pages any visitor sees. It's built for recruiters, job seekers, market researchers, and data/AI engineers who need job listings and employer-quality signal in a single dataset.

What Glassdoor job and employer data is publicly available to scrape?

Glassdoor renders job search results and each employer's Overview "Snapshot" block for any visitor, logged in or not. Individual review text needs an account โ€” Glassdoor's review endpoint rejects anonymous requests.

Data CategoryPublicly AvailableRestricted
Job listings (title, location, description, posted date)Yesโ€”
Salary bands (p10/median/p90 estimate)YesExact per-employee figures โ€” not published
Employer ratings breakdownYesโ€”
Rating-count histogram (1โ˜…โ€“5โ˜… votes)Yesโ€”
CEO name, title, approval ratingYesโ€”
Employer-vs-industry benchmarkYesโ€”
Individual review text (pros/cons)NoAccount required โ€” anonymous access blocked

This Actor only returns publicly visible data โ€” what any visitor sees. Nothing behind a login wall.

What data can I extract with Glassdoor Jobs & Employer Snapshot Scraper?

Every dataset row covers two angles: the job listing itself, and a full snapshot of the employer that posted it.

Job listing fields

Field NameDescription
job_titleJob title as posted
job_idGlassdoor's internal job listing ID
job_normalized_titleGlassdoor's normalized/canonical title
job_urlDirect link to the job posting
job_locationObject: unknown (raw location string), city, country, zip
job_descriptionPlain-text job description (HTML stripped)
job_description_htmlOriginal HTML job description
job_posted_dateISO date the job was posted
job_remoteBoolean โ€” remote/WFH flag
job_salaryObject: currency, currency_symbol, pay_period, estimated, min, median, max
job_easy_applyBoolean โ€” Easy Apply available
job_age_daysDays since the job was posted
job_job_typesArray โ€” e.g. ["fulltime"]
job_levelsSeniority/experience level text
job_benefits_tagsArray of benefit tags mentioned on the listing
job_shifts_and_schedule_tagsArray of shift/schedule tags, if present
job_sponsoredBoolean โ€” sponsored listing flag
job_industryPrimary industry name
job_languageTwo-letter language code

Employer & company snapshot fields

Field NameDescription
company_nameEmployer's full name
company_short_nameEmployer's short name (used in Glassdoor URLs)
company_logoCompany logo URL
company_headquarters_locationObject: city, unknown (raw HQ string)
company_sizes_strEmployee headcount band, e.g. "10000+ Employees"
company_websiteCompany website
company_revenueRevenue band as published on Glassdoor
company_urlEmployer's Glassdoor Overview page URL
company_descriptionCompany "About" description
company_tag_lineCompany mission/tagline
company_industriesArray of industry name(s)
company_uri_providersArray: {provider, url} linking back to the Glassdoor profile
employer_idGlassdoor's internal employer ID
company_ratingsObject with 10 categories: overall, career_opportunities, compensation_and_benefits, culture_and_values, work_life_balance, senior_management, diversity_and_inclusion, ceo_rating, business_outlook, recommend_to_friend
company_rating_count_distributionPer-category 1โ˜…โ€“5โ˜… vote-count histogram
company_ceoObject: name, title, photo_url, approval_rating
company_ratings_vs_industry_benchmarkPer category: {employer, industry_average, delta}
company_review_countGlassdoor's own aggregate review count for the employer
company_salary_countGlassdoor's own aggregate salary-report count for the employer
allThe complete raw nested job + employer payload, for advanced/debug access

Plus scrapedAt โ€” an ISO timestamp added to every row at push time.

๐Ÿค– Add-on: Need additional job market data?

Pair this with LinkedIn Company Scraper & Open Jobs Finder to pull a company's LinkedIn firmographics and its own live open-jobs list, or LinkedIn Company Employees : AI & Lead Enrichment Scraper to go from an employer name to its people. LinkedIn Company About Scraper is a lighter option if you only need company profile facts without job data.

Why not build this yourself?

Glassdoor does not offer a public, self-serve developer API for third parties, so any DIY scraper has to reverse-engineer the site directly โ€” and that surface moves. This Actor's own build log is a live example: Glassdoor migrated its Employer Overview page off the old Next.js __NEXT_DATA__/apolloState blob onto React Server Components streaming, which silently broke company-fact parsing until it was rebuilt against the new chunked format. Maintaining that kind of parser, plus rotating datacenter/residential proxies to survive anti-bot escalation, is ongoing engineering work most teams don't want to own just to get job data. Use this Actor when you want the output, not the maintenance; build your own only if you need logic this Actor doesn't cover.

How to use Glassdoor Jobs & Employer Snapshot Scraper

Run it from its Apify Store listing inside the Apify Console โ€” no separate signup or API key is required beyond an Apify account.

  1. Open the Actor's page and click Run.
  2. Enter a search term in jobTitleOrKeyword (e.g. "Data Analyst") โ€” the only input needed to get results, or paste one or more Glassdoor search links into urls instead.
  3. Optionally narrow with location, minSalary/maxSalary, jobType, seniorityType, or minCompanyRating.
  4. Start the run.
  5. Download results as JSON, CSV, or Excel from the dataset, or pull them via the Apify API.

How to scale to bulk Glassdoor job extraction

Pass multiple Glassdoor job-search URLs at once in the urls field (array input) โ€” each runs as its own search pass in the same Actor run, and results append to one dataset. Raise maxItems per search to pull deeper into a single query. There's no separate "bulk" mode beyond this array input.

What can you do with Glassdoor job and employer data?

  • A recruiter vetting where to post uses company_ratings and company_ratings_vs_industry_benchmark to shortlist employers that outperform their industry before recommending them to clients.
  • A job seeker comparing offers uses job_salary and company_ceo.approval_rating to weigh pay against leadership sentiment before applying.
  • A market researcher tracking a sector uses company_rating_count_distribution and company_review_count to gauge how much rating data actually backs an employer's score.
  • An HR/employer-branding analyst uses company_ratings alongside job_age_days to see whether hiring volume correlates with rating trends over time.
  • An AI/RAG engineer indexes job_description and company_description as retrieval text, with job_salary, company_ratings, and job_industry as structured metadata filters for an agent that answers "which companies hiring for X pay well and rate well."

How does Glassdoor Jobs & Employer Snapshot Scraper handle rate limits and blocking?

Every request starts direct, then escalates automatically: if a request fails or Glassdoor returns an unexpected response, the Actor switches to Apify Datacenter proxies, then to Residential proxies, and sticks with Residential once it succeeds there. Failed requests are retried (up to 12 attempts per request) with this escalation between tries. You can add requestDelayMs to pace paginated requests yourself, and enable proxyConfiguration to route through Apify Proxy from the start. If a single job's detail or employer-overview fetch fails after all retries, that job is skipped and logged as an error rather than crashing the run โ€” everything else keeps saving. No CAPTCHA-solving is performed; blocking is handled entirely through proxy rotation and retries.

โฌ‡๏ธ Input

ParameterRequiredTypeDescriptionExample Value
jobTitleOrKeywordNostringRole, skill, or title to search for. Base scraper's legacy keyword key still accepted."Software Engineer"
maxItemsNointegerHow many job rows to gather (default 20, 1โ€“10000).50
countryNostringWhich regional Glassdoor site to search (default "us", 25 options: us, ar, au, be_nl, be_fr, br, ca_en, ca_fr, de, es, fr, hk, in, ie, it, mx, nl, nz, at, ch_de, ch_fr, sg, gb, jp, kr)."us"
locationNostringCity or region to search around (default "" = worldwide)."Austin, TX"
includeNoSalaryJobNobooleanInclude listings that don't show a salary (default false).false
targetCompanyNameNostringEmployer name substring filter. Legacy companyName key still accepted.""
minSalaryNointegerMinimum salary floor, local currency (default 0).70000
maxSalaryNointegerMaximum salary ceiling, local currency.120000
fromAgeNostringListing freshness in days (default "ANY"; options: ANY, 1, 3, 7, 14, 30)."7"
jobTypeNostringContract/work style (default "all"; options: all, fulltime, parttime, contract, temporary, temp-to-hire, internship, entrylevel, apprenticeship)."fulltime"
radiusNostringSearch radius around location in km (default "18"; options: 0, 6, 12, 18, 31, 62, 124)."18"
industryTypeNostringIndustry filter (default "ALL"; options: ALL, FINANCIAL, MANAGEMENT_AND_CONSULTING, HUMAN_RESSOURCES_AND_RECRUITMENT, INFORMATION_TECHNOLOGIE)."INFORMATION_TECHNOLOGIE"
domainTypeNostringJob-family/domain filter (default "ALL"; 14 options including ADMINISTATION, ENGENERING, FINANCE, LEGAL, MEDIA_AND_COMMUNICATION, SCIENCE_RESEARCH, SELL_AREA, etc.)."ALL"
employerSizesNostringEmployer size filter (default "ALL"; options: ALL, TINY, SMALL, MEDIUM, LARGE, HUGE)."ALL"
applicationTypeNostringApplication flow filter (default "ALL"; options: ALL, EASY_APPLY_INCLUDED, EASY_APPLY_ONLY)."ALL"
remoteWorkTypeNostringRemote/WFH filter (default "ANY"; options: ANY, REMOTE_ONLY)."ANY"
seniorityTypeNostringCareer stage filter (default "all"; options: all, internship, entrylevel, midseniorlevel, director, executive)."midseniorlevel"
minCompanyRatingNostringMinimum employer rating to include (options: 0, 1, 2, 3, 4, 5). Legacy minRating key still accepted."3"
urlsNoarrayPower-user mode: one or more Glassdoor job-search URLs, run directly instead of jobTitleOrKeyword/country.["https://www.glassdoor.com/Job/software-engineer-jobs-SRCH_KO0,16.htm"]
requestDelayMsNointegerPause between paginated requests, in ms (default 0, max 60000).500
proxyConfigurationNoobjectApify Proxy configuration. Defaults to no extra routing.{"useApifyProxy": false}

Example input

{
"jobTitleOrKeyword": "Data Analyst",
"maxItems": 50,
"country": "us",
"location": "Austin, TX",
"includeNoSalaryJob": false,
"targetCompanyName": "",
"minSalary": 70000,
"maxSalary": 120000,
"fromAge": "7",
"jobType": "fulltime",
"radius": "18",
"industryType": "INFORMATION_TECHNOLOGIE",
"domainType": "ALL",
"employerSizes": "ALL",
"applicationType": "ALL",
"remoteWorkType": "ANY",
"seniorityType": "midseniorlevel",
"minCompanyRating": "3",
"urls": [],
"requestDelayMs": 500,
"proxyConfiguration": { "useApifyProxy": false }
}

โฌ†๏ธ Output

Results are typed, normalized JSON with a consistent schema across runs โ€” no post-processing required. Export as JSON, CSV, or Excel directly from the Apify dataset, or pull results via the Apify API.

Example output

{
"job_title": "Senior Data Analyst",
"job_id": "1009822374",
"job_normalized_title": "Data Analyst",
"job_url": "https://www.glassdoor.com/job-listing/senior-data-analyst-lockheed-martin-JV_IC1139977_KO0,20_KE21,36.htm?jl=1009822374",
"job_location": {
"unknown": "Austin, TX",
"city": "austin",
"country": "us",
"zip": "78701"
},
"job_description": "Lockheed Martin is looking for a Senior Data Analyst to join our Aeronautics team...",
"job_posted_date": "2026-07-18",
"job_remote": false,
"job_salary": {
"currency": "USD",
"currency_symbol": "$",
"pay_period": "annual",
"estimated": true,
"min": 88000,
"median": 104500,
"max": 121000
},
"job_easy_apply": true,
"job_age_days": 7,
"job_job_types": ["fulltime"],
"job_levels": "Mid-Senior level",
"job_benefits_tags": ["Health insurance", "401(k)", "Paid time off"],
"job_sponsored": false,
"job_industry": "Aerospace & Defense",
"job_language": "en",
"company_name": "Lockheed Martin",
"company_short_name": "Lockheed-Martin",
"company_headquarters_location": { "city": "bethesda", "unknown": "Bethesda, MD" },
"company_sizes_str": "10000+ Employees",
"company_website": "www.lockheedmartin.com",
"company_url": "https://www.glassdoor.com/Overview/Working-at-Lockheed-Martin-EI_IE1139.htm",
"employer_id": 1139,
"company_ratings": {
"overall": 4.1,
"career_opportunities": 3.9,
"compensation_and_benefits": 4.0,
"culture_and_values": 3.8,
"work_life_balance": 3.7,
"senior_management": 3.5,
"diversity_and_inclusion": 3.9,
"ceo_rating": 88.0,
"business_outlook": 72.0,
"recommend_to_friend": 78.0
},
"company_rating_count_distribution": {
"overall": { "1": 412, "2": 380, "3": 1250, "4": 3400, "5": 2900 }
},
"company_ceo": {
"name": "James D. Taiclet",
"title": "Chairman, President & CEO",
"photo_url": "https://media.glassdoor.com/people/sql/1139/james-taiclet.jpg",
"approval_rating": 88.0
},
"company_ratings_vs_industry_benchmark": {
"overall": { "employer": 4.1, "industry_average": 3.6, "delta": 0.5 },
"career_opportunities": { "employer": 3.9, "industry_average": 3.5, "delta": 0.4 }
},
"company_review_count": 8420,
"company_salary_count": 15230,
"scrapedAt": "2026-07-25T14:32:07.512Z"
}

(The full row also includes job_description_html, job_shifts_and_schedule_tags, company_logo, company_revenue, company_description, company_tag_line, company_industries, company_uri_providers, and a catch-all all field with the raw nested payload โ€” trimmed above for readability.)

How does it work?

The Actor requests Glassdoor's job-search API directly (impersonating a real browser via curl_cffi) to page through listings matching your filters. For every unique employer among those results, it fetches that employer's public Overview page once and parses it โ€” first trying Glassdoor's legacy embedded data blob, then falling back to the current React Server Components streaming format if needed โ€” pulling out the ratings breakdown, histogram, CEO detail, and industry benchmark already rendered there server-side. Requests start unproxied and escalate through Apify Datacenter and Residential proxy tiers automatically if Glassdoor pushes back. Only data any visitor could see on the public page is returned, and the output schema stays the same shape regardless of which page format Glassdoor happens to be serving that day.

Integrations

Glassdoor Jobs & Employer Snapshot Scraper works with whatever you already use to move data โ€” direct API calls, AI agent frameworks, and no-code automation tools.

Calling Glassdoor Jobs & Employer Snapshot Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraper-engine/glassdoor-jobs-and-employer-snapshot-scraper").call(
run_input={"jobTitleOrKeyword": "Data Analyst", "maxItems": 50}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["job_title"], item["company_name"], item["company_ratings"]["overall"])

Works in Go, Ruby, Node.js, cURL โ€” any language that can make an HTTP request.

MCP integration for AI agents

This Actor is reachable through Apify's hosted MCP server (https://mcp.apify.com) or the local @apify/actors-mcp-server package, which exposes it as a callable tool to any MCP-compatible client (Claude Desktop, Claude Code, Cursor, and others). Register it locally with npx @apify/actors-mcp-server --actors scraper-engine/glassdoor-jobs-and-employer-snapshot-scraper and an APIFY_TOKEN environment variable.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node pointed at this Actor's run-sync-get-dataset-items endpoint with your API token in the header. In Make, use the Apify app's "Run Actor and Get Dataset Items" module and map the JSON fields directly into your scenario. In LangChain (or any agent framework), call the Actor via the Apify API client and load the returned JSON straight into a tool or retriever โ€” no parsing step needed.

Scraping publicly available business data such as job listings and aggregate employer ratings is generally permitted, but you're responsible for complying with Glassdoor's Terms of Service and applicable law in your jurisdiction. This Actor returns only publicly visible data โ€” job postings and aggregate/company-level ratings figures, not individual reviewer identities or review text. Because the output is business and company-level data rather than personal data about private individuals, database-rights and ToS considerations apply rather than GDPR/CCPA-style personal-data rules โ€” the one exception is the CEO's public name and title, which is public-figure business data by nature. Consult legal counsel if your use case involves bulk storage or resale of scraped data.

Frequently asked questions

What Glassdoor job and employer fields does this scraper return?

It returns job-level fields like job_title, job_salary, and job_location, plus employer-level fields like company_ratings, company_ceo, and company_ratings_vs_industry_benchmark on every row. See the full fields table above.

Does this scraper require a Glassdoor account or login?

No. It fetches Glassdoor's public job-search and Employer Overview pages the same way an anonymous visitor would โ€” no Glassdoor credentials are collected or required.

How many Glassdoor jobs can I extract in one run?

Up to maxItems, which accepts 1โ€“10,000 per search (default 20). Running multiple searches via the urls array multiplies that per search.

What happens if an employer has no rating data or a listing has no salary?

Fields that Glassdoor doesn't publish for a given employer or job come back as null rather than a guessed value โ€” coverage of the full ratings breakdown, CEO detail, and industry benchmark depends on how much rating data Glassdoor has collected for that specific employer.

Can I scrape multiple Glassdoor searches at once?

Yes. Pass multiple Glassdoor job-search URLs in the urls array and each runs as its own search pass within the same Actor run, all saved to one dataset.

Does this scraper work with Claude, ChatGPT, and other AI agent tools?

Yes. It's reachable through Apify's MCP server for MCP-compatible clients, and callable as a plain HTTP/API endpoint by any agent framework that can make a request.

How does this scraper compare to other Glassdoor scrapers on Apify?

As observed on Apify Store listings checked 2026-07-25, most Glassdoor-focused actors return either job listings or employee review text as separate outputs, and some route through the review-endpoint that Glassdoor now blocks for anonymous access. This Actor instead fuses job listings with the employer's aggregate ratings breakdown, rating-count histogram, CEO detail, and industry benchmark into a single row, parsed from data the job search already loads โ€” no second dataset to join, no reviews endpoint required.

Does this scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across runs โ€” no HTML parsing or CSS selectors needed. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when Glassdoor changes its layout or anti-bot system?

The Actor is maintained and its output schema stays stable across Glassdoor site changes โ€” it has already been rebuilt once to follow Glassdoor's move from server-rendered data blobs to React Server Components streaming. No specific turnaround time is promised for future changes.

Can I use this scraper without managing proxies or browser infrastructure?

Yes. It handles its own proxy tier escalation (direct โ†’ Datacenter โ†’ Residential) and retries automatically; enabling proxyConfiguration is optional, not required to get results.

Which fields work best for AI training data and RAG indexing?

For RAG, index job_description and company_description as retrieval text. For structured training data, job_salary, company_ratings, job_age_days, and company_ratings_vs_industry_benchmark return as consistently typed numbers and objects across every row.

Scraper NameWhat it extracts
LinkedIn Company Scraper & Open Jobs FinderCompany firmographics plus that company's own live open-jobs list
LinkedIn Company About ScraperPublic LinkedIn company profile facts
LinkedIn Company Employees : AI & Lead Enrichment ScraperEmployees of a target company, enriched for lead generation
LinkedIn B2B Emails Scraper: Verified Email FinderVerified B2B email addresses tied to LinkedIn profiles
LinkedIn Post ScraperPublic LinkedIn post content and engagement data

Your feedback

Found a bug or missing a field? Let us know through the Actor's Issues tab on Apify or your support contact for the Scraper-Engine account โ€” reports like this directly shape what gets fixed and added next.