# Indeed Company Reviews Scraper ⭐ (`shahidirfan/indeed-company-reviews-scraper`) Actor

Extract Indeed company reviews, employee ratings, pros and cons, job satisfaction, work-life balance, salary insights, management feedback, and workplace culture. Ideal for employer reputation tracking, HR analytics, sentiment analysis, competitor research, and recruitment intelligence.

- **URL**: https://apify.com/shahidirfan/indeed-company-reviews-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Indeed Company Reviews Scraper do?

Indeed Company Reviews Scraper collects employee reviews from Indeed company pages into a clean, structured dataset. Give it one or more Indeed company URLs or company slugs, and it returns every review it can reach: the overall star rating, the five category sub-ratings, the headline and full text, pros and cons, the reviewer's job title, location, employment status, helpful votes, the review date, and a direct link to each review.

The Actor works with `www.indeed.com` plus country domains such as `ca.indeed.com` and `uk.indeed.co.uk`, so you can collect reviews for a single employer or a whole list of companies in one run. Results are saved to the Apify dataset and are ready to export to JSON, CSV, Excel, or your own systems.

### Why use Indeed Company Reviews Scraper?

- **Build employer intelligence fast** - Turn thousands of public reviews into a dataset you can sort, filter, and analyze without copy-paste.
- **Compare employers objectively** - Pull the same fields for every company so ratings, work-life balance, and management scores line up side by side.
- **Feed research and AI workflows** - Use the structured output for HR analytics, competitor research, sentiment analysis, or RAG data pipelines.
- **Automate and schedule** - Run the Actor on a schedule to track how a company's reviews change over time.
- **Export anywhere** - Download results as JSON, CSV, Excel, or XML, or stream them into Google Sheets, Make, Zapier, or your own app through the Apify API.

### What data can you extract from Indeed company reviews?

| Field | Description |
|-------|-------------|
| `company_name` | Company name as displayed on Indeed |
| `company_slug` | Indeed company slug (the part after `/cmp/`) |
| `review_id` | Indeed encrypted review identifier |
| `review_uid` | Indeed internal review UID |
| `title` | Review headline |
| `review_text` | Full review body |
| `pros` | Pros stated by the reviewer |
| `cons` | Cons stated by the reviewer |
| `overall_rating` | Overall rating from 1 to 5 |
| `work_life_balance` | Work/life balance sub-rating |
| `compensation_benefits` | Compensation and benefits sub-rating |
| `job_security_advancement` | Job security and advancement sub-rating |
| `management` | Management sub-rating |
| `culture` | Culture and values sub-rating |
| `job_title` | Reviewer job title |
| `normalized_job_title` | Indeed normalized job title |
| `location` | Reviewer location |
| `country` | Reviewer country code |
| `current_employee` | `true` when the reviewer is a current employee |
| `helpful` | Number of helpful votes |
| `unhelpful` | Number of unhelpful votes |
| `review_date` | Review submission date |
| `review_url` | Direct link to the review |

### How to use Indeed Company Reviews Scraper

1. Open the Actor on Apify Store.
2. Add one or more company URLs or slugs in **Company URLs or slugs**.
3. Set **Maximum number of reviews** and, if needed, **Maximum number of pages**.
4. Choose a **Sorting** option.
5. Run the Actor and download the dataset, or connect it to your workflow.

