# Indeed Company Reviews Universal Scraper (`scrapifier/indeed-reviews-universal-scraper`) Actor

⭐ Scrape Indeed employee reviews of any company by name or URL. Get the overall rating and 4 sub-ratings, title, full text, pros & cons, reviewer's job title, location, current/former status, helpful votes & dates as clean structured data. No login, pay per result.

- **URL**: https://apify.com/scrapifier/indeed-reviews-universal-scraper.md
- **Developed by:** [Scrapifier](https://apify.com/scrapifier) (community)
- **Categories:** Jobs, Lead generation
- **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

## Indeed Company Reviews Scraper

Scrape employee reviews of any company from Indeed by company name or by pasting its Indeed company-page URL, and export them as JSON, CSV or Excel, or pull them straight from the API.

⚡ For every review you get the **overall rating and four sub-ratings** (work/life balance, compensation and benefits, job security and advancement, management) plus the culture rating, the **headline and full text**, the **pros and cons** when the reviewer filled them, the reviewer's **job title, location and country**, current or former employee, helpful votes and the date. Works on **20 Indeed country sites**, with **no login and no cookies**: Apify's built-in proxy is used automatically. You **pay per review**.

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

### 🎯 Why scrape Indeed company reviews?

- **Employer branding**: track your company's rating, sub-ratings and what new reviews say, week after week, and compare with competitors.
- **HR analytics**: quantify what employees praise or complain about (management, pay, schedules) across thousands of reviews instead of reading them one by one.
- **Due diligence and investing**: employee sentiment is a leading indicator. Indeed's review base skews to frontline and hourly workers, a population Glassdoor covers less.
- **Recruiting**: read the real pros and cons of an employer before interviewing, filtered by job title or country.
- **Research and NLP**: full review text with structured ratings at scale, ideal for sentiment analysis datasets.
- **Complement Glassdoor**: same companies, different reviewer population. Scrape both and compare.

### 📊 What data does Indeed Company Reviews Scraper extract?

| Field | Description |
|---|---|
| `reviewId` | Indeed's unique review id |
| `company`, `companySlug` | Company name and its Indeed page slug |
| `url` | Direct link to the review on Indeed |
| `title` | Review headline |
| `text` | Full review text |
| `pros`, `cons` | Pros and cons, when the reviewer filled them |
| `rating` | Overall rating (1 to 5) |
| `ratingWorkLifeBalance`, `ratingCompensationBenefits`, `ratingJobSecurityAdvancement`, `ratingManagement`, `ratingCulture` | Sub-ratings (1 to 5, `null` when the reviewer skipped one) |
| `jobTitle` | Reviewer's job title |
| `location`, `country` | Reviewer's location and country code |
| `isCurrentEmployee` | Current or former employee |
| `date`, `dateText` | Review date (`YYYY-MM-DD`) and as displayed |
| `helpfulVotes`, `unhelpfulVotes` | Community votes on the review |
| `matchedInput` | The company name or URL that produced this review |

Every field is a flat column, so CSV and Excel exports need no post-processing.

### 🚀 How to scrape Indeed company reviews

1. Type one or more **Company names** as they appear on Indeed (`Google`, `General Motors`), or paste **Indeed company URLs** (any `/cmp/...` page, from any country domain).
2. Set **Max reviews per company**. Large employers expose thousands of reviews, collected 20 per page.
3. Optionally filter: **Reviews from country** (`US`, `FR`, `GB`...) and **Job title**.
4. Click **Start**. The Actor collects the reviews, 20 per page.
5. Open the **Storage** tab to preview the reviews and export them as JSON, CSV, Excel or XML, or read them from the dataset API.

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

### 📥 Input parameters

| Field | Key | Type | Default | Description |
|---|---|---|---|---|
| Company names | `companyNames` | array of strings | `["Google"]` (prefill) | Company names as on Indeed; spaces are fine, Indeed's own redirect finds the right page. |
| Indeed company URLs | `startUrls` | array of URLs | none | Any Indeed company page (`/cmp/Google`, `/cmp/Google/reviews`), from any country domain. |
| Max reviews per company | `maxReviewsPerCompany` | integer | `100` | `0` = everything Indeed exposes. Pages of 20. |
| Reviews from country | `reviewsFromCountry` | string | none | Two-letter code (`US`, `FR`, `GB`) or `ALL`. Empty = Indeed's default selection. |
| Job title | `jobTitle` | string | none | Only reviews written by employees with this job title. |
| Indeed country site | `country` | select | `www` | Domain used for company names, one of 20 (pasted URLs keep their own domain). |
| Flatten output | `flatten` | boolean | `false` | Output is already flat; reserved for future nested fields. |
| Report input status | `emitInputStatus` | boolean | `true` | Write an `input_status` report to the run's OUTPUT record. |
| Max retries | `maxChallengeRetries` | integer | `3` | How many times to retry a page before giving up. |
| Proxy configuration | `proxyConfiguration` | object | Apify Proxy on | Keep Apify Proxy on. A residential proxy gives the most reliable runs. |

Example input:

```json
{
  "companyNames": ["Google", "Bustle Digital Group"],
  "maxReviewsPerCompany": 100
}
```

### 📤 Output example

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

```json
{
  "reviewId": "52bd38e28684ca4b",
  "company": "Google",
  "companySlug": "Google",
  "url": "https://www.indeed.com/cmp/Google/reviews/amazing-staff?id=52bd38e28684ca4b",
  "title": "Amazing staff",
  "text": "Working at Google has been a great experience. The staff are supportive, welcoming, and genuinely committed to helping everyone succeed. Highly recommend!",
  "pros": null,
  "cons": null,
  "rating": 5,
  "ratingWorkLifeBalance": null,
  "ratingCompensationBenefits": null,
  "ratingJobSecurityAdvancement": null,
  "ratingManagement": null,
  "ratingCulture": null,
  "jobTitle": "No",
  "location": "North Carolina",
  "country": "US",
  "isCurrentEmployee": true,
  "date": "2026-08-28",
  "dateText": "August 28, 2026",
  "helpfulVotes": 0,
  "unhelpfulVotes": 0,
  "matchedInput": "Google"
}
```

The run's OUTPUT record also holds the statistics and, per company, an `input_status` entry with the reviews Indeed announced, the number collected and the status (`ok`, `empty_or_not_found`, `error`).

### 💡 Ready-to-run examples

**One company's latest reviews (tested)**

```json
{ "companyNames": ["Google"], "maxReviewsPerCompany": 100 }
```

**US-only reviews of a retailer**

```json
{ "companyNames": ["Walmart"], "reviewsFromCountry": "US", "maxReviewsPerCompany": 200 }
```

**Reviews by one job title**

```json
{ "companyNames": ["Amazon"], "jobTitle": "Delivery Driver", "maxReviewsPerCompany": 200 }
```

**From a company URL, French office reviews**

```json
{ "startUrls": [{ "url": "https://www.indeed.com/cmp/Google/reviews" }], "reviewsFromCountry": "FR", "maxReviewsPerCompany": 100 }
```

**Weekly employer-brand monitoring**: schedule the Actor with your company and its competitors in `companyNames` and chart `rating` and the sub-ratings over time.

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

From **$5.00 per 1,000 reviews** 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 reviews returned: cap it with `maxReviewsPerCompany`, and narrow the set with `reviewsFromCountry` or `jobTitle` before you pay for it.

### ⚙️ Performance, proxies and limits

- **Proxy**: keep the default Apify Proxy setting. A residential proxy gives the most reliable runs. Images, media and fonts are skipped to keep bandwidth low.
- **Pagination**: 20 reviews per page, deduplicated by review id. Indeed's default order repeats after a few pages; the Actor then continues with `sort=date_desc` to collect a second unique window. A company ends at your cap, when both orders are exhausted, or when Indeed stops exposing new ids (`input_status` `truncated` if the announced count is higher).
- **Company names**: resolved through Indeed's own company search (GraphQL `findEmployers`), then the `/cmp/{slug}` page. If a name still misses, paste the company URL instead.
- **Order**: Indeed's own default review order (most helpful and recent first). Sub-ratings are `null` when the reviewer did not fill that dimension.
- **Blocked runs**: if a run comes back empty after all retries, retry later or raise `maxChallengeRetries`.

### 🔌 Integrations and API

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

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

### ❓ FAQ

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

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

**Do I need an Indeed account, login or cookies?**

No. Nothing to log in to, no cookies to paste, and the default proxy setting just works.

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

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

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

As many as Indeed exposes (set `maxReviewsPerCompany` to `0`). Large employers have thousands, so most users cap each run.

**Can I get reviews from one country or one job title only?**

Yes. `reviewsFromCountry` keeps reviews written in that country (`US`, `FR`, `GB`...), and `jobTitle` keeps one role. Both are Indeed's own filters, applied before you pay for the results.

**How is this different from Glassdoor reviews?**

Different reviewer population: Indeed's reviews skew to frontline, retail and hourly roles, while Glassdoor skews to office roles. The sibling Glassdoor Reviews Scraper below has the same output style, so you can combine both.

**Why are some sub-ratings null?**

Indeed lets reviewers skip individual dimensions. A `null` means "not rated", never zero.

**How fresh is the data?**

Every run scrapes Indeed live. Schedule the Actor weekly to keep a rolling history of ratings and review text.

### 🔗 Related scrapers

- [Indeed Jobs Scraper](https://apify.com/scrapifier/indeed-jobs-universal-scraper): job listings from any Indeed country site, with salaries and full descriptions.
- [Indeed Salaries Scraper](https://apify.com/scrapifier/indeed-salaries-universal-scraper): median pay per job title at any company.
- [Glassdoor Reviews Scraper](https://apify.com/scrapifier/glassdoor-reviews-universal-scraper): employee reviews of the same companies, office-role population.
- [Glassdoor Company Overview Scraper](https://apify.com/scrapifier/glassdoor-company-overview-universal-scraper): the full company profile (ratings, CEO approval, size, HQ) by name or URL.
- [Glassdoor Salaries Scraper](https://apify.com/scrapifier/glassdoor-salaries-universal-scraper): salary ranges per job title and company.
- [Trustpilot Reviews Scraper](https://apify.com/scrapifier/trustpilot-universal-scraper): what customers (not employees) say about a company.

### 💬 Support

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

# Actor input Schema

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

Company names as they appear on Indeed ("Google", "General Motors", "Bustle Digital Group"). Spaces are fine, Indeed's own redirect finds the right company page.

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

Any Indeed company page (e.g. https://www.indeed.com/cmp/Google or .../cmp/Google/reviews), from any Indeed country domain.

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

Reviews to collect per company (0 = as many as Indeed exposes; big employers have thousands). Pages of 20.

## `reviewsFromCountry` (type: `string`):

Two-letter country code to only keep reviews written in that country ("US", "FR", "GB", "IN"), or ALL. Empty = Indeed's default selection.

## `jobTitle` (type: `string`):

Only reviews written by employees with this job title ("Software Engineer", "Cashier"), as spelled on Indeed.

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

Which Indeed domain to use for company names (pasted URLs keep their own domain). It sets the page language.

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

Already flat: every field is a simple column. This option is reserved for future nested fields.

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

Write an input\_status report to the run's OUTPUT record (reviews available and collected per company, and why one returned nothing).

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

How many times to retry a page before giving up.

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

Keep Apify Proxy on. A residential proxy gives the most reliable runs.

## Actor input object example

```json
{
  "companyNames": [
    "Google"
  ],
  "maxReviewsPerCompany": 100,
  "country": "www",
  "flatten": false,
  "emitInputStatus": true,
  "maxChallengeRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All Indeed employee reviews extracted by this run.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "companyNames": [
        "Google"
    ],
    "maxReviewsPerCompany": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapifier/indeed-reviews-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"],
    "maxReviewsPerCompany": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapifier/indeed-reviews-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"
  ],
  "maxReviewsPerCompany": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapifier/indeed-reviews-universal-scraper --silent --output-dataset

```

## MCP server setup

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