Glassdoor Jobs & Reviews Scraper avatar

Glassdoor Jobs & Reviews Scraper

Pricing

from $0.25 / 1,000 jobs

Go to Apify Store
Glassdoor Jobs & Reviews Scraper

Glassdoor Jobs & Reviews Scraper

Scrape Glassdoor jobs, company reviews, salaries, interviews and company profiles from 23 country sites. Research employers, track hiring and benchmark pay with full job descriptions in JSON, CSV or Excel.

Pricing

from $0.25 / 1,000 jobs

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Security

Limited permissions

Share

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.

Run the prefilled search (10 data analyst jobs in London) to test it: it costs $0.0049 on the Free plan, and our test run finished in about 5 seconds. This Actor is not affiliated with Glassdoor.

Glassdoor Jobs & Reviews Scraper: jobs, reviews, salaries and company data from Glassdoor

Table of contents

What it does

The Actor reads public Glassdoor pages for 23 country sites and saves what it finds as Dataset rows. You choose one of 12 modes with the mode field:

ModeWhat you get
jobsJob listings with full descriptions, pay when shown, apply link and employer ratings
companyCompany profiles: ratings, size, industry, headquarters, awards, offices
reviewsEmployee reviews with pros, cons, advice and star ratings
salariesSalary titles of one company with percentiles and pay parts
interviewsInterview reports with outcome, difficulty and process text
benefitsBenefit reviews with rating and comment
locationsPublic office addresses
cultureCulture and values ratings by group
photosPhoto links and captions (images are not downloaded)
companySearchCompanies found by name, with rating filters
salarySearchMarket salary data for a job title and place
salaryReportsAnonymous salary reports for a job title at a company

Only public data is collected. The Actor does not log in, does not collect names of review authors and does not collect personal email addresses.

Good fit

  • 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.

👉 Try it now: open the input form

How it works

  1. You pick a mode and give a search, a list of company links or names, or job IDs.
  2. The Actor reads the public Glassdoor pages for that request, applies your filters and removes duplicates.
  3. It saves rows to the Dataset and writes a run summary (RUN_SUMMARY) and company reports (REPORTS) to the Key-value store. The summary shows how many rows were saved and why the run stopped.

👉 Try it now: open the input form

Quick start

Input form: (1) Data to collect, (2) Job or company name and Job location, (3) Country site, (4) Result limit

  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.

    Output table: (1) view tabs, (2) Title, Company and Rating columns, (3) salary columns, (4) Export button

Expected result: 10 job rows with a full description, employer ratings and a link to the Glassdoor listing. The run summary says MAX_ITEMS, which means your limit was reached.

When you change the mode, change or clear the prefilled Job or company name, Job location and Result limit too. In company modes the query is used as a company name.

👉 Try it now: open the input form

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Find data analyst jobs in a citymode jobs, query, location, countryJobtitle, company, location, salaryMin, salaryMax, urlDataset export to CSV or Excel
Monitor new jobs every daymonitor or onlyNew, stateName, an Apify scheduleJobjobId, jobStatus, postedDateEstimate, urlApify schedule and webhook
Read employee feedback for a companymode reviews, companyUrlsReviewtitle, pros, cons, ratingOverall, reviewDateDataset export, API
Find pay for a rolemode salaries, salarySearch or salaryReportsSalarytitle, basePayP50, totalPayP50, currency, periodSpreadsheet
Build a company listmode companySearch, minCompanyRating, minReviewCountCompanycompany, rating, reviewCount, size, headquartersDataset export

👉 Try it now: open the input form

Input

All fields are optional. The form has no required field, and every field has a safe default.

  • Empty input runs mode jobs, country UK and searches data analyst in London, for 10 jobs.
  • Runtime default and form prefill are different. The form prefills query data analyst, location London, country UK and maxItems 10. A field you leave out uses its runtime default from the tables below.
  • Maximum items when you leave it out: 10 for jobs, company, culture, companySearch and salarySearch. For reviews, salaries, salaryReports, interviews, benefits, locations and photos the default is 20,000.
  • Lists (arrays) take one item per line in the form, or a JSON array. Duplicates are removed. Each company ID is collected once.
  • Field names are exact. keywords is an alias for query, and limit is an alias for maxItems. The main field wins when both are set.
  • Dates use YYYY-MM-DD.
  • Some modes need a target. Company modes need companyUrls, companyNames, employerIds or query (a company name). salaryReports needs salaryJobTitle. If a target is missing the run fails at the start with a clear code (see Troubleshooting).

Input fields

Run basics (all modes)

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
modestringDefault jobsjobs, company, reviews, salaries, interviews, benefits, locations, culture, photos, companySearch, salarySearch, salaryReportsChooses what to collect.Start with jobs.
querystringPrefill data analyst. No other default, except in jobs mode with no other target, which uses data analyst.Any textJob title or skill. In company modes it is the company name. Job search URLs win over query.Clear the prefill when you switch mode.
keywordsstringNoneAny textAlias for query. query wins.Use query.
locationstringPrefill London. Runtime default London only when query is data analyst.City, state or countryPlace for job and salary search. An unknown place returns no results with LOCATION_NOT_FOUND.Use a city name the Glassdoor site knows.
countrystringDefault UKUK, US, CA, DE, FR, AU, AR, AT, BR, HK, IE, IN, IT, MX, NL, NZ, SG, ES, BE, CH, BE_FR, CH_FR, CA_FRGlassdoor site for search and source links. Salary and benefit countries have their own fields.Match it to your location.
maxItemsintegerPrefill 10. Runtime default 10 or 20,000 (see above).1 or moreStops after this many primary results. Jobs, profiles, company search and market salary use one total for the run. Reviews, salary titles and the other company sections use it for each company.Keep it small for tests.
limitintegerNone1 or moreAlias for maxItems. maxItems wins.Use maxItems.
outputFormatstringDefault flatflat, nestedflat gives simple columns for Sheets and CSV. nested keeps objects such as location and salaryEstimate.Use flat for spreadsheets.
proxyModestringDefault autoauto, direct, datacenter, unblockerChooses the connection route. auto starts direct and switches to other routes if Glassdoor blocks the request. unblocker uses a paid page fetch for every page. direct and datacenter never use the paid fetch.Keep auto. Use direct to avoid paid page fetches.
maxSourceRequestsintegerNone (no limit)Whole numberExtra cap on page requests for the run.Leave empty unless you need a hard cap.
sourceDataLimitMBnumberNone (no limit)Number above 0Extra cap on downloaded data, in decimal MB.Leave empty unless you need a hard cap.
FieldTypeDefault / prefillAllowed valuesEffectRecommendation
searchUrlsarray of strings[]Glassdoor job search URLsSearches from these URLs. They win over query. Your input filters win over URL filters.Several narrow searches reach more jobs than one broad search.
queriesarray of strings[]Up to 300 characters eachSeveral job titles. They share maxItems.Use with locations. Each extra search adds source work.
locationsarray of strings[]Up to 300 characters eachSearches each place. Results share maxItems. Empty means use location.Pair with queries.
maxResultsPerSearchintegerNone1 or moreStops each query and place pair after this many saved results. maxItems is the total.Use it so one search does not use the whole total.
jobIdsarray of strings[]1 to 16 digits eachFetches these job IDs directly, with no keyword search. Duplicate and excluded IDs are skipped.Use to refresh known jobs.
companyNamestringNoneAny textFinds this company and searches only its jobs. No default job title is added.Use for one employer.
employerIdsarray of integers[]Numeric employer IDs, for example 1651Works for jobs of one employer and for company modes.Use when you know the ID.
excludeJobIdsarray of strings[]1 to 16 digits each. Up to 1,000 IDs.Does not return or charge these jobs.Use with results you already have.
includeDetailsbooleanDefault truetrue, falsetrue adds the full description and employer details. false keeps search results only.Keep true unless you only need titles.
descriptionFormatstringDefault texttext, html, markdownFormat of the full job description.text for analysis.
includeDescriptionHtmlbooleanDefault falsetrue, falseAlso keeps the original HTML description.Turn on only if you need HTML.

