Glassdoor Jobs Scraper avatar

Glassdoor Jobs Scraper

Pricing

$1.00 / 1,000 results

Go to Apify Store
Glassdoor Jobs Scraper

Glassdoor Jobs Scraper

Scrape public Glassdoor jobs by keyword and location. Export titles, employers, ratings, pay, posting age, full descriptions, and job links with useful search filters.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

MLG Data

MLG Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Scrape Glassdoor jobs by keyword and location, then export public job listings to JSON, CSV, or Excel. This Glassdoor jobs scraper provides a search data API alternative for collecting titles, employers, locations, pay information, ratings, and full job descriptions in one dataset.

The scraper accepts a familiar job search: enter a title or skill, choose a location, and set a result limit. Optional filters narrow the results by posting age, remote work, Easy Apply, employer rating, distance, employer size, and sort order. Each result has a stable job ID so recurring runs can skip listings already collected.

What data can you extract from Glassdoor?

Each dataset item is a flat record. Fields that are absent from a particular public listing are returned as null. The same column names appear in JSON, CSV, and spreadsheet exports.

FieldDescriptionExample
idPublic job listing ID, stored as a string1010191586777
titleJob title shown in search resultsWeb Analytics Analyst
urlDirect job link using the listing IDhttps://www.glassdoor.com/job-listing/j?jl=1010191586777
seoUrlDescriptive job link supplied by the siteA job listing URL
ageInDaysListing age reported in search results82
discoveredAtDate returned in the job detail record2026-09-06T00:00:00
ratingOverall employer rating when present3.7
easyApplyWhether the listing offers Easy Applyfalse
isSponsoredWhether the listing is marked sponsoredfalse
employerIdPublic employer ID2937
employerNameEmployer display nameA public employer name
employerUrlEmployer overview linkAn overview URL
employerLogoUrlPublic employer logo linkAn image URL
employerSizeEmployer size range, when listed10000+ Employees
employerWebsiteEmployer website, when listedA website URL
industryEmployer industry, when listedOther Retail Stores
locationIdPublic location ID of the job1132348
locationNameDisplayed job locationNew York, NY
locationTypeLocation type codeC
countryIdPublic country ID1
payCurrencyCurrency code for pay valuesUSD
payPeriodPay period, such as annual or hourlyANNUAL
payMinLower pay value from the listing data68200
payMedianMiddle pay value from the listing data78100
payMaxUpper pay value from the listing data88000
salarySourceWhether pay is estimated or employer suppliedEMPLOYER_PROVIDED
jobTypeJob type, when listedFull-time
remoteWorkTypeRemote arrangement, when listednull
skillsPublic skill labels attached to the jobAn array of skill labels
descriptionFull job description in HTML<p>Role details...</p>
descriptionTextPlain text version or listing excerptRole details...
searchKeywordsKeywords used for this searchdata analyst
searchLocationResolved location used for this searchNew York, NY

The pay values retain the site's own currency, period, and source label. They are not converted across currencies or periods. A low, middle, and high value may represent an estimated distribution rather than a guaranteed offer; inspect salarySource before comparing compensation. description preserves the listing's HTML structure, while descriptionText is easier to read in a table or search index.

How to scrape Glassdoor jobs

  1. Enter a job title, skill, or phrase in keywords and a city, state, or country in location.
  2. Set limit to the maximum number of unique jobs you want. The default is 100 and the input maximum is 1,000.
  3. Add filters if you need a narrower result set. For example, use daysOld and sortBy to focus on recent postings, or select Easy Apply and remote work.
  4. Run the actor. It resolves the location, collects search pages, and fetches each selected job's public details when includeDescription is enabled.
  5. Open the dataset to download JSON, CSV, or Excel. Keep the id values if you plan to exclude previously collected jobs on later runs.

The scraper saves one item per unique job ID within a run. Search results are returned in the site's selected order. A sponsored listing can appear among ordinary results; use isSponsored if you need to distinguish it.

Input

