Glassdoor Jobs Scraper - Most Comprehensive
Pricing
from $0.04 / 1,000 jobs
Glassdoor Jobs Scraper - Most Comprehensive
๐ฅ ~$0.1/1K jobs ๐ฅ Scrape Glassdoor job listings with title, description, salary, location, and company details.
Pricing
from $0.04 / 1,000 jobs
Rating
4.7
(3)
Developer
Kai
Maintained by CommunityActor stats
2
Bookmarked
215
Total users
60
Monthly active users
2 days ago
Last modified
Categories
Share
Glassdoor Jobs Scraper
Collect Glassdoor job listings by keyword and location, employer page, or search URL. Each Dataset item contains the job, location, salary, employer, and available detail fields.
Inside each job record
| Group | Data in each job record |
|---|---|
| Job | Title, full HTML description when available, posting age, status, job type, work arrangement, skills, education, and experience |
| Location | Display name, city, state, country, coordinates, and location type |
| Compensation | Minimum, median, and maximum salary values, currency, period, and source (employer-provided or Glassdoor estimate) |
| Employer | Company identity, size, revenue, headquarters, industry, leadership, website, and detailed employer ratings |
When a detail page is unavailable, the Actor keeps the listing data and marks
the item as partial.
Use cases
- Build a job board or aggregator with structured job data.
- Track a company's open positions over time.
- Analyze salary ranges by role, location, or company.
- Feed job descriptions into NLP pipelines for skill extraction.
- Compare employer profiles and ratings across companies.
Choose a job source
| Goal | Input |
|---|---|
| Search by job, skill, or company | keyword, with optional location |
| Collect one employer's jobs | An employer page in urls |
| Reuse a Glassdoor search | A search-results page in urls |
| Combine targets | urls and keyword; URL targets run first |
Search by keyword and location
{"keyword": "Software Engineer","location": "San Francisco, CA","maxJobs": 20}
If Glassdoor cannot resolve location, the Actor still runs the keyword search
without a location filter.
Add search filters
This example keeps recent, full-time, remote, mid- or senior-level roles with a minimum annual salary of 100000 in the local currency:
{"keyword": "Software Engineer","location": "San Francisco, CA","fromAge": "7","jobType": ["fulltime"],"remoteWorkType": ["1"],"seniorityType": ["midseniorlevel"],"minSalary": 100000,"maxJobs": 50}
Search without a location
Omit location to search all locations available for the keyword:
{"keyword": "Data Scientist","maxJobs": 50}
Collect jobs from employer pages
{"urls": ["https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm"],"maxJobs": 20}
Add several employer pages to process them in input order:
{"urls": ["https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm","https://www.glassdoor.com/Jobs/Meta-Jobs-E40772.htm"],"maxJobs": 50}
Reuse a Glassdoor search URL
{"urls": ["https://www.glassdoor.com/Job/san-francisco-software-engineer-jobs-SRCH_IL.0,13_IC1147401_KO14,31.htm"]}
The Actor reads the keyword and encoded location from the URL. Set all other filters with input fields.
Combine URL and keyword targets
{"keyword": "Product Manager","location": "New York","urls": ["https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm"],"maxJobs": 30}
URL targets run first. The keyword target runs last.
Input reference
Targets and connection
| Field | Type | Default | Description |
|---|---|---|---|
| keyword | string | none | Job title, skill, or company name |
| location | string | none | City, state, or country for a keyword search |
| urls | string[] | none | HTTPS Glassdoor employer pages under /Jobs/ or search pages under /Job/; optional when keyword is set |
| proxyConfiguration | object | {"useApifyProxy":true} | Optional connection settings for the run |
Limits and filters
| Field | Type | Default | Description |
|---|---|---|---|
| maxJobs | integer | 20 | Maximum jobs for each target; 0 removes the limit |
| fromAge | string | none | Posted within 1, 3, 7, 14, or 30 days |
| jobType | string[] | none | fulltime, parttime, contract, internship, temporary |
| seniorityType | string[] | none | entrylevel, midseniorlevel, director, executive |
| remoteWorkType | string[] | none | 1 for remote, 2 for hybrid, or 3 for on-site |
| easyApply | boolean | false | Keep only Easy Apply jobs |
| minSalary | integer | none | Minimum annual salary in the local currency |
| maxSalary | integer | none | Maximum annual salary in the local currency |
| radius | string | none | Search radius in miles: 5, 10, 15, 25, 50, or 100 |
| employerSizes | string[] | none | 1to50, 51to200, 201to500, 501to1000, 1001to5000, 5001to10000, 10001+ |
| postedBy | string[] | none | jobPoster or staffingAgency |
Provide a keyword or at least one supported URL. A location affects the keyword target only. If the location cannot be resolved, the Actor continues with a keyword search that has no location filter.
The filters apply to keyword and URL targets.
Employer URLs must contain /Jobs/...-E<ID>. Search URLs can use an SEO path or query parameters under /Job/. The Actor uses the keyword and encoded location from a search URL; other filters come from the input fields. Supported hosts are HTTPS pages on glassdoor.com and glassdoor.co.uk. The Actor skips an unsupported URL when another valid target remains.
Unknown input fields are ignored. The Actor does not compare minSalary with
maxSalary, so use a range in which the minimum is not higher than the
maximum.
The next example covers every input field. Use only the filters that you need.
Output
The Actor writes one job object for each result to the default dataset. Unavailable scalar values are null, and unavailable lists are [].
Field reference
All fields in this table are present in every saved job. A nullable value uses
JSON null; an array can be empty.
| Path | JSON type and nullability |
|---|---|
jobId | number |
url | string |
profile, location, compensation, employer, meta | object |
profile.title | string |
profile.normalizedTitle, description, descriptionSnippet, discoverDate, yearsOfExperience | string or null |
profile.ageInDays | number or null |
profile.expired, easyApply | boolean |
profile.jobType, remoteWorkTypes, skills, education | string array |
location.name, type, city, state, country | string or null |
location.lat, lng | number or null |
compensation.salaryMin, salaryMax, salaryMedian | number or null |
compensation.currency, period, source | string or null |
employer.id | number |
employer.name, shortName, logoUrl, size, sizeCategory, type, revenue, headquarters, industry, sector, website | string or null |
employer.yearFounded | number or null |
employer.ceo | object or null; when present, name is a string and photoUrl is a string or null |
employer.ratings | object or null; when present, overall, careerOpportunities, compensationAndBenefits, cultureAndValues, seniorManagement, workLifeBalance, ceoRating, and recommendToFriend are numbers or null |
meta.seoJobLink | string or null |
meta.scrapedAt | string |
meta.detailStatus | complete or partial |
meta.detailStatus is complete when the detail response matched the listing. This status does not mean that every optional field has a value. A partial item contains listing-level data because detail data was unavailable or did not match.
These selected fields come from one verified live result collected on 29 July 2026. The example is a projection, not a complete job record. Long descriptions and other optional fields are omitted. The shown values are unchanged.
{"jobId": 1010195521007,"url": "https://www.glassdoor.com/job-listing/administrative-business-partner-iii-cloud-ai-google-JV_IC1147442_KO0,44_KE45,51.htm?jl=1010195521007","profile": {"title": "Administrative Business Partner III, Cloud AI","normalizedTitle": "hr business partner","ageInDays": 19,"expired": false,"easyApply": false,"jobType": ["Full-time"],"remoteWorkTypes": []},"location": {"name": "Sunnyvale, CA","type": "C","city": "Sunnyvale, CA","state": "California","country": "United States","lat": 37.36889,"lng": -122.03528},"compensation": {"salaryMin": 96000,"salaryMax": 138000,"salaryMedian": 117000,"currency": "USD","period": "ANNUAL","source": "EMPLOYER_PROVIDED"},"employer": {"id": 9079,"name": "Google Inc.","shortName": "Google","size": "10000+ Employees","headquarters": "Mountain View, CA","industry": "Internet & Web Services","ratings": {"overall": 4.4,"careerOpportunities": 4.2,"compensationAndBenefits": 4.5,"cultureAndValues": 4.3,"seniorManagement": 3.9,"workLifeBalance": 4.2,"ceoRating": 0.83,"recommendToFriend": 0.87}},"meta": {"seoJobLink": "https://www.glassdoor.com/job-listing/administrative-business-partner-iii-cloud-ai-google-JV_IC1147442_KO0,44_KE45,51.htm?jl=1010195521007","scrapedAt": "2026-07-29T20:09:13.687Z","detailStatus": "complete"}}
Target and result behaviour
- A valid search with no matches succeeds with an empty dataset.
- Targets run in input order.
maxJobsapplies to each target, not to the complete run. Job order inside one target can change between runs. - Duplicate job IDs within one target are stored once at their first occurrence. The same job can appear again when different targets return it.
- If one target fails, the Actor keeps saved jobs, tries later targets, and finishes with a warning. Invalid input, no valid target, or a storage error marks the run as failed.
- A missing detail response produces a
partialitem. It does not discard the listing. - Salary values map to the source P10, P50, and P90 values. They are not guaranteed offer bounds.
- Employer-size filters can map several public size choices to one source bucket. The Actor checks the enriched employer size before it saves a job.