Glassdoor Jobs Scraper
Pricing
from $12.00 / 1,000 job scrapeds
Glassdoor Jobs Scraper
Scrape Glassdoor job listings with title, company, location, salary, posted date, rating, apply URL, and source URL. MCP optimized for recruiters and job-market research.
Pricing
from $12.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
10 days ago
Last modified
Categories
Share
What is Glassdoor Jobs Scraper?
Glassdoor Jobs Scraper extracts public Glassdoor job listings into a flat dataset with one row per job. Each row returns the job title, company name, company rating, location, Easy Apply flag, salary text with parsed minimum, maximum, currency and period, the job and apply URLs, and the search URL it came from. Recruiters, HR analytics teams, job-market researchers and AI agents use it for salary benchmarking, hiring-signal monitoring and sourcing, starting from a keyword and a location.
Why recruiters use this Glassdoor scraper
- Salary parsed for you.
salaryTextkeeps the visible range, andsalaryMin,salaryMax,salaryCurrencyandsalaryPeriodturn it into numbers you can sort and chart. - Employer quality next to the role.
companyRatingshows the Glassdoor company rating on the same row as the job. - Recency control.
daysOldlimits results to jobs posted in the last 1 to 30 days. - Compensation-only datasets. Set
includeNoSalaryJobstofalseto keep only listings with visible pay. - Clean, deduplicated rows.
deduplicateremoves repeats by job ID, URL or a title-company-location hash. - Provenance on every row.
sourceUrl,searchQuery,requestedLocationandscrapedAtrecord exactly where and when each job was collected.
Best fit and related Actors
Best fit for current Glassdoor job listings: salary benchmarking for a role in a city, tracking which companies are hiring, or giving an agent a fresh sample such as "25 software engineer jobs in New York with salaries and apply links". The Actor is designed for job-listing pages; company reviews and interview pages are separate Glassdoor surfaces.
- For employee reviews of the companies you find, continue with Glassdoor Reviews Scraper.
- When you want the same search across Indeed, LinkedIn and Glassdoor together, use Jobs Scraper instead.
Example workflow: from a role and city to a salary benchmark
A compensation analyst starts with searchQuery set to data engineer, location set to Austin, TX, daysOld set to 14 and includeNoSalaryJobs set to false. The dataset returns each job's title, companyName, companyRating, salaryMin, salaryMax and salaryPeriod. They normalize hourly ranges to annual, compare the median against their internal band, and export the table for the pay review. A weekly schedule with the same input shows how the market range moves over time.
How to scrape Glassdoor jobs
- Enter a Job search query and a Job location, or paste Glassdoor jobs search URLs in Glassdoor jobs URLs.
- Set Maximum jobs, and optionally Posted within days and Include jobs without salary.
- Click Start, then export the dataset as JSON, CSV or Excel, or read it through the API.
Input
{"searchQuery": "software engineer","location": "New York, NY","country": "US","maxResults": 50,"daysOld": 7,"includeNoSalaryJobs": true,"deduplicate": true}
| Field | Type | What it controls |
|---|---|---|
searchQuery | string | Role, skill or company keywords. Default software engineer. |
location | string | City, region or Remote. Default New York, NY. |
country | string | Two-letter country label for output and summaries, such as US, GB, CA or AU. |
startUrls | array | Glassdoor jobs search result URLs, scraped directly and taking priority over the query. |
maxResults | integer | Maximum jobs to save, which is also the cap on billed job events. Default 50. |
daysOld | integer | Only jobs posted within this many days, from 1 to 30. |
includeNoSalaryJobs | boolean | Keep listings without a visible salary. Default true. |
deduplicate | boolean | Skip repeated jobs within the run. Default true. |
debug | boolean | Save captured responses to the key-value store for inspection. Default false. |
Output
One dataset row per job.
| Field | What it contains |
|---|---|
jobId | Glassdoor job listing ID |
title | Job title |
companyName, companyRating | Hiring company and its Glassdoor rating |
location | Job location or remote label |
easyApply | true when the job supports Glassdoor Easy Apply |
salaryText | Visible salary range, as shown |
salaryMin, salaryMax | Parsed salary bounds |
salaryCurrency, salaryPeriod | Currency code and period such as hour or year |
jobUrl, applyUrl | Job listing link and apply link |
searchQuery, requestedLocation, requestedCountry | The request that produced the row |
source, sourceUrl, scrapedAt | Source name, search page URL and collection time |
The schema also reserves datePosted, validThrough, employmentType, remoteType and description. Glassdoor search cards usually leave these as null, so use daysOld for recency and open jobUrl for the full description.
{"jobId": "1010265289757","title": "Product Manager","companyName": "Obie","companyRating": 4.5,"location": "Remote","remoteType": null,"employmentType": null,"easyApply": true,"salaryText": "$90K - $130K (Employer provided)","salaryMin": 90000,"salaryMax": 130000,"salaryCurrency": "USD","salaryPeriod": null,"datePosted": null,"validThrough": null,"description": null,"jobUrl": "https://www.glassdoor.com/job-listing/product-manager-obie-JV_KO0,15_KE16,20.htm?jl=1010265289757","applyUrl": "https://www.glassdoor.com/job-listing/product-manager-obie-JV_KO0,15_KE16,20.htm?jl=1010265289757","searchQuery": "product manager","requestedLocation": "London","requestedCountry": "GB","source": "glassdoor","sourceUrl": "https://www.glassdoor.com/Job/jobs.htm?sc.keyword=product+manager&locKeyword=London&locT=C&fromAge=7","scrapedAt": "2026-10-01T12:36:29.756Z"}
Each run also writes OUTPUT and RUN_SUMMARY records to the default key-value store with counts, duplicate skips and charged event totals. Their outcome field is COMPLETE, PARTIAL (some jobs saved, some search pages blocked), VALID_EMPTY (Glassdoor showed its own "no results" message), INVALID_INPUT, or UPSTREAM_FAILED (Glassdoor kept every search page behind a security check, so the run fails). The dataset only holds real job rows; run notes stay in these records.
Pricing
This Actor uses Pay per event with Apify platform usage included in the event price. You pay one Job scraped event for each job saved to the dataset and one Actor Start event per run. Duplicates that deduplicate removes are skipped before billing, and maxResults caps the number of job events. A run that saves no jobs makes no job charges.
Worked example in words: a run with maxResults set to fifty that saves fifty jobs costs fifty Job scraped events plus one Actor Start event. Check the live Pricing tab on this page for the current event prices, and set a maximum charge per run to cap spend.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~glassdoor-jobs-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery": "data engineer", "location": "Austin, TX", "maxResults": 25, "daysOld": 7}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/glassdoor-jobs-scraper").call(run_input={"searchQuery": "product manager","location": "San Francisco, CA","maxResults": 50,"includeNoSalaryJobs": False,})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], job["companyName"], job["salaryMin"], job["salaryMax"])
Use with AI agents (MCP)
Connect the Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP and ask:
Find 25 software engineer jobs in New York posted in the last week on Glassdoor. Return title, company, rating, salary range and apply link, and tell me the median salary.
The agent sets searchQuery, location, daysOld and maxResults, reads rows back from the dataset, and cites each job by jobUrl and scrapedAt. maxResults keeps the cost scope fixed before the run starts.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Salary benchmarking | Set includeNoSalaryJobs to false | Every row has a salary range |
| Recent hiring signals | Set daysOld to 7 | Jobs posted in the last week |
| A saved Glassdoor search | Paste the results URL in startUrls | The same filters you set on Glassdoor |
| Remote roles | Set location to Remote | Remote-labelled listings |
| Mixed hourly and annual pay | Group by salaryPeriod before comparing | Like-for-like salary figures |
| Non-US markets | Set country and a local location such as London | Correctly labelled rows for that market |
Builder's note
I built this Actor around the questions recruiters ask first: who is hiring, where, and for how much. That is why salary is parsed into numeric columns and the company rating sits on the same row. I designed maxResults as both the output cap and the billing cap, so the cost of a run is known before it starts, and I kept every row tied to its search URL so results stay easy to audit.
FAQ
Do I need a Glassdoor account?
No. The Actor collects public job listings with no login or cookies.
Can I filter by salary?
Set includeNoSalaryJobs to false to keep only jobs with a visible range, then filter on salaryMin and salaryMax.
Does it work outside the US?
Yes. Set location to a city such as London or Toronto and country to the matching two-letter code.
Where are company reviews and interview questions?
Those live on separate Glassdoor pages. Use Glassdoor Reviews Scraper for employee reviews.
Responsible use
This Actor collects public job-listing information from Glassdoor. Use it for lawful recruiting and labor-market research, review Glassdoor's terms of service and applicable laws before large runs or redistribution, and handle any personal data in line with privacy laws such as the GDPR and CCPA. Glassdoor is a trademark of its owner; this independent Actor is not affiliated with or endorsed by Glassdoor.