# Glassdoor Reviews & Interviews Scraper (`axlymxp/glassdoor-reviews-scraper`) Actor

Scrape Glassdoor employee reviews, interview reports and company ratings by company name or URL. Full review history with pros, cons, sub-ratings and employer replies; interview questions, outcome and difficulty. Monitor mode returns only new reviews. Pay only for results.

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

## Pricing

from $2.00 / 1,000 dataset items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 & Interviews Scraper

Get Glassdoor employee reviews, interview reports and company ratings as clean JSON or CSV, by company name, Glassdoor URL or employer id. The actor reads Glassdoor's mobile app data source, so it reaches the **full review history** (not just the first ~200 reviews the website shows), needs **no login and no browser**, and returns 100 reviews per request.

- **Employee reviews** with title, pros, cons, advice to management, job title, location, current or former employee, tenure, overall rating and six sub-ratings, recommend / CEO approval / business outlook, helpful votes and the employer's reply.
- **Interview reports** with job title, outcome (offer accepted, declined, no offer), difficulty, experience, the process in the candidate's words and the questions they were asked.
- **Company profile** with website, headquarters, size, revenue, industry, founding year, description and category ratings.
- **Monitor mode.** Schedule the actor with *Only new since last run* and each run returns only reviews and interviews it has not delivered before.

Built for HR and employer-branding teams watching their own and competitors' reviews, recruiters and candidates preparing interviews, investors using employee sentiment as alternative data, and researchers building labour-market datasets.

### What you get

Every row has a `type` (`review`, `interview` or `company`) and the `employer_id` and `employer_name`, so many companies and all three row types fit in one dataset. The Output tab has a separate table view for each type.

#### Reviews (`type: review`)

| Field | Description |
| --- | --- |
| `id`, `date` | Glassdoor review id and post date (UTC) |
| `title`, `pros`, `cons`, `advice_to_management` | The review text |
| `job_title`, `location` | Reviewer's role and office |
| `is_current_employee`, `years_employed` | Current or former employee and tenure |
| `rating_overall` | 1 to 5 stars |
| `rating_work_life_balance`, `rating_culture_values`, `rating_diversity_inclusion`, `rating_career_opportunities`, `rating_compensation_benefits`, `rating_senior_leadership` | Sub-ratings (null when the reviewer skipped them) |
| `recommends_to_friend`, `ceo_approval`, `business_outlook` | `POSITIVE` / `NEGATIVE` / `APPROVE` / `DISAPPROVE` and similar |
| `helpful_count`, `is_featured` | Helpful votes and Glassdoor's featured flag |
| `employer_response`, `employer_response_date` | The company's public reply, if any |
| `employer_reviews_url` | The company's Glassdoor reviews page |

#### Interviews (`type: interview`)

| Field | Description |
| --- | --- |
| `id`, `date` | Interview report id and post date |
| `job_title` | Position interviewed for |
| `outcome` | `ACCEPT_OFFER`, `DECLINE_OFFER` or `NO_OFFER` |
| `difficulty` | `VERY_EASY` to `VERY_DIFFICULT` |
| `experience` | `POSITIVE`, `NEUTRAL` or `NEGATIVE` |
| `process` | How the process went, in the candidate's words |
| `questions` | Interview questions the candidate listed |
| `source`, `helpful_count`, `employer_response` | How they applied, helpful votes, the company's reply |

#### Companies (`type: company`)

