How to use it: 3 steps
- Make a free Apify accountApify 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.
- Paste your input and press StartNo 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. - Download the resultsWhen 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.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
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.
Who uses it
Job market analysts
Track job openings for a role, city or employer.
HR and pay teams
Compare pay for a job title across companies or places.
Researchers
Read what employees write about a company.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| 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. |
Examples
- 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. That is enough for about 13,000 results.
Prices checked on 8 November 2026. See the current price on Apify.
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.
Details
Step by step on Apify
- Open the Input tab. In Data to collect (
mode), keep Jobs (box 1 in the picture). - In Job or company name (
query) typedata analyst. In Job location (location) typeLondon(box 2). - In Country site (
country) chooseUnited Kingdom(box 3). - Set Result limit (
maxItems) to10(box 4). Keep it small for the first run. - Click Start at the bottom of the form.
- 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 for better results
- 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 and good to know
- 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.
enrichEmailsreads 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
maxItemsdoes not mean you have everything.RUN_SUMMARYshowssourceTotal(the total Glassdoor shows) andcoverageComplete. 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 newstateName. A job missing from a search is not called closed. Glassdoor must show an expiry - Dates.
sourceDiscoverDateis when Glassdoor found the job.postedDateEstimateis calculated from the listing age. Neither is an exact posting time
Troubleshooting
| Code | What to do |
|---|---|
COMPANY_REQUIRED | In a company mode, add companyUrls, companyNames, employerIds or query. |
INVALID_COMPANY_URL | Use a public Glassdoor company link (overview, reviews, salaries and other tabs). |
INVALID_SEARCH_URL | Use a Glassdoor job search link on a supported country site. |
SEARCH_URLS_REQUIRE_JOBS_MODE | searchUrls works only in jobs mode. |
COMPANY_INPUT_REQUIRES_COMPANY_MODE | In jobs mode use companyName or employerIds, not companyUrls or companyNames. |
SALARY_JOB_TITLE_REQUIRED | Add salaryJobTitle for salaryReports. |
QUERY_REQUIRED | Add query or queries for salarySearch. |
STATE_NAME_REQUIRED | Add stateName when you use monitor, onlyNew or checkClosed. |
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"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. You need your Apify API token from Apify Console → Settings → API & Integrations.
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)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"}'# 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)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Input settings (25)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Data to collect | mode | string | "jobs" |
| Job or company name | query | string | "data analyst" |
| Job location | location | string | "London" |
| Country site | country | string | "UK" |
| Result limit | maxItems | integer | 10 |
| Company URLs | companyUrls | array | [] |
| Company names | companyNames | array | [] |
| Job search URLs | searchUrls | array | [] |
| Full job details | includeDetails | boolean | true |
| Company salary table | includeSalaries | boolean | false |
| Output format | outputFormat | string | "flat" |
| Maximum job age | daysOld | integer | |
| Easy Apply only | easyApply | boolean | false |
| Remote jobs only | remoteWorkType | boolean | false |
| Minimum company rating | minRating | number | |
| Company size | employerSizes | string | |
| Search distance | radius | string | |
| Sort order | sortBy | string | "relevant_desc" |
| Skip job IDs | excludeJobIds | array | [] |
| Extra search filters | urlParam | array | [] |
| Track job history | monitor | boolean | false |
| New jobs only | onlyNew | boolean | false |
| Check missing jobs for closure | checkClosed | boolean | false |
| State name | stateName | string | |
| Job title alias | keywords | string |