Jobs: filters sent to Glassdoor

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
daysOldintegerNone (source default)1 to 365Keeps jobs posted within this many days.7 for a weekly check.
easyApplybooleanfalsetrue, falseOnly jobs marked Easy Apply.Optional.
remoteWorkTypebooleanfalsetrue, falseAsks Glassdoor for remote jobs. Hybrid jobs can appear. Check remoteType in the output.For strict remote use workplaceType.
minRatingnumberNone0 to 5Employers with a rating at least this high. Jobs without a rating keep null. Also used in company search.Optional.
employerSizesstringNone (all sizes)1, 2, 3, 4, 5Glassdoor company size group.Optional.
radiusstringNone0, 5, 10, 15, 25, 50, 100 (miles)Distance around the location. Glassdoor may adjust it by market.Use miles, or radiusKm.
radiusKmstringNone0, 10, 20, 30, 50, 100, 200 (km)Distance in kilometres, converted to miles.Use for km markets.
sortBystringrelevant_descrelevant_desc, date_descMost relevant or most recent first.date_desc for monitoring.
urlParamarray of objects[]Objects { "key": ..., "value": ... }. Keys: industryNId, jobType, seniorityType, minSalary, maxSalary, sgocId, includeNoSalaryJob, employerId, companyId. Value: up to 100 characters of letters, digits, ,, ., _, -.Adds raw Glassdoor filters. Other names are rejected.For advanced users. Prefer the named fields.
employmentTypearray of strings[]Full-time, Part-time, Contract, Internship, Temporary, Apprenticeship, Entry level, Permanent, Fixed Term ContractSeveral types run as separate searches. Duplicates are removed.Pick the types you need.
seniorityarray of strings[]Internship, Entry level, Mid-senior, Director, ExecutiveGlassdoor seniority filter.Optional.
industryarray of strings[]20 industry names, for example Information Technology, Healthcare, Financial ServicesGlassdoor industry filter. The form lists all names.Optional.
jobFunctionarray of strings[]23 job functions, for example Engineering, Sales, MarketingGlassdoor job function filter. The form lists all names.Optional.
minSalarynumberNone0 or moreMinimum yearly pay in the market currency. No currency conversion.Pair with includeJobsWithoutSalary false.
maxSalarynumberNone0 or moreMaximum yearly pay. The run fails if it is below minSalary.Optional.
includeJobsWithoutSalarybooleantruetrue, falsefalse asks for jobs with a public salary only.Turn off for pay research.

These filters run on the saved job data. Jobs that fail a filter are counted as filtered and are not charged. Using any of them adds source work (see Pricing).

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
matchTitlestringoffoff, loose, strictloose keeps titles with any search word. strict keeps titles with every word.strict for exact roles.
excludeCompaniesarray of strings[]Phrases, up to 300 charactersRemoves employers that match a phrase. Word boundaries apply.Remove staffing firms.
includeKeywordsarray of strings[]PhrasesKeeps jobs with at least one phrase in the title or description.Needs includeDetails true for description matches.
excludeKeywordsarray of strings[]PhrasesRemoves jobs with any phrase in the title or description.Optional.
includeTitleKeywordsarray of strings[]PhrasesKeeps jobs with at least one phrase in the title.Optional.
excludeTitleKeywordsarray of strings[]PhrasesRemoves jobs with any phrase in the title.Optional.
locationIncludesarray of strings[]PhrasesKeeps jobs whose location contains a phrase.Optional.
workplaceTypestringanyany, remote, hybrid, onsiteKeeps jobs with a matching source label. Jobs without a label are not guessed.Use for strict remote.
postedAfterstringNoneYYYY-MM-DDKeeps jobs with an estimated posting day on or after this date.Use daysOld for simple cases.
postedBeforestringNoneYYYY-MM-DDKeeps jobs with an estimated posting day on or before this date. Jobs without an estimate are removed.Optional.
excludeSponsoredbooleanfalsetrue, falseRemoves jobs marked as sponsored. Unknown sponsorship is kept.Optional.

Jobs: extras and tracking

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
resumeKeywordsarray of objects[]{ "keyword": "Python", "aliases": ["py"] }Scores each job against your skills and adds matched and missing skills. It does not remove jobs.Keep the list short.
deepSearchbooleanfalsetrue, falseAlso searches related titles and expandKeywords, then removes duplicates.Use to widen a search.
expandKeywordsarray of strings[]PhrasesExtra job titles for deepSearch.Use with deepSearch.
includeCompanyDetailsbooleanfalsetrue, falseAdds the full public company profile to each job: mission, CEO, counts, links, awards.Optional.
salaryBenchmarkbooleanfalsetrue, falseAdds public salary percentiles for the job title and place, with source place and confidence.Optional.
monitorbooleanfalsetrue, falseCompares jobs with a private saved history. Needs stateName.Use with an Apify schedule.
onlyNewbooleanfalsetrue, falseReturns only job IDs not yet in the history. Turns monitoring on. Unchanged jobs are free.Good for daily runs.
checkClosedbooleanfalsetrue, falseChecks saved jobs that are missing from this search. A job is closed only when Glassdoor shows an explicit expiry. Ignored with onlyNew.Use for a full history check.
stateNamestringNone3 to 41 lowercase letters, digits or hyphens, starting with a letter and not ending with a hyphenName of one search history. Names of 40 or 41 characters are cut to 30 characters plus - and 8 hex characters in the storage name. Use the same search settings on every run.One writer per name.

