Glassdoor Jobs Scraper - Most Comprehensive avatar

Glassdoor Jobs Scraper - Most Comprehensive

Pricing

from $0.04 / 1,000 jobs

Go to Apify Store
Glassdoor Jobs Scraper - Most Comprehensive

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

Kai

Maintained by Community

Actor stats

2

Bookmarked

215

Total users

60

Monthly active users

2 days ago

Last modified

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

GroupData in each job record
JobTitle, full HTML description when available, posting age, status, job type, work arrangement, skills, education, and experience
LocationDisplay name, city, state, country, coordinates, and location type
CompensationMinimum, median, and maximum salary values, currency, period, and source (employer-provided or Glassdoor estimate)
EmployerCompany 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

GoalInput
Search by job, skill, or companykeyword, with optional location
Collect one employer's jobsAn employer page in urls
Reuse a Glassdoor searchA search-results page in urls
Combine targetsurls 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

FieldTypeDefaultDescription
keywordstringnoneJob title, skill, or company name
locationstringnoneCity, state, or country for a keyword search
urlsstring[]noneHTTPS Glassdoor employer pages under /Jobs/ or search pages under /Job/; optional when keyword is set
proxyConfigurationobject{"useApifyProxy":true}Optional connection settings for the run

Limits and filters

FieldTypeDefaultDescription
maxJobsinteger20Maximum jobs for each target; 0 removes the limit
fromAgestringnonePosted within 1, 3, 7, 14, or 30 days
jobTypestring[]nonefulltime, parttime, contract, internship, temporary
seniorityTypestring[]noneentrylevel, midseniorlevel, director, executive
remoteWorkTypestring[]none1 for remote, 2 for hybrid, or 3 for on-site
easyApplybooleanfalseKeep only Easy Apply jobs
minSalaryintegernoneMinimum annual salary in the local currency
maxSalaryintegernoneMaximum annual salary in the local currency
radiusstringnoneSearch radius in miles: 5, 10, 15, 25, 50, or 100
employerSizesstring[]none1to50, 51to200, 201to500, 501to1000, 1001to5000, 5001to10000, 10001+
postedBystring[]nonejobPoster 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.

PathJSON type and nullability
jobIdnumber
urlstring
profile, location, compensation, employer, metaobject
profile.titlestring
profile.normalizedTitle, description, descriptionSnippet, discoverDate, yearsOfExperiencestring or null
profile.ageInDaysnumber or null
profile.expired, easyApplyboolean
profile.jobType, remoteWorkTypes, skills, educationstring array
location.name, type, city, state, countrystring or null
location.lat, lngnumber or null
compensation.salaryMin, salaryMax, salaryMediannumber or null
compensation.currency, period, sourcestring or null
employer.idnumber
employer.name, shortName, logoUrl, size, sizeCategory, type, revenue, headquarters, industry, sector, websitestring or null
employer.yearFoundednumber or null
employer.ceoobject or null; when present, name is a string and photoUrl is a string or null
employer.ratingsobject or null; when present, overall, careerOpportunities, compensationAndBenefits, cultureAndValues, seniorManagement, workLifeBalance, ceoRating, and recommendToFriend are numbers or null
meta.seoJobLinkstring or null
meta.scrapedAtstring
meta.detailStatuscomplete 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. maxJobs applies 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 partial item. 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.