ParameterTypeDefaultDescription
keywordsstringRequiredTitle, skill, or search phrase.
locationstringRequiredCity, state, or country. The first matching public location is selected if there is no exact label match.
daysOldintegerAny ageMaximum reported posting age in days.
easyApplybooleanfalseRestrict results to Easy Apply listings.
remoteWorkTypebooleanfalseApply the remote work filter.
minRatingnumberNo minimumMinimum employer rating from 0 to 5.
radiusstring"25"Distance in miles: 0, 5, 10, 15, 25, 50, or 100.
employerSizesstringAny sizeSite size category from 1 to 5.
sortBystringrelevant_descMost relevant or date_desc for most recent.
limitinteger100Maximum unique results; allowed range is 1 to 1,000.
includeDescriptionbooleantrueFetch full descriptions and additional detail fields.
excludeJobIdsarrayEmptyPublic job IDs to omit, useful for recurring collection.
urlParamkey/value arrayEmptyAdditional supported search filters, such as an industry ID.
proxyConfigurationobjectPlatform proxyOptional proxy configuration.

For example, this input collects up to 60 recent analyst jobs in the selected area:

{
"keywords": "data analyst",
"location": "New York",
"daysOld": 30,
"sortBy": "date_desc",
"radius": "25",
"limit": 60,
"includeDescription": true
}

Use a more specific location label when a name exists in multiple places. A city and state is usually clearer than a city name alone. If the lookup has no public match, the run reports an error instead of returning results for an unrelated location.

Output example

This is a selected set of fields from a real 35-job run using data analyst and New York. The full record also contains the employer and description fields listed above; the long HTML description is omitted here for readability.

{
"id": "1010191586777",
"title": "Web Analytics Analyst",
"url": "https://www.glassdoor.com/job-listing/j?jl=1010191586777",
"ageInDays": 82,
"discoveredAt": "2026-09-06T00:00:00",
"rating": 3.7,
"easyApply": false,
"isSponsored": false,
"locationId": 1132348,
"locationName": "New York, NY",
"payCurrency": "USD",
"payPeriod": "ANNUAL",
"payMin": 68200,
"payMedian": 78100,
"payMax": 88000,
"salarySource": "EMPLOYER_PROVIDED",
"jobType": "Full-time",
"searchKeywords": "data analyst",
"searchLocation": "New York, NY"
}

In that run, all 35 jobs had an ID, title, URL, employer name, location name, full description, and plain text description. The result count is a measurement of that search at that time, not a promise that another search will return the same number of jobs.

Use cases

  • Job market tracking: Save periodic datasets for a role and location, then compare new IDs across runs to see newly surfaced listings.
  • Salary research: Compare pay values for a single role and location, separating estimated values from employer supplied values with salarySource.
  • Hiring activity analysis: Count listings by employer, location, job type, and search date. Keep sponsored listings identifiable with isSponsored.
  • Recruiting research: Find public roles that match a skill, posting age, and location. Use the direct job URL to inspect the current listing.
  • Career search: Build a focused list of openings, with descriptions and job links available in one export.
  • Regional comparisons: Run the same keywords in several locations and compare the returned jobs while preserving searchLocation on each row.

For repeated searches, save the id column from the last dataset and pass those IDs through excludeJobIds. The exclusion applies to output. It does not cause the site to return replacement jobs beyond the search pages that would otherwise be reachable, so set a sufficient limit and use narrower searches when you need a large set of new results.

How much does it cost to scrape Glassdoor jobs?

The current event price is $1.00 per 1,000 saved jobs, or $0.001 per result. Platform usage is included in that result price. The actor charges for records it saves, subject to the run's spending limit.

Saved jobsResult charge
35$0.035
100$0.10
1,000$1.00

These examples are based on the number of dataset items, not the number of search pages or detail requests. If a search only has 48 available jobs and limit is 100, the dataset contains at most 48 jobs and the result charge is at most $0.048. If the run budget stops output early, the dataset can contain fewer items than limit.

Tips for best results

Search with a specific role and a clear location. Broad terms can return many loosely related jobs; combining a precise keyword with daysOld, radius, and sortBy can make the dataset easier to review. The remote work and Easy Apply switches can reduce the available count substantially, especially when used together with a short posting window or a high minimum rating.

Start with a moderate limit to inspect relevance and field coverage. Then increase it for routine collection. The search service returns jobs in pages of about 30. The scraper follows the cursor supplied for the next page, deduplicates job IDs, and stops at your result limit or when the service no longer supplies a cursor. A page 6 request returned 30 jobs during validation, so collection is not confined to the first page.

