Glassdoor Jobs Scraper

Extract Glassdoor job listings with salary estimates, company ratings, locations, posting age, remote status, and hiring details.

Data fields

FieldTypeDescription
titletextJob title exported in the dataset view.
companyNametextCompany exported in the dataset view.
locationtextLocation exported in the dataset view.
salaryTexttextSalary exported in the dataset view.
companyRatingnumberRating exported in the dataset view.
remotebooleanRemote exported in the dataset view.
easyApplybooleanEasy Apply exported in the dataset view.
postedAgetextPosted exported in the dataset view.

Input preview

startUrlsGlassdoor search URLs
keywordJob keyword
locationLocation
countryGlassdoor country site
daysOldMaximum age in days
remoteOnlyRemote jobs only

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Collect public Glassdoor job listings as structured data for recruitment research, salary analysis, hiring intelligence, and job aggregation. Glassdoor Jobs Scraper exports each vacancy with its source URL, title, company, location, and collection timestamp. Rich salary and employer fields are included whenever Glassdoor publishes them on the listing.

Example input

{
  "keyword": "software engineer",
  "location": "New York, NY",
  "country": "US",
  "daysOld": 7,
  "includeDetails": true,
  "maxItems": 5
}

You can also supply one or more public Glassdoor searches in startUrls when you have already configured filters on the website.

Example output

{
  "url": "https://www.glassdoor.com/job-listing/example.htm?jl=123456",
  "title": "Senior Software Engineer",
  "companyName": "Example Company",
  "location": "New York, NY",
  "source": "glassdoor",
  "scrapedAt": "2026-07-10T12:00:00.000Z"
}

Fields may be omitted when they are not published in a job card. Every saved record keeps the public source URL so you can review the original vacancy.

What data can you export?

  • Job title and canonical Glassdoor listing URL
  • Employer name when shown on the listing
  • City, state, country, or remote location label
  • Glassdoor source provenance
  • UTC collection timestamp
  • Public salary range, currency, period, and salary source
  • Company rating, review count, size, and industry when available
  • Job description and application URL when detail enrichment is enabled
  • Remote, Easy Apply, job type, query, rank, and collection diagnostics

The dataset is ready for JSON, CSV, Excel, XML, RSS, and API export through Apify.

Who is it for?

Recruiters, talent intelligence teams, job-board operators, compensation analysts, and developers can use this Actor to turn public job searches into structured, repeatable datasets.

Use cases

  • Recruiting research: build prospect lists from currently advertised roles.
  • Salary analysis: compare public compensation ranges across locations and employers.
  • Hiring intelligence: monitor which companies are expanding specific teams.
  • Job aggregation: feed normalized vacancies into internal search and alert tools.
  • Market analysis: measure demand for titles, skills, industries, and locations.
  • Automation: connect recurring runs to webhooks, Google Sheets, Make, Zapier, or your data warehouse.

Input settings

Field Type Description
startUrls array Optional public Glassdoor job-search URLs.
keyword string Job title, skill, or employer. Default: software engineer.
location string City, state, or country. Default: New York, NY.
country string Glassdoor country site and proxy location.
daysOld integer Maximum posting age from 1 to 30 days.
remoteOnly boolean Keep jobs labeled as remote.
easyApplyOnly boolean Keep jobs labeled Easy Apply.
jobType string All, full-time, part-time, contract, internship, or temporary.
seniority string Optional seniority keyword preserved in output.
minSalary number Minimum published maximum salary.
industry string Optional industry text filter.
companySize string Optional employee-size text filter.
minCompanyRating number Minimum Glassdoor employer rating.
includeDetails boolean Enrich descriptions, apply URLs, and company details.
maxItems integer Maximum jobs to save. The low prefill keeps a first run inexpensive.

Use either configured startUrls or the keyword and location fields. Start with a small limit, inspect the results, and then increase the limit for production workflows.

Input recipes

Search by title and city

{
  "keyword": "data scientist",
  "location": "Austin, TX",
  "maxItems": 10
}
{
  "startUrls": [{
    "url": "https://www.glassdoor.com/Job/jobs.htm?sc.keyword=product%20manager"
  }],
  "includeDetails": false,
  "maxItems": 10
}

Monitor a narrow hiring market

{
  "keyword": "machine learning engineer",
  "location": "United States",
  "maxItems": 5
}

API usage

cURL

curl -X POST \
  "https://api.apify.com/v2/acts/fetch_cat~glassdoor-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"software engineer","location":"New York, NY","maxItems":5}'

JavaScript

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/glassdoor-jobs-scraper').call({
  keyword: 'software engineer', location: 'New York, NY', maxItems: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/glassdoor-jobs-scraper').call(run_input={
    'keyword': 'software engineer', 'location': 'New York, NY', 'maxItems': 5,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

After the run finishes, read its default dataset through the returned dataset ID.

Use with MCP and AI agents

Connect an MCP-compatible assistant to:

https://mcp.apify.com/?tools=fetch_cat/glassdoor-jobs-scraper

The assistant can start the Actor with structured input and consume the resulting dataset. Keep limits small when an agent is exploring a new query.

Tips for reliable results

  • Use specific job titles rather than broad single-word keywords.
  • Include a city and state or a country to reduce ambiguous locations.
  • Keep recurring searches narrow and deduplicate by listing URL or job ID.
  • A vacancy can disappear when the employer closes it; schedule monitoring according to your freshness needs.
  • Glassdoor may publish different fields by country, employer, and job type.

Limits and responsible use

This Actor collects public job-listing information. Website availability and published fields can change. Do not use the output for unlawful discrimination, spam, or decisions that require information Glassdoor did not publish. Follow applicable law, the source website's terms, and privacy requirements in your jurisdiction.

A security or challenge page is reported as an error, not as a successful empty dataset. Legitimate searches with no matching vacancies may return no items.

Support

If a public search repeatedly fails, open an issue from the Actor's Apify page. Include the input, run ID, expected result, and country. Do not include passwords, cookies, tokens, or other secrets.

Common questions

Questions and answers reused from the canonical actor README.

Does it require my Glassdoor login or cookies?

No. The Actor is designed for public job listings and does not ask for private account credentials.

Can I search remote jobs?

Use a public Glassdoor URL configured with the filters you need, or enter a remote-oriented keyword and location. Filter support depends on the public search page.

Why is an optional field missing?

Glassdoor does not publish every field for every vacancy. The Actor omits unavailable values instead of inventing them.

Can I run it on a schedule?

Yes. Use Apify Schedules and store listing URLs or IDs to identify new and removed vacancies between runs.