`website`, `headquarters`, `size`, `revenue`, `company_type`, `year_founded`, `industry`, `description`, `mission`, `logo_url`, `rating_overall` and the six category ratings, `review_count` (Glassdoor's total), `reviews_available` and `interviews_available` (what this run could page through), and the Glassdoor overview, reviews and interviews URLs.

### Use cases

- **Employer branding.** Track new reviews of your company and three competitors every week in monitor mode; push them to Slack or a sheet and answer the critical ones.
- **Complaint mining.** Set `maxRating: 2` and `reviewsSort: newest` to collect every recent 1- and 2-star review with its cons and advice, then summarise themes with an LLM.
- **Interview preparation.** Pull the last 200 interview reports for a role at a target company, filtered to `DIFFICULT` and `ACCEPT_OFFER`, and read the process and questions.
- **Alternative data.** Build monthly time series of ratings, CEO approval and business outlook across a list of public companies.
- **Research.** Export tens of thousands of reviews with sub-ratings for culture, pay or leadership studies.

### Input

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `companies` | array | – | Names (`Salesforce`), Glassdoor URLs (any page with `E12345` or `EI_IE12345`) or employer ids. |
| `includeReviews` | boolean | `true` | Employee reviews. |
| `includeInterviews` | boolean | `false` | Interview reports. |
| `includeCompanyProfile` | boolean | `true` | One company row with profile and ratings. |
| `reviewsSort` | enum | `newest` | `newest`, `relevance`, `highest_rating`, `lowest_rating` |
| `maxReviewsPerCompany` | integer | `100` | Reviews per company after filters. |
| `onlyCurrentEmployees` | boolean | `false` | Only reviews by current employees. |
| `minRating`, `maxRating` | integer | `1`, `5` | Overall-rating range. |
| `postedAfter` | date | – | Only reviews and interviews posted on or after this date, e.g. `2026-09-01`. |
| `interviewsSort` | enum | `newest` | `newest` or `relevance` |
| `maxInterviewsPerCompany` | integer | `50` | Interview reports per company. |
| `interviewOutcomes` | array | all | `ACCEPT_OFFER`, `DECLINE_OFFER`, `NO_OFFER` |
| `interviewDifficulties` | array | all | `VERY_EASY`, `EASY`, `AVERAGE`, `DIFFICULT`, `VERY_DIFFICULT` |
| `onlyNewSinceLastRun` | boolean | `false` | Monitor mode: skip items delivered by earlier runs with the same input. |
| `maxItems` | integer | `1000` | Total rows for the run. |
| `proxyConfiguration` | object | RESIDENTIAL | Fallback only: the actor connects directly and switches to this proxy if Glassdoor refuses the connection. |

#### Example input

```json
{
  "companies": ["Salesforce", "https://www.glassdoor.com/Reviews/Stripe-Reviews-E671932.htm"],
  "includeReviews": true,
  "includeInterviews": true,
  "reviewsSort": "newest",
  "maxReviewsPerCompany": 30,
  "maxInterviewsPerCompany": 10,
  "maxItems": 100
}
```

#### Example output

A review:

```json
{
  "type": "review",
  "id": 105831865,
  "employer_reviews_url": "https://www.glassdoor.com/Reviews/Walmart-Reviews-E715.htm",
  "employer_id": 715,
  "employer_name": "Walmart Inc.",
  "date": "2026-10-02T20:20:44Z",
  "title": "Family-friendly scheduling but pay could be better",
  "pros": "Great family forgiving scheduling opportunity",
  "cons": "Not so high on pay scale",
  "advice_to_management": "Yes!",
  "job_title": "Remodel Associate",
  "location": "Rochelle, IL",
  "is_current_employee": false,
  "years_employed": 2,
  "rating_overall": 5.0,
  "rating_work_life_balance": 5.0,
  "rating_culture_values": 5.0,
  "rating_diversity_inclusion": 5.0,
  "rating_career_opportunities": 5.0,
  "rating_compensation_benefits": 4.0,
  "rating_senior_leadership": 3.0,
  "recommends_to_friend": "POSITIVE",
  "ceo_approval": "APPROVE",
  "business_outlook": "POSITIVE",
  "helpful_count": 0,
  "is_featured": false,
  "employer_response": null,
  "employer_response_date": null
}
```

An interview report:

```json
{
  "type": "interview",
  "id": 105838591,
  "employer_interviews_url": "https://www.glassdoor.com/Interview/Walmart-Interview-Questions-E715.htm",
  "employer_id": 715,
  "employer_name": "Walmart Inc.",
  "date": "2026-10-04T03:21:23Z",
  "job_title": "Cashier",
  "outcome": "ACCEPT_OFFER",
  "difficulty": "EASY",
  "experience": "NEUTRAL",
  "process": "Basic questions consisting of why are you interested in the company. How many hours could you work a week? Etc…",
  "questions": [],
  "source": null,
  "helpful_count": 0,
  "is_featured": false,
  "employer_response": null,
  "employer_response_date": null
}
```

A company row (shortened):

```json
{
  "type": "company",
  "id": 715,
  "url": "https://www.glassdoor.com/Overview/Working-at-Walmart-EI_IE715.11,18.htm",
  "employer_id": 715,
  "employer_name": "Walmart Inc.",
  "website": "https://careers.walmart.com/",
  "headquarters": "Bentonville, AR",
  "size": "10000+ Employees",
  "revenue": "$10+ billion (USD)",
  "company_type": "Company - Public",
  "year_founded": 1962,
  "industry": "General Merchandise & Superstores",
  "description": "The  work you do here reaches millions of people every day.\n\nWe started as a small discount retailer in Rogers…",
  "mission": "\"To save people money so they can live better.”",
  "logo_url": "https://media.glassdoor.com/sqls/715/walmart-squareLogo-1768329737595.png",
  "rating_overall": 3.4
}
```

### Speed

One request returns up to 100 reviews or interviews. A run of 1,000 reviews for one company takes well under a minute; the date cut-off and monitor mode stop paging as soon as they reach reviews delivered or dated earlier.

### Scheduling and integrations

Create a schedule in Apify (daily or weekly), turn on monitor mode, and connect a webhook or an integration (Slack, Google Sheets, Make, Zapier, n8n). Every run then delivers only new reviews and interviews. Results download as JSON, CSV, Excel or XML, or can be read through the Apify API.

### Use with AI assistants

Call the actor from an agent through the Apify API or the Apify MCP server, for example: "get the last 100 Glassdoor reviews of Stripe rated 2 stars or lower and list the top complaints". Pros, cons and advice arrive as separate fields, so the model can summarise without parsing pages.

### FAQ

**Do I need a Glassdoor account?** No. Everything returned is public on Glassdoor without logging in.

**Is the review history complete?** Yes. Pagination goes through the company's full review history, not only the first pages shown on the website. Glassdoor's own default criteria apply, so totals can differ slightly from the number on the company page.

**Why is a company not found?** Names are matched against Glassdoor's company search. If a name is ambiguous or spelled differently on Glassdoor, pass the company's Glassdoor URL or employer id instead.

**Why are some sub-ratings or interview questions empty?** Reviewers can skip sub-ratings and candidates can skip questions; the actor returns null or an empty list rather than guessing.

**Does it need a proxy?** Usually not. If Glassdoor refuses the connection, the actor switches to the configured Apify Proxy (RESIDENTIAL by default) and continues.

**Is this legal?** The actor collects publicly visible reviews and company data. You are responsible for using the data in line with Glassdoor's terms and the laws that apply to you, including privacy law for any personal data in review text.

# Actor input Schema

## `companies` (type: `array`):

Company names ("Salesforce"), Glassdoor company URLs (any page with E12345 or EI_IE12345 in it) or numeric employer ids. Names are matched against Glassdoor's company search; use a URL when the name is ambiguous.

## `includeReviews` (type: `boolean`):

One row per review: title, pros, cons, advice to management, job title, location, current or former employee, years employed, overall and sub-ratings, recommend / CEO approval / business outlook, helpful votes and the employer's response.

## `includeInterviews` (type: `boolean`):

One row per interview report: job title, outcome (offer accepted, declined, no offer), difficulty, experience, process description, questions asked and the employer's response.

## `includeCompanyProfile` (type: `boolean`):

One row per company: website, headquarters, size, revenue, industry, founding year, description, overall and category ratings and review counts.

## `reviewsSort` (type: `string`):

Which reviews come first. With 'Newest' the date cut-off and monitor mode stop paging early, which saves time.

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

Reviews taken per company after filters. The full history is available (no 200-review cap); large companies have tens of thousands.

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

Keep only reviews written by current employees.

## `minRating` (type: `integer`):

Keep reviews with an overall rating of at least this many stars (1-5).

## `maxRating` (type: `integer`):

Keep reviews with an overall rating of at most this many stars (1-5). Set 2 to collect only complaints.

## `postedAfter` (type: `string`):

Keep only reviews and interviews posted on or after this UTC date, e.g. 2026-09-01.

## `interviewsSort` (type: `string`):

Which interview reports come first.

## `maxInterviewsPerCompany` (type: `integer`):

Interview reports taken per company.

## `interviewOutcomes` (type: `array`):

Keep only these outcomes. Empty = all.

## `interviewDifficulties` (type: `array`):

Keep only these difficulty levels. Empty = all.

## `onlyNewSinceLastRun` (type: `boolean`):

Remember the reviews and interviews delivered by earlier runs with the same input and skip them, so a scheduled run returns only new ones. Changing the input starts a fresh memory.

## `maxItems` (type: `integer`):

Hard cap on dataset rows for the run, across all companies and row types. You pay per row stored.

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

Used only as a fallback: the actor connects directly and switches to this proxy if Glassdoor refuses the connection. Keep the default RESIDENTIAL group.

## Actor input object example

```json
{
  "companies": [
    "Salesforce",
    "https://www.glassdoor.com/Reviews/Stripe-Reviews-E671932.htm"
  ],
  "includeReviews": true,
  "includeInterviews": false,
  "includeCompanyProfile": true,
  "reviewsSort": "newest",
  "maxReviewsPerCompany": 100,
  "onlyCurrentEmployees": false,
  "minRating": 1,
  "maxRating": 5,
  "interviewsSort": "newest",
  "maxInterviewsPerCompany": 50,
  "interviewOutcomes": [],
  "interviewDifficulties": [],
  "onlyNewSinceLastRun": false,
  "maxItems": 1000,
  "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 = {
    "companies": [
        "Salesforce",
        "https://www.glassdoor.com/Reviews/Stripe-Reviews-E671932.htm"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/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 = {
    "companies": [
        "Salesforce",
        "https://www.glassdoor.com/Reviews/Stripe-Reviews-E671932.htm",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/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 '{
  "companies": [
    "Salesforce",
    "https://www.glassdoor.com/Reviews/Stripe-Reviews-E671932.htm"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call axlymxp/glassdoor-reviews-scraper --silent --output-dataset

```

## MCP server setup

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