# Glassdoor Scraper - Company Reviews & Salaries (`sweet_stickball/glassdoor-scraper`) Actor

Scrape Glassdoor company reviews and salary ranges by company name or URL: rating, sub-ratings, title, pros, cons, advice, job title, date, plus typical pay per job title. Glassdoor reviews scraper for employer research.

- **URL**: https://apify.com/sweet_stickball/glassdoor-scraper.md
- **Developed by:** [CrawlKit](https://apify.com/sweet_stickball) (community)
- **Categories:** Jobs
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.30 / 1,000 reviews

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 Scraper - Company Reviews & Salaries

Scrapes company reviews and salary data from Glassdoor. Extracts review text, ratings (overall and sub-ratings for work-life balance, culture, compensation, etc.), pros, cons, job titles, dates, and helpful counts. Optionally collects salary ranges, medians, and sample sizes by job title.

### Input

| Parameter | Type | Default | Description |
|---|---|---|---|
| `companyUrl` | string | | Glassdoor company URL (overview, reviews, or salary page). One of `companyUrl` or `companyName` is required. |
| `companyName` | string | | Company name to search for. Used only if `companyUrl` is not provided. |
| `maxReviews` | integer | 20 | Maximum number of reviews to scrape (1-5000). |
| `includeSalaries` | boolean | true | Also collect salary aggregates for up to 5 popular job titles. |

### Output

The actor produces two record types in the same dataset (views `reviews` and `salaries`).

#### Reviews

- `type`: "review"
- `reviewId`: Glassdoor review ID (unique per item, no duplicates)
- `companyName`: company name
- `reviewTitle`: review headline
- `text`: combined review text (pros and cons)
- `pros`, `cons`, `advice`: separated fields (`advice` = advice to management, may be null)
- `ratingOverall`: 1-5 overall rating
- `ratingWorkLifeBalance`, `ratingCultureValues`, `ratingDiversityInclusion`, `ratingSeniorManagement`, `ratingCareerOpportunities`, `ratingCompensationBenefits`: 1-5 sub-ratings (null when not rated)
- `recommendToFriend`, `ceoApproval`, `businessOutlook`: POSITIVE / NEGATIVE / NEUTRAL / NO_OPINION or null
- `jobTitle`, `location`, `employmentStatus`, `isCurrentJob`: reviewer details as published
- `date`: ISO date (YYYY-MM-DD)
- `helpfulCount`: number of users who found the review helpful
- `authorPseudonymized`: Glassdoor reviews are anonymous, so this is null
- `url`: review listing the review was read from

#### Salaries

One record per popular job title (up to 5), from Glassdoor's job-title salary pages:

- `type`: "salary"
- `companyName`, `jobTitle`
- `salaryMin`, `salaryMax`: 25th and 75th percentile of total pay (Glassdoor's "most likely range")
- `salaryMedian`: typical total pay shown by Glassdoor
- `currency`, `payPeriod` (ANNUAL, HOURLY or MONTHLY)
- `location`: "United States" (glassdoor.com salary pages are US-wide)
- `sampleSize`: number of salaries submitted for the title
- `url`: source URL

### How it works

The actor reads the public review and salary pages that Glassdoor shows to signed-out visitors, through Apify Proxy (residential, United States). If a request is blocked or rate-limited, it retries with a new proxy session. It never solves captchas and never logs in to a Glassdoor account.

### Pricing

Pay-per-event, **no start fee**: **$2.30 per 1,000 reviews** and **$2.30 per 1,000 salary aggregates** (up to 5 job titles per company) on the Apify Free plan, with lower prices on paid plans.

| Event | Free | Starter | Scale | Business | Enterprise |
|-------|------|---------|-------|----------|------------|
| Review (`REVIEW`) | $2.30 | $2.30 | $2.30 | $2.30 | $2.30 |
| Salary aggregate (`SALARY`) | $2.30 | $2.30 | $2.30 | $2.30 | $2.30 |

Prices in USD per 1,000 events.

#### Cost examples (Free plan)

| Scenario | Reviews | Cost |
|----------|---------|------|
| Quick look | 10 | $0.023 |
| Company deep dive | 100 | $0.23 |
| Several companies | 1,000 | $2.30 |

### Limitations

- Glassdoor shows anonymous visitors only the first page (3 reviews) of each review listing; page 2 and later require signing in. The actor collects more reviews by reading other public listings of the same company (most recent, highest and lowest rated, popular job titles, locations, other languages) and removes duplicates. The number of reviews per company is therefore capped (3 per listing, about 200 listings for large employers such as Google or Microsoft, fewer for small ones, minus duplicates), even if `maxReviews` is higher; the run's status message says when the public listings were exhausted.
- The company-wide salary overview page is challenged for anonymous visitors; salaries come from the job-title salary pages instead (aggregates, not individual salary reports).
- Every page goes through a residential proxy; Glassdoor pages are large (about 0.9 MB uncompressed each).
- Glassdoor changes its site often; the page data format (Next.js server components payload) may change.

### Related Actors

- [Indeed Jobs Scraper API - Listings & Salaries, $0.50/1K](https://apify.com/sweet_stickball/indeed-job-scraper) — Scrape Indeed job listings: title, company, location, salary and job type in 6 countries (US, UK, FR, DE, CA, AU). Jobs data API, no login needed.
- [Google Jobs Scraper API - Listings, Salaries & Apply Links](https://apify.com/sweet_stickball/google-jobs-scraper) — Scrape Google for Jobs listings: title, company, location, salary, apply links and posting date. Job postings data API for recruiters, no login needed.
- [Trustpilot Reviews Scraper - Ratings & Company Profile](https://apify.com/sweet_stickball/trustpilot-reviews) — Scrape Trustpilot reviews for any company domain: rating, title, text, date, company reply and the company profile (TrustScore, review count).

# Actor input Schema

## `companyUrl` (type: `string`):

Glassdoor company overview or reviews URL. Example: 'https://www.glassdoor.com/Overview/Working-at-Google-EI_IE9079.htm'

## `companyName` (type: `string`):

Company name to search for on Glassdoor. Used only if companyUrl is not provided.

## `maxReviews` (type: `integer`):

Maximum number of reviews to scrape. Glassdoor shows anonymous visitors 3 reviews per listing, so the number of reviews per company is capped by the number of public listings (about 200 for large employers).

## `includeSalaries` (type: `boolean`):

Also collect salary aggregates (25th-75th percentile and typical total pay) for up to 5 popular job titles.

## Actor input object example

```json
{
  "companyName": "Google",
  "maxReviews": 10,
  "includeSalaries": true
}
```

# Actor output Schema

## `reviews` (type: `string`):

Dataset items shown with the 'reviews' view.

## `salaries` (type: `string`):

Dataset items shown with the 'salaries' view.

# 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 = {
    "companyName": "Google",
    "maxReviews": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("sweet_stickball/glassdoor-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 = {
    "companyName": "Google",
    "maxReviews": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("sweet_stickball/glassdoor-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 '{
  "companyName": "Google",
  "maxReviews": 10
}' |
apify call sweet_stickball/glassdoor-scraper --silent --output-dataset

```

## MCP server setup

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