# Glassdoor Company Overview Universal Scraper (`scrapifier/glassdoor-company-overview-universal-scraper`) Actor

🏢 Get the full Glassdoor profile of any company from its name or URL: rating & 6 sub-ratings, CEO approval, recommend-to-friend, business outlook, review/salary/benefit/job counts, size, HQ, industry, revenue, website, founding year, CEO, competitors, awards. No login, no proxy.

- **URL**: https://apify.com/scrapifier/glassdoor-company-overview-universal-scraper.md
- **Developed by:** [Scrapifier](https://apify.com/scrapifier) (community)
- **Categories:** Business, Lead generation, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Company Overview Scraper

Scrape the full company profile from Glassdoor by company name or Glassdoor URL and export it as JSON, CSV or Excel, or pull it straight from the API.

⚡ For every company you get the **overall rating and all six sub-ratings** (career opportunities, compensation and benefits, culture and values, diversity and inclusion, senior management, work-life balance), **CEO approval**, recommend-to-friend and positive business outlook percentages, the **review, salary, benefit, photo and job counts**, **size, headquarters, industry and sector**, revenue bucket, stock ticker, website, founding year, CEO name, description, mission, competitors, Best Places to Work awards, the links to every Glassdoor section of the company and, optionally, ratings by demographic group. One row per company, with **no login, no cookies and no proxy**. You **pay per company**.

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

### 🎯 Why scrape Glassdoor company profiles?

- **Lead enrichment**: turn 500 company names into rating, headcount, headquarters, industry, revenue bucket and website, joined back to your CRM with `matchedInput`.
- **Employer branding**: schedule a weekly run on your company and its competitors and chart `rating`, `ceoApprovalPercent` and `recommendToFriendPercent` over time.
- **Due diligence and investing**: employee rating, CEO approval and business outlook for a whole portfolio or target list, one input per company.
- **Recruiting and job search**: size, HQ, culture ratings and open job count of a future employer in one row before you apply.
- **Data pipelines**: the `links` block hands you the reviews, salaries, interviews and jobs URLs for the other Glassdoor scrapers.

### 📊 What data does Glassdoor Company Overview Scraper extract?

| Field | Description |
|---|---|
| `employerId` | Glassdoor employer id |
| `name` | Company name |
| `url` | Glassdoor overview page of the company |
| `logoUrl` | Square logo |
| `website` | Company website |
| `headquarters` | Headquarters (city, state or country) |
| `yearFounded` | Founding year |
| `companyType` | `Company - Public`, `Company - Private`, `Nonprofit`... |
| `size`, `sizeCategory` | Employee count bucket (for example `10000+ Employees`) and its category (`SMALL` to `GIANT`) |
| `revenue` | Revenue bucket (for example `$10+ billion (USD)`) |
| `stockSymbol` | Ticker when the company is public |
| `industry`, `industryId`, `sector`, `sectorId` | Primary industry and sector with their Glassdoor ids |
| `ceoName` | CEO name |
| `description`, `mission` | Company description and mission statement |
| `rating` | Overall rating (1 to 5) |
| `ratings.*` | The six sub-ratings: `careerOpportunities`, `compensationAndBenefits`, `cultureAndValues`, `diversityAndInclusion`, `seniorManagement`, `workLifeBalance` |
| `recommendToFriendPercent` | Percentage of employees who would recommend the company to a friend |
| `ceoApprovalPercent` | Percentage of CEO approval |
| `positiveBusinessOutlookPercent` | Percentage of positive business outlook |
| `reviewCount`, `salaryCount`, `benefitCount`, `photoCount`, `jobCount` | Number of reviews, salary reports, benefit reviews, photos and open jobs |
| `competitors[]` | Competitors as `{ employerId, name }` |
| `awards.*` | `bestPlacesToWork` years, `bestLedCompanies` years, `topCeo` boolean |
| `links.*` | `reviews`, `salaries`, `interviews`, `jobs`, `benefits`, `photos`, `faq` pages of the company |
| `demographicRatings.*` | Ratings by gender, race/ethnicity, sexual orientation, disability, parent/caregiver and veteran status, when `includeDemographicRatings` is on |
| `matchedInput` | The name or URL of your input that produced this row |

With `flatten` enabled, the sub-ratings become `rating_*` columns, the links `url_*` columns, the awards `award_bestPlacesToWork`, `award_bestLedCompanies` and `award_topCeo`, competitors a `|` separated string, and demographic ratings are dropped so the CSV stays flat.

### 🚀 How to scrape Glassdoor company profiles

1. Open the Actor and type **company names** in `companyNames` (`Google`, `Deloitte`, `Airbnb`; exact spelling is not required), or paste Glassdoor company URLs in `startUrls` (Overview, Reviews, Salaries, Interviews, Jobs or Benefits page).
2. Tick **Include demographic ratings** if you want the average rating given by each demographic group.
3. Tick **Flatten output** if you plan to open the result in Excel or Google Sheets.
4. Click **Start**. The Actor passes Glassdoor's Cloudflare check once, resolves each name to its employer id, then reads every profile from Glassdoor's own company API.
5. Open the **Storage** tab to preview the companies and export them as JSON, CSV, Excel or XML, or read them from the dataset API.

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

### 📥 Input parameters

| Field | Key | Type | Default | Description |
|---|---|---|---|---|
| Glassdoor company URLs | `startUrls` | array of URLs | none | Any Glassdoor page of a company (Overview, Reviews, Salaries, Interviews, Jobs or Benefits URL). One company profile per URL. |
| Company names | `companyNames` | array of strings | `["Google", "Microsoft", "Airbnb"]` | Company names, resolved with Glassdoor's own search. Exact spelling is not required. |
| Include demographic ratings | `includeDemographicRatings` | boolean | `false` | Add the average rating given by each demographic group (gender, race/ethnicity, sexual orientation, disability, parent/caregiver, veteran status) when Glassdoor publishes them. |
| Flatten output (CSV / Excel friendly) | `flatten` | boolean | `false` | One flat row per company: `rating_*`, `url_*` and `award_*` columns, competitors as a `\|` separated string. Demographic ratings are dropped. |
| Report input status | `emitInputStatus` | boolean | `true` | Write an `input_status` report to the `OUTPUT` record (which company returned nothing, and why). |
| Max Cloudflare retries | `maxChallengeRetries` | integer | `8` | How many times to reload the page while waiting for Glassdoor's Cloudflare check to clear (1 to 20). |
| Proxy (not recommended) | `proxyConfiguration` | object | none | Leave empty: Glassdoor blocks proxy IP ranges but accepts Apify's own egress IP. Only set it if you need a specific country egress. |

Example input:

```json
{
  "companyNames": ["Google", "Microsoft", "Airbnb"],
  "startUrls": [{ "url": "https://www.glassdoor.com/Overview/Working-at-Deloitte-EI_IE2763.11,19.htm" }]
}
```

Each input produces exactly one company, and a company given both by name and by URL is returned once. A pasted URL must contain the Glassdoor employer id (`E9079` or `EI_IE9079` in the path); Overview, Reviews, Salaries, Interviews, Jobs, Benefits, Photos and FAQ pages all work. To discover companies by location, industry, rating or size instead, use the sibling [Glassdoor Company Search Scraper](https://apify.com/scrapifier/glassdoor-company-search-universal-scraper).

### 📤 Output example

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

```json
{
  "employerId": 9079,
  "name": "Google",
  "url": "https://www.glassdoor.com/Overview/Working-at-Google-EI_IE9079.11,17.htm",
  "website": "https://goo.gle/4ehVuXi",
  "headquarters": "Mountain View, CA",
  "yearFounded": 1998,
  "companyType": "Company - Public",
  "size": "10000+ Employees",
  "sizeCategory": "GIANT",
  "revenue": "$10+ billion (USD)",
  "stockSymbol": "GOOG",
  "industry": "Internet & Web Services",
  "sector": "Information Technology",
  "ceoName": "Sundar Pichai",
  "mission": "Organize the world's information and make it universally accessible and useful.",
  "rating": 4.4,
  "ratings": {
    "careerOpportunities": 4.2,
    "compensationAndBenefits": 4.5,
    "cultureAndValues": 4.2,
    "diversityAndInclusion": 4.4,
    "seniorManagement": 3.9,
    "workLifeBalance": 4.2
  },
  "recommendToFriendPercent": 87,
  "ceoApprovalPercent": 83,
  "positiveBusinessOutlookPercent": 82,
  "reviewCount": 70954,
  "salaryCount": 191450,
  "benefitCount": 30289,
  "photoCount": 621,
  "jobCount": 5419,
  "competitors": [
    { "employerId": 1651, "name": "Microsoft" },
    { "employerId": 1138, "name": "Apple" },
    { "employerId": 40772, "name": "Meta" }
  ],
  "awards": { "bestPlacesToWork": ["2026"], "bestLedCompanies": [], "topCeo": false },
  "links": {
    "reviews": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm",
    "salaries": "https://www.glassdoor.com/Salary/Google-Salaries-E9079.htm",
    "interviews": "https://www.glassdoor.com/Interview/Google-Interview-Questions-E9079.htm",
    "jobs": "https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm"
  },
  "matchedInput": "Google"
}
```

With `includeDemographicRatings` set to `true`, each item also carries a `demographicRatings` block:

```json
{
  "demographicRatings": {
    "gender": { "man": 4.3, "woman": 4.2, "nonBinary": 4 },
    "raceEthnicity": { "asian": 4.4, "white": 4.1, "blackOrAfricanAmerican": 4.3, "hispanicOrLatinx": 4.3 },
    "sexualOrientation": { "yes": 4, "no": 4.3 },
    "disability": { "yes": 3.8, "no": 4.3 },
    "parentOrCaregiver": { "parentOrGuardian": 4.1, "caregiver": 4.2, "no": 4.3 },
    "veteranStatus": { "yes": 4.1, "no": 4.3 }
  }
}
```

The run's `OUTPUT` record also holds the run statistics (companies, duplicates, requests, errors) and, per input, an `input_status` entry with the resolved employer id and a status: `ok`, `ok_best_match`, `duplicate`, `not_found`, `error` or `no_employer_id`.

### 💡 Ready-to-run examples

**Big Tech snapshot** (tested)

```json
{ "companyNames": ["Google", "Microsoft", "Apple", "Meta", "Amazon", "Netflix"] }
```

**Big Four and MBB consulting firms compared, flat CSV** (tested)

```json
{ "companyNames": ["Deloitte", "PwC", "EY", "KPMG", "McKinsey & Company", "Boston Consulting Group", "Bain & Company", "Accenture"], "flatten": true }
```

**Company profiles from Glassdoor URLs, any section works** (tested)

```json
{ "startUrls": [
  { "url": "https://www.glassdoor.com/Overview/Working-at-Airbnb-EI_IE391850.11,17.htm" },
  { "url": "https://www.glassdoor.com/Reviews/Stripe-Reviews-E671932.htm" },
  { "url": "https://www.glassdoor.com/Salary/Spotify-Salaries-E408251.htm" }
] }
```

**Profiles with ratings by demographic group**

```json
{ "companyNames": ["Google", "Microsoft", "Airbnb"], "includeDemographicRatings": true }
```

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

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

Cost is driven purely by the number of companies returned, and each name or URL produces exactly one company, so the size of your input list is your cap. A company that is not found, or given twice, is not charged twice.

### ⚙️ Performance, proxies and limits

- **No proxy needed, and not recommended.** Glassdoor sits behind Cloudflare and blocks proxy IP ranges (residential and datacenter), but accepts Apify's own egress IP. The Actor opens a real browser, clears the check once, then calls Glassdoor's own company API from the page. Leave `proxyConfiguration` empty unless you need a specific country egress; if set, one sticky IP is kept for the whole run because Cloudflare binds its clearance to the IP.
- **Speed**: about 1 company per 2 seconds after the roughly 10 second start-up (a 1.5 second pause between companies respects Glassdoor's rate limits). 100 companies take about 3.5 minutes.
- **Memory**: the default run option is 2048 MB, with a 3600 second timeout.
- **Name resolution**: names go through Glassdoor's autocomplete, the exact ("direct hit") company wins, otherwise the first suggestion. The Actor then scans up to 3 pages of Glassdoor's company search for that employer id; if the index disagrees (rare, merged profiles), it returns the best name match with the status `ok_best_match`.
- **Deduplication**: companies are deduplicated by `employerId` within a run, so a company given by name and by URL is returned once. Results are pushed to the dataset in batches of 100.
- **Empty input**: if neither names nor URLs are given, the Actor falls back to an unfiltered Glassdoor company search and returns the first 100 companies.
- **Blocked runs**: the Cloudflare check is reloaded up to `maxChallengeRetries` times (default 8). If it never clears, the run ends with `cloudflare_blocked` in the `OUTPUT` record; retry later. A transient 401 or 403 triggers one re-check and up to 3 retries per call.
- **Not found**: an unknown name or a URL without an employer id produces no item, only an `input_status` entry (`not_found`, `no_employer_id`), and the run goes on.

### 🔌 Integrations and API

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

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

### ❓ FAQ

**Is it legal to scrape Glassdoor company profiles?**

The Actor only reads company data that Glassdoor publishes to anyone without logging in. Profiles hold little personal data (the CEO's name), but process the output in line with GDPR and other privacy laws, respect Glassdoor's terms of use, and stay responsible for how you use the data. This is not legal advice.

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

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

**Can I export Glassdoor company data to Excel or Google Sheets?**

Yes. Every run's dataset downloads as CSV, XLSX, JSON or XML from the Storage tab, and the Google Sheets integration can push new rows to a sheet automatically. Turn on `flatten` so sub-ratings, links and awards become plain columns.

**How many companies can I scrape in one run?**

One company per name or URL you give: the length of your input list is the only limit, and cost scales with it. At about 1 company per 2 seconds, 500 companies fit comfortably in the default 3600 second timeout.

**What happens if a company name is ambiguous or not found?**

Glassdoor's autocomplete picks the exact match first, then its first suggestion, and `matchedInput` tells you which input produced each row. An unknown name gets a `not_found` entry in `input_status`. For ambiguous names, add a distinguishing word (`Orange France`) or paste the Glassdoor URL.

**Does it also return the reviews, salaries or interviews themselves?**

Not this Actor: it returns the counts and the `links` to those pages. Feed `links.reviews`, `links.salaries` or `links.interviews` into the sibling scrapers below.

**Why does the Actor refuse a proxy and what if a run is blocked?**

Glassdoor blocks known proxy and hosting IP ranges but accepts Apify's egress IP, so the Actor runs without a proxy. If a run ends with `cloudflare_blocked`, retry later or raise `maxChallengeRetries`; `input_status` shows which inputs were processed.

### 🔗 Related scrapers

- [Glassdoor Company Search Scraper](https://apify.com/scrapifier/glassdoor-company-search-universal-scraper): find companies by location, industry, minimum rating and size, with the same output row.
- [Glassdoor Reviews Scraper](https://apify.com/scrapifier/glassdoor-reviews-universal-scraper): employee reviews with ratings, pros, cons, advice to management and company responses.
- [Glassdoor Salaries Scraper](https://apify.com/scrapifier/glassdoor-salaries-universal-scraper): salary estimates per job title and company.
- [Glassdoor Interviews Scraper](https://apify.com/scrapifier/glassdoor-interviews-universal-scraper): interview experiences and the questions asked, by company.
- [Glassdoor Jobs Scraper](https://apify.com/scrapifier/glassdoor-jobs-universal-scraper): job listings by keyword and location, with salary estimates.
- [Trustpilot Reviews Scraper](https://apify.com/scrapifier/trustpilot-universal-scraper): customer reviews and TrustScores for any company.

### 💬 Support

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

# Actor input Schema

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

Any Glassdoor page of a company: Overview (`/Overview/Working-at-Google-EI_IE9079.11,17.htm`), Reviews, Salaries, Interviews, Jobs or Benefits URL. One company profile is returned per URL.

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

Company names, resolved with Glassdoor's own search ("Google", "Deloitte", "Airbnb"). Exact spelling is not required.

## `includeDemographicRatings` (type: `boolean`):

Add the average rating given by each demographic group (gender, race/ethnicity, sexual orientation, disability, parent/caregiver, veteran status) when Glassdoor publishes them.

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

One flat row per company: sub-ratings become `rating_*` columns, links `url_*` columns, competitors a `|` separated string. Demographic ratings are dropped.

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

Write an `input_status` report to the OUTPUT record (which company or search returned nothing, and why).

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

How many times to reload the page while waiting for Glassdoor's Cloudflare check to clear.

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

Leave EMPTY: Glassdoor blocks proxy IP ranges (residential and datacenter) but accepts Apify's own egress IP, so the scraper works best with no proxy. Only set this if you need a specific country egress.

## Actor input object example

```json
{
  "companyNames": [
    "Google",
    "Microsoft",
    "Airbnb"
  ],
  "includeDemographicRatings": false,
  "flatten": false,
  "emitInputStatus": true,
  "maxChallengeRetries": 8
}
```

# Actor output Schema

## `companies` (type: `string`):

One complete Glassdoor profile per company extracted by this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "companyNames": [
        "Google",
        "Microsoft",
        "Airbnb"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapifier/glassdoor-company-overview-universal-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",
        "Microsoft",
        "Airbnb",
    ] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companyNames": [
    "Google",
    "Microsoft",
    "Airbnb"
  ]
}' |
apify call scrapifier/glassdoor-company-overview-universal-scraper --silent --output-dataset

```

## MCP server setup

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