Glassdoor Jobs Universal Scraper avatar

Glassdoor Jobs Universal Scraper

Pricing

from $0.41 / 1,000 results

Go to Apify Store
Glassdoor Jobs Universal Scraper

Glassdoor Jobs Universal Scraper

πŸ’Ό Scrape Glassdoor job listings by keyword + location or by URL. Get title, company + rating, location, salary estimate, posted date, easy-apply, job type & description snippet β€” clean structured data. No login and no proxy needed.

Pricing

from $0.41 / 1,000 results

Rating

0.0

(0)

Developer

Scrapifier

Scrapifier

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 minutes ago

Last modified

Share

Glassdoor Jobs Scraper

Scrape job listings from Glassdoor by keyword and location, or from any Glassdoor jobs-search URL, and export them as JSON, CSV or Excel, or pull them straight from the API.

⚑ For every job you get the title, the hiring company and its Glassdoor rating, the location, the salary estimate (low, median, high, currency and period), the posted date and age in days, the easy-apply flag, sponsored flag, job category, job attributes (contract type, education level) and a short description with the direct link. Works on any Glassdoor country site, with no login, no cookies and no proxy. Date, job type, remote and minimum-rating filters are applied server-side by Glassdoor before you pay for a single result. You pay per job.

Apify Actor

🎯 Why scrape Glassdoor jobs?

  • Job market research: count openings for a role in a city or country, watch how they evolve week after week and spot which employers are hiring most.
  • Salary benchmarking: Glassdoor attaches a salary estimate (low, median, high) to most listings, so you can compare pay for the same title across companies, regions or contract types.
  • Lead generation: a company that posts several data engineer roles is buying tooling, training and consulting. Build lists of hiring companies with their Glassdoor rating attached.
  • Recruiting and sourcing: monitor competitors' openings, their job types and how long they stay online (ageInDays) to gauge how hard a role is to fill.
  • Job boards and aggregators: feed fresh listings, filtered by date posted or remote work, into your own board or newsletter.

πŸ“Š What data does Glassdoor Jobs Scraper extract?

FieldDescription
jobIdGlassdoor job listing id
titleJob title as displayed
urlDirect link to the job on Glassdoor
company, companyIdHiring company and its Glassdoor employer id
companyRatingCompany overall rating (1 to 5)
locationJob location
salarySalary as shown on Glassdoor (for example 45 k€ - 60 k€ (Glassdoor est.))
salaryMin, salaryMedian, salaryMaxEstimated salary low (P10), median (P50) and high (P90)
salaryCurrency, salaryPeriodCurrency and period (ANNUAL, MONTHLY, HOURLY)
postedAge, ageInDaysPosted age as shown (15j, 30j+) and the number of days since posting
descriptionSnippetShort description snippet
easyApplytrue when the job accepts Glassdoor easy-apply
isSponsoredtrue for sponsored or promoted listings
jobCategoryNormalized job family / occupation
normalizedTitleGlassdoor's normalized job title
attributes[]Job attributes (contract type, education level, ...)
sourceUrlThe Glassdoor search this job came from

With flatten enabled, an attributesText column joins the attributes into one string so the CSV or Excel export stays flat.

πŸš€ How to scrape Glassdoor jobs

  1. Open the Actor and type a job keyword in keyword (for example data engineer) and a location in location (for example France), then pick the Glassdoor domain to search in country. Or paste one or more Glassdoor jobs-search URLs (the page you land on after searching on Glassdoor, any country site) in startUrls. You can do both in the same run.
  2. Set Max jobs per search (maxJobs). Broad searches return thousands of listings, so keep a cap for a first run.
  3. Optionally narrow the search with Posted within (days), Job type, Remote jobs only and Minimum company rating.
  4. Click Start. The Actor opens a real browser, passes Glassdoor's anti-bot check once, reads the job data embedded in the results page and clicks Glassdoor's own "load more" button until your cap is reached.
  5. Open the Storage tab to preview the jobs and export them as JSON, CSV, Excel or XML, or read them from the dataset API.

The same run can be started from the Apify API, the Python or JavaScript client, or put on a schedule to collect new listings every day.

πŸ“₯ Input parameters