Company profiles and company sections

Used in company mode, and in the other company modes to choose the company.

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
companyUrlsarray of strings[]Public Glassdoor company links (overview, reviews, salaries and other tabs), or a custom company pageChooses companies. Each company ID is collected once.The safest way to pick a company.
companyNamesarray of strings[]Company namesFinds companies by name. Each completed lookup costs extra, also when nothing matches. More than one name adds source work.Check company IDs, because the closest match is used.
includeCompanyExtrasbooleantruetrue, falseAdds photos, review distributions, review locations, demographic ratings, employer content and updates inside the profile.Turn off for a smaller profile.
maxProfilePhotosinteger1000 or morePhotos inside each profile. Separate photo rows use maxPhotos.Lower it for small rows.
maxProfileUpdatesinteger4000 or moreCompany updates inside each profile.Lower it for small rows.
includeDemographicRatingsbooleanfalsetrue, falseAdds public aggregate demographic ratings. No individual data.Optional.
enrichEmailsbooleanfalsetrue, falseReads the company website (up to five pages) for public role addresses such as info@ or sales@. Personal addresses are excluded. Results vary by site.Optional.
qualifyByPaymentbooleanfalsetrue, falseLooks for public payment or shop scripts on the company website and returns processor names. A missing signal means unknown.Optional.
includeSalariesbooleanfalsetrue, falseAlso saves salary-title rows with each profile. Salary rows are charged separately.Use maxSalaryTitles to cap it.
includeReviewsbooleanfalsetrue, falseAlso saves review rows and review insights. Review rows are charged separately.Use maxReviews to cap it.
includeInterviewsbooleanfalsetrue, falseAlso saves interview rows.Use maxInterviews.
includeBenefitsbooleanfalsetrue, falseAlso saves benefit review rows.Use maxBenefits.
includePhotosbooleanfalsetrue, falseAlso saves photo rows (links and captions).Use maxPhotos.
includeLocationsbooleanfalsetrue, falseAlso saves office address rows.Use maxLocations.
includeJobsbooleanfalsetrue, falseAlso saves jobs of each company. Job rows are charged as jobs.Use maxJobs.
maxJobsinteger20000Whole numberJobs per company when includeJobs is on.Set a lower number for a first run.
jobQuerystringNoneAny textJob title filter inside each company. Empty means all its jobs.Optional.

Company search filters

Used by companySearch and the company filters.

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
minCompanyRatingnumberNone0 to 5Minimum company rating on the rating type below.Optional.
minReviewCountinteger00 or moreMinimum number of public company reviews.Use to skip tiny companies.
companyRatingTypestringoverallRatingoverallRating, careerOpportunitiesRating, compensationAndBenefitsRating, cultureAndValuesRating, diversityAndInclusionRating, seniorManagementRating, workLifeBalanceRatingRating used for company search and company filters.Optional.
companyHeadquartersstringNoneAny textKeeps profiles whose headquarters contain this text.Optional.

Reviews

Used by reviews mode, and by includeReviews in company mode. Most filters add source work (see Pricing).

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
maxReviewsinteger200001 or moreReviews for each company when includeReviews is on. reviews mode uses maxItems.Lower it to control cost.
reviewSortstringDATEDATE, RELEVANCE_V2, RATING, RATING_ASCReview order. Monthly averages and repeated phrases cover the reviews collected in this run.DATE for newest first.
reviewLanguagestringengThree-letter code, for example eng, fra, deuLanguage filter. Reviews stay in their source language.Set it to your market.
reviewLanguagesarray of strings[]Three-letter codesCollects these languages. Empty uses reviewLanguage. Date sorting merges languages by date.Optional.
includeAllReviewsbooleanfalsetrue, falseCollects all seven languages of the Glassdoor review filter. One shared limit. Duplicates are removed.Optional.
reviewsStartDatestringNoneYYYY-MM-DDKeeps reviews on or after this date. Date sorting can stop early.Use for new reviews only.
reviewsEndDatestringNoneYYYY-MM-DDKeeps reviews on or before this date.Optional.
reviewIncludesarray of strings[]PhrasesKeeps reviews with at least one phrase in the field set by reviewSearchField.Optional.
reviewExcludesarray of strings[]PhrasesRemoves reviews with any phrase in that field.Optional.
reviewSearchFieldstringconscons, pros, title, allWhich review text the phrase filters read. all includes title, pros, cons and advice.Set it when you use phrase filters.
onlyCurrentEmployeesbooleanfalsetrue, falseKeeps reviews marked as written by current employees.Optional.
reviewMinRatingnumberNone0 to 5Overall rating at least this high.Optional.
reviewMaxRatingnumberNone0 to 5Overall rating at most this high. The run fails if it is below reviewMinRating.Optional.
reviewStarsarray of integers[]Whole numbers 1 to 5Keeps reviews with one of these exact star ratings.Optional.
reviewJobTitlestringNoneAny textKeeps reviews whose job title contains this text.Optional.
reviewLocationstringNoneAny textKeeps reviews whose location contains this text.Optional.
reviewEmploymentStatusesarray of strings[]Source labels such as REGULAR. Case is ignored.Keeps these employment status labels.Optional.
minReviewWordsinteger00 or moreMinimum words across title, pros, cons and advice.Use to skip very short reviews.
painPointAnalysisbooleanfalsetrue, falseAdds a rule-based report with complaint themes, strengths, possible attrition signals and the review IDs behind them. It is not an AI report and not a prediction.Optional.

Salaries

