# Glassdoor Jobs Scraper (`fetch_cat/glassdoor-jobs-scraper`) Actor

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

- **URL**: https://apify.com/fetch\_cat/glassdoor-jobs-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.09 / 1,000 job saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Glassdoor Jobs Scraper

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

```json
{
  "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

```json
{
  "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.

### Ready-to-run examples

Open a public example to inspect its input, run it, or reuse it as a task:

- [Find Machine Learning Engineer Jobs in Austin](https://apify.com/fetch_cat/glassdoor-jobs-scraper/examples/remote-machine-learning-jobs-us)
- [Export Data Scientist Jobs in Austin](https://apify.com/fetch_cat/glassdoor-jobs-scraper/examples/data-scientist-jobs-austin)
- [Export Software Engineering Jobs in New York](https://apify.com/fetch_cat/glassdoor-jobs-scraper/examples/software-engineer-jobs-new-york)

#### Search by title and city

```json
{
  "keyword": "data scientist",
  "location": "Austin, TX",
  "maxItems": 10
}
```

#### Use an existing Glassdoor search

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

#### Monitor a narrow hiring market

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

### Output fields

| Field | Meaning |
|---|---|
| `jobId`, `title`, `jobUrl` | Stable listing identity, published title, and public URL. |
| `companyName`, `location` | Employer and published job location. |
| `description`, `applyUrl` | Enriched detail text and application destination. |
| `salaryText`, `salaryMin`, `salaryMax` | Original and normalized public compensation. |
| `salaryCurrency`, `salaryPeriod`, `salarySource` | Compensation context and estimate source. |
| `companyRating`, `companyReviewCount` | Public employer reputation metrics. |
| `companySize`, `industry` | Public company profile details. |
| `remote`, `easyApply`, `jobType`, `seniority` | Work and application attributes. |
| `query`, `searchLocation`, `rank`, `sourceUrl` | Search provenance and result order. |
| `source`, `scrapedAt`, `diagnostics` | Source, UTC collection time, and detail status. |

Missing optional data is omitted rather than guessed.

### Pricing and limits

This Actor uses pay-per-event pricing. A `start` event is charged once when a run begins, and an `item` event is charged for each job saved to the dataset. Runs accept up to 1,000 jobs and stop after five minutes. See the [live Apify Pricing tab](https://apify.com/fetch_cat/glassdoor-jobs-scraper/pricing) for current rates for your plan.

### API usage

#### cURL

```bash
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

```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

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

### FAQ

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

### Related Actors

Combine this Actor with [LinkedIn Jobs Scraper](https://apify.com/fetch_cat/linkedin-jobs-scraper), [ATS Jobs Scraper](https://apify.com/fetch_cat/ats-jobs-scraper), [Dice Jobs Scraper](https://apify.com/fetch_cat/dice-jobs-scraper), [Indeed Jobs Scraper](https://apify.com/fetch_cat/indeed-jobs-scraper), or [Google Jobs Scraper](https://apify.com/fetch_cat/google-jobs-scraper) for broader hiring-market coverage.

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

# Actor input Schema

## `startUrls` (type: `array`):

Optional public Glassdoor job-search URLs. These take precedence over keyword and location.

## `keyword` (type: `string`):

Job title, skill, or employer.

## `location` (type: `string`):

City, state, or country.

## `country` (type: `string`):

Country domain and proxy location.

## `daysOld` (type: `integer`):

Only request jobs posted within this many days.

## `remoteOnly` (type: `boolean`):

Keep jobs labeled as remote.

## `easyApplyOnly` (type: `boolean`):

Keep jobs labeled Easy Apply.

## `jobType` (type: `string`):

Employment type requested from Glassdoor.

## `seniority` (type: `string`):

Optional seniority label to preserve with the search.

## `minSalary` (type: `number`):

Keep jobs whose published maximum salary reaches this amount.

## `industry` (type: `string`):

Optional industry text filter.

## `companySize` (type: `string`):

Optional employee-size text, such as 1001 to 5000 employees.

## `minCompanyRating` (type: `number`):

Keep employers at or above this Glassdoor rating.

## `includeDetails` (type: `boolean`):

Visit each job page for description, apply URL, company size, industry, and review count.

## `maxItems` (type: `integer`):

Maximum number of job records to save.

## Actor input object example

```json
{
  "startUrls": [],
  "keyword": "software engineer",
  "location": "New York, NY",
  "country": "US",
  "daysOld": 30,
  "remoteOnly": false,
  "easyApplyOnly": false,
  "jobType": "all",
  "includeDetails": true,
  "maxItems": 5
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [],
    "keyword": "software engineer",
    "location": "New York, NY",
    "country": "US",
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/glassdoor-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [],
    "keyword": "software engineer",
    "location": "New York, NY",
    "country": "US",
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/glassdoor-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [],
  "keyword": "software engineer",
  "location": "New York, NY",
  "country": "US",
  "maxItems": 5
}' |
apify call fetch_cat/glassdoor-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fetch_cat/glassdoor-jobs-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7Tz1TfFfGPbxBhTca/builds/NEIiZkBh53Sg1zQ8D/openapi.json
