# Glassdoor API — company reviews, interview reports, salary data & job listings (glassdoor.com)

> Resolve a company name to its Glassdoor employer_id + basic profile. Start here — every other action needs the employer_id.
> ReefAPI engine `glassdoor` · 10 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/glassdoor/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed or blocked calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /glassdoor/v1/employer/search — 1 credit
Resolve a company name to its Glassdoor employer_id + basic profile. Start here — every other action needs the employer_id.

**Parameters:**
- `query` (string, required) — Company name to look up.

**Returns:** results[]{employer_id, name, category, logo_url}

**Example request body:**
```json
{
  "query": "Google"
}
```

### POST /glassdoor/v1/employer/detail — 1 credit
Employer profile + ratings.

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `dynamic_profile_id` (integer, optional) — Advanced: Glassdoor dynamic profile ID (defaults to employer_id; only needed for employers with a separate profile).

**Returns:** employer{employer_id, name, website, headquarters, size, industry, sector, description, review_count, salary_count, overall_rating, ratings{...}}

**Example request body:**
```json
{
  "employer_id": 9079
}
```

### POST /glassdoor/v1/employer/reviews — 1 credit
One page of employer reviews (rating, pros/cons, role).

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `page` (integer, optional, default 1) — Page number (easy paging: 1, 2, 3…).
- `cursor` (string, optional) — Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).
- `page_size` (integer, optional, default 10) — Results per page (1–100). Above 100 Glassdoor returns an empty page.
- `dynamic_profile_id` (integer, optional) — Advanced: Glassdoor dynamic profile ID (defaults to employer_id; only needed for employers with a separate profile).

**Returns:** reviews[]{headline, pros, cons, overall_rating, job_title, employment_status, date} + aggregate_ratings + rating_distribution + meta.pagination{page, has_more, next_cursor, total}

**Example request body:**
```json
{
  "employer_id": 9079,
  "page_size": 10
}
```

### POST /glassdoor/v1/employer/reviews-harvest — 1 credit
Fetch all available Glassdoor reviews across multiple pages — returns every unique review with rating, pros/cons and role.

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `page_size` (integer, optional, default 10) — Results per page (1–100). Above 100 Glassdoor returns an empty page.
- `max_pages` (integer, optional) — Stop the harvest after this many pages (default: run until complete).
- `use_proxy_pool` (boolean, optional, default true) — Advanced: rotate network exit nodes between pages during the harvest (recommended for large harvests).
- `rotate_every` (integer, optional, default 10) — Advanced: rotate the network exit node every N pages during a harvest.
- `dynamic_profile_id` (integer, optional) — Advanced: Glassdoor dynamic profile ID (defaults to employer_id; only needed for employers with a separate profile).

**Returns:** reviews[] + harvest{pages_fetched, unique_reviews, filtered_reviews_count, stopped_reason}

**Example request body:**
```json
{
  "employer_id": 9079
}
```

### POST /glassdoor/v1/employer/interviews — 1 credit
One page of interview reports (questions, difficulty, outcome).

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `page` (integer, optional, default 1) — Page number (easy paging: 1, 2, 3…).
- `cursor` (string, optional) — Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).
- `items_per_page` (integer, optional, default 10) — Interview reports per page (1–100).
- `dynamic_profile_id` (integer, optional) — Advanced: Glassdoor dynamic profile ID (defaults to employer_id; only needed for employers with a separate profile).

**Returns:** interviews[]{difficulty, outcome, process, questions[]} + summary + meta.pagination{page, has_more, next_cursor, total}

**Example request body:**
```json
{
  "employer_id": 9079
}
```

### POST /glassdoor/v1/employer/interviews-harvest — 1 credit
Fetch all available Glassdoor interview reports across multiple pages.

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `items_per_page` (integer, optional, default 10) — Interview reports per page (1–100).
- `max_pages` (integer, optional) — Stop the harvest after this many pages (default: run until complete).
- `use_proxy_pool` (boolean, optional, default true) — Advanced: rotate network exit nodes between pages during the harvest (recommended for large harvests).
- `rotate_every` (integer, optional, default 10) — Advanced: rotate the network exit node every N pages during a harvest.
- `dynamic_profile_id` (integer, optional) — Advanced: Glassdoor dynamic profile ID (defaults to employer_id; only needed for employers with a separate profile).