Used by salaries, salarySearch and salaryReports. In salarySearch the search text comes from query or queries, and the place from location or locations.

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
maxSalaryTitlesinteger200001 or moreSalary titles for each company when includeSalaries is on. salaries mode uses maxItems.Lower it to control cost.
salaryCountryIdinteger1Glassdoor country ID: 1 United States, 2 United Kingdom, 3 CanadaCountry for company salary tables.Set it for non-US companies.
benefitsCountryIdinteger1Same IDs as aboveCountry for benefit reviews.Set it for non-US companies.
includeAllSalariesbooleanfalsetrue, falseCollects salary tables for every country Glassdoor lists, within maxItems. Each row names its country.Adds source work.
payPeriodstringANNUALANNUAL, MONTHLY, HOURLYPay period for company salary tables. Glassdoor converts available estimates.ANNUAL for comparison.
salaryJobTitlestringNoneAny text, for example Software EngineerJob title for anonymous salary reports. Required for salaryReports.Use a common title.
yearsOfExperiencestringALLALL, LESS_THAN_ONE, ONE_TO_THREE, FOUR_TO_SIX, SEVEN_TO_NINE, TEN_TO_FOURTEEN, FIFTEEN_PLUSExperience filter for anonymous salary reports. Company salary tables always cover all years.Optional.

Interviews, benefits, offices and photos

FieldTypeDefault / prefillAllowed valuesEffectRecommendation
maxInterviewsinteger200001 or moreInterviews for each company when includeInterviews is on.Lower it to control cost.
interviewSortstringDATEDATE, RELEVANCE, DIFFICULTY, DIFFICULTY_ASCInterview order.DATE for newest.
interviewJobTitlestringNoneAny textKeeps interviews for this job title.Optional.
interviewOutcomearray of strings[]ACCEPT_OFFER, DECLINE_OFFER, NO_OFFERKeeps these outcomes.Optional.
interviewExperiencearray of strings[]POSITIVE, NEUTRAL, NEGATIVEKeeps these experiences.Optional.
interviewDifficultyarray of strings[]VERY_EASY, EASY, AVERAGE, DIFFICULT, VERY_DIFFICULTKeeps these difficulty labels. Empty keeps all.Optional.
interviewsStartDatestringNoneYYYY-MM-DDKeeps interviews on or after this date.Optional.
maxBenefitsinteger200001 or moreBenefit reviews for each company when includeBenefits is on.Lower it to control cost.
benefitsStartDatestringNoneYYYY-MM-DDKeeps benefit reviews on or after this date. Source dates have day precision.Optional.
maxPhotosinteger200001 or morePhoto rows for each company.Lower it to control cost.
maxLocationsinteger200001 or moreOffice rows for each company.Lower it to control cost.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Both a search URL and a query are setsearchUrlsqueryThe URL wins.A job search link and data analystSame as the URL search.
Both a URL filter and an input filter are setsearchUrlsdaysOld, easyApply and other filtersThe input filter wins.URL says 30 days, input says daysOld 7Fewer rows.
Both maxItems and limit are setmaxItemslimitmaxItems wins.maxItems 10, limit 5010 rows.
Both query and keywords are setquerykeywordsquery wins.
Several queries or placesqueries, locationsmaxItems, maxResultsPerSearchAll searches share maxItems. maxResultsPerSearch caps each pair.3 queries, maxItems 30Source work is charged.
Monitoringmonitor, onlyNew, checkClosedstateNameAny of the three turns monitoring on and needs stateName. checkClosed is ignored with onlyNew.onlyNew true, stateName london-data-analystSource work is charged. Unchanged jobs are free.
Changed filters on the same historystateNameAny search or filter fieldThe run stops with STATE_SCOPE_MISMATCH.Change location and keep the nameUse a new stateName.
Name already used by another ActorstateNameA storage with this name made by another Actor in your accountThe run still returns results. Warning STATE_STORE_FALLBACK: history is kept in the storage glassdoor-scraper-<first 24 characters of stateName>-<8 hex characters>. Warning STATE_STORE_UNAVAILABLE: jobs are compared only within this run.stateName london-data-analyst used by another ActorUse a new stateName.
Company options in jobs modemode jobscompanyUrls, companyNamesRejected. Use companyName or employerIds for jobs of one employer.Run fails at the start.
Search URLs in company modesmode other than jobssearchUrlsRejected.Run fails at the start.
Company section limitsincludeReviews and othersmaxReviews and othersA section is saved only when its include switch is on. The max field caps it per company.includeReviews true, maxReviews 50Review rows are charged.
Paid page fetchproxyModeGlassdoor blockingauto can switch to the paid page fetch if other routes are blocked. direct never does.$0.012 per successful page on the Free plan.

Input examples

Find new data analyst jobs in London

{
"mode": "jobs",
"query": "data analyst",
"location": "London",
"country": "UK",
"maxItems": 10
}

Expected behavior: searches the UK Glassdoor site and saves up to 10 unique jobs with full descriptions. Expected output: job rows with title, company, location, salaryMin, salaryMax, url. Limit or cost note: $0.0049 on the Free plan. No source work fee.

Read the newest reviews of one company

{
"mode": "reviews",
"companyUrls": ["https://www.glassdoor.com/Overview/Working-at-Microsoft-EI_IE1651.11,20.htm"],
"country": "US",
"maxItems": 100,
"reviewSort": "DATE"
}

Expected behavior: saves up to 100 reviews of that company, newest first. Expected output: review rows with title, pros, cons, ratingOverall, reviewDate. Limit or cost note: $0.0058 on the Free plan for 100 reviews ($0.0013 start plus $0.0045 for reviews).

Get salary titles of one company

{
"mode": "salaries",
"companyUrls": ["https://www.glassdoor.com/Overview/Working-at-Microsoft-EI_IE1651.11,20.htm"],
"country": "US",
"salaryCountryId": 1,
"payPeriod": "ANNUAL",
"maxItems": 3
}

Expected behavior: saves 3 salary titles with percentiles and pay parts. Expected output: salary rows with title, salaryCount, basePayP50, totalPayP50, currency. Limit or cost note: $0.0094 on the Free plan. Salary titles cost more than other rows.

Check only new jobs each day

{
"mode": "jobs",
"query": "data analyst",
"location": "London",
"country": "UK",
"maxItems": 50,
"sortBy": "date_desc",
"onlyNew": true,
"stateName": "london-data-analyst"
}

Expected behavior: the first run saves the jobs it finds and remembers their IDs. Later runs with the same settings return only new IDs. A repeat run with no new jobs ends with NO_NEW_RESULTS. Expected output: job rows with jobId, jobStatus, url. Limit or cost note: source work is charged for monitoring. Keep one run at a time for each stateName.

👉 Try it now: open the input form

Output

