# Glassdoor Scraper - Company Reviews, Ratings & Interviews (`scrapesage/glassdoor-scraper`) Actor

Scrape any Glassdoor company: employee reviews with all sub-ratings, pros/cons & employer replies, the full rating breakdown, CEO approval & recommend %, interview questions & difficulty, plus employer leads. Monitor mode pulls only new reviews. No login, no browser.

- **URL**: https://apify.com/scrapesage/glassdoor-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (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 $2.00 / 1,000 review scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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 Scraper — Company Reviews, Ratings, Interviews & Employer Leads

Extract **complete Glassdoor company data** — the full **employee review history** (every sub-rating, pros, cons, advice and the employer's own replies), the **company rating breakdown** (overall + six sub-ratings + CEO approval, recommend-to-friend and business-outlook percentages + the full 1–5 star distribution), **interview experiences with the exact questions asked**, and ready-to-contact **employer leads**. One clean dataset, every field other scrapers leave blank.

**No login, no cookies, no browser** — fast JSON extraction straight from Glassdoor's own data APIs, with a built-in **monitor mode** that pulls only new reviews on each run.

### Why this Glassdoor scraper?

Most Glassdoor scrapers grab the first few review pages and stop, or return only review text with none of the structured ratings. This actor reads Glassdoor's internal review & interview APIs directly and ships the **richest dataset in the category** — four record types, every sub-rating, employer replies, and pagination that goes *all the way through* the review history (no anonymous cap).

| Data | Typical scrapers | This actor |
|---|---|---|
| Overall rating + review text | ✅ | ✅ |
| All six sub-ratings (work-life, culture, comp & benefits, career, senior leadership, diversity) | ❌ | ✅ |
| Recommend-to-friend / CEO-approval / business-outlook verdicts (per review **and** company-wide %) | ❌ | ✅ |
| Pros, cons **and** advice to management | partial | ✅ |
| Employer's official responses to reviews | ❌ | ✅ |
| Current vs former employee, job title, location, tenure | partial | ✅ |
| Helpful / not-helpful counts per review | ❌ | ✅ |
| Full company rating distribution (how many 1★…5★) | ❌ | ✅ |
| Interview difficulty, experience, outcome, process **and the questions asked** | ❌ | ✅ |
| Employer leads with website, reputation & 0–100 lead score | ❌ | ✅ |
| Website-crawled contact emails / phones / socials | ❌ | ✅ opt-in |
| Pagination through the entire review history | ❌ | ✅ |
| Monitor mode — only new reviews per run | ❌ | ✅ |

### Use cases

- **Employer-reputation & brand monitoring** — track a company's overall rating, CEO approval, recommend-to-friend % and the flow of new reviews over time. Perfect for HR, talent-brand and PR teams watching their own (or a competitor's) Glassdoor presence.
- **Competitive & market intelligence** — benchmark culture, work-life balance, comp & benefits and management scores across a set of companies in one dataset.
- **Recruiting & candidate research** — pull interview experiences, difficulty and the **actual questions asked** to brief candidates or design hiring loops.
- **Investment & due diligence** — employee sentiment, rating trends and management approval are leading indicators analysts and acquirers track.
- **B2B lead generation** — every company becomes a scored **employer lead** (firmographics + reputation + website contacts) for HR-tech, recruiting, employer-branding, comp-benchmarking and engagement-survey vendors.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Glassdoor Scraper**, enter company names (or paste Glassdoor company URLs), choose what to scrape, and click **Start**.
3. Watch results stream into the dataset table — switch between the **Companies / Reviews / Interviews / Employer leads** views.
4. **Export** as JSON, CSV, Excel, XML or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "companyNames": ["Google", "Netflix"],
    "includeCompanyOverview": true,
    "includeReviews": true,
    "includeInterviews": true,
    "maxReviews": 200,
    "reviewsSort": "recent",
    "outputEmployerLeads": true,
    "enrichLeadEmails": true,
    "monitorMode": false
}
````

