Glassdoor Job Listings Scraper - Salary & Company Reviews Data avatar

Glassdoor Job Listings Scraper - Salary & Company Reviews Data

Pricing

from $0.28 / 1,000 results

Go to Apify Store
Glassdoor Job Listings Scraper - Salary & Company Reviews Data

Glassdoor Job Listings Scraper - Salary & Company Reviews Data

Scrape Glassdoor job listings with role title, employer, company rating, location and salary range. A salary data scraper and company reviews scraper in one, for compensation benchmarking, employer research and hiring intelligence. Structured JSON, CSV or Excel.

Pricing

from $0.28 / 1,000 results

Rating

0.0

(0)

Developer

Joseph McRell

Joseph McRell

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

18 days ago

Last modified

Share

Glassdoor Jobs Scraper - URLs, Dates, Salaries & Employers

Extract public Glassdoor job-search cards into 30 structured, CSV-ready columns: canonical job URLs and stable job IDs, numeric salary low/median/high with the pay period and whether the employer published it, the exact age of the posting in days and the date it went live, the skills and attributes Glassdoor extracted from the description, and the employer's name, ID, rating and logo. Search by plain keyword and location - no Glassdoor URL required - or supply one or more Glassdoor search-result URLs directly, and set a hard result ceiling for predictable Store or AI-agent calls.

What data can I extract?

  • Job title, plus Glassdoor's normalized title for grouping roles across employers
  • Canonical Glassdoor job URL with tracking parameters removed
  • Stable Glassdoor job ID
  • Employer name, full legal name, Glassdoor employer ID, rating and logo URL
  • Job location, Glassdoor location ID, and whether it resolves to a city, state or country
  • Displayed salary text and numeric salary_min / salary_median / salary_max
  • Pay period and currency, so hourly and annual rows can be compared
  • Salary source: whether the employer published the pay or Glassdoor estimated it
  • Exact age of the posting in days and the calendar date it went live
  • Skills and wider attributes extracted from the description - seniority, years of experience, schedule, benefits, certifications and tooling
  • Job description snippet
  • Easy Apply and sponsored-listing flags
  • UTC scrape timestamp

All 30 columns

Identity — employer_id, employer_name_full, job_id, job_title, location_id, normalized_job_title

Status — is_sponsored, location_type

Dates — pay_period, posting_date_estimated, posting_date_exact, posting_date_precision

Location — location

Money — pay_currency, salary, salary_max, salary_median, salary_min, salary_source

People — employer, employer_logo_url

Contact — job_url

Counts and measures — rating

Other detail — age_in_days, easy_apply, job_attributes, job_description_snippet, job_skills, posting_age, scraped_at

Input example

Search by keyword and location directly:

{
"search_query": "registered nurse",
"location": "Seattle, WA",
"days_old": 7,
"min_rating": 4,
"easy_apply": false,
"remote_work_type": false,
"max_items": 30
}

location is matched against Glassdoor's own location index (city, state, or country); leave it empty to search nationwide. days_old, min_rating, easy_apply, and remote_work_type are all optional and compile straight into Glassdoor's own search filters - leave any of them unset to skip that filter.

Or supply Glassdoor search-result URLs directly, which takes priority over search_query and location when both are set:

{
"start_urls": [
{
"url": "https://www.glassdoor.com/Job/austin-tx-developer-jobs-SRCH_IL.0,9_IC1139761_KO10,19.htm"
}
],
"max_items": 30
}

You can supply up to 25 public Glassdoor search-result URLs this way. max_items is a hard run-wide output ceiling in either mode.

Output example

{
"job_title": "Senior Software Engineer",
"job_url": "https://www.glassdoor.com/job-listing/example.htm?jl=1000000000000",
"job_id": "1000000000000",
"employer": "Example Technologies",
"rating": "4.1",
"location": "Austin, TX",
"salary": "$120K-$165K (Employer est.)",
"posting_age": "3d",
"posting_date_estimated": "2026-09-07",
"posting_date_precision": "estimated",
"scraped_at": "2026-09-10T12:45:00Z",
"employer_id": 9711,
"employer_name_full": "Agilent Technologies, Inc.",
"employer_logo_url": "https://media.glassdoor.com/sql/9711/agilent-technologies-squareLogo-1657118837709.png",
"normalized_job_title": "software engineer",
"job_description_snippet": "Graduate from an approved school of professional nursing and currently licensed to practice as a registered nurse in the state of agency operation.",
"job_skills": "Leadership, Hospital experience, Nursing",
"job_attributes": "Experience working with neonates, Travel reimbursement, Labor & delivery, RN License, BLS Certification, Travel nursing, Cardiac catheterization, Mid-level, ACLS Certification, 10 hour shift, Health insurance, Dental insurance, Cath Lab, Travel, Women's health and reproductive patient care, Day shift, Vision insurance, 401(k) matching, 1 year, Patient treatment, Neonates, 3x12, Cath lab experience, Life insurance, Referral program, Patient family support",
"easy_apply": false,
"is_sponsored": false,
"age_in_days": 99,
"posting_date_exact": "2026-06-05",
"pay_period": "ANNUAL",
"pay_currency": "USD",
"salary_source": "EMPLOYER_PROVIDED",
"salary_min": 116800,
"salary_median": 167900,
"salary_max": 219000
}

