Glassdoor Jobs & Employer Snapshot Scraper
Pricing
from $4.99 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
80
Total users
14
Monthly active users
2 days ago
Last modified
Categories
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 Category | Publicly Available | Restricted |
|---|---|---|
| Job listings (title, location, description, posted date) | Yes | โ |
| Salary bands (p10/median/p90 estimate) | Yes | Exact per-employee figures โ not published |
| Employer ratings breakdown | Yes | โ |
| Rating-count histogram (1โ โ5โ votes) | Yes | โ |
| CEO name, title, approval rating | Yes | โ |
| Employer-vs-industry benchmark | Yes | โ |
| Individual review text (pros/cons) | No | Account 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 Name | Description |
|---|---|
job_title | Job title as posted |
job_id | Glassdoor's internal job listing ID |
job_normalized_title | Glassdoor's normalized/canonical title |
job_url | Direct link to the job posting |
job_location | Object: unknown (raw location string), city, country, zip |
job_description | Plain-text job description (HTML stripped) |
job_description_html | Original HTML job description |
job_posted_date | ISO date the job was posted |
job_remote | Boolean โ remote/WFH flag |
job_salary | Object: currency, currency_symbol, pay_period, estimated, min, median, max |
job_easy_apply | Boolean โ Easy Apply available |
job_age_days | Days since the job was posted |
job_job_types | Array โ e.g. ["fulltime"] |
job_levels | Seniority/experience level text |
job_benefits_tags | Array of benefit tags mentioned on the listing |
job_shifts_and_schedule_tags | Array of shift/schedule tags, if present |
job_sponsored | Boolean โ sponsored listing flag |
job_industry | Primary industry name |
job_language | Two-letter language code |
Employer & company snapshot fields
| Field Name | Description |
|---|---|
company_name | Employer's full name |
company_short_name | Employer's short name (used in Glassdoor URLs) |
company_logo | Company logo URL |
company_headquarters_location | Object: city, unknown (raw HQ string) |
company_sizes_str | Employee headcount band, e.g. "10000+ Employees" |
company_website | Company website |
company_revenue | Revenue band as published on Glassdoor |
company_url | Employer's Glassdoor Overview page URL |
company_description | Company "About" description |
company_tag_line | Company mission/tagline |
company_industries | Array of industry name(s) |
company_uri_providers | Array: {provider, url} linking back to the Glassdoor profile |
employer_id | Glassdoor's internal employer ID |
company_ratings | Object 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_distribution | Per-category 1โ โ5โ vote-count histogram |
company_ceo | Object: name, title, photo_url, approval_rating |
company_ratings_vs_industry_benchmark | Per category: {employer, industry_average, delta} |
company_review_count | Glassdoor's own aggregate review count for the employer |
company_salary_count | Glassdoor's own aggregate salary-report count for the employer |
all | The 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.
- Open the Actor's page and click Run.
- 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 intourlsinstead. - Optionally narrow with
location,minSalary/maxSalary,jobType,seniorityType, orminCompanyRating. - Start the run.
- 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_ratingsandcompany_ratings_vs_industry_benchmarkto shortlist employers that outperform their industry before recommending them to clients. - A job seeker comparing offers uses
job_salaryandcompany_ceo.approval_ratingto weigh pay against leadership sentiment before applying. - A market researcher tracking a sector uses
company_rating_count_distributionandcompany_review_countto gauge how much rating data actually backs an employer's score. - An HR/employer-branding analyst uses
company_ratingsalongsidejob_age_daysto see whether hiring volume correlates with rating trends over time. - An AI/RAG engineer indexes
job_descriptionandcompany_descriptionas retrieval text, withjob_salary,company_ratings, andjob_industryas 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
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
jobTitleOrKeyword | No | string | Role, skill, or title to search for. Base scraper's legacy keyword key still accepted. | "Software Engineer" |
maxItems | No | integer | How many job rows to gather (default 20, 1โ10000). | 50 |
country | No | string | Which 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" |
location | No | string | City or region to search around (default "" = worldwide). | "Austin, TX" |
includeNoSalaryJob | No | boolean | Include listings that don't show a salary (default false). | false |
targetCompanyName | No | string | Employer name substring filter. Legacy companyName key still accepted. | "" |
minSalary | No | integer | Minimum salary floor, local currency (default 0). | 70000 |
maxSalary | No | integer | Maximum salary ceiling, local currency. | 120000 |
fromAge | No | string | Listing freshness in days (default "ANY"; options: ANY, 1, 3, 7, 14, 30). | "7" |
jobType | No | string | Contract/work style (default "all"; options: all, fulltime, parttime, contract, temporary, temp-to-hire, internship, entrylevel, apprenticeship). | "fulltime" |
radius | No | string | Search radius around location in km (default "18"; options: 0, 6, 12, 18, 31, 62, 124). | "18" |
industryType | No | string | Industry filter (default "ALL"; options: ALL, FINANCIAL, MANAGEMENT_AND_CONSULTING, HUMAN_RESSOURCES_AND_RECRUITMENT, INFORMATION_TECHNOLOGIE). | "INFORMATION_TECHNOLOGIE" |
domainType | No | string | Job-family/domain filter (default "ALL"; 14 options including ADMINISTATION, ENGENERING, FINANCE, LEGAL, MEDIA_AND_COMMUNICATION, SCIENCE_RESEARCH, SELL_AREA, etc.). | "ALL" |
employerSizes | No | string | Employer size filter (default "ALL"; options: ALL, TINY, SMALL, MEDIUM, LARGE, HUGE). | "ALL" |
applicationType | No | string | Application flow filter (default "ALL"; options: ALL, EASY_APPLY_INCLUDED, EASY_APPLY_ONLY). | "ALL" |
remoteWorkType | No | string | Remote/WFH filter (default "ANY"; options: ANY, REMOTE_ONLY). | "ANY" |
seniorityType | No | string | Career stage filter (default "all"; options: all, internship, entrylevel, midseniorlevel, director, executive). | "midseniorlevel" |
minCompanyRating | No | string | Minimum employer rating to include (options: 0, 1, 2, 3, 4, 5). Legacy minRating key still accepted. | "3" |
urls | No | array | Power-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"] |
requestDelayMs | No | integer | Pause between paginated requests, in ms (default 0, max 60000). | 500 |
proxyConfiguration | No | object | Apify 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 ApifyClientclient = 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.
Is it legal to scrape Glassdoor jobs and employer data?
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.
Related scrapers
| Scraper Name | What it extracts |
|---|---|
| LinkedIn Company Scraper & Open Jobs Finder | Company firmographics plus that company's own live open-jobs list |
| LinkedIn Company About Scraper | Public LinkedIn company profile facts |
| LinkedIn Company Employees : AI & Lead Enrichment Scraper | Employees of a target company, enriched for lead generation |
| LinkedIn B2B Emails Scraper: Verified Email Finder | Verified B2B email addresses tied to LinkedIn profiles |
| LinkedIn Post Scraper | Public 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.