# Glassdoor Reviews Scraper (`lisbuenas/glassdoor-reviews-scraper`) Actor

Scrape employee reviews from any Glassdoor company page — no 200-review cap. Get ratings, pros/cons, job title, location, tenure and employer responses as clean JSON, CSV or Excel. Real browser with stealth, date and language filters, no third-party API key needed.

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

## Pricing

from $0.003 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Reviews Scraper — full employee reviews, no 200-cap

Pull **employee reviews** from any **Glassdoor** company page into a clean dataset. Give it a company URL, the actor paginates through the review feed and emits one normalized **review** per record — ratings, pros/cons, job title, location, tenure and employer responses — ready for JSON / CSV / Excel.

It runs a real browser (Puppeteer + stealth) and reads the page's embedded Apollo data, so you get structured reviews without a third-party API key.

### 🚀 What this actor does

1. Takes one or more Glassdoor **company URLs** (review or overview URLs both work).
2. Opens the reviews feed and **paginates** (`_P2`, `_P3`, …) in the order you choose.
3. Extracts each review from the page's embedded data and **normalizes** it into a flat record.
4. Applies optional **date** and **language** filters, then pushes each review to the dataset.

### 🧩 Input

> Full schema: [.actor/input_schema.json](.actor/input_schema.json). Example: [input.json](input.json).

| Field | Type | Description |
| --- | --- | --- |
| `startUrls` *(required)* | array | Glassdoor company URLs, e.g. `https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm`. Overview URLs with the `E12345` id also work. |
| `max_reviews` | integer | Max reviews to collect across all URLs (default 100). |
| `sort_by` | string | `RELEVANCE`, `DATE`, `RATING`, or `RATING_ASC` (default `RELEVANCE`). |
| `reviews_start_date` | string | Drop reviews before this `YYYY-MM-DD` date. |
| `include_all_languages` | boolean | Keep reviews in any language (default `false`). |
| `language_code` | string | Language to keep when the above is off (default `eng`). |
| `file_name` | string | Run label attached to every record. |
| `max_concurrency` | integer | Parallel pages; keep low (1–3) to avoid blocks. |
| `proxy` | object | Apify proxy configuration (residential recommended). |