Leave includeDescription enabled when you need full text, employer size, website, industry, job type, or skill labels. Turn it off for a faster listing-only run. With it off, description and some detail-only fields are empty; descriptionText may still contain a short excerpt from the search result.

Review searchLocation after a run. A short location name can match more than one place. The scraper prefers an exact label match and otherwise takes the first suggestion. For recurring jobs in the same area, use a distinct city and region label to reduce ambiguity.

Limits

Only public job data is collected. A listing can disappear, expire, or change between the search request and its detail request. If a detail request fails, the scraper still saves the listing with the fields available from search; the full description and detail-only fields may then be empty. Some listings never provide pay, a rating, a logo, a job type, or a remote arrangement. Empty values are represented by null.

The site's ageInDays and detail record date can differ. Treat ageInDays as the search result's reported age and discoveredAt as the date exposed in the detail record. Neither field is recalculated by the scraper. When exact publication timing matters, check the current listing directly.

The result limit is an output cap, not a guarantee of that many matches. Filters can leave fewer results, and pagination depends on cursors returned by the public search service. The accepted input maximum is 1,000 jobs. Searches with more matches may require narrower keywords, locations, or filters across separate runs; each run deduplicates only within its own search.

The standard job search page presented a challenge during source checks. Public location, search, and detail endpoints served the validated run. Site behavior can change, including access controls, field availability, ordering, and pagination depth. The actor does not require an account or collect private profile data.

Use with automated workflows

The input and output are ordinary structured JSON, so a scheduled workflow can run the same search repeatedly and compare job IDs. Two example requests are: “Collect 100 recent analyst jobs in New York and export their pay fields,” and “Find remote designer jobs posted within seven days, omitting IDs saved last week.” A workflow can then read the default dataset, filter rows by the fields it needs, and send the data to a database or spreadsheet.

Keep description when your downstream process needs the original formatting. Use descriptionText when it needs plain text. Preserve salarySource, payCurrency, and payPeriod beside the pay values so a downstream comparison does not mix currencies, time periods, or estimated and employer supplied data.

FAQ

Rules vary by location and use. Work with public listings, review the site's terms, respect applicable privacy and data protection law, and use the dataset for a legitimate purpose. This actor does not sign into an account or collect private candidate information.

Do I need to configure a proxy?

A proxy is configured by default. Most users can leave proxyConfiguration untouched. If a run encounters an access block, the fetch layer can rotate its session and try the available proxy routes. Access is still dependent on the site at run time.

How fast is a run?

Speed depends on the number of jobs, the number of detail requests, and site response times. The validated 35-job run completed in roughly 72 seconds on the remote platform. Listing-only runs can require fewer requests; larger searches with full descriptions take longer.

Can I schedule and monitor searches?

Yes. Schedule the actor with saved input, then inspect each run's status and dataset. Keeping the same keywords and location makes comparisons easier. Pass prior IDs in excludeJobIds if you only want to save jobs that were not in your earlier dataset.

Can I export to a spreadsheet?

Yes. The default dataset supports JSON, CSV, and Excel downloads. Flat columns make it straightforward to sort by pay, location, rating, date, or employer. Long descriptions may need wider cells or a separate text field in spreadsheet views.

Why is a field empty?

The source may not provide it for that listing, or the detail request may have been unavailable. Pay, remote arrangement, industry, and employer details are particularly variable. If includeDescription is disabled, full descriptions and other detail-only fields are intentionally empty.

Why did I receive fewer jobs than limit?

limit is a maximum. Narrow filters, exclusions, duplicate IDs, or the end of available pagination can all reduce the output count. Broaden a filter or search another location if you need more matching jobs.

Integrations

Use the actor's run endpoint to start a search and the default dataset endpoint to retrieve results. Scheduling, webhooks, and ordinary data exports support recurring collection and delivery to databases, spreadsheets, or internal reporting systems. Stable job IDs let a downstream process merge successive datasets without treating the same listing as a new job each time.

Support

Open an issue on the Issues tab; we reply within 24h and add fields on request.