Rows are saved in the Dataset. Every row has entityType (job, company, review, salary, salaryReport, interview, benefit, location, culture or photo), status, source, sourceUrl and fetchedAt. Missing source values stay null. The Actor does not invent values.

The Console Dataset has these views:

View titleShows
Jobs, companies, reviews and salariesOverview table of jobs and companies
ReviewsReview text and ratings
SalariesSalary titles with percentiles
InterviewsInterview reports
Benefit reviewsBenefit ratings and comments
Office locationsOffice addresses
Culture ratingsCulture ratings by group
PhotosPhoto links and captions
Anonymous salary reportsAnonymous pay ranges

The Output tab also links the run summary, the company comparison, review insights and company reports. These are records in the Key-value store (RUN_SUMMARY and REPORTS). In the other modes REPORTS only says that the run made no company reports.

Output fields

With outputFormat flat (the default) all values are simple columns. Lists and objects such as awards or counts are saved as JSON text in columns that end in Json. With nested, location and pay are objects (location.name, salaryEstimate.min).

Job fields

FieldTypeCan be null?ExampleMeaning
entityTypestringnojobRow type.
statusstringnocompleteRow status. Missing source fields stay empty.
jobIdstringno1010302039988Glassdoor job ID.
titlestringnoInterim Compliance Data and System AnalystJob title.
companystringyesRHPEmployer name.
companyIdintegeryes765675Glassdoor employer ID.
ratingnumberyes4.5Employer overall rating, 0 to 5.
locationstringyesTeddington, South West England, EnglandJob location.
urlstringnohttps://www.glassdoor.co.uk/job-listing/j?jl=1010302039988Public job page.
seoUrlstringyeshttps://www.glassdoor.co.uk/job-listing/...Longer public job page link.
ageInDaysintegeryes10Age of the listing in days.
postedDateEstimatestringyes2026-10-22Posting day estimated from the listing age.
postedAtstringyesnullExact posting time, when Glassdoor gives it.
sourceDiscoverDatestringyes2026-10-21T00:00:00When Glassdoor first discovered the job. It is not the exact posting date.
postedLabelstringyesOct 21, 2026Date label shown by Glassdoor.
jobStatusstringyesstillOpenNew, stillOpen or closed. closed needs an explicit Glassdoor expiry.
expiredbooleanyesfalseGlassdoor expiry flag.
sponsoredbooleanyesfalseMarked as sponsored.
easyApplybooleanyesfalseEasy Apply job.
occupationstringyessystems analystGlassdoor occupation label.
occupationIdintegeryes100136Glassdoor occupation ID.
employmentTypestringyesFull-timeEmployment type.
remoteTypestringyesnullRemote or hybrid label, when Glassdoor gives one.
remoteTypeSourcestringyesnullWhere the remote label came from.
senioritystringyesnullSeniority label.
senioritySourcestringyesnullWhere the seniority label came from.
descriptionstringyesWhat we offer ...Full job description in the chosen format. null when includeDetails is off.
descriptionFormatstringnotextFormat of description.
descriptionSnippetstringyesYou'll act as the lead administrator ...Short description from the search page.
applyUrlstringyes/partner/jobListing.htm?...Apply link from Glassdoor.
salaryMinnumberyes47195Lowest pay shown. Check currency and period.
salaryMaxnumberyes47195Highest pay shown.
salaryMediannumberyes47195Median pay shown.
salaryCurrencystringyesGBPPay currency. No conversion.
salaryPeriodstringyesnullPay period shown.
salarySourcestringyesEMPLOYER_PROVIDEDWhere the pay came from.
salaryAnnualMinnumberyesnullYearly estimate of the lowest pay. Hourly pay assumes 2,080 hours a year.
salaryAnnualMaxnumberyesnullYearly estimate of the highest pay.
salaryAnnualHoursnumberyesnullHours used for the yearly estimate.
companySizestringyes201 to 500 EmployeesEmployer size.
companyIndustrystringyesCivic & Social ServicesEmployer industry.
companyHeadquartersstringyesTeddington, United KingdomEmployer headquarters.
companyRevenuestringyesUnknown / Non-ApplicableEmployer revenue band.
companyYearFoundedintegeryes2000Year founded.
companyWebsitestringyesrhp.exampleEmployer website.
companyTypestringyesNonprofit OrganizationEmployer type.
companyDescriptionstringyesRHP is an award-winning ...Employer description.
overallRatingnumberyes4.5Employer overall rating.
cultureAndValuesRatingnumberyes4.6Culture and values rating.
compensationAndBenefitsRatingnumberyes4.8Pay and benefits rating.
seniorManagementRatingnumberyes4.4Senior management rating.
workLifeBalanceRatingnumberyes4.5Work-life balance rating.
careerOpportunitiesRatingnumberyes4.5Career opportunities rating.
diversityAndInclusionRatingnumberyes4.6Diversity and inclusion rating.
recommendToFriendRatingnumberyes0.92Share who recommend the employer, 0 to 1.
ceoRatingnumberyes0.98Share who approve the CEO, 0 to 1.
businessOutlookRatingnumberyes0.93Share with a positive business outlook, 0 to 1.
attributesJsonstringyes["Flexible working benefit", ...]Skills and benefit tags as JSON text.
source, sourceUrlstringnoGlassdoorSource name and public source page.
fetchedAtstringno2026-11-01T03:40:06.974ZTime the data was fetched, in UTC.

Optional job fields appear only when you turn on the matching option: matched and missing skills and a score (resumeKeywords), salary percentiles with source place and confidence (salaryBenchmark), company profile data (includeCompanyDetails), website contact and payment markers (enrichEmails, qualifyByPayment).

Company profile fields

FieldTypeCan be null?ExampleMeaning
entityType, statusstringnocompany, completeRow type and status.
companyIdintegerno1651Glassdoor employer ID.
companystringnoMicrosoftCompany name.
rating, overallRatingnumberyes3.9Overall rating, 0 to 5.
cultureAndValuesRating, compensationAndBenefitsRating, seniorManagementRating, workLifeBalanceRating, careerOpportunitiesRating, diversityAndInclusionRatingnumberyes3.8Ratings by topic, 0 to 5.
recommendPercent, ceoApprovalPercentnumberyes74, 73Share who recommend the company and approve the CEO, 0 to 100.
recommendToFriendRating, ceoRating, businessOutlookRatingnumberyes0.74The same shares as 0 to 1, plus business outlook.
reviewCountintegeryes69878Public review count.
size, industry, headquarters, revenue, companyTypestringyes10000+ EmployeesCompany facts.
yearFoundedintegeryes1975Year founded.
description, missionstringyesTo empower every person ...Company text.
website, logoUrlstringyeshttps://company.example/Links.
awardsJson, bestPlacesToWorkJson, bestLedCompaniesJson, ceoJson, countsJson, officeAddressesJson, subsidiariesJson, competitorsJson, linksJson and similar ...Json columnsstringyes[{"name":"..."}]Lists and objects saved as JSON text in flat output.
url, sourceUrl, fetchedAtstringnoPublic page and fetch time.