You can paste a full review URL, a company profile URL, a country-domain URL, or just the company slug. The Actor normalizes all of them.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrls` | Array | No | `["https://www.indeed.com/cmp/SpaceX/reviews"]` | Indeed company URLs, company profile URLs, country-domain URLs, or bare company slugs |
| `results_wanted` | Integer | No | `20` | Maximum number of reviews to save across all companies |
| `max_pages` | Integer | No | `10` | Safety cap on review pages visited per company (20 reviews per page) |
| `sorting` | String | No | `relevance` | Review order: `relevance`, `date`, or `rating` |
| `proxyConfiguration` | Object | No | Apify Residential proxy | Proxy settings. Residential proxy is recommended because Indeed blocks datacenter IPs |

### Output Data

| Field | Type | Description |
|-------|------|-------------|
| `company_name` | String | Company name |
| `company_slug` | String | Indeed company slug |
| `review_id` | String | Encrypted review identifier |
| `review_uid` | String | Internal review UID |
| `title` | String | Review headline |
| `review_text` | String | Full review body |
| `pros` | String | Pros |
| `cons` | String | Cons |
| `overall_rating` | Integer | Overall rating (1-5) |
| `work_life_balance` | Integer | Work/life balance sub-rating |
| `compensation_benefits` | Integer | Compensation and benefits sub-rating |
| `job_security_advancement` | Integer | Job security and advancement sub-rating |
| `management` | Integer | Management sub-rating |
| `culture` | Integer | Culture and values sub-rating |
| `job_title` | String | Reviewer job title |
| `normalized_job_title` | String | Normalized job title |
| `location` | String | Reviewer location |
| `country` | String | Reviewer country code |
| `current_employee` | Boolean | Current employee flag |
| `helpful` | Integer | Helpful votes |
| `unhelpful` | Integer | Unhelpful votes |
| `review_date` | String | Review submission date |
| `review_url` | String | Direct review link |

### Usage Examples

#### Collect reviews for one company

Collect up to 100 reviews for a single employer:

```json
{
  "startUrls": ["https://www.indeed.com/cmp/SpaceX"],
  "results_wanted": 100
}
```

#### Collect reviews for several companies

Pass a list of companies in one run. Each item can be a URL or a slug:

```json
{
  "startUrls": [
    "https://www.indeed.com/cmp/Google",
    "https://www.indeed.com/cmp/Microsoft",
    "Amazon"
  ],
  "results_wanted": 200,
  "max_pages": 10
}
```

#### Collect reviews from a country domain with sorting

Use a country domain to read that country's reviews, and sort by rating:

```json
{
  "startUrls": ["https://ca.indeed.com/cmp/Shopify"],
  "results_wanted": 150,
  "sorting": "rating",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Sample Output

```json
{
  "company_name": "SpaceX",
  "company_slug": "SpaceX",
  "review_id": "421d1e68fefa1fe7",
  "review_uid": "1k3v92bvq22p2001",
  "title": "turn around, go back",
  "review_text": "I do not know one co-worker that was happy or felt any job security. The employees are over worked, over stressed, and under valued.",
  "pros": "money",
  "cons": "no time and unhealthy culture, bad management",
  "overall_rating": 1,
  "work_life_balance": 1,
  "compensation_benefits": 2,
  "job_security_advancement": 1,
  "management": 1,
  "culture": 1,
  "job_title": "EXECUTIVE PASTRY CHEF (FOUNDING ROLE)",
  "normalized_job_title": "Pastry Cook",
  "location": "Brownsville, TX",
  "country": "US",
  "current_employee": false,
  "helpful": 3,
  "unhelpful": 1,
  "review_date": "October 2, 2026",
  "review_url": "https://www.indeed.com/cmp/Spacex/reviews/turn-around-go-back?id=421d1e68fefa1fe7&uid=609e42781446cb95d4f0bd84391e2871"
}
```

### Tips for Best Results

- Use the Apify Residential proxy. Indeed blocks datacenter IPs, and residential access is far more reliable.
- Start with a small `results_wanted` to confirm the fields you need, then scale up.
- Keep `max_pages` reasonable for large employers. Each page returns 20 reviews.
- Use country-domain URLs when you want reviews from a specific country rather than the default US view.
- Some reviews do not include pros, cons, or every sub-rating. Those fields are simply omitted from that record.
- Company pages change over time. If a field disappears for a company, open an issue and it will be reviewed.
- Set `results_wanted` to a value above 20 if you need more than the first page of reviews.

### Integrations

- **Google Sheets** - Push review datasets straight into a spreadsheet.
- **Webhooks** - Trigger downstream systems when a run finishes.
- **Make and Zapier** - Connect review data to no-code automations.
- **API** - Fetch the dataset programmatically from the Apify API.
- **CSV and Excel** - Export for analysts who prefer spreadsheets.

### Frequently Asked Questions

#### Is there an official Indeed reviews API?

No. Indeed does not provide a public reviews API. This Actor collects the publicly visible data from company review pages and returns it as structured JSON.

#### How many reviews can I collect?

Up to your `results_wanted` and `max_pages` limits. Indeed serves reviews 20 per page. Large employers can have thousands of reviews, so raise both limits for a full pull.

#### Can I collect reviews for non-US companies?

Yes. Use a country-domain URL such as `https://ca.indeed.com/cmp/Company` or `https://uk.indeed.co.uk/cmp/Company` to read that domain's reviews.

#### Can I run this Actor on a schedule?

Yes. Schedule it in Apify Console to refresh review data daily, weekly, or at any interval.

#### Can I export the data to CSV or Excel?

Yes. The Apify dataset can be downloaded as CSV, Excel, JSON, XML, and more.

#### Why are some fields missing on some reviews?

Reviewers do not always fill in pros, cons, or every sub-rating. When a field is empty at the source, it is left out of that record rather than saved as an empty value.

#### Do I need to log in to Indeed?

No. The Actor collects public review data and does not require an Indeed account.

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

Scraping publicly available data can be legal, but you are responsible for complying with applicable laws, Indeed's terms, and privacy rules. Use the data responsibly.

### Related Actors

- [SimplyHired Job Scraper](https://apify.com/shahidirfan/simplyhired-job-scraper) - collect job listings from SimplyHired.
- [Dice Job Scraper](https://apify.com/shahidirfan/dice-job-scraper) - collect tech job listings from Dice.
- [OpenTable Reviews Scraper](https://apify.com/shahidirfan/opentable-reviews-scraper) - collect restaurant reviews.
- [Expedia Reviews Scraper](https://apify.com/shahidirfan/expedia-reviews-scraper) - collect traveler reviews.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is designed for legitimate data collection from publicly available sources. Users are responsible for using the data responsibly and complying with applicable laws and website terms.

# Actor input Schema

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

Indeed company review URLs, company profile URLs (https://www.indeed.com/cmp/SpaceX), country-domain URLs (https://ca.indeed.com/cmp/Google), or bare company slugs (SpaceX). At least one is recommended.

## `results_wanted` (type: `integer`):

Maximum number of reviews to save across all companies.

## `max_pages` (type: `integer`):

Safety cap on review pages visited per company (20 reviews per page).

## `sorting` (type: `string`):

Order in which Indeed returns reviews.

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

Indeed blocks datacenter IPs. Apify Residential proxy is required and is the default.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.indeed.com/cmp/SpaceX/reviews"
  ],
  "results_wanted": 20,
  "max_pages": 10,
  "sorting": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.indeed.com/cmp/SpaceX/reviews"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/indeed-company-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": ["https://www.indeed.com/cmp/SpaceX/reviews"] }

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.indeed.com/cmp/SpaceX/reviews"
  ]
}' |
apify call shahidirfan/indeed-company-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/indeed-company-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/n2WdRomSHO9v9CqZe/builds/GHc9qfuY0sKSnajOy/openapi.json