- **companyNames** — look companies up by name; each is resolved to its Glassdoor employer page automatically.
- **startUrls** — paste Glassdoor company URLs instead (any tab works: Overview, Reviews, Interviews, Salary, Jobs). More precise when several employers share a name.
- **employerIds** — numeric Glassdoor employer IDs (the number after `-E` / `EI_IE` in a company URL), e.g. `9079` for Google.
- **includeCompanyOverview** *(default true)* — one company record per employer: overall rating, all six sub-ratings, CEO approval %, recommend-to-friend %, business-outlook %, the full 1–5 star distribution and review count.
- **includeReviews** *(default true)* — employee reviews with every sub-rating, verdicts, pros/cons/advice, job title, location, tenure, helpful counts and employer replies.
- **includeInterviews** *(default false)* — interview difficulty, experience, outcome, full process description, negotiation notes and the exact questions asked.
- **outputEmployerLeads** *(default false)* — one scored employer-lead record per company (firmographics + reputation + 0–100 lead score).
- **enrichLeadEmails** *(default false)* — crawl each company's own website for public contact emails, phones and socials. Glassdoor never exposes emails — this is the only way to get them.
- **maxReviews / maxInterviews** — caps per company (`0` = all available).
- **reviewsSort** — `recent` (best for monitoring) or `helpful`. **reviewLanguage** — ISO-3 filter (`eng`, `fra`, …) or `all`. **employmentStatus** — `all`, `current` or `former`. **reviewsStartDate** — stop paging once reviews are older than this date (great for incremental pulls).
- **monitorMode** *(default false)* — emit only reviews/interviews not seen in previous runs.

### Output

One record per type — `company`, `review`, `interview` and `employerLead`:

```json
{
    "type": "review",
    "employerId": "9079",
    "companyName": "Google",
    "reviewId": "104451973",
    "reviewUrl": "https://www.glassdoor.com/Reviews/Employee-Review-Google-E9079-RVW104451973.htm",
    "reviewDateTime": "2026-06-18T22:43:17.023",
    "summary": "Great place to grow",
    "pros": "Smart people, strong comp, real work-life balance.",
    "cons": "Large org — decisions can be slow.",
    "advice": "Keep investing in internal mobility.",
    "ratingOverall": 5,
    "ratingWorkLifeBalance": 4,
    "ratingCultureAndValues": 5,
    "ratingCompensationAndBenefits": 5,
    "ratingCareerOpportunities": 4,
    "recommendToFriend": "RECOMMEND",
    "ceoRating": "APPROVE",
    "employmentStatus": "REGULAR",
    "isCurrentEmployee": true,
    "jobTitle": "Software Engineer",
    "reviewerLocation": "Mountain View, CA",
    "lengthOfEmploymentYears": 3,
    "countHelpful": 12,
    "employerResponses": [],
    "scrapedAt": "2026-06-19T23:00:30.000Z"
}
```

```json
{
    "type": "company",
    "employerId": "9079",
    "companyName": "Google",
    "website": "https://www.google.com",
    "glassdoorUrl": "https://www.glassdoor.com/Overview/Working-at-Google-EI_IE9079.htm",
    "overallRating": 4.4,
    "reviewCount": 70268,
    "ratingWorkLifeBalance": 4.2,
    "ratingCompensationAndBenefits": 4.5,
    "ratingCultureAndValues": 4.3,
    "recommendToFriendPercent": 87,
    "ceoApprovalPercent": 83,
    "businessOutlookPercent": 81,
    "ceoName": "Sundar Pichai",
    "ratingDistribution": { "oneStar": 472, "twoStar": 489, "threeStar": 2042, "fourStar": 5773, "fiveStar": 11519 }
}
```