Review fields

FieldTypeCan be null?ExampleMeaning
reviewIdstringno106152257Glassdoor review ID.
companyId, companyinteger, stringno1651, MicrosoftCompany of the review.
titlestringyesToxic politics and constant layoffs ...Review headline.
pros, cons, advicestringyesPolitics, no WLB, ...Review text. advice is the advice to management.
reviewDatestringyes2026-10-29T22:10:28.997Review date.
jobTitle, locationstringyesData ScientistJob title and place given by the author.
isCurrentEmployeebooleanyestrueAuthor is a current employee.
employmentStatusstringyesREGULAREmployment status label.
employmentLength, jobEndingYear, divisionNamenumber, number, stringyes0Tenure, end year and division when given.
ratingOverallnumberyes3Overall stars, 1 to 5.
ratingWorkLifeBalance, ratingCultureAndValues, ratingDiversityAndInclusion, ratingCareerOpportunities, ratingCompensationAndBenefits, ratingSeniorLeadershipnumberyes3Stars by topic.
ratingRecommendToFriend, ratingCeo, ratingBusinessOutlooknumberyesnullOpinions the author gave, when given.
language, requestedLanguage, originalLanguagestringyesengReview language.
prosOriginal, consOriginal, adviceOriginal, summaryOriginal, translationMethodstringyesnullOriginal text and translation method, when Glassdoor translated the review.
employerResponsesJsonstringyes[]Company replies as JSON text.
helpfulCount, unhelpfulCountintegeryes0Votes.
featuredbooleanyesfalseFeatured review.
sourceUrl, fetchedAtstringnoPublic page and fetch time.

No names of review authors or contact fields are collected.

Salary fields (salaries and salarySearch)

FieldTypeCan be null?ExampleMeaning
companyId, companyinteger, stringyes1651, MicrosoftCompany. Market salary rows may have a different employer or none.
titlestringnoSoftware EngineerJob title.
salaryCountintegeryes44811Number of reports behind the figures.
currency, periodstringyesUSD, ANNUALCurrency (not converted) and pay period.
basePayMean, basePayP10, basePayP25, basePayP50, basePayP75, basePayP90numberyes174722.12Base pay: mean and percentiles. P50 is the source median.
totalPayMean, totalPayP10 to totalPayP90numberyes232934.71Total pay: mean and percentiles.
cashBonus, stockBonus, profitSharing, salesCommission, tips, totalAdditionalPay columns (...Mean, ...P10 to ...P90)numberyes23004.45Pay parts. Not every part has all percentiles.
confidencestringyesCONFIDENTGlassdoor confidence label.
salaryLocation, countryIdstring, integeryesUnited States, 1Actual place and country of the figures. It can be wider than the place you asked for.
updatedAtstringyes2026-10-30T02:36:23.387Last source update.
sourceUrl, fetchedAtstringnoPublic page and fetch time.

salarySearch rows also have query, companyJobCount and companyRating and keep the searched place in locationJson.

Anonymous salary report fields (salaryReports)

FieldTypeCan be null?ExampleMeaning
companystringnoMicrosoftCompany.
requestedTitle, titlestringnoSoftware EngineerTitle you asked for and title of the report.
matchedBystringyesoccupationHow the report matched your title: exact title or occupation fallback.
yearsOfExperiencestringyesONE_TO_THREEExperience band.
annualBasePay, annualCashBonus, annualStockBonus, annualAdditionalPaynumberyesnullPay parts, when shown.
annualTotalPayMin, annualTotalPayMaxnumberyes116000, 134000Total pay range shown for the report.
currency, periodstringyesUSD, ANNUALCurrency and period.
reviewDatestringyes2026-10-31Report date.
city, state, metro, countrystringyesSeattle, WAPlace of the report.
reportFingerprintstringno81fb8fa5...Stable ID used to remove duplicates.

Interview, benefit, office, photo and culture fields

FieldTypeCan be null?ExampleMeaning
interviewId, title, experience, outcome, difficultystringtitle yes106168088, Intern, POSITIVE, DECLINE_OFFER, EASYInterview ID, job title, and the author's experience, outcome and difficulty.
interviewDate, reviewDatestringyes2026-10-31T20:14:04.617Interview date (often empty) and report date.
processDescription, negotiationDescription, advicestringyesFair, 3 rounds ...Interview text.
questionsJson, employerResponsesJsonstringyes[]Questions and company replies as JSON text.
benefitReviewId, rating, comment, isCurrentEmployeestring, number, string, booleanyes14639050, 5Benefit review ID, stars, comment and employee status.
location, state, metro, countrystringyesRedmond, WAPlace given for a benefit review or interview.
locationId, address, citystringyesOffice ID, address and city (country as above).
photoId, caption, photoUrlstringyesPhoto ID, caption and image link. The image is not downloaded.
category, group, reviewCountstring, string, integernogender, man, 4419Culture group type, group name and number of reviews behind it.
overallRating and topic ratingsnumberyes4Group ratings, 0 to 5. Recommend, CEO and outlook shares are 0 to 1.
company, companyId, sourceUrl, fetchedAtnoCompany, public page and fetch time.

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDataset rows. RUN_SUMMARY says status complete.One row per job, review, salary title and so on.Open a view, export or call the API.
Valid search with no matchThe Dataset is empty. The run is SUCCEEDED. RUN_SUMMARY has status not_found and stopReason NO_RESULTS.No rows.Check the query, place and filters.
Result limit reachedDataset rows. stopReason MAX_ITEMS.Rows up to your limit.Raise maxItems if you need more.
Cost limit reachedThe run is SUCCEEDED. RUN_SUMMARY has status partial and stopReason CHARGE_LIMIT.Rows saved before the limit.Raise the maximum cost per run.
Partial dataDataset rows with null fields. warnings in RUN_SUMMARY name partial sections.Rows with empty fields.Read warnings and coverageComplete.
Technical failureThe run is FAILED. Rows saved before the failure stay in the Dataset. RUN_SUMMARY has stopReason with the code.Rows saved so far.Read the code in Troubleshooting. Retry later.

