Glassdoor Jobs Scraper - Listings, Salaries & Ratings
Pricing
from $2.75 / 1,000 results
Glassdoor Jobs Scraper - Listings, Salaries & Ratings
Scrape Glassdoor job listings by keyword and location. Export job title, company, company rating, salary estimate (min/median/max), location, posted date, skills, Easy Apply and the job URL. No login or API key required.
Glassdoor Jobs Scraper — Listings, Salaries, Skills & Company Ratings
Extract real-time job openings, verified employer star ratings, salary compensation benchmarks, and structured candidate skill requirements from Glassdoor (glassdoor.com). Scrape critical attributes including job title, normalized job title, company name, Glassdoor overall employer rating (1.0–5.0), salary estimates (10th, 50th, 90th percentile), pay period (Annual/Hourly), job location, posting age in days, Easy Apply status, and 40+ extracted skills per listing.
Whether you are building compensation models, tracking enterprise hiring momentum, sourcing recruitment targets, or enriching labor market analytics platforms, this scraper provides continuous cursor pagination to collect hundreds to thousands of records in minutes.
⚡ At a glance
| Feature | Specification |
|---|---|
| Target Website | glassdoor.com (Glassdoor Job Search) |
| Data Fields | Job title, company, rating, salary (min/median/max), location, age, skills, Easy Apply, URLs |
| Search Capabilities | Multiple keywords (software engineer, data analyst), city/state, Remote, or nationwide |
| Pagination Depth | Unlocked cursor-based deep pagination (1,000+ jobs per search keyword) |
| Typical Speed | 30–60 jobs per 5–10 seconds over high-performance HTTP requests |
| Proxy Requirement | Apify Proxy enabled (US Residential proxy configured for maximum throughput) |
| Export Formats | JSON, CSV, Excel (XLSX), XML, HTML Table, RSS |
| Integrations | Make, Zapier, Webhooks, Google Sheets, Airbyte, Keboola, Python, Node.js API |
🔎 Why scrape Glassdoor jobs?
Glassdoor occupies a unique position in global recruitment. Unlike standard job boards that only display basic text descriptions, Glassdoor integrates employer reputation scores and statistical salary percentiles alongside each open role.
Extracting Glassdoor job postings empowers organizations with unique competitive advantages:
- Compensation & Total Rewards Benchmarking: Access granular pay estimates (
salaryMin,salaryMedian,salaryMax) across titles and geographic markets. Differentiate between employer-confirmed pay scales and algorithmic industry benchmarks. - Employer Reputation & Sourcing: Cross-reference open jobs with verified Glassdoor employer ratings. Recruit high-demand talent from companies with sub-3.5 satisfaction scores or target fast-growing firms with top-tier ratings.
- Skill & Tech Stack Trend Analysis: Analyze the structured
skillsarray across thousands of job descriptions to determine which programming languages, frameworks, or certifications are currently experiencing hiring surges. - Competitor Hiring Audits: Monitor competitors' expansion into new regions, track job opening volumes by department, and detect strategic company pivots before press announcements.
- Job Aggregator Feeds: Power regional career portals, specialized niche job boards, and automated Slack alert channels with always-fresh listings.
📊 Glassdoor vs Other Major Job Boards
| Dimension | Glassdoor Jobs | LinkedIn Jobs | Indeed |
|---|---|---|---|
| Employer Rating Integration | 🟢 Native Star Ratings (1–5) | 🔴 Not Displayed | 🟡 Basic Company Reviews |
| Salary Percentiles | 🟢 P10, P50 (Median), P90 | 🟡 Broad Ranges | 🟡 Self-Reported Averages |
| Extracted Skills Array | 🟢 Up to 40+ Skills per Post | 🟡 User-Tagged Skills | 🟡 Keyword Matching |
| Easy Apply Transparency | 🟢 Explicit Boolean Flag | 🟢 In-App Application | 🟢 Employer Direct |
| Extraction Performance | 🟢 Fast HTTP Stream (~7s/page) | 🔴 Heavy Browser Required | 🟡 Moderate |
| Historical Age Tracking | 🟢 Exact ageInDays Number | 🟡 Vague Date Strings | 🟡 Date String |
📊 Key Data Fields & Coverage
Every output record represents a single de-duplicated job listing with normalized attributes.
💼 Position & Company Overview
| Field | Type | Description | Coverage |
|---|---|---|---|
jobListingId | string | Unique Glassdoor persistent listing ID | 🟢 High (100%) |
jobTitle | string | Full advertised job title | 🟢 High (100%) |
normalizedJobTitle | string | Standardized title for analytics grouping | 🟢 High (95%) |
companyName | string | Full legal or trading company name | 🟢 High (100%) |
companyId | number | Internal persistent Glassdoor employer ID | 🟢 High (95%) |
companyRating | number | Overall company star rating (1.0 to 5.0) | 🟢 High (90%) |
companyLogo | string | Direct URL to company square logo | 🟢 High (85%) |
jobUrl | string | Canonical listing URL | 🟢 High (100%) |
💰 Compensation & Terms
| Field | Type | Description | Coverage |
|---|---|---|---|
salaryMin | number | 10th percentile / minimum pay figure | 🟢 High (85%) |
salaryMedian | number | 50th percentile / median pay figure | 🟢 High (85%) |
salaryMax | number | 90th percentile / maximum pay figure | 🟢 High (85%) |
payPeriod | string | Compensation interval (ANNUAL or HOURLY) | 🟢 High (85%) |
payCurrency | string | Currency denomination (USD, EUR, GBP, CAD) | 🟢 High (85%) |
salarySource | string | Source attribution (EMPLOYER_EST_BASE, etc.) | 🟢 High (85%) |
📍 Location & Requirements
| Field | Type | Description | Coverage |
|---|---|---|---|
location | string | Municipal city, state, or Remote indicator | 🟢 High (100%) |
locationType | string | Geographical tier (C = City, S = State) | 🟢 High (95%) |
skills | array | Extracted technical and soft skills | 🟢 High (90%) |
descriptionSnippet | string | Summary preview excerpt of job scope | 🟢 High (85%) |
jobCategory | string | Occupational category classification (GOC) | 🟢 High (90%) |
⏱️ Operational Flags
| Field | Type | Description | Coverage |
|---|---|---|---|
ageInDays | number | Days elapsed since job publication | 🟢 High (100%) |
easyApply | boolean | Whether one-click Easy Apply is enabled | 🟢 High (100%) |
isSponsored | boolean | Whether listing is an advertiser placement | 🟢 High (100%) |
searchKeyword | string | Search keyword query that matched this record | 🟢 High (100%) |
searchLocation | string | Location filter provided in search input | 🟢 High (90%) |
scrapedAt | string | ISO timestamp of data collection | 🟢 High (100%) |
🎯 Detailed Use Cases & Workflows
1. Total Rewards & Salary Competitiveness Modeling
- Objective: Establish competitive salary bands for engineering, nursing, or sales roles across high-cost vs low-cost living areas.
- Workflow: Run the scraper for
"product manager"acrossAustin, TX,New York, NY, andRemote. Export to Excel, filter bypayPeriod = "ANNUAL", and calculate the spread betweensalaryMinandsalaryMaxacross markets.
2. High-Precision Technical Talent Sourcing
- Objective: Source companies actively adopting specific emerging technologies.
- Workflow: Scrape roles matching
"devops engineer". Filter the resultingskillsarrays for specific keywords likeKubernetes,Terraform,Rust, orGo. Target those employers for B2B developer tool software sales.
3. Recruiter Outreach & Headhunting
- Objective: Reach out to senior engineers at companies experiencing low employee sentiment.
- Workflow: Scrape open software positions in target metros. Filter for employers where
companyRating < 3.6. Cross-reference company names with LinkedIn Recruiter to engage prospective candidates open to new career opportunities.
4. Automated Job Feed Aggregation
- Objective: Populate a niche job board (e.g., Remote AI Jobs) automatically on a daily schedule.
- Workflow: Schedule a recurring daily run for
"AI engineer"withlocation: "Remote". Pipe the resulting JSON through Apify Webhooks directly into your Webflow or Ghost database.
⚙️ Input Configuration & Parameters
Every input parameter is optional. If executed with empty parameters, the scraper automatically runs a demonstration scrape for software engineering roles in Austin, TX.
| Parameter | Type | Default | Description |
|---|---|---|---|
keyword | array | ["software engineer"] | List of job titles or search terms to query sequentially. |
location | string | "Austin, TX" | City and state (Austin, TX), Remote, or leave empty for nationwide US search. |
maxItems | integer | 0 | Total maximum jobs to collect across all keywords. 0 = auto/unlimited. |
proxyConfiguration | object | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"} | Proxy configuration. Pre-configured with US residential proxy for maximum reliability. |
📝 Input Configurations for Common Scenarios
Scenario A: Fast Prefill Run (Demo)
{"keyword": ["software engineer"],"location": "Austin, TX","maxItems": 60}
Scenario B: Multi-Keyword Remote Tech Hiring Sweep
{"keyword": ["frontend engineer","backend engineer","full stack developer","mobile engineer"],"location": "Remote","maxItems": 500}
Scenario C: Deep Regional Market Audit (1,000+ Jobs)
{"keyword": ["registered nurse","nurse practitioner","clinical coordinator"],"location": "New York, NY","maxItems": 1500}
📦 Sample Output Record
{"jobListingId": "1009847129","jobTitle": "Senior Full Stack Engineer (Node / React)","normalizedJobTitle": "Senior Software Engineer","jobUrl": "https://www.glassdoor.com/job-listing/senior-full-stack-engineer-glassdoor-JV_IC1139761_KO0,32_KE33,42.htm?jl=1009847129","companyName": "Datadog","companyId": 560124,"companyRating": 4.4,"companyLogo": "https://media.glassdoor.com/sqll/560124/datadog-squareLogo-1650392019.png","location": "Austin, TX","locationType": "CITY","salaryMin": 165000,"salaryMedian": 190000,"salaryMax": 225000,"payPeriod": "ANNUAL","payCurrency": "USD","salarySource": "EMPLOYER_EST_BASE","ageInDays": 2,"easyApply": true,"isSponsored": false,"jobCategory": "Information Technology","descriptionSnippet": "Datadog is looking for a Senior Full Stack Engineer to build high-performance data visualization interfaces for cloud telemetry...","skills": ["JavaScript","TypeScript","React","Node.js","AWS","Docker","CI/CD","Microservices","RESTful APIs","GraphQL","Git","Agile"],"searchKeyword": "software engineer","searchLocation": "Austin, TX","scrapedAt": "2026-11-10T13:50:00.000Z"}
💻 Programmatic Usage & API Integration
Trigger runs and retrieve results via the official Apify Client in Python, JavaScript, or direct REST API requests.
Python Integration
from apify_client import ApifyClient# Initialize client with your Apify API tokenclient = ApifyClient("YOUR_APIFY_TOKEN")# Prepare actor inputrun_input = {"keyword": ["data engineer", "analytics engineer"],"location": "San Francisco, CA","maxItems": 100}# Run actor and wait for completionrun = client.actor("haketa/glassdoor-jobs-scraper").call(run_input=run_input)# Fetch results from default datasetfor job in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{job['jobTitle']} at {job['companyName']} (Rating: {job['companyRating']}) | Pay: ${job['salaryMedian']:,}")
Node.js / JavaScript Integration
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: 'YOUR_APIFY_TOKEN',});const input = {keyword: ["cybersecurity analyst"],location: "Washington, DC",maxItems: 75};const run = await client.actor('haketa/glassdoor-jobs-scraper').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((job) => {console.log(`[${job.companyName}] ${job.jobTitle} - Skills: ${job.skills?.slice(0, 4).join(', ')}`);});
Direct REST API Call
curl -X POST "https://api.apify.com/v2/acts/haketa~glassdoor-jobs-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": ["product manager"],"location": "Seattle, WA","maxItems": 50}'
🔗 Integrations & Data Pipelines
Connect your Glassdoor jobs dataset directly into existing corporate data pipelines:
- Google Sheets: Stream newly discovered job openings directly into team spreadsheets using Apify's Google Sheets Integration.
- Airtable: Build an interactive hiring pipeline tracking competitors' open positions and compensation brackets.
- HubSpot / Salesforce: Enrich company prospect accounts with verified Glassdoor company ratings and active hiring volumes.
- Slack & Discord: Configure Zapier or Make to deliver automated notifications when top-rated companies post roles matching specific criteria.
- Snowflake & BigQuery: Aggregate millions of job rows for longitudinal machine learning analysis of labor market supply and demand.
🛠️ Step-by-Step Getting Started Guide
- Open the Actor: Navigate to
haketa/glassdoor-jobs-scraperon the Apify Console. - Enter Job Title or Keywords: Add target job queries (e.g.
product designer,account executive). - Specify Location: Enter a city and state (
Austin, TX,Chicago, IL) orRemote. - Configure Max Jobs: Set
maxItemsto your desired count (e.g.60for fast previews, or1,000+for broad market research). - Click Start: Hit the green Start button in the Console.
- Download Clean Data: In the Dataset tab, export your results as CSV, Excel, or JSON.
💡 Best Practices & Pro Tips
- Use Specific City and State Combinations: Specifying a clean city and state (e.g.,
New York, NYorChicago, IL) yields the richest geographic metadata and lowest network friction. - Filter by
salarySource: Distinguish between employer-provided salary ranges (EMPLOYER_EST_BASE) and statistical market algorithms when preparing executive compensation reports. - Multiple Keywords in One Run: Provide an array of related titles (e.g.,
["frontend developer", "react developer", "ui engineer"]) to ensure comprehensive coverage across varied job titling conventions. - Continuous Deduplication: Overlapping searches automatically deduplicate by persistent
jobListingId, ensuring zero duplicate records in your final dataset.
❓ Frequently Asked Questions
How many jobs can I extract in a single run?
There is no hard limit. Glassdoor indexes tens of thousands of active jobs per keyword. With maxItems: 0 (or maxItems: 1000+), the actor utilizes cursor-based pagination to stream thousands of jobs continuously.
Why are residential proxies pre-configured?
Glassdoor employs strict network governance that restricts access from generic datacenter IP ranges. Operating through residential proxies ensures uninterrupted data throughput.
Are salaries provided for every job?
Approximately 85–90% of listings include statistical salary estimates (P10, P50 median, P90). When a salary is not estimated by Glassdoor or the employer, the fields are returned as null.
Does the actor extract full job descriptions?
The actor extracts a concise descriptionSnippet along with an extensive array of parsed skills (typically 20–40+ items per job). This preserves rapid throughput while providing rich keyword data.
How frequently are listings refreshed?
The scraper reads live Glassdoor search queries at the exact moment of execution. The ageInDays property indicates precisely how recently the position was published.
What export formats are supported?
You can export results directly from the Apify Console as JSON, CSV, Excel (XLSX), XML, or HTML Table.
What happens if I provide no keyword or location?
The actor defaults to a software engineering demonstration in Austin, TX, retrieving clean sample listings with company ratings and salary benchmarks in seconds.
Can I filter specifically for Remote positions?
Yes. Simply pass "Remote" into the location input parameter to target exclusively remote and telecommute positions across the country.
How does deduplication work across keywords?
The actor tracks unique jobListingId keys in memory throughout the execution. If multiple queried keywords match the same listing, it is emitted to your dataset exactly once.
📋 Changelog
v1.2 — 2026-11
- 1,000+ Deep Cursor Pagination Unlocked: Removed artificial empty and page clamps to enable seamless multi-page cursor pagination reaching 1,000+ job listings per keyword.
- Fast Prefill Optimization: Streamlined default prefill parameters to complete clean sample runs in under 15 seconds.
- Enhanced Skill & Compensation Normalization: Improved extraction of numeric salary percentiles (P10, P50, P90) and normalized categorical job classifications.
- Comprehensive Documentation: Added multi-platform job board comparison matrices, visual shields badges, and complete Python and Node.js SDK snippets.
v1.1 — 2026-10
- Migrated core extraction engine to pure HTTP for 10x faster execution and minimal resource consumption.
- Added automatic city and state location autocomplete resolution.
- Added support for remote job filtering.
v1.0 — 2026-10
- Initial production release.
- Extraction of job title, company name, employer rating, salary estimate, location, posted age, and direct URLs.