# Glassdoor Jobs Scraper: Job Search Listings, Salary, Easy Apply (`charitable_trousseau/glassdoor-jobs-scraper`) Actor

Glassdoor job listings by keyword and location or search URL, with no login: title, company, salary range (employer-stated or Glassdoor estimate), employer rating, posting age, easy-apply flag, job type and benefits tags. Up to about 900 jobs per search. $3 per 1,000 jobs, with plan discounts.

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

## Pricing

from $2.10 / 1,000 results

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: Job Search Listings, Salary, Easy Apply

Get Glassdoor job listings for any keyword and location, or for any filtered Glassdoor job search.

### What you can do with it

- Salary benchmarking for a job title in a city: `salaryMin`, `salaryMax` and `salarySource` say what is offered and who stated it.
- Follow hiring for a keyword or company over time with a scheduled run and `postedDate`.
- See employer ratings next to open roles (`companyRating`).
- List jobs that can be applied to on Glassdoor itself (`easyApply`).

### What you get

One record per job:

- **Job:** `jobId`, `title`, `url`, `location`, `snippet` (short excerpt of the description)
- **Company:** `companyName`, `companyId`, `companyRating` (Glassdoor's overall rating, 1 to 5), `companyLogoUrl`
- **Pay, when Glassdoor shows it:** `salaryText` (for example `$41,800 - $74,800 per year`), `salaryMin`, `salaryMax`, `salaryMedian`, `salaryPeriod` (year, month, week, day, hour), `salaryCurrency`, `salarySource` (`employer` when the employer stated it, `glassdoor-estimate` when Glassdoor estimated it)
- **Posting:** `postedDaysAgo`, `postedDate` (approximate, worked out from the age in days), `easyApply`, `isSponsored`
- **Tags:** `attributes` — what Glassdoor extracted from the posting: job type, benefits, skills, education and experience level
- **Other:** `search` (which keyword or URL produced it), `scrapedAt`

#### Sample output

One record from a run on 2026-10-08, as saved (long text and lists shortened):

```json
{
    "jobId": "1010276897566",
    "title": "Power BI & SQL Data Analyst",
    "companyName": "Ambius",
    "companyId": 345641,
    "companyRating": 2.9,
    "companyLogoUrl": "https://media.glassdoor.com/sql/345641/ambius-squarelogo.png",
    "location": "Austin, TX",
    "salaryText": "$41,800 - $74,800 per year",
    "salaryMin": 41800,
    "salaryMax": 74800,
    "salaryMedian": 58300,
    "salaryPeriod": "year",
    "salaryCurrency": "USD",
    "salarySource": "employer",
    "postedDaysAgo": 9,
    "postedDate": "2026-09-29",
    "easyApply": true,
    "isSponsored": false,
    "snippet": "Associates degree or related field OR equivalent years of experience. Proven experience in administrative support or a relevant data entry or reporting role.",
    "attributes": [
        "Data integrity assurance",
        "Customer records maintenance",
        "Managing customer accounts",
        "Data visualization software proficiency",
        "Account maintenance",
        "Data validation techniques",
        "Paid holidays",
        "QlikView"
    ],
    "url": "https://www.glassdoor.com/job-listing/power-bi-sql-data-analyst-ambius-JV_IC1139761_KO0,25_KE26,32.htm?jl=1010276897566",
    "search": "data analyst in Austin, TX",
    "scrapedAt": "2026-10-08T16:39:39.786Z"
}
```

### Input

- **Keywords** — job titles, skills or companies, one per line. Each line is its own search. If you give no keyword, location or search URL (for example an API call with an empty input), the example search `data analyst` in `Austin, TX` runs.
- **Location** — a city, state or country such as `Austin, TX`. Applies to all keywords. Leave empty for the whole United States.
- **Glassdoor job search URLs** — for anything more specific. Set your filters on glassdoor.com (remote, salary, date posted, company rating) and paste the address of the results page.
- **Maximum jobs per keyword or URL** — default 100.

```json
{
    "keywords": ["data analyst", "registered nurse"],
    "location": "Austin, TX",
    "maxJobsPerSearch": 100
}
```

### FAQ

#### Is there a Glassdoor jobs API?

Yes, in the sense that you can call it like one. Start a run through the Apify API or one of Apify's clients with the input described here, then read the results as JSON, CSV or Excel. It does not log in and needs no Glassdoor account.

#### Does it return full job descriptions?

No. Each job has the short excerpt shown in the search results (`snippet`) and the tags Glassdoor extracted from the posting (`attributes`: job type, benefits, skills, education and experience level).

#### Does it scrape Glassdoor company reviews or salary pages?

No. It returns job listings. Each job carries the employer's overall rating (`companyRating`) and, when Glassdoor shows it, the pay for that job.

#### Is the salary the employer's figure or Glassdoor's estimate?

`salarySource` says which: `employer` when the employer stated it, `glassdoor-estimate` when Glassdoor estimated it. Pay is missing for jobs where Glassdoor shows none.

#### How many jobs can I get for one search?

Up to about 900: Glassdoor returns 30 jobs per page and at most 30 pages per search. To get more, split the search by location or with filters.

#### How much does it cost?

$3.00 per 1,000 jobs on Apify's Free plan, plus a start fee of $0.00005 per run. Paid Apify plans pay less: Bronze 10%, Silver 20% and Gold 30% less. Runs that fail or return nothing cost nothing.

### Limits to know about

- Glassdoor returns 30 jobs per page and at most 30 pages per search, so one keyword or URL gives up to about 900 jobs. To get more, split the search by location or with filters (several URLs or keywords in one run).
- The job count Glassdoor shows for a search is an estimate; near the end of a long search it returns repeats, which are dropped, so you can get somewhat fewer jobs than the count suggests.
- Full job descriptions are not included, only the excerpt shown in the results.
- Pay is missing for jobs where Glassdoor shows none. Check `salarySource` before treating a figure as the employer's offer.
- Searches run on glassdoor.com from the United States by default. Search URLs from other Glassdoor country sites are accepted; set the proxy country to match.

### Pricing

You pay per job saved. Runs that fail or return nothing cost nothing.

### Reliability

Glassdoor blocks automated traffic heavily, so the scraper uses a real browser and residential proxies and retries from a different address when challenged. If a search still cannot be completed, the run fails with a clear message that says how many jobs were saved, instead of passing off partial data as complete.

### Notes

This scraper collects job listing data only. It does not collect recruiter or other personal contact details, and it does not log in.

### Related scrapers

- [Coles Australia Grocery Price Scraper](https://apify.com/charitable_trousseau/coles-au-product-scraper): products, prices and specials from coles.com.au
- [AliExpress Product Search Scraper](https://apify.com/charitable_trousseau/aliexpress-search-scraper): search results by keyword with prices, discounts and units sold
- [eBay Active Listings & Auctions Search Scraper](https://apify.com/charitable_trousseau/ebay-search-scraper): active listings and auctions on five eBay sites
- [Apple App Store Scraper](https://apify.com/charitable_trousseau/app-store-scraper): iOS top charts, search results and app details
- [Zillow ZIP Code Search Scraper](https://apify.com/charitable_trousseau/zillow-search-scraper): homes for sale, rentals and recently sold homes
- [Tripadvisor Places Scraper](https://apify.com/charitable_trousseau/tripadvisor-listings-scraper): hotels, restaurants and things to do for any place
- [Google Maps Places Scraper](https://apify.com/charitable_trousseau/google-maps-places-scraper): business listings across a whole city, postcode or radius
- [Indeed Jobs Scraper](https://apify.com/charitable_trousseau/indeed-jobs-scraper): job listings on 12 Indeed country sites, descriptions optional
- [LinkedIn Jobs Scraper](https://apify.com/charitable_trousseau/linkedin-jobs-scraper): job postings past LinkedIn's 1,000-per-search limit, no login
- [Google Trends Scraper](https://apify.com/charitable_trousseau/google-trends-scraper): interest over time, interest by region, rising queries and trending searches

# Actor input Schema

## `keywords` (type: `array`):

Job titles, skills or companies, one per line. Each line is a separate search. If the keywords, location and search URLs are all empty, the example search data analyst in Austin, TX runs.

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

City, state or country, e.g. Austin, TX. Applies to the keywords above. Leave empty to search the whole United States.

## `searchUrls` (type: `array`):

For filtered searches: set your filters on glassdoor.com and paste the address of the results page.

## `maxJobsPerSearch` (type: `integer`):

Glassdoor shows at most about 900 jobs per search (30 pages of 30). Split large searches by location or filters to get more.

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

US residential proxies are used by default and are needed for reliable runs.

## Actor input object example

```json
{
  "keywords": [
    "data analyst"
  ],
  "location": "Austin, TX",
  "maxJobsPerSearch": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All jobs saved by the run.

# 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 = {
    "keywords": [
        "data analyst"
    ],
    "location": "Austin, TX",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("charitable_trousseau/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 = {
    "keywords": ["data analyst"],
    "location": "Austin, TX",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("charitable_trousseau/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 '{
  "keywords": [
    "data analyst"
  ],
  "location": "Austin, TX",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call charitable_trousseau/glassdoor-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,charitable_trousseau/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/Rsd8HeujF4OwRFtpC/builds/PYq1OALYUg5KaRHgP/openapi.json