Output example

{
"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"
}

This example is trimmed. It shows one job from a prefill run (10 data analyst jobs, London, UK). A null value means Glassdoor did not give that value, for example salaryPeriod here. A field that does not apply to the mode is not in the row. Do not expect every field in every row, and do not expect every job to show a salary.

👉 Try it now: open the input form

Pricing

Pricing unit

The Actor uses pay per event. You pay for the events below, and the platform usage of the run is paid by the Actor developer, not by you. The primary event is Job. The prices below are for the Free plan. Paid Apify plans get a discount: Bronze 10%, Silver 20%, and Gold, Platinum and Diamond 30%.

EventCharged forFreeBronzeSilverGold and above
Actor Start (apify-actor-start)Once per run. Apify charges one start event per GB of memory; the Actor always runs with 256 MB, so it is always one start event.$0.0013$0.00117$0.00104$0.00091
Job (job)One unique job$0.00036$0.000324$0.000288$0.000252
Review (review)One review$0.000045$0.0000405$0.000036$0.0000315
Salary title (salary)One company salary title or market salary result$0.0027$0.00243$0.00216$0.00189
Interview (interview)One interview$0.0027$0.00243$0.00216$0.00189
Company profile (company)One company profile$0.0009$0.00081$0.00072$0.00063
Company lookup (company-search)One completed company-name lookup, also when nothing matches$0.00005$0.000045$0.00004$0.000035
Benefit review (benefit)One benefit review$0.00004$0.000036$0.000032$0.000028
Office location (location)One office$0.00004$0.000036$0.000032$0.000028
Culture rating (culture)One culture rating row$0.00004$0.000036$0.000032$0.000028
Photo metadata (photo)One photo row$0.00004$0.000036$0.000032$0.000028
Source work (source-work)Only for the options below$0.0003$0.00027$0.00024$0.00021
Unblocker page (public-page)One successful page, only with proxyMode unblocker, or when auto has to switch to it$0.012$0.0108$0.0096$0.0084

Source work. One unit is 2 seconds of work on the source plus 100 kB of estimated request data. Fractions add up over the run and round up once at the end. An ordinary, non-empty run has no source work fee. Source work is charged when you use:

  • monitoring (monitor, onlyNew, checkClosed);
  • more than one company name, more than one query, place or search URL, or deepSearch;
  • any job filter applied after the search (see the "Jobs: filters applied after the search" table);
  • review filters, several review languages, includeAllReviews, or interview and benefit date, experience and difficulty filters;
  • minCompanyRating, minReviewCount above 0, or companyHeadquarters;
  • includeCompanyDetails, salaryBenchmark, enrichEmails, qualifyByPayment;
  • salaryReports mode and includeAllSalaries;
  • a search with no results (empty search).

Unblocker pages. With proxyMode auto, the Actor first tries cheaper routes. If Glassdoor blocks them, it can switch to a paid page fetch. You pay the public-page price only for pages that load with usable content. Failed HTTP responses and pages that hold only an error message are not charged. Use proxyMode direct if you never want this charge.

Empty and failed runs.

  • A valid search with no results costs the start fee plus 1 source work unit: $0.0016 on the Free plan.
  • Failed requests are not charged. If Glassdoor gives no successful answer for about 4 minutes, the run stops with SOURCE_STALLED. Rows saved before a failure are charged, because they were delivered.
  • Set Maximum cost per run to at least $0.00166, the minimum Apify accepts for this Actor. When the limit is reached, the run stops with CHARGE_LIMIT and keeps the rows it saved.
  • Platform usage is paid by the developer on every run.

Measured run. The prefill run (10 jobs, London, UK) finished in about 5 seconds. Its platform usage was $0.0003, paid by the developer.

Cost examples

ScenarioInput scopeExpected item/event countBase chargeOptional chargeStop/cap behavior
Empty searchValid search, no results1 start, 1 source work$0.0016NoneRun ends NO_RESULTS
Small test10 jobs, London, UK1 start, 10 jobs$0.0049NoneEnds at MAX_ITEMS
Normal100 jobs1 start, 100 jobs$0.0373NoneEnds at MAX_ITEMS
Large1,000 jobs1 start, 1,000 jobs$0.3613NoneEnds at MAX_ITEMS
Reviews1,000 reviews of one company by URL1 start, 1,000 reviews$0.0463NoneEnds at MAX_ITEMS
Salaries3 salary titles of one company1 start, 3 salary titles$0.0094NoneEnds at MAX_ITEMS
Salaries, larger1,000 salary titles of one company1 start, 1,000 salary titles$2.7013NoneEnds at MAX_ITEMS

The start fee is paid on every run, so very small runs are not the cheapest option per row. Salary titles and interviews cost more per row than jobs and reviews.

Jobs by plan (start fee included):

JobsFreeBronzeSilverGold and above
10$0.0049$0.00441$0.00392$0.00343
100$0.0373$0.03357$0.02984$0.02611
1,000$0.3613$0.32517$0.28904$0.25291

For more about pay per event, see Apify Store pricing.

👉 Try it now: open the input form

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.
  • Pay. Currencies are not converted. A salary row names its actual country and place, and it can be wider than the place you asked for. Company salary tables cover all years of experience.
  • Language. Job and review text stays in its source language. Reviews use reviewLanguage (default eng).
  • Photos. Photo rows have links and captions. Images are not downloaded.
  • Not an AI. Resume scores and pain point reports use fixed rules. They are not AI output and not predictions.
  • Not affiliated. This Actor is not affiliated with, endorsed by or sponsored by Glassdoor. Check Glassdoor's terms for your use of the data.

👉 Try it now: open the input form

API, export and integrations

  • API: Start the Actor with the Apify API and read the Dataset. The Actor ID is vhYvuITavD5kacL8L, and the Store name is cliqtomedia/glassdoor-scraper. See the Apify API reference.
  • Export: Download the Dataset as JSON, CSV, Excel, XML, HTML or RSS from the Console or the API. Use outputFormat flat for spreadsheets.
  • Scheduling: Run the same input every day with an Apify schedule. For job monitoring, set onlyNew and a stateName so each run returns only new jobs.
  • Webhooks / no-code: Start another system when a run finishes with Apify webhooks and integrations. The next system reads the Dataset rows.
  • SDK: Use the Apify JavaScript client or the Python client.

