# Glassdoor Scraper: Jobs, Reviews, Salaries and Company Data

> Glassdoor scraper: get public jobs with full descriptions, company reviews, salaries, interviews and company profiles from 23 country sites. No login.

URL: https://cliqtomedia.com/actors/glassdoor-scraper/

Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/glassdoor-scraper?fpr=cliqto

Get public Glassdoor data as table rows. Pick one of 12 modes, such as jobs, reviews, salaries or interviews. It works on 23 country sites without a Glassdoor login.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `[]` in Company URLs. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Collect public Glassdoor jobs with full descriptions, company reviews, salaries, interviews and company profiles from 23 country sites. Research employers, track hiring and compare pay, then export JSON, CSV or Excel with no Glassdoor login.



### Good for

- Track job openings for a role, city or employer, and see only new jobs on each run.
- Read what employees write about a company: reviews, interviews and benefits.
- Compare pay for a job title across companies or places.
- Build company lists by rating, review count or headquarters.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.0013 (from $0.00091 on paid Apify plans) | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Job | $0.00036 (from $0.000252 on paid Apify plans) | One unique job delivered with available full description and employer ratings. |
| Company profile | $0.0009 (from $0.00063 on paid Apify plans) | One public company profile delivered. |
| Review | $0.000045 (from $0.000031 on paid Apify plans) | One public review delivered, including available full text. |
| Salary title | $0.0027 (from $0.00189 on paid Apify plans) | One company salary title or salary market result delivered. |
| Unblocker page | $0.012 (from $0.0084 on paid Apify plans) | One successful Apify Unblocker page. Extra to result charges. Failed HTTP responses are not charged. |
| Company lookup | $0.00005 (from $0.000035 on paid Apify plans) | One completed public company-name lookup. |
| Interview | $0.0027 (from $0.00189 on paid Apify plans) | One public interview record delivered. |
| Benefit review | $0.00004 (from $0.000028 on paid Apify plans) | One public benefit review record delivered. |
| Office location | $0.00004 (from $0.000028 on paid Apify plans) | One public office location record delivered. |
| Aggregate culture rating | $0.00004 (from $0.000028 on paid Apify plans) | One public aggregate culture rating record delivered. |
| Photo metadata | $0.00004 (from $0.000028 on paid Apify plans) | One public photo metadata record delivered. |
| Source work | $0.0003 (from $0.00021 on paid Apify plans) | For optional enrichment, monitoring, filters, multiple searches or company names, anonymous salary reports, all-country salaries, and empty searches. One unit combines 2 seconds of source work and 100 kB of estimated request data. Fractions add across the run and round up once at the end. Ordinary nonempty results without these options have no work fee. |

- One result: about $0.0017.
- 1,000 results: about $0.36.
- Every day 100 results, for 30 days: about $1.12 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 8 November 2026. Current price: https://apify.com/cliqtomedia/glassdoor-scraper?fpr=cliqto

## Questions

### Do I need a Glassdoor account, cookies or an API key?

No. The tool reads public pages and does not log in. Do not send your password or cookies.

### Does it collect personal data?

No names of review authors and no personal emails. With enrichEmails it may return generic mailboxes such as info@.

### Why did I get fewer rows than I asked for?

maxItems is a limit, not a promise. Glassdoor may have fewer matches, and filters remove rows.

### How fresh is the data?

Each row has `fetchedAt`, the time of the fetch. Job ages and posting dates come from Glassdoor and may be estimates. Run again to refresh.

### Can I get only new jobs each day?

Yes. Set `onlyNew` `true` and a `stateName`, and run the Actor on an Apify schedule with the same settings.

### Which countries are supported?

The 23 Glassdoor sites in the `country` list. Company salary and benefit tables use `salaryCountryId` and `benefitsCountryId` (1 United States, 2 United Kingdom, 3 Canada).

### Is this affiliated with Glassdoor?

No. It is an independent Actor and is not affiliated with, endorsed by or sponsored by Glassdoor.

## Input settings