```json
{
    "startUrls": [
        { "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm" }
    ],
    "max_reviews": 50,
    "sort_by": "DATE",
    "language_code": "eng"
}
````

### 📤 Output

One dataset item per review. Full list: [.actor/dataset\_schema.json](.actor/dataset_schema.json).

- **Review:** `summary`, `pros`, `cons`, `advice`, `review_date`, `review_id`
- **Ratings:** `rating_overall`, `rating_culture_values`, `rating_compensation_benefits`, `rating_career_opportunities`, `rating_work_life_balance`, `rating_senior_management`, `rating_diversity_inclusion`, `ceo_rating`, `business_outlook`, `recommend_to_friend`
- **Reviewer:** `job_title`, `location`, `is_current_job`, `length_of_employment`, `employment_status`
- **Engagement:** `count_helpful`, `count_not_helpful`, `featured`, `employer_response`
- **Company:** `employer_id`, `employer_name`, `company_logo`, `company_overall_rating`
- **Context:** `review_language`, `source_url`, `file_name`

```json
{
    "review_id": "101",
    "review_date": "2024-06-01T10:00:00",
    "summary": "Great place to grow",
    "pros": "Smart people, good benefits",
    "cons": "Long hours during launches",
    "rating_overall": 5,
    "rating_work_life_balance": 3,
    "ceo_rating": "APPROVE",
    "recommend_to_friend": "POSITIVE",
    "job_title": "Software Engineer",
    "location": "London",
    "is_current_job": true,
    "employer_name": "Google",
    "source_url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm"
}
```

> **Note:** Glassdoor protects its pages aggressively. Use Apify residential proxies and keep `max_concurrency` low. Selectors and the embedded data shape can change over time; the extractor reads the page's Apollo cache and falls back gracefully.

# Actor input Schema

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

One or more Glassdoor company review URLs, e.g. "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm". Overview or company URLs containing the employer id (E12345) also work.

## `max_reviews` (type: `integer`):

Maximum number of reviews to collect across all company URLs. The actor paginates until this is reached or the company runs out of reviews.

## `sort_by` (type: `string`):

Order in which reviews are fetched from Glassdoor.

## `reviews_start_date` (type: `string`):

Drop reviews published before this date. Format YYYY-MM-DD. Most effective combined with "Most recent" sorting.

## `include_all_languages` (type: `boolean`):

When enabled, reviews written in any language are kept. When disabled, only reviews matching the Language code below are kept.

## `language_code` (type: `string`):

Glassdoor review language to keep when "Include all languages" is off (e.g. "eng", "fra", "por", "spa").

## `file_name` (type: `string`):

Custom run label attached to every record of this run.

## `max_concurrency` (type: `integer`):

How many review pages to scrape in parallel. Keep low (1-3) to reduce the chance of being blocked.

## `proxy` (type: `object`):

Proxy used for scraping. Datacenter or residential Apify proxy is strongly recommended to avoid blocks.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm"
    }
  ],
  "max_reviews": 100,
  "sort_by": "RELEVANCE",
  "include_all_languages": false,
  "language_code": "eng",
  "max_concurrency": 2,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lisbuenas/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 = { "startUrls": [{ "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm" }] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    {
      "url": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm"
    }
  ]
}' |
apify call lisbuenas/glassdoor-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lisbuenas/glassdoor-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Glassdoor Reviews Scraper",
        "description": "Scrape employee reviews from any Glassdoor company page — no 200-review cap. Get ratings, pros/cons, job title, location, tenure and employer responses as clean JSON, CSV or Excel. Real browser with stealth, date and language filters, no third-party API key needed.",
        "version": "0.0",
        "x-build-id": "Qx3XHGd2QkvIlgM43"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lisbuenas~glassdoor-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lisbuenas-glassdoor-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/lisbuenas~glassdoor-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lisbuenas-glassdoor-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/lisbuenas~glassdoor-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lisbuenas-glassdoor-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "🔗 Glassdoor company URLs",
                        "type": "array",
                        "description": "One or more Glassdoor company review URLs, e.g. \"https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm\". Overview or company URLs containing the employer id (E12345) also work.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "max_reviews": {
                        "title": "#️⃣ Number of reviews to fetch",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of reviews to collect across all company URLs. The actor paginates until this is reached or the company runs out of reviews.",
                        "default": 100
                    },
                    "sort_by": {
                        "title": "↕️ Sort reviews by",
                        "enum": [
                            "RELEVANCE",
                            "DATE",
                            "RATING",
                            "RATING_ASC"
                        ],
                        "type": "string",
                        "description": "Order in which reviews are fetched from Glassdoor.",
                        "default": "RELEVANCE"
                    },
                    "reviews_start_date": {
                        "title": "📅 Only reviews on/after date",
                        "type": "string",
                        "description": "Drop reviews published before this date. Format YYYY-MM-DD. Most effective combined with \"Most recent\" sorting."
                    },
                    "include_all_languages": {
                        "title": "🌐 Include all languages",
                        "type": "boolean",
                        "description": "When enabled, reviews written in any language are kept. When disabled, only reviews matching the Language code below are kept.",
                        "default": false
                    },
                    "language_code": {
                        "title": "🗣️ Language code",
                        "type": "string",
                        "description": "Glassdoor review language to keep when \"Include all languages\" is off (e.g. \"eng\", \"fra\", \"por\", \"spa\").",
                        "default": "eng"
                    },
                    "file_name": {
                        "title": "📁 File name / Run label",
                        "type": "string",
                        "description": "Custom run label attached to every record of this run."
                    },
                    "max_concurrency": {
                        "title": "⚙️ Max concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many review pages to scrape in parallel. Keep low (1-3) to reduce the chance of being blocked.",
                        "default": 2
                    },
                    "proxy": {
                        "title": "🌐 Proxy configuration",
                        "type": "object",
                        "description": "Proxy used for scraping. Datacenter or residential Apify proxy is strongly recommended to avoid blocks.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
