# Glassdoor Jobs Scraper - Salaries, Descriptions & Company Data (`neuton/glassdoor-jobs-search-scraper`) Actor

Scrape Glassdoor jobs in 20 countries without login: full description, salary estimate range (p10/median/p90), company rating, industry, size, revenue, HQ and website, job type, remote flag and posted date. Fast HTTP, no browser.

- **URL**: https://apify.com/neuton/glassdoor-jobs-search-scraper.md
- **Developed by:** [Neuton Scripts](https://apify.com/neuton) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 glassdoor jobs

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Glassdoor Jobs Scraper — salaries, descriptions and company data

Scrape Glassdoor job listings from **20 Glassdoor countries** without logging in. Every job comes back with Glassdoor's **salary estimate range** (10th percentile, median and 90th percentile, with pay period and currency), the **full job description**, and **company data**: rating, industry, size, revenue, headquarters, website and logo. It also includes job type, remote flag, Easy Apply and posted date. It's fast pure HTTP with no browser, and it reads up to 900 jobs per search.

Built for salary benchmarking, recruiting and sourcing, job boards, labour-market research, competitor hiring analysis and sales prospecting.

### What you get for every Glassdoor job

| Field | Example |
| --- | --- |
| `title`, `company`, `companyRating` | Data Engineer, Example Co, 4.1 |
| `salaryMin`, `salaryMedian`, `salaryMax`, `salaryPeriod`, `salaryCurrency` | 115000, 128000, 142000, year, USD |
| `companyIndustry`, `companySize`, `companyRevenue`, `companyHeadquarters`, `companyWebsite` | Information Technology Support Services, 1001 to 5000 Employees |
| `location`, `locationType`, `country`, `isRemote` | Austin, TX, CITY, United States, false |
| `jobTypes`, `easyApply`, `listingType` | \["fulltime"], true, organic |
| `postedDate`, `postedDaysAgo` | 2026-10-18, 3 |
| `description` (+ optional `descriptionHtml`) | Full job description text |
| `listingId`, `jobUrl`, `companyGlassdoorUrl` | Stable Glassdoor IDs and links |
| `searchQuery`, `searchLocation`, `resolvedLocation`, `scrapedAt` | Which search produced the row |

Example values are illustrative. Missing data stays `null`. Glassdoor's salary figures are estimates published on the listing, not the employer's offer, unless the description says otherwise.

### How to scrape Glassdoor jobs

1. Enter **job keywords** (for example `data engineer` or `product manager`).
2. Add **locations** (city, state or country), or leave them empty for the whole country.
3. Pick the **Glassdoor country** and the number of jobs per search.
4. Optionally filter by **posted within N days**, **job type**, **remote only**, **Easy Apply** or **radius**.
5. Click **Start** and export to CSV, Excel or JSON, or use the API.

```json
{
  "queries": ["data engineer", "machine learning engineer"],
  "locations": ["Austin, TX", "Seattle, WA"],
  "country": "US",
  "maxResultsPerSearch": 200,
  "postedWithinDays": 7
}
```

Jobs found by several searches are saved once per run, deduplicated by `listingId`.

### Countries

United States, United Kingdom, Canada, Australia, India, Ireland, New Zealand, Singapore, Germany, France, Netherlands, Spain, Italy, Austria, Belgium, Switzerland, Brazil, Mexico, Argentina and Hong Kong.

### Pricing

Pay per result: you are charged only for unique job rows saved. See the **Pricing** tab for the current rate, and set a **maximum charge per run** when you start.

### Run summary and reliability

A free `RUN_SUMMARY` record lists every search, its resolved Glassdoor location, rows saved, pages read, Glassdoor's total match count, retries and an overall status. Blocked requests are retried on a fresh residential session. If nothing could be fetched, the run fails visibly instead of returning an empty dataset, and nothing is charged.

### Automations and AI agents

Save the input as a **Task**, schedule it daily with `postedWithinDays: 1`, and use a webhook to push new rows into Google Sheets, n8n, Make, Zapier or your warehouse. Upsert on `listingId`. AI agents can call it through Apify's MCP server or the [Neuton Actors MCP Server](https://apify.com/neuton/neuton-actors-mcp-server).

### Related Neuton Actors

- [Job Scraper: Indeed, Glassdoor and LinkedIn in one run](https://apify.com/neuton/multi-job-board-search-scraper) for one normalised table across boards (plus Bayt and BDJobs)
- [Google Trends Scraper](https://apify.com/neuton/google-trends-explorer-scraper) to pair hiring demand with search interest
- [Indeed Jobs Scraper](https://apify.com/neuton/indeed-jobs-search-scraper): Indeed jobs with full descriptions, salaries and skills
- [LinkedIn Job Details Scraper](https://apify.com/neuton/linkedin-job-details-scraper)

### Responsible use

This Actor collects publicly listed job postings and company summary data. Use it lawfully and respect privacy, employment and anti-discrimination rules and the source's terms. Neuton is not affiliated with or endorsed by Glassdoor.

# Actor input Schema

## `queries` (type: `array`):

Glassdoor search keywords, one per line. Each keyword is searched in each location.

## `locations` (type: `array`):

City, state or country, one per line (e.g. Austin, TX or London). Leave empty to search the whole country.

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

Which Glassdoor site to search.

## `maxResultsPerSearch` (type: `integer`):

Stop each search after this many unique jobs.

## `postedWithinDays` (type: `integer`):

Only jobs posted in the last N days. Leave empty for any time.

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

Optional job type filter.

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

Only remote jobs.

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

Only jobs with Glassdoor Easy Apply.

## `radiusMiles` (type: `integer`):

Optional radius around each location.

## `includeDescription` (type: `boolean`):

Fetch the full description for every job (plain text).

## `includeDescriptionHtml` (type: `boolean`):

Adds original HTML formatting.

## `proxyConfiguration` (type: `object`):

Residential proxy is required; Glassdoor blocks datacenter IPs.

## Actor input object example

```json
{
  "queries": [
    "data engineer"
  ],
  "locations": [
    "Austin, TX"
  ],
  "country": "US",
  "maxResultsPerSearch": 50,
  "remoteOnly": false,
  "easyApplyOnly": false,
  "includeDescription": true,
  "includeDescriptionHtml": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "queries": [
        "data engineer"
    ],
    "locations": [
        "Austin, TX"
    ],
    "maxResultsPerSearch": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuton/glassdoor-jobs-search-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 = {
    "queries": ["data engineer"],
    "locations": ["Austin, TX"],
    "maxResultsPerSearch": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("neuton/glassdoor-jobs-search-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 '{
  "queries": [
    "data engineer"
  ],
  "locations": [
    "Austin, TX"
  ],
  "maxResultsPerSearch": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call neuton/glassdoor-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neuton/glassdoor-jobs-search-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/3XvmLBTiiNSbNpoR0/builds/qM9HvKeQuURybCdFU/openapi.json
