# Glassdoor Reviews Scraper API - Ratings, Pros, Cons & Advice (`scrapifier/glassdoor-reviews-scraper`) Actor

⭐ Scrape Glassdoor company reviews by name or URL. Get the full review — overall + sub-ratings, pros, cons, advice, job title, location, employment status, company responses & dates — as clean structured data. No login and no proxy needed.

- **URL**: https://apify.com/scrapifier/glassdoor-reviews-scraper.md
- **Developed by:** [Scrapifier](https://apify.com/scrapifier) (community)
- **Categories:** Jobs, Business
- **Stats:** 45 total users, 36 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.04 / 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 Reviews Scraper API - Ratings, Pros, Cons & Advice

Scrape employee reviews from Glassdoor by company name or Glassdoor URL and export them as JSON, CSV or Excel, or pull them straight from the API.

⚡ For every review you get the **overall rating and all six sub-ratings** (work-life balance, culture and values, career opportunities, compensation and benefits, senior leadership, diversity), the **pros, cons and advice to management**, the reviewer's **job title, location and employment status**, current or former employee, years of employment, helpful votes, the **official company response** and the date. Works on **any Glassdoor country site**, with **no login, no cookies and no proxy**. You **pay per review**.

[![Apify Actor](https://apify.com/actor-badge?actor=scrapifier/glassdoor-reviews-scraper)](https://apify.com/scrapifier/glassdoor-reviews-scraper)

### 🎯 Why scrape Glassdoor reviews?

- **Employer branding**: track your own rating, sub-ratings and the tone of new reviews every week, and compare them with your competitors.
- **HR and people analytics**: quantify what employees praise or complain about (management, pay, remote work) across thousands of reviews instead of reading them one by one.
- **Due diligence and investing**: employee sentiment, business outlook and CEO approval are leading indicators of a company's health. Pull them for a whole portfolio.
- **Recruiting and job search**: read the real pros and cons of a future employer, filtered by job title, location or keyword.
- **Research and journalism**: build datasets of reviews by industry, country or period for sentiment analysis and NLP.
- **Reputation monitoring**: get alerted when a low-rated review lands, and check whether the company answered it.

### 📊 What data does Glassdoor Reviews Scraper extract?

| Field | Description |
|---|---|
| `reviewId` | Unique Glassdoor review id |
| `url` | Direct link to the review on Glassdoor |
| `employerId`, `employerName` | Glassdoor employer id and company name |
| `reviewDateTime` | Date and time of the review |
| `summary` | Review title |
| `pros`, `cons`, `advice` | Pros, cons and advice to management, full text |
| `ratingOverall` | Overall rating (1 to 5) |
| `ratingWorkLifeBalance`, `ratingCultureAndValues`, `ratingCareerOpportunities`, `ratingCompensationAndBenefits`, `ratingSeniorLeadership`, `ratingDiversityAndInclusion` | The six sub-ratings (1 to 5) |
| `ratingBusinessOutlook`, `ratingRecommendToFriend`, `ratingCeo` | Business outlook, recommend to a friend and CEO approval (POSITIVE / NEGATIVE / NEUTRAL, APPROVE / DISAPPROVE) |
| `jobTitle` | Reviewer's job title |
| `location` | Reviewer's location |
| `employmentStatus` | `REGULAR` (full-time), `PART_TIME`, `CONTRACT`, `INTERN` or `FREELANCE` |
| `isCurrentJob` | `true` for current employees, `false` for former employees |
| `lengthOfEmployment` | Years spent at the company |
| `countHelpful` | Number of "helpful" votes |
| `companyResponses[]` | The employer's official responses (text and date), when `includeCompanyResponses` is on |
| `languageId` | Language of the review (ISO-639-2, e.g. `eng`, `fra`) |

With `flatten` enabled, a `companyResponseCount` column is added so the CSV stays flat.

### 🚀 How to scrape Glassdoor reviews

1. Open the Actor and type one or more **company names** in `companyNames` (for example `Google`, `Microsoft`), or paste Glassdoor company URLs (Reviews or Overview page, any country site) in `startUrls`.
2. Set **Max reviews per company**. Big employers have tens of thousands of reviews, so keep a cap for a first run.
3. Optionally choose a **sort order**, a **review language**, a **keyword** or **current employees only**.
4. Click **Start**. The Actor collects reviews in batches of 100.
5. Open the **Storage** tab to preview the reviews and export them as JSON, CSV, Excel or XML, or read them from the dataset API.

The same run can be started from the Apify API, the Python or JavaScript client, or put on a schedule for weekly monitoring.

### 📥 Input parameters

| Field | Key | Type | Default | Description |
|---|---|---|---|---|
| Glassdoor company URLs | `startUrls` | array of URLs | none | Reviews or Overview URLs of the companies to scrape, from any Glassdoor country site. |
| Company names | `companyNames` | array of strings | `["Google"]` | Company names, resolved automatically on the chosen Glassdoor domain. |
| Max reviews per company | `maxReviewsPerCompany` | integer | `100` | Reviews to collect per company. `0` = as many as Glassdoor exposes. |
| Sort reviews by | `sort` | select | `recent` | `recent` (most recent), `relevance` (most relevant) or `rating_high` (highest rating). |
| Current employees only | `onlyCurrentEmployees` | boolean | `false` | Skip reviews written by former employees. |
| Review language | `reviewLanguage` | string | `eng` | ISO-639-2 code: `eng`, `fra`, `deu`, `spa`, `ita`, `por`, `nld`. |
| Keyword search | `textSearch` | string | none | Only reviews mentioning this word (`salary`, `management`, `remote`). |
| Glassdoor domain | `country` | select | `www` | Domain used to resolve company names: glassdoor.com, .co.uk, .ca, .com.au, .co.in or .ie (pasted URLs keep their own domain). |
| Include company responses | `includeCompanyResponses` | boolean | `true` | Attach the employer's official replies to each review. |
| Flat columns | `flatten` | boolean | `false` | Add a `companyResponseCount` column for CSV and Excel. |
| Report input status | `emitInputStatus` | boolean | `true` | Write an `input_status` report (which input returned nothing and why) to the run's OUTPUT record. |
| Max challenge retries | `maxChallengeRetries` | integer | `6` | Retries when a page fails to load. Increase only if runs report being blocked. |
| Proxy configuration | `proxyConfiguration` | object | off | Leave off. A proxy usually makes Glassdoor runs fail. |

Example input:

```json
{
  "companyNames": ["Google", "Microsoft"],
  "maxReviewsPerCompany": 200,
  "sort": "recent",
  "reviewLanguage": "eng"
}
```

Reviews are language-specific on Glassdoor: a French company's reviews are mostly under `fra`, so set `reviewLanguage` accordingly. To target one country office, paste that country's Glassdoor URL (for example `https://www.glassdoor.fr/Avis/...`) instead of the company name.

### 📤 Output example

Each review is one dataset item, exportable as JSON, CSV, Excel or via the API.

```json
{
  "reviewId": 104536483,
  "url": "https://www.glassdoor.com/Reviews/Employer-Reviews-E9079.htm#Review104536483",
  "employerName": "Google",
  "reviewDateTime": "2026-06-25T10:14:02.000",
  "summary": "Great place to grow",
  "pros": "Excellent benefits, smart colleagues, real impact.",
  "cons": "Bureaucracy can slow things down.",
  "advice": "Keep investing in teams.",
  "ratingOverall": 5,
  "ratingWorkLifeBalance": 5,
  "ratingCultureAndValues": 5,
  "ratingCareerOpportunities": 5,
  "ratingCompensationAndBenefits": 5,
  "ratingSeniorLeadership": 4,
  "ratingBusinessOutlook": "POSITIVE",
  "ratingRecommendToFriend": "POSITIVE",
  "ratingCeo": "APPROVE",
  "jobTitle": "Software Engineer",
  "location": "Paris",
  "employmentStatus": "REGULAR",
  "isCurrentJob": true,
  "lengthOfEmployment": 3,
  "countHelpful": 12,
  "companyResponses": [],
  "languageId": "eng"
}
```

The run's OUTPUT record also holds the run statistics and, per company, an `input_status` entry (`ok`, `not_found`, or the error) so you can see at a glance which input produced nothing.

### 💡 Ready-to-run examples

**Latest 200 English reviews of two companies**

```json
{ "companyNames": ["Google", "Microsoft"], "maxReviewsPerCompany": 200, "sort": "recent", "reviewLanguage": "eng" }
```

**Current employees only, sorted by highest rating**

```json
{ "companyNames": ["Airbnb"], "maxReviewsPerCompany": 100, "sort": "rating_high", "onlyCurrentEmployees": true }
```

**Reviews that mention a keyword**

```json
{ "companyNames": ["Amazon"], "textSearch": "remote", "maxReviewsPerCompany": 300 }
```

**One country office, from its Glassdoor URL**

```json
{ "startUrls": [{ "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm" }], "reviewLanguage": "fra", "maxReviewsPerCompany": 100 }
```

### 💰 Pricing: how much does it cost to scrape Glassdoor reviews?

From **$3.00 per 1,000 reviews** on the free plan, with automatic volume discounts down to **$2.04 per 1,000** on higher Apify plans. You pay only for the results you receive, there is no subscription and no start fee. New Apify accounts get free monthly platform credits to try it.

Cost is driven purely by the number of reviews returned: use `maxReviewsPerCompany` to cap each company, and `textSearch`, `onlyCurrentEmployees` or `reviewLanguage` to narrow the set before you pay for it.

### ⚙️ Performance, proxies and limits

- **No proxy needed, and not recommended.** The Actor collects reviews 100 at a time. A proxy usually makes runs fail.
- **Speed**: reviews are collected 100 at a time without re-navigating between pages.
- **Volume**: very large employers expose tens of thousands of reviews. `0` in `maxReviewsPerCompany` collects everything Glassdoor exposes; set a cap to control cost and runtime.
- **Languages**: reviews are served per language. Run the Actor once per language you need (`eng`, `fra`, `deu`...).
- **Deduplication**: reviews are deduplicated by `reviewId` within a run.
- **Blocked runs**: if a run reports being blocked, retry later or raise `maxChallengeRetries`. The `input_status` report tells you which company failed.

### 🔌 Integrations and API

Run Glassdoor Reviews Scraper from the [Apify API](https://docs.apify.com/api/v2), the [Python](https://docs.apify.com/api/client/python) or [JavaScript](https://docs.apify.com/api/client/js) client, or on a [schedule](https://docs.apify.com/platform/schedules). Connect it to Make, Zapier, n8n, Google Sheets, Slack or any webhook through [Apify integrations](https://apify.com/integrations). Every run's dataset is available as JSON, CSV, Excel or XML from the dataset API.

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapifier~glassdoor-reviews-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{ "companyNames": ["Google"], "maxReviewsPerCompany": 50, "sort": "recent" }'
```

### ❓ FAQ

**Is it legal to scrape Glassdoor reviews?**

The Actor only reads reviews that Glassdoor publishes to anyone without logging in. Reviews may contain personal data (job titles, locations), so process them in line with GDPR and other privacy laws, respect Glassdoor's terms of use, and stay responsible for how you use the data. This is not legal advice.

**Do I need a Glassdoor account, login or cookies?**

No. Nothing to log in to, no cookies to paste, no proxy to configure.

**Can I export Glassdoor reviews to Excel or Google Sheets?**

Yes. Every run's dataset downloads as CSV, XLSX, JSON or XML from the Storage tab, and the Google Sheets integration can push new reviews to a sheet automatically.

**How many reviews can I scrape per company?**

As many as Glassdoor exposes (set `maxReviewsPerCompany` to `0`). Large companies have tens of thousands, so most users cap each run and sort by `recent` to fetch only new reviews.

**Can I scrape reviews for a specific country or office?**

Yes. Paste that country's Glassdoor company URL in `startUrls` (works on any Glassdoor domain: .com, .fr, .de, .co.uk...), or pick one of the English-speaking domains in `country` when resolving names, and set the matching `reviewLanguage`.

**Can I filter reviews by keyword or by current employees?**

Yes. `textSearch` keeps only reviews mentioning your keyword, and `onlyCurrentEmployees` removes former employees. Both filters are applied by Glassdoor before you pay for the results.

**How fresh is the data?**

Every run scrapes Glassdoor live. Schedule the Actor daily or weekly to keep a rolling history.

**Does it also get salaries, interviews or job offers?**

Not this Actor: use the sibling scrapers below, which share the same input style.

### 🔗 Related scrapers

- [Glassdoor Interviews Scraper](https://apify.com/scrapifier/glassdoor-interviews-scraper): interview experiences and the questions asked, by company.
- [Glassdoor Salaries Scraper](https://apify.com/scrapifier/glassdoor-salaries-scraper): salary estimates per job title and company.
- [Glassdoor Jobs Scraper](https://apify.com/scrapifier/glassdoor-jobs-scraper): job listings by keyword and location, with salary estimates.
- [Glassdoor Company Overview Scraper](https://apify.com/scrapifier/glassdoor-company-scraper): the full company profile (ratings, CEO approval, size, HQ, revenue) by name or URL.
- [Glassdoor Company Search Scraper](https://apify.com/scrapifier/glassdoor-company-search-scraper): find companies by location, industry, minimum rating and size.
- [Trustpilot Reviews Scraper](https://apify.com/scrapifier/trustpilot-reviews-scraper): customer reviews and TrustScores for any company.

### 💬 Support

Questions, bugs or a feature request? Open an issue in the **Issues** tab of this Actor, I answer quickly. If Glassdoor Reviews Scraper saves you time, a rating on the Store helps others find it.

# Actor input Schema

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

Paste one or more Glassdoor company URLs: the Reviews page (e.g. https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm) or the company Overview page. Works on any Glassdoor country domain (.com, .fr, .de, .co.uk…). Leave empty to use company names below.

## `companyNames` (type: `array`):

Company names to resolve automatically on glassdoor.com (e.g. Google, Microsoft, Airbnb). For a specific country/office, paste that country's Glassdoor URL above instead.

## `maxReviewsPerCompany` (type: `integer`):

How many reviews to collect per company (0 = as many as Glassdoor exposes).

## `sort` (type: `string`):

Order in which reviews are collected.

## `onlyCurrentEmployees` (type: `boolean`):

Only reviews written by current employees (excludes former employees).

## `reviewLanguage` (type: `string`):

ISO-639-2 language code for the reviews (e.g. eng, fra, deu, spa, ita, por, nld). Defaults to English (eng).

## `textSearch` (type: `string`):

Only reviews mentioning this keyword (e.g. "salary", "management", "remote"). Empty = all reviews.

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

Which Glassdoor domain to use when resolving company names. (Pasted URLs keep their own domain.)

## `includeCompanyResponses` (type: `boolean`):

Attach the employer's official responses to each review.

## `flatten` (type: `boolean`):

Add a flat companyResponseCount column for CSV/Excel.

## `emitInputStatus` (type: `boolean`):

Add an input_status report to the run's OUTPUT record.

## `maxChallengeRetries` (type: `integer`):

How many times to retry a page before giving up. Increase only if runs report being blocked.

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

Glassdoor answers datacenter addresses with a block page — measured: datacenter 403, residential 200 on the same request. Keep this on residential.

## Actor input object example

```json
{
  "companyNames": [
    "Google"
  ],
  "maxReviewsPerCompany": 100,
  "sort": "recent",
  "onlyCurrentEmployees": false,
  "reviewLanguage": "eng",
  "country": "www",
  "includeCompanyResponses": true,
  "flatten": false,
  "emitInputStatus": true,
  "maxChallengeRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

All Glassdoor reviews extracted by this 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 = {
    "companyNames": [
        "Google"
    ],
    "maxReviewsPerCompany": 100,
    "reviewLanguage": "eng",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapifier/glassdoor-reviews-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 = {
    "companyNames": ["Google"],
    "maxReviewsPerCompany": 100,
    "reviewLanguage": "eng",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapifier/glassdoor-reviews-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 '{
  "companyNames": [
    "Google"
  ],
  "maxReviewsPerCompany": 100,
  "reviewLanguage": "eng",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapifier/glassdoor-reviews-scraper --silent --output-dataset

```

## MCP server setup

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