**Returns:** interviews[] + harvest{pages_fetched, stopped_reason}

**Example request body:**
```json
{
  "employer_id": 9079
}
```

### POST /glassdoor/v1/employer/jobs — 1 credit
Employer job listings (one page; cursor pagination).

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `page` (integer, optional, default 1) — Page number (easy paging: 1, 2, 3…).
- `cursor` (string, optional) — Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).
- `page_size` (integer, optional, default 30) — Jobs per page (1–100).
- `page_cursor` (string, optional) — Advanced: raw Glassdoor pagination cursor. Prefer `cursor`.

**Returns:** jobs[]{job_id, title, location, salary_min, salary_max, salary_currency, salary_period, easy_apply, job_url} + meta.pagination{page, has_more, next_cursor, total}

**Example request body:**
```json
{
  "employer_id": 9079
}
```

### POST /glassdoor/v1/employer/jobs-harvest — 1 credit
Fetch all available Glassdoor job listings across multiple pages.

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `page_size` (integer, optional, default 30) — Jobs per page (1–100).
- `max_pages` (integer, optional) — Stop the harvest after this many pages (default: run until complete).
- `use_proxy_pool` (boolean, optional, default true) — Advanced: rotate network exit nodes between pages during the harvest (recommended for large harvests).
- `rotate_every` (integer, optional, default 10) — Advanced: rotate the network exit node every N pages during a harvest.
- `dynamic_profile_id` (integer, optional) — Advanced: Glassdoor dynamic profile ID (defaults to employer_id; only needed for employers with a separate profile).

**Returns:** jobs[] + harvest{pages_fetched, unique_jobs, stopped_reason}

**Example request body:**
```json
{
  "employer_id": 9079
}
```

### POST /glassdoor/v1/employer/salaries — 1 credit
Glassdoor salary estimates for this employer, broken down by job title. Each title returns the full pay distribution — base pay and total pay percentiles (P10/P25/P50/P75/P90), median base/total/additional pay, plus cash bonus, stock, profit sharing, sales commission and tips bands. Titles are ordered by number of reported salaries (most-reported first).

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `job_title` (string, optional) — Optional: filter salary estimates to job titles matching this text (e.g. 'engineer', 'product manager'). Omit for all titles.
- `page` (integer, optional, default 1) — Page number (easy paging: 1, 2, 3…).
- `cursor` (string, optional) — Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).
- `page_size` (integer, optional, default 20) — Job titles per page (1–100).
- `pay_period` (string, optional, default "ANNUAL") — Pay period for the estimates: ANNUAL (yearly) or HOURLY.

**Returns:** salaries[]{job_title, salary_count, currency, median_base_pay, median_total_pay, median_additional_pay, base_pay{p10..p90,median}, total_pay{...}, additional_pay{...}, cash_bonus, stock_bonus, profit_sharing, sales_commission, tips} + summary{pay_period, location} + meta.pagination{page, has_more, next_cursor, total}

**Example request body:**
```json
{
  "employer_id": 9079
}
```

### POST /glassdoor/v1/employer/salaries-harvest — 1 credit
Fetch salary estimates for all job titles at this employer across multiple pages — every title with its full pay distribution.

**Parameters:**
- `employer_id` (integer, required) — Glassdoor employer ID. Don't know it? Call employer/search with the company name first — it returns employer_id.
- `job_title` (string, optional) — Optional: filter salary estimates to job titles matching this text (e.g. 'engineer', 'product manager'). Omit for all titles.
- `page_size` (integer, optional, default 20) — Job titles per page (1–100).
- `pay_period` (string, optional, default "ANNUAL") — Pay period for the estimates: ANNUAL (yearly) or HOURLY.
- `max_pages` (integer, optional) — Stop the harvest after this many pages (default: run until complete).
- `use_proxy_pool` (boolean, optional, default true) — Advanced: rotate network exit nodes between pages during the harvest (recommended for large harvests).
- `rotate_every` (integer, optional, default 10) — Advanced: rotate the network exit node every N pages during a harvest.

**Returns:** salaries[] + harvest{pages_fetched, unique_titles, job_title_count, completeness_pct, stopped_reason}

**Example request body:**
```json
{
  "employer_id": 9079
}
```

## More
- Try it live, no code: https://reefapi.com/playground?engine=glassdoor
- Human docs page: https://reefapi.com/docs/glassdoor
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