Interview records add `difficulty`, `experience`, `outcome`, `processDescription`, `negotiationDescription` and an `interviewQuestions` array. Employer-lead records add `emails`, `phones`, `socials` and a `leadScore`.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly with **monitor mode** on to capture only new reviews; the Schedule decides *when* to run, monitor mode decides *which* items are new — they never conflict.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, BI refresh) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/glassdoor-scraper').call({
    companyNames: ['Google', 'Netflix'],
    includeReviews: true,
    includeInterviews: true,
    maxReviews: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} companies, reviews & interviews`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new reviews or employer leads straight into your CRM or a Slack channel.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored company gets new reviews.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "pull Google's latest Glassdoor reviews and summarise the sentiment" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **hiring, employer-brand & compensation intelligence stack**:

- **[Levels.fyi Scraper](https://apify.com/scrapesage/levels-fyi-scraper)** — tech salaries, total compensation & leveling by company.
- **[Talent.com Jobs Scraper](https://apify.com/scrapesage/talent-com-jobs-scraper)** — global job listings with real salaries and employer leads.
- **[Seek Job Scraper](https://apify.com/scrapesage/seek-job-scraper)** — Australia & New Zealand jobs, salaries & company data.
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** — job postings as hiring-intent signals.
- **[GitHub Scraper](https://apify.com/scrapesage/github-scraper)** — developers, repos & org data for technical recruiting.
- **[Stack Overflow & Stack Exchange Scraper](https://apify.com/scrapesage/stackexchange-scraper)** — Q\&A and developer leads.
- **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)** — turn any domain list into emails, phones & socials.

### Tips

- **Big employers**: Glassdoor exposes the *entire* review history (Google has 70,000+ reviews). Set `maxReviews` to a sensible cap, or use `reviewsStartDate` + `reviewsSort: recent` for incremental pulls.
- **Incremental feeds**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to capture only new reviews each run.
- **Proxies**: keep the default **US residential** proxy group — Glassdoor sits behind Cloudflare and blocks datacenter IPs.
- **Cost control**: scrape a single record type (e.g. reviews only) for one clean, fully-populated table, and enable `enrichLeadEmails` only when you need contacts.

### FAQ

**How do I scrape reviews for a specific company?** Put its name in `companyNames` (e.g. `Google`) or paste any Glassdoor company URL into `startUrls`. The actor resolves the employer automatically.

**Does it work without logging in?** Yes — no Glassdoor account, cookies or browser needed. The actor reads Glassdoor's public review and interview data directly.

**Can it get *all* the reviews, past the usual limit?** Yes. Unlike anonymous browsing, this actor paginates through the full review history; set `maxReviews: 0` to collect everything.

**Can I export to Google Sheets, CSV or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new reviews automatically?** Turn on `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules) (e.g. daily). Only reviews/interviews new since the last run are emitted — ideal for alerts and dashboards.

