Glassdoor Jobs Scraper - Job Postings, Salaries & Ratings
Pricing
from $2.00 / 1,000 run start fees
Glassdoor Jobs Scraper - Job Postings, Salaries & Ratings
Search Glassdoor jobs by keyword or a location search URL. Get each posting's title, employer, employer rating, location, salary range with its source (employer or Glassdoor estimate), Easy Apply and job URL as JSON or CSV. For recruiters, job boards and salary research.
Pricing
from $2.00 / 1,000 run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
18 days ago
Last modified
Categories
Share
Glassdoor Jobs Scraper
Glassdoor Jobs Scraper returns public job search cards with the title, employer, location, employer rating and salary range. It keeps the salary source beside the amounts so you can distinguish an employer's published figure from a Glassdoor estimate. Search by a list of terms, paste location-filtered Glassdoor search URLs, and export one row per posting. Existing input names and output fields continue to work.
Glassdoor Jobs Scraper input
Use queries for search terms and urls for Glassdoor search URLs. Both accept a
list of strings. For existing integrations that send text instead, entries can be
separated by newlines, commas or semicolons. The singular aliases query and url
also work when the corresponding plural field is absent or empty. At least one
non-empty search term or URL is required.
This is the input used for the recorded default run:
{"queries":["software engineer"]}
Each term contributes the first search page, normally thirty job cards. The default
limit is 200 jobs across all searches. The allowed total is clamped between one
and 600. An absent, null or zero limit uses the default 200, matching the existing
actor. retries defaults to three attempts per search and is bounded between one
and six. Search terms are processed before pasted URLs. At most twenty search
targets are processed in a run; a longer list produces a warning.
For a location-specific search, choose the location on Glassdoor and pass its
search URL in urls. The recorded Austin search used this exact URL:
{"urls":["https://www.glassdoor.com/Job/austin-software-engineer-jobs-SRCH_IL.0,6_IC1139761_KO7,24.htm"]}
The keyword search uses the United States search surface. Pasted search URLs keep their own filters. The actor does not add a date filter, country filter or employment type that was absent from the supplied search. Narrow terms and specific location URLs are useful when a broad search has many more matching jobs than the returned sample.
Output and salary fields
Each dataset row retains the original seventeen fields: position, job_id, url,
title, employer, employer_rating, location, salary_text, salary_min,
salary_max, salary_currency, salary_source, salary_is_estimate, posted_age,
easy_apply, snippet and query. Missing optional information is null. Job IDs
remain strings and positions remain integers. The employer rating and parsed salary
bounds are numeric values, rather than formatted text.
Additional fields are source, platform, fetched_at, salary_currency_code and
salary_period. The original salary_currency retains the printed symbol, such as
$. salary_currency_code provides the ISO currency code alongside it. Salary
periods distinguish hourly, daily, weekly, monthly and annual amounts. A single
salary figure is returned as equal minimum and maximum values. Amounts are not
converted into another currency or annualised.
This is a real row from the recorded software engineer response:
{"job_id": "1010205632661","url": "https://www.glassdoor.com/job-listing/software-engineering-manager-spang-company-JV_IC1145800_KO0,28_KE29,42.htm?jl=1010205632661","title": "Software Engineering Manager","employer": "Spang & Company","employer_rating": 3.5,"location": "Mentor, OH","salary_text": "$126K - $183K (Glassdoor est.)","salary_min": 126000,"salary_max": 183000,"salary_currency": "$","salary_source": "Glassdoor est.","salary_is_estimate": true,"salary_currency_code": "USD","salary_period": "YEAR","posted_age": null,"easy_apply": true,"snippet": "This position will be responsible for leading the development of and the team assigned to embedded software, including project management, software design,…… Skills: CSS, FPGA, Firmware, JavaScript, Mentoring","query": "software engineer","source": "glassdoor-jobs-scraper","platform": "glassdoor","fetched_at": "2026-10-03T13:26:06.298Z","position": 1}
Treat salary_source as part of the salary value. Employer-provided figures and
Glassdoor estimates answer different questions, and averaging the two without
checking their origin can produce misleading comparisons. salary_is_estimate
is true for a Glassdoor estimate, false for another printed source and null if the
source is missing. salary_text preserves the source label and original display.
The summary key-value record reports jobs returned, searches run, jobs per search,
matching-job totals per search, salary coverage, estimate counts, employer-rating
coverage and Easy Apply counts. When one search fails but another succeeds, its
failure is retained in the errors record and the successful rows remain available.
The run also provides OUTPUT with delivery and charge information. Rows are
uniquely identified by job_id, deduplicated across searches, and numbered in
input order.
Search coverage and limitations
These rows are a sample of a search, not a complete inventory of every matching
vacancy. The search surface supplies roughly thirty cards per search and does not
provide usable page-number pagination for this actor. totalAvailablePerSearch
shows the larger count reported by Glassdoor, where available. Adding distinct
searches can expand coverage; repeating the same search will not create additional
unique rows.
A card contains a description excerpt, not the full vacancy description.
snippet therefore remains an excerpt. Posting age stays null when Glassdoor does
not show it. The actor does not invent a posting date, employment type, exact city
or full description from a missing field. Job availability, ranking and matching-job
totals can change between runs. A recently removed posting may disappear even if
the search input is unchanged.
Searches that return no cards produce an empty successful run. A temporarily unavailable search also produces an empty run with its reason recorded; it does not create a placeholder job. Invalid search input is reported with an English message. If only part of a list is available, inspect the warnings and errors as well as the dataset.
Use cases for a Glassdoor scraper
- Recruiting and sourcing. Track which employers are hiring for a role in a city, with their Glassdoor rating next to each posting, and follow the job URL to apply or reach out.
- Glassdoor salary data for job postings. Collect the salary ranges shown on job
cards for a role or location and keep
salary_sourceso employer-published figures and Glassdoor estimates stay separate in your analysis. - Job boards and aggregators. Feed fresh postings into your own board or newsletter,
deduplicated by
job_idso the same vacancy is not listed twice. - Labour-market research. Compare how many matching jobs Glassdoor reports per
search (
totalAvailablePerSearchin the summary) across roles and locations over time. - Sales and lead generation. Companies that are hiring for a function are often buying tools for it; the employer and location fields give a ready lead list.
Compared with other ways to get Glassdoor job data
Copying postings by hand works for a handful of jobs, but not for a weekly list across roles and cities. Generic multi-board job scrapers cover several sites at once, but often drop the salary source and the employer rating that make Glassdoor useful. This actor focuses on Glassdoor job search only and keeps those fields: the printed salary line, the parsed minimum and maximum as numbers, the currency symbol and ISO code, the pay period, and whether the figure is a Glassdoor estimate. There is no login, cookie or browser extension to set up, and you pay per delivered job rather than per compute minute. It does not scrape company reviews, interview reports or full vacancy descriptions; use a dedicated reviews tool if you need those.
Pricing and free-plan limit
The existing pay-per-event pricing remains $0.002 for starting a run and $0.004 for each job actually delivered. An empty run has no job events; the start fee still applies. Duplicate postings removed from the output are not charged again. Charges are based on delivered rows, rather than the number of matches advertised by the search page. The recorded thirty-job run corresponds to one start event and thirty job events, or $0.122 in actor event fees.
Users without a paid Apify plan receive at most ten job rows per run. The run
output shows when the free-plan cap applies. Paid users retain their requested
limit within the six-hundred-job maximum. For a small paid test, choose a low
limit and inspect the output before expanding the search list.
FAQ
Can I filter jobs by location?
Yes. Select a location on Glassdoor and paste the resulting search URL into urls.
This preserves the filters encoded in that URL. A plain keyword query uses the
United States search surface.
Why do I receive thirty jobs when the summary shows thousands?
The summary reports Glassdoor's matching-job total. The returned rows come from the first search page. Those are different counts. Use additional distinct terms or location searches to collect a broader sample.
Are all salary figures supplied by employers?
No. Some figures are Glassdoor estimates. Keep salary_source and
salary_is_estimate when exporting or aggregating salaries so the distinction
remains visible in the resulting dataset.
Does this actor return full descriptions or publication dates?
It returns the excerpt displayed on the search card. Posting age is supplied only when present, and missing dates are not inferred. Fields that have no source value stay null.
Is there an official Glassdoor jobs API?
Glassdoor does not offer an open job-search API that new developers can sign up for.
This actor works as a Glassdoor jobs API on the Apify platform: start a run through the
Apify API with queries or urls, then read the dataset as JSON, CSV or Excel. Runs can
also be scheduled or triggered from integrations.
Will my existing integrations continue to work?
The original input names, defaults, dataset field names and field types are
retained. New currency and period fields are added alongside the originals. The
old summary and errors records remain available.