Run it with one HTTP call. This call waits for the run and returns the rows:

curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~glassdoor-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"jobs","query":"data analyst","location":"London","country":"UK","maxItems":10}'

Use the asynchronous run endpoint for large runs, because a synchronous call times out after a few minutes.

Use with AI agents (MCP)

  • MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/glassdoor-scraper. See the Apify MCP docs.
  • Smallest useful input (same as the form prefill):
{
"mode": "jobs",
"query": "data analyst",
"location": "London",
"country": "UK",
"maxItems": 10
}
  • Key output fields: title (job title), company (employer), location (job place), salaryMin and salaryMax (pay shown, with salaryCurrency), url (public job page), description (full text).
  • Typical run: about 5 seconds and $0.0049 on the Free plan for 10 jobs.
  • Limits an agent must respect: set maxItems to what you need, set a maximum cost per run, and use filters on purpose, because they add source work. Salary titles and interviews cost $0.0027 each on the Free plan. Large runs take longer than a tool call waits, so poll the run.

👉 Try it now: open the input form

Troubleshooting

Run failed with SOURCE_BLOCKED, RATE_LIMIT, SOURCE_HTTP_ERROR, NETWORK_ERROR or SOURCE_STALLED

Symptom: the run is FAILED. Some rows may already be in the Dataset. Likely reason: Glassdoor refused or slowed the requests, or the network failed. The Actor already retried and, with proxyMode auto, tried other routes. Check: open RUN_SUMMARY and read stopReason, requests, retries and warnings. Rows saved before the failure stay in the Dataset and are charged. Action: run again later with a smaller maxItems, or split the search. A failure is never shown as an empty result.

Dataset is empty and the run is SUCCEEDED

Symptom: no rows, stopReason NO_RESULTS, or LOCATION_NOT_FOUND. Likely reason: the search matched nothing, a filter removed everything, or Glassdoor does not know the place. Check: try the same search on the Glassdoor site you chose in country. Remove filters one by one. Read filtered and discovered in RUN_SUMMARY. Action: change the query or place, or remove filters. You paid the start fee and one source work unit.

Fewer rows than maxItems

Symptom: the run ends with EXHAUSTED or NO_RESULTS and fewer rows than your limit. Likely reason: Glassdoor has fewer matching items, filters removed some, duplicates were removed, or a listing was removed between the search and the details. Removed listings are skipped, are not charged and are noted as LISTING_REMOVED_BEFORE_DETAILS. Check: RUN_SUMMARY fields sourceTotal, discovered, duplicates, filtered and coverageComplete. Action: widen the search or use several searches.

Warning STATE_STORE_FALLBACK or STATE_STORE_UNAVAILABLE

Symptom: RUN_SUMMARY warnings lists STATE_STORE_FALLBACK or STATE_STORE_UNAVAILABLE in a monitor or onlyNew run. Likely reason: your account already has a storage named glassdoor-scraper-state-<stateName> that another Actor or you made. This Actor may not open storages it did not create. Check: open Storage > Key-value stores in your account and look for glassdoor-scraper-<first 24 characters of stateName>-<8 hex characters>. That is where STATE_STORE_FALLBACK keeps the history. With STATE_STORE_UNAVAILABLE nothing is kept and jobs are compared only inside the run. Action: the results are complete either way. For a clean history use a new stateName.

Run ended with CHARGE_LIMIT

Symptom: the run is SUCCEEDED but status is partial. Likely reason: the maximum cost per run was reached. Check: the run's cost limit and the number of rows saved. Action: raise the limit and run again. Use excludeJobIds to skip jobs you already have.

Run failed at the start with an input code

Symptom: the run fails in seconds with a code in stopReason. Likely reason: a required input is missing or wrong. Check and action:

CodeWhat to do
COMPANY_REQUIREDIn a company mode, add companyUrls, companyNames, employerIds or query.
INVALID_COMPANY_URLUse a public Glassdoor company link (overview, reviews, salaries and other tabs).
INVALID_SEARCH_URLUse a Glassdoor job search link on a supported country site.
SEARCH_URLS_REQUIRE_JOBS_MODEsearchUrls works only in jobs mode.
COMPANY_INPUT_REQUIRES_COMPANY_MODEIn jobs mode use companyName or employerIds, not companyUrls or companyNames.
SALARY_JOB_TITLE_REQUIREDAdd salaryJobTitle for salaryReports.
QUERY_REQUIREDAdd query or queries for salarySearch.
STATE_NAME_REQUIREDAdd stateName when you use monitor, onlyNew or checkClosed.
INVALID_SALARY_RANGE, INVALID_REVIEW_DATE_RANGE, INVALID_REVIEW_RATING_RANGEMake the minimum smaller than the maximum, or the start date earlier than the end date.
STATE_SCOPE_MISMATCHYou changed the search for an existing stateName. Use a new name.

A value outside the allowed list or range (for example an unknown mode) is rejected by the Apify platform before the run starts.

Run failed with DEADLINE

Symptom: the run is FAILED after a long time. Likely reason: the run timeout was reached. Check: the timeout in the run options and the rows saved. Action: raise the timeout, lower maxItems, or split the work. Saved rows stay in the Dataset.

The cost is higher than expected

Symptom: the bill has source work or Unblocker page charges. Likely reason: you used an option that adds source work, or proxyMode auto switched to the paid page fetch. Check: RUN_SUMMARY fields sourceWorkUnits, workReasons and unblockerPages. Action: remove the option, set proxyMode to direct, and set a maximum cost per run.

👉 Try it now: open the input form

FAQ

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

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

Does it collect personal data?

No names of review authors and no personal email addresses. With enrichEmails it may return generic company mailboxes such as info@ from the company's own website.

Why does my review or salary run cost more than a job run?

Each event has its own price. A salary title or an interview costs $0.0027 on the Free plan. A job costs $0.00036 and a review $0.000045. Use maxItems and a maximum cost per run to stay in budget.

Why did I get fewer rows than I asked for?

maxItems is a limit, not a promise. Glassdoor may have fewer matches, and filters and duplicates remove rows. Check sourceTotal and coverageComplete in RUN_SUMMARY.

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.

👉 Try it now: open the input form

👉 Try it now: open the input form

Support

For a bug, a question or a feature request, open the Issues tab of this Actor on Apify. Please add the run ID, the mode you used and the non-sensitive error text or stopReason from RUN_SUMMARY. Never send tokens, cookies, billing data or private data.

👉 Try it now: open the input form