**Where do the emails come from?** Never from Glassdoor (it doesn't publish them). With `enrichLeadEmails` on, the actor visits the company's own public website and extracts publicly listed contact details — the same thing a human visitor would see.

**Is scraping Glassdoor legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and Glassdoor's terms.

**A field is empty — why?** Some reviews genuinely don't include every sub-rating, advice, or an employer response, and some companies don't publish contact emails. Fields are omitted only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

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

Look up companies by name — the actor resolves each to its Glassdoor employer page automatically. Example: <code>Google</code>, <code>Netflix</code>. Pasting a company URL below is more precise when several employers share a name.

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

Paste one or more Glassdoor company URLs — any tab works (Overview, Reviews, Interviews, Salary, Jobs). The actor reads the employer ID from the URL. Example: <code>https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm</code>

## `employerIds` (type: `array`):

Optional. Numeric Glassdoor employer IDs (the number after <code>-E</code> / <code>EI\_IE</code> in a company URL), e.g. <code>9079</code> for Google.

## `includeCompanyOverview` (type: `boolean`):

Emit one company record per employer: overall rating, all six sub-ratings, CEO approval %, recommend-to-friend %, business-outlook %, the full 1–5 star rating distribution, size, industry, HQ, website and review/salary/job counts.

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

Employee reviews with the overall rating, every sub-rating (work-life balance, culture & values, comp & benefits, career, senior leadership, diversity), recommend / CEO-approval / outlook verdicts, pros, cons, advice to management, job title, location, employment status, tenure, helpful counts, and the employer's official replies.

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

Interview experiences: difficulty, overall experience, outcome, how it was obtained, full process description, negotiation notes, and the exact interview questions asked.

## `outputEmployerLeads` (type: `boolean`):

Emit one deduplicated employer-lead record per company — firmographics (website, size, industry, HQ), reputation (rating, recommend %, CEO approval), and a 0–100 lead score. Ideal for HR-tech, recruiting, employer-branding and comp-benchmarking prospecting.

## `enrichLeadEmails` (type: `boolean`):

For each employer lead, crawl the company's own website (home + contact/about pages) for public contact emails, phone numbers and social links. Glassdoor never exposes emails — this is the only way to get them.

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

Maximum reviews to scrape per company (0 = all available). Glassdoor exposes the entire review history — large employers can have tens of thousands.

## `maxInterviews` (type: `integer`):

Maximum interview experiences per company (0 = up to 100).

## `reviewsPageSize` (type: `integer`):

How many reviews/interviews to request per API page (1–50). Larger pages mean fewer requests.

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

Order in which reviews are collected. "Most recent" is best for monitoring; "Most helpful" surfaces the most-read reviews first.

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

3-letter language filter for reviews, e.g. <code>eng</code>, <code>fra</code>, <code>deu</code>, <code>spa</code>. Use <code>all</code> for every language.

## `employmentStatus` (type: `string`):

Limit reviews to current or former employees, or include both.

## `reviewsStartDate` (type: `string`):

Only keep reviews published on or after this date (YYYY-MM-DD). Combined with "Most recent first", the actor stops paging once it reaches older reviews — ideal for incremental pulls.

## `monitorMode` (type: `boolean`):

Remember reviews and interviews already seen in previous runs (stored in a named key-value store) and emit only items that are new since last time. Pair it with an Apify Schedule for an always-fresh feed — the Schedule decides WHEN to run, monitor mode decides WHICH items are new. They do not conflict.

## `monitorKey` (type: `string`):

Optional. Names the key-value store used to remember seen items in monitor mode. Use distinct keys to keep separate monitors apart. Defaults to <code>default</code>.

## `maxConcurrency` (type: `integer`):

How many companies to process in parallel.

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

Proxy settings. US Residential proxies are required — Glassdoor is behind Cloudflare and blocks datacenter IPs. The actor defaults the country to US.

## Actor input object example

```json
{
  "companyNames": [
    "Google"
  ],
  "includeCompanyOverview": true,
  "includeReviews": true,
  "includeInterviews": false,
  "outputEmployerLeads": false,
  "enrichLeadEmails": false,
  "maxReviews": 100,
  "maxInterviews": 0,
  "reviewsPageSize": 20,
  "reviewsSort": "recent",
  "reviewLanguage": "eng",
  "employmentStatus": "all",
  "monitorMode": false,
  "monitorKey": "default",
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

All scraped records in the default dataset.

# 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"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Glassdoor Scraper - Company Reviews, Ratings & Interviews",
        "description": "Scrape any Glassdoor company: employee reviews with all sub-ratings, pros/cons & employer replies, the full rating breakdown, CEO approval & recommend %, interview questions & difficulty, plus employer leads. Monitor mode pulls only new reviews. No login, no browser.",
        "version": "1.0",
        "x-build-id": "QB8ap0oiO5SLbqicV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~glassdoor-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-glassdoor-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/scrapesage~glassdoor-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-glassdoor-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/scrapesage~glassdoor-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-glassdoor-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",
                "properties": {
                    "companyNames": {
                        "title": "Company names",
                        "type": "array",
                        "description": "Look up companies by name — the actor resolves each to its Glassdoor employer page automatically. Example: <code>Google</code>, <code>Netflix</code>. Pasting a company URL below is more precise when several employers share a name.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Glassdoor company URLs",
                        "type": "array",
                        "description": "Paste one or more Glassdoor company URLs — any tab works (Overview, Reviews, Interviews, Salary, Jobs). The actor reads the employer ID from the URL. Example: <code>https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm</code>",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "employerIds": {
                        "title": "Glassdoor employer IDs",
                        "type": "array",
                        "description": "Optional. Numeric Glassdoor employer IDs (the number after <code>-E</code> / <code>EI_IE</code> in a company URL), e.g. <code>9079</code> for Google.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeCompanyOverview": {
                        "title": "Scrape company overview",
                        "type": "boolean",
                        "description": "Emit one company record per employer: overall rating, all six sub-ratings, CEO approval %, recommend-to-friend %, business-outlook %, the full 1–5 star rating distribution, size, industry, HQ, website and review/salary/job counts.",
                        "default": true
                    },
                    "includeReviews": {
                        "title": "Scrape reviews",
                        "type": "boolean",
                        "description": "Employee reviews with the overall rating, every sub-rating (work-life balance, culture & values, comp & benefits, career, senior leadership, diversity), recommend / CEO-approval / outlook verdicts, pros, cons, advice to management, job title, location, employment status, tenure, helpful counts, and the employer's official replies.",
                        "default": true
                    },
                    "includeInterviews": {
                        "title": "Scrape interviews",
                        "type": "boolean",
                        "description": "Interview experiences: difficulty, overall experience, outcome, how it was obtained, full process description, negotiation notes, and the exact interview questions asked.",
                        "default": false
                    },
                    "outputEmployerLeads": {
                        "title": "Output employer leads",
                        "type": "boolean",
                        "description": "Emit one deduplicated employer-lead record per company — firmographics (website, size, industry, HQ), reputation (rating, recommend %, CEO approval), and a 0–100 lead score. Ideal for HR-tech, recruiting, employer-branding and comp-benchmarking prospecting.",
                        "default": false
                    },
                    "enrichLeadEmails": {
                        "title": "Enrich leads with website contacts",
                        "type": "boolean",
                        "description": "For each employer lead, crawl the company's own website (home + contact/about pages) for public contact emails, phone numbers and social links. Glassdoor never exposes emails — this is the only way to get them.",
                        "default": false
                    },
                    "maxReviews": {
                        "title": "Max reviews per company",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum reviews to scrape per company (0 = all available). Glassdoor exposes the entire review history — large employers can have tens of thousands.",
                        "default": 100
                    },
                    "maxInterviews": {
                        "title": "Max interviews per company",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum interview experiences per company (0 = up to 100).",
                        "default": 0
                    },
                    "reviewsPageSize": {
                        "title": "Reviews page size",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many reviews/interviews to request per API page (1–50). Larger pages mean fewer requests.",
                        "default": 20
                    },
                    "reviewsSort": {
                        "title": "Sort reviews by",
                        "enum": [
                            "recent",
                            "helpful"
                        ],
                        "type": "string",
                        "description": "Order in which reviews are collected. \"Most recent\" is best for monitoring; \"Most helpful\" surfaces the most-read reviews first.",
                        "default": "recent"
                    },
                    "reviewLanguage": {
                        "title": "Reviews language (ISO-3)",
                        "type": "string",
                        "description": "3-letter language filter for reviews, e.g. <code>eng</code>, <code>fra</code>, <code>deu</code>, <code>spa</code>. Use <code>all</code> for every language.",
                        "default": "eng"
                    },
                    "employmentStatus": {
                        "title": "Employee status filter",
                        "enum": [
                            "all",
                            "current",
                            "former"
                        ],
                        "type": "string",
                        "description": "Limit reviews to current or former employees, or include both.",
                        "default": "all"
                    },
                    "reviewsStartDate": {
                        "title": "Only reviews on/after date",
                        "type": "string",
                        "description": "Only keep reviews published on or after this date (YYYY-MM-DD). Combined with \"Most recent first\", the actor stops paging once it reaches older reviews — ideal for incremental pulls."
                    },
                    "monitorMode": {
                        "title": "Monitor mode — only new items",
                        "type": "boolean",
                        "description": "Remember reviews and interviews already seen in previous runs (stored in a named key-value store) and emit only items that are new since last time. Pair it with an Apify Schedule for an always-fresh feed — the Schedule decides WHEN to run, monitor mode decides WHICH items are new. They do not conflict.",
                        "default": false
                    },
                    "monitorKey": {
                        "title": "Monitor key",
                        "type": "string",
                        "description": "Optional. Names the key-value store used to remember seen items in monitor mode. Use distinct keys to keep separate monitors apart. Defaults to <code>default</code>.",
                        "default": "default"
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 8,
                        "type": "integer",
                        "description": "How many companies to process in parallel.",
                        "default": 4
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. US Residential proxies are required — Glassdoor is behind Cloudflare and blocks datacenter IPs. The actor defaults the country to US.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