FieldKeyTypeDefaultDescription
Job keyword / titlekeywordstringdata engineerWhat to search for (data engineer, product manager, nurse). Combine with a location.
LocationlocationstringFranceCity, region or country (Paris, London, United States). Empty = everywhere.
Glassdoor jobs URLsstartUrlsarray of URLsnoneOne or more Glassdoor jobs-search URLs, from any Glassdoor country domain. Leave empty to use keyword and location.
Glassdoor domaincountryselectwwwDomain searched for keyword and location: www (glassdoor.com), co.uk, ca, com.au, co.in, ie, de, fr, es, it or nl. Pasted URLs keep their own domain.
Login cookies (optional)sessionCookiesarray (JSON)noneOptional browser-exported Glassdoor cookies to run as your signed-in account. Leave empty: you still get the full data.
Max jobs per searchmaxJobsinteger100Jobs to collect per search. 0 = as many as Glassdoor exposes.
Posted within (days)datePostedintegernoneOnly jobs posted within the last N days (1, 3, 7, 14, 30). Empty = any time.
Job typejobTypeselect`` (Any)fulltime, parttime, contract, internship, temporary or apprenticeship.
Remote jobs onlyremoteOnlybooleanfalseKeep only remote-friendly jobs.
Minimum company ratingminRatingselect`` (Any)3.0, 3.5 or 4.0: only jobs at companies rated at least this on Glassdoor.
Flat columns (CSV-friendly)flattenbooleanfalseAdd a flat attributesText column for CSV and Excel.
Report empty searchesemitInputStatusbooleantrueAdd an input_status report to the run's OUTPUT record.
Max 'load more' clicksmaxLoadMoreClicksinteger60Safety cap on how far the Actor pages through results (each click loads about 30 more jobs).
Page load retriesmaxChallengeRetriesinteger8Retries when a page fails to load. Increase only if runs report being blocked.
ProxyproxyConfigurationobjectoffLeave off. A proxy usually makes Glassdoor runs fail; only add one if you have your own clean, ISP-grade IPs.

Example input:

{
"keyword": "product manager",
"location": "London",
"country": "co.uk",
"jobType": "fulltime",
"datePosted": 7,
"minRating": "4.0",
"maxJobs": 200
}

A jobs-search URL looks like https://www.glassdoor.com/Job/jobs.htm?sc.keyword=data%20engineer&locKeyword=France: run the search on Glassdoor, apply your filters there, and paste the address bar into startUrls. minRating and jobType are strings, exactly as listed above ("4.0", not 4), and maxJobs applies to each search separately.

πŸ“€ Output example

Each job is one dataset item, exportable as JSON, CSV, Excel or via the API.

{
"jobId": "1010191089012",
"title": "Data Engineer",
"url": "https://www.glassdoor.com/job-listing/...?jl=1010191089012",
"company": "Sartorius",
"companyRating": 3.5,
"location": "Paris",
"salary": "45 k€ - 60 k€ (Glassdoor est.)",
"salaryMin": 45000,
"salaryMedian": 52000,
"salaryMax": 60000,
"salaryCurrency": "EUR",
"postedAge": "3j",
"ageInDays": 3,
"descriptionSnippet": "We are looking for a Data Engineer to…",
"easyApply": false,
"isSponsored": false,
"jobCategory": "development engineer",
"attributes": ["Full-time", "Master"]
}

The run's OUTPUT record also holds the run statistics (searches, unique jobs, duplicates ignored, load-more clicks, errors) and, per search, an input_status entry (ok, empty or blocked_or_empty) so you can see at a glance which input produced nothing.

πŸ’‘ Ready-to-run examples

Full-time product manager jobs in London, posted this week, at companies rated 4.0+

{ "keyword": "product manager", "location": "London", "country": "co.uk", "jobType": "fulltime", "datePosted": 7, "minRating": "4.0", "maxJobs": 200 }

Data engineer jobs anywhere in France (the default search)

{ "keyword": "data engineer", "location": "France", "country": "www", "maxJobs": 100 }

Remote data engineer jobs posted in the last 3 days

{ "keyword": "data engineer", "location": "France", "remoteOnly": true, "datePosted": 3, "maxJobs": 100 }

A Glassdoor search URL, flattened for Excel

{ "startUrls": [{ "url": "https://www.glassdoor.com/Job/jobs.htm?sc.keyword=data%20engineer&locKeyword=France" }], "maxJobs": 300, "flatten": true }

πŸ’° Pricing: how much does it cost to scrape Glassdoor jobs?

From $0.60 per 1,000 jobs on the free plan, with automatic volume discounts down to $0.41 per 1,000 on higher Apify plans. You pay only for the results you receive, there is no subscription and no start fee. New Apify accounts get free monthly platform credits to try it.

Cost is driven purely by the number of jobs returned: use maxJobs to cap each search, and datePosted, jobType, remoteOnly or minRating to let Glassdoor narrow the result set before you pay for it.