2 further columns are omitted here for length — the full list is above, and every column appears in the export whether or not the source populated it.

age_in_days and posting_date_exact are the recency columns to sort on: the result card caps its printed age at 30d+, while the page's own data reports the real figure - 256 days for the listing above. posting_date_estimated and posting_date_precision are the older, coarser derivation from that capped label and are retained unchanged.

salary_min / salary_median / salary_max are numbers in pay_currency per pay_period, so hourly rows keep cents (46.94) and annual rows stay whole. Check salary_source before treating a figure as a reported fact: EMPLOYER_PROVIDED came from the employer, ESTIMATED is Glassdoor's model.

Common use cases

  • Open or deduplicate jobs using canonical URLs and stable IDs
  • Benchmark pay by role and market on numeric salary columns instead of parsing display text
  • Separate employer-published pay from Glassdoor estimates before quoting a number
  • Filter by the skills, certifications, seniority or shift pattern extracted from each posting
  • Track hiring velocity with exact posting dates, including listings older than 30 days
  • Roll jobs up by employer ID to see who is hiring most in a market
  • Supply fresh, linkable job-card context to an AI agent

Use with AI agents and MCP

Example agent intent:

Extract the first 30 Glassdoor software developer jobs in Austin, TX and return canonical links, job IDs, employers, ratings, locations, numeric salary ranges with their pay period and source, exact posting dates, and the extracted skills for each role.

{
"search_query": "software developer",
"location": "Austin, TX",
"max_items": 30
}

Pricing and cost control

Output is billed per result at $0.0004 per result (about $0.40 per 1,000 results), plus a $0.001 Actor-start charge billed once per gigabyte of memory at run start. Use max_items to cap both output volume and charges. The price shown on the Apify Store listing is authoritative.

Reliability

The Actor renders Glassdoor search pages, deduplicates on canonical job URL, validates stable job-card anchors, and is enrolled in staged selector monitoring and self-healing. Repairs are tested against multiple pages and output contracts before promotion.

Limitations and responsible use

  • Search-result data only. job_description_snippet is the excerpt Glassdoor shows on the results page, not the full posting text, and external employer application URLs are not returned.
  • salary_source marks which pay figures are employer-published and which are Glassdoor estimates. Do not present an ESTIMATED figure as a reported wage.
  • Some listings omit rating, salary, logo or full employer name; those columns come back null rather than guessed.
  • posting_date_exact is accurate to the day, derived from the age in days reported for the listing.
  • Availability varies by geography and upstream access policy.
  • You are responsible for complying with applicable law, Glassdoor terms, and restrictions on employment-data use.

Integrate with No-Code, Webhooks & Spreadsheets

  • Google Sheets & Excel: Under the Dataset tab, export your results as CSV or use Apify's live export link to auto-populate recruitment and compensation tracking spreadsheets.
  • Zapier & Make: Trigger automated alerts or add qualified job postings into Airtable, Notion, or Slack channels when a new run finishes.
  • Webhooks: Attach a webhook in the Integrations tab to stream newly discovered job openings directly into your custom ATS or applicant database.
  • Python / Node.js: Access listings programmatically using pip install apify-client and load them directly into pandas for compensation analysis.
  • LinkedIn Public Jobs Search (captainhandsome/linkedin-public-jobs-search): Cross-reference job openings across LinkedIn and Glassdoor to uncover unlisted compensation or hiring velocity.
  • Tech Stack Detector (captainhandsome/tech-stack-detector): Identify the engineering stacks and software tools used by companies hiring on Glassdoor.

FAQ

Yes. The publication contract requires a canonical HTTPS Glassdoor job URL and numeric job_id for every emitted record.

Are posting dates exact?

posting_date_exact is accurate to the day. It is derived from the exact age in days Glassdoor reports for the listing, which is uncapped - so listings well past the 30d+ label the card prints still date correctly. The older posting_date_estimated and posting_date_precision columns are retained unchanged for existing consumers.

Can I scrape Glassdoor salary ranges?

Yes. Every listing with pay returns the display text in salary and sortable numbers in salary_min, salary_median and salary_max, qualified by pay_period, pay_currency and salary_source. Nothing is presented as normalized compensation data that the source did not supply.

Do I get the skills required for each job?

Yes. job_skills carries the key skills Glassdoor extracted from the description, and job_attributes carries the wider set - seniority, years of experience, shift pattern, benefits, certifications and tooling - each as one comma-separated, CSV-ready cell.

Can I search by keyword and city directly?

Yes. Set search_query and location and the Actor builds the Glassdoor search for you, including resolving the location the way Glassdoor's own search box does. You can still supply start_urls instead when you want to preserve exact filters already selected on Glassdoor - it takes priority over search_query and location when both are set.

Can I filter by posting age, employer rating, Easy Apply, or remote work?

Yes. days_old, min_rating, easy_apply, and remote_work_type map directly onto Glassdoor's own search filters. days_old accepts 1, 3, 7, 14, or 30 days; min_rating accepts 1 through 4 stars and up. Leave any of them unset to skip that filter. They apply only when searching by search_query/location - not to start_urls, whose filters are whatever the URL already encodes.

See CHANGELOG.md for maintained schema changes.