- `mode` (string): Choose jobs, companies, reviews, salaries, interviews, benefits, offices, culture ratings, photos, company search, salary market search, or anonymous salary reports.
- `query` (string): Search for a job title, skill, or company. In company mode, finds one company by name. Job search URLs take priority over Query.
- `location` (string): City, state, or country. For example London. An unknown location returns no results with LOCATION_NOT_FOUND.
- `country` (string): Choose the Glassdoor website for search and source links. Company salary and benefit countries have separate fields. Public API text is returned in its available language.
- `maxItems` (integer): Stop after this many primary results. Jobs and profiles use a total for the run. Reviews and salary titles use this limit for each company. Source coverage, your budget and your run timeout can give fewer results.
- `companyUrls` (array): Public Glassdoor company links, including overview, review and salary tabs or a custom company page. Each company ID is collected once.
- `companyNames` (array): Find companies by name. Each completed name lookup costs extra, including no-match searches. Check company IDs because the source uses its best match.
- `searchUrls` (array): Glassdoor job search URLs. They take priority over Query. Input filters take priority over URL filters. Use several narrower searches to cover more jobs.
- `includeDetails` (boolean): Include full available job descriptions and employer details. On by default. Turn off to collect search results only.
- `includeSalaries` (boolean): In Company profiles mode, also save salary-title rows in the dataset. Salary rows have a separate price. Collection continues across public pages.
- `outputFormat` (string): Flat is easy to export to Sheets. Nested keeps location, salary and company objects. Salary tables are JSON text in Flat output.
- `daysOld` (integer): Keep jobs posted within this many days, from 1 to 365. Omit to use the source default.
- `easyApply` (boolean): Return only jobs marked Easy Apply by Glassdoor.
- `remoteWorkType` (boolean): Ask Glassdoor for remote jobs. The source can include hybrid work; check Remote type in the output.
- `minRating` (number): Request employers with a rating at least this high, from 0 to 5. Missing source ratings stay null.
- `employerSizes` (string): Filter by Glassdoor company size group. Omit to include all sizes.
- `radius` (string): Distance around the selected location, in miles. Glassdoor may adjust this by market.
- `sortBy` (string): Choose most relevant or most recent jobs.
- `excludeJobIds` (array): Do not return or charge for these job IDs. Add up to 1000 numeric IDs.
- `urlParam` (array): Optional source filters: industryNId, jobType, seniorityType, minSalary, maxSalary, sgocId, includeNoSalaryJob, employerId. Unsupported names are rejected.
- `monitor` (boolean): Compare jobs with a private rolling history. Older closed jobs are removed first when history is full. Use one writer for each State name.
- `onlyNew` (boolean): Return only IDs not yet saved in this history. Enables tracking. Unchanged jobs are free, but the run has a platform start charge.
- `checkClosed` (boolean): Check saved jobs missing from the current search. Closed requires explicit expiry from Glassdoor; absence or 404 is not enough. Ignored with New jobs only. Uses your run time and result budget.
- `stateName` (string): A unique name for one search history: 3–41 lowercase letters, digits or hyphens, starting with a letter and not ending with a hyphen. Use the same search settings on later runs.
- `keywords` (string): Optional alias for query. Query takes priority when both are set.

## Step by step on Apify

1. Open the Input tab. In Data to collect (`mode`), keep Jobs (box 1 in the picture).
2. In Job or company name (`query`) type `data analyst`. In Job location (`location`) type `London` (box 2).
3. In Country site (`country`) choose `United Kingdom` (box 3).
4. Set Result limit (`maxItems`) to `10` (box 4). Keep it small for the first run.
5. Click Start at the bottom of the form.
6. When the run is done, open the Output tab. Pick a view in the view tabs (1), read the job title, company and rating columns (2) and the salary columns (3), and use Export (4) to download the data.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Find data analyst jobs in a city | `mode` `jobs`, `query`, `location`, `country` | Job | `title`, `company`, `location`, `salaryMin`, `salaryMax`, `url` | Dataset export to CSV or Excel |
| Monitor new jobs every day | `monitor` or `onlyNew`, `stateName`, an Apify schedule | Job | `jobId`, `jobStatus`, `postedDateEstimate`, `url` | Apify schedule and webhook |
| Read employee feedback for a company | `mode` `reviews`, `companyUrls` | Review | `title`, `pros`, `cons`, `ratingOverall`, `reviewDate` | Dataset export, API |
| Find pay for a role | `mode` `salaries`, `salarySearch` or `salaryReports` | Salary | `title`, `basePayP50`, `totalPayP50`, `currency`, `period` | Spreadsheet |
| Build a company list | `mode` `companySearch`, `minCompanyRating`, `minReviewCount` | Company | `company`, `rating`, `reviewCount`, `size`, `headquarters` | Dataset export |