βš™οΈ Performance, proxies and limits

  • No proxy needed, and not recommended. Glassdoor sits behind Cloudflare and blocks most proxy IPs. The Actor drives a real Chromium browser, clears the check once, then reads the job data Glassdoor embeds in the results page. A proxy usually makes runs fail; add one only if you have your own clean, ISP-grade IPs.
  • Speed: the first page spends a few seconds on Glassdoor's checks, then the Actor paginates with the site's own "load more" button (about 30 jobs per click) and pushes results in batches of 100.
  • Memory: the run defaults to 4 GB because it hosts a full browser.
  • Volume: 0 in maxJobs collects everything Glassdoor exposes for that search, bounded by maxLoadMoreClicks (default 60). Split very broad searches by location or job type to reach more listings.
  • Filters are server-side: date posted, job type, remote only and minimum rating are passed to Glassdoor in the search URL, so filtered jobs are never fetched or billed.
  • Salaries: salary is Glassdoor's estimate when the employer does not publish one; the low, median and high values are Glassdoor's P10, P50 and P90.
  • Deduplication: jobs are deduplicated by jobId within each search; the OUTPUT record reports how many duplicates were ignored.
  • Empty or blocked searches: a search that returns nothing is logged as empty or blocked_or_empty in input_status. Retry later or raise maxChallengeRetries if runs report being blocked.
  • Logged-in mode: pasting sessionCookies makes the run match exactly what you see when signed in. Use the same country as the cookies' domain, and re-export them when they expire.

πŸ”Œ Integrations and API

Run Glassdoor Jobs Scraper from the Apify API, the Python or JavaScript client, or on a schedule. Connect it to Make, Zapier, n8n, Google Sheets, Slack or any webhook through Apify integrations. Every run's dataset is available as JSON, CSV, Excel or XML from the dataset API.

curl -X POST "https://api.apify.com/v2/acts/scrapifier~glassdoor-jobs-universal-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "keyword": "product manager", "location": "London", "country": "co.uk", "jobType": "fulltime", "datePosted": 7, "maxJobs": 200 }'

❓ FAQ

Is it legal to scrape Glassdoor jobs?

The Actor only reads job listings that Glassdoor shows to anyone without logging in. Listings are business data, but treat any personal data you come across in line with GDPR and other privacy laws, respect Glassdoor's terms of use, and stay responsible for how you use the data. This is not legal advice.

Do I need a Glassdoor account, login or cookies?

No. The Actor gets the full data anonymously: company names, ratings, salary estimates and descriptions. sessionCookies is an optional extra for users who want results as their signed-in account; export them with a browser extension such as Cookie-Editor (Export as JSON) and paste the array.

Can I export Glassdoor jobs to Excel or Google Sheets?

Yes. Every run's dataset downloads as CSV, XLSX, JSON or XML from the Storage tab, and the Google Sheets integration can push new jobs to a sheet automatically. Turn on flatten for a clean single-row-per-job spreadsheet.

How many jobs can I scrape per search?

As many as Glassdoor exposes for that search (set maxJobs to 0), within the maxLoadMoreClicks cap. Most users cap each run and add datePosted to fetch only new listings on a daily schedule.

Does it work on Glassdoor country sites other than glassdoor.com?

Yes. Pick the domain in country for keyword searches (glassdoor.com, .co.uk, .ca, .com.au, .co.in, .ie, .de, .fr, .es, .it, .nl), or paste a search URL from any Glassdoor country domain in startUrls; pasted URLs keep their own domain.

Are the salaries real or estimates?

Both. salary reproduces what Glassdoor displays: the employer's figure when published, Glassdoor's estimate otherwise (marked Glassdoor est.). salaryMin, salaryMedian and salaryMax are the estimated P10, P50 and P90.

Can I use my own Glassdoor search with its filters?

Yes. Run the search on Glassdoor, apply any filter the site offers, and paste the resulting URL into startUrls. The Actor keeps the URL as is and records it in sourceUrl on every job.

What if a run reports being blocked or returns 0 jobs?

Check input_status in the OUTPUT record: empty means Glassdoor had no jobs for that search, blocked_or_empty means the page never rendered job cards. Make sure no proxy is configured, retry later, or raise maxChallengeRetries.

πŸ’¬ Support

Questions, bugs or a feature request? Open an issue in the Issues tab of this Actor, I answer quickly. If Glassdoor Jobs Scraper saves you time, a rating on the Store helps others find it.