## Tips

- Set onlyNew to true and a stateName. Run on a schedule to see only new jobs.
- Reaching maxItems does not mean you have everything. Check sourceTotal in RUN_SUMMARY.
- Use several narrow searches to reach more jobs.

## Limits



- Public data only. No login, no private pages and no paywalled content. The Actor does not collect names of review authors or personal email addresses. `enrichEmails` reads only the company website (up to five pages) and keeps generic role addresses.
- Source changes. The Actor reads public Glassdoor data that is not documented by Glassdoor. Glassdoor can change or block it. Then a run can fail, and the data can be incomplete.
- Not all results. A search can show more matches than the Actor can collect. Reaching your `maxItems` does not mean you have everything. `RUN_SUMMARY` shows `sourceTotal` (the total Glassdoor shows) and `coverageComplete`. Use several narrow searches to reach more jobs.
- Speed. The Actor pauses about 0.3 seconds between requests. In our tests 50 full jobs took about 10 seconds, 1,000 reviews about 7 seconds and 7,736 salary titles of one large company about 65 seconds.
- Run time and memory. The default run timeout is 14,400 seconds (4 hours). You can change it in the run options. The Actor stops 15 seconds before the platform timeout. The Actor runs with 256 MB.
- Size. One source response is limited to 16 MB. One Dataset row is limited to about 9 MB. A larger one stops the run with `DATASET_ROW_TOO_LARGE`, and earlier rows stay saved.
- Monitoring. The history keeps up to 50,000 jobs or 8 MB. Older closed jobs are removed first. Use one run at a time for each `stateName`. Changed filters need a new `stateName`. A job missing from a search is not called closed. Glassdoor must show an expiry.
- Dates. `sourceDiscoverDate` is when Glassdoor found the job. `postedDateEstimate` is calculated from the listing age. Neither is an exact posting time.

## Sample result

```json
{
  "entityType": "job",
  "status": "complete",
  "jobId": "1010302039988",
  "title": "Interim Compliance Data and System Analyst",
  "company": "RHP",
  "companyId": 765675,
  "rating": 4.5,
  "location": "Teddington, South West England, England",
  "url": "https://www.glassdoor.co.uk/job-listing/j?jl=1010302039988",
  "ageInDays": 10,
  "postedDateEstimate": "2026-10-22",
  "postedAt": null,
  "sourceDiscoverDate": "2026-10-21T00:00:00",
  "jobStatus": "stillOpen",
  "employmentType": "Full-time",
  "remoteType": null,
  "description": "What we offer\n\nAlongside a competitive salary, we offer a great range of benefits including: ... (trimmed)",
  "salaryMin": 47195,
  "salaryMax": 47195,
  "salaryCurrency": "GBP",
  "salaryPeriod": null,
  "salarySource": "EMPLOYER_PROVIDED",
  "salaryAnnualMin": null,
  "companySize": "201 to 500 Employees",
  "companyIndustry": "Civic & Social Services",
  "overallRating": 4.5,
  "workLifeBalanceRating": 4.5,
  "recommendToFriendRating": 0.92,
  "source": "Glassdoor",
  "fetchedAt": "2026-11-01T03:40:06.974Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/glassdoor-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/glassdoor-scraper").call(run_input={
    "mode": "jobs",
    "query": "data analyst"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~glassdoor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "jobs", "query": "data analyst"}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/glassdoor-scraper")
result = tool.invoke({"run_input": {"mode": "jobs", "query": "data analyst"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [Google Jobs Scraper - Salary, Apply Links & Dates, No Login](https://cliqtomedia.com/actors/google-jobs-scraper/)
- [StepStone Jobs Scraper DE, AT, BE, NL — New Jobs, No Login](https://cliqtomedia.com/actors/stepstone-jobs-scraper/)
- [SEEK Jobs Scraper AU & NZ — Filters, No Login](https://cliqtomedia.com/actors/seek-jobs-scraper/)
- [Greenhouse Jobs Scraper & Monitor: Job Board Export](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/)
- [Wellfound Jobs Scraper: Startup Jobs to CSV & JSON](https://cliqtomedia.com/actors/wellfound-jobs-scraper/)
- [Ashby Jobs Scraper: Public Job Board Export](https://cliqtomedia.com/actors/ashby-jobs-scraper/)
