# Glassdoor Job Scraper | 22 Countries, Salary & Company Ratings (`corvuslab/glassdoor-scraper`) Actor

Scrape Glassdoor jobs across 22 countries. Extract salary ranges, skills, full descriptions and deep company intelligence with 9 rating dimensions. Incremental monitoring, notifications and AI-ready compact output.

- **URL**: https://apify.com/corvuslab/glassdoor-scraper.md
- **Developed by:** [Corvuslab](https://apify.com/corvuslab) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 80.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.

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

### What does Glassdoor Job Scraper do?

Glassdoor Job Scraper extracts structured job listings from Glassdoor across **22 country sites** — including the US, UK, Canada, Australia, India, Germany, France, Spain, Brazil, Mexico and 12 more. Each record delivers salary ranges, extracted skills, full descriptions in three formats, and **deep company intelligence** with 9 individual rating dimensions (CEO approval, culture, compensation, career opportunities, work-life balance, senior management and recommend-to-friend). No code needed — results export as JSON, CSV, Excel, or via the API, ready for spreadsheets, dashboards, AI agents and MCP workflows.

Give it a search keyword (e.g. `software engineer`) and pick a country, or paste Glassdoor URLs directly. The scraper returns every matching listing as a clean, typed record. Core fields (title, employer, salary, location, skills) come from the listing itself; turn on **Fetch full details** to also pull the complete job description and company overview — ratings, size, sector, headquarters, revenue, founding year and website.

> New to Apify? You can sign up for free and use the included monthly platform credit to try this Actor.

**Why this scraper**

- ⚡ **Fast & low-cost** — direct HTTP extraction with no browser overhead, so large runs stay cheap.
- 🧾 **Rich, typed records** — 65+ structured fields per job, not raw HTML.
- ♻️ **Cheap to monitor** — incremental mode re-scrapes only what changed (see below).
- 🔔 **Notifications built in** — Telegram, Slack, Discord, WhatsApp or any webhook.
- 🤖 **AI- & API-ready** — compact output, MCP-friendly, one-click integrations.

***

### Key features

- 🌍 **22-country coverage** — search Glassdoor in the US, UK, Canada, Australia, India, Germany, France, Spain, Brazil, Mexico, Argentina, Netherlands, Belgium, Switzerland, Austria, Ireland, New Zealand, Singapore, Hong Kong and Italy — from a single dropdown.
- 📍 **Location search** — type a city or region (e.g. "New York, NY") and the scraper resolves it automatically via Glassdoor's location API, with optional radius filtering.
- 🔎 **Search or URL scraping** — run a keyword + filter search, or paste Glassdoor search and job listing URLs.
- 💰 **Salary intelligence** — min, median and max salary with currency, period and source metadata.
- 🏢 **Deep company intelligence** — 9 rating dimensions (CEO approval, culture, compensation, career opportunities, work-life balance, senior management, recommend-to-friend), CEO name, review count, size, industry, sector, headquarters, revenue, type, year founded and website.
- 🛠️ **Extracted skills** — the full skills and attributes list that Glassdoor tags on each listing.
- 📍 **Parsed locations** — city, region and country split out alongside the raw location string, plus a remote flag and apply URL per listing.
- 🎚️ **Rich filters** — date posted, job type, work setting (remote/hybrid/on-site), seniority level, Easy Apply, salary range, employer size, minimum company rating, and job-ID exclusion — all applied by Glassdoor itself.
- ♻️ **Incremental monitoring** — schedule it and get only what changed (NEW / UPDATED / EXPIRED); unchanged items are skipped before their page is even fetched. `firstSeenAt` / `lastSeenAt` timestamps track each listing across runs.
- 🔔 **Notifications** — Telegram, Slack, Discord, WhatsApp Cloud API or any webhook (n8n / Make / Zapier). Optionally notify only on changes.
- 🤖 **AI-ready** — compact + drop-empty output modes keep payloads small for LLMs and MCP.

***

### 🚀 How to scrape Glassdoor

1. Open the actor and enter a **search keyword** (e.g. `data scientist`) and pick a **country** — or paste a Glassdoor URL.
2. Set **Max results** and choose whether to **fetch full details** (on by default).
3. Apply filters — date posted, job type, work setting, seniority, salary range, employer size.
4. (Optional) Turn on **incremental mode** and a **notification** channel, then **Schedule** it.
5. Click **Start**.
6. Download the data as **JSON, CSV or Excel**, or pull it from the **API**.

New to Apify? Create a free account — it comes with monthly credit, no credit card required.

***

### Input

Configure it in the visual editor — no code needed — or pass JSON via the API.

| Field | What it does |
|---|---|
| `query` | Keyword search (comma-separate for multiple searches). |
| `country` | Which Glassdoor country site to search (22 countries). |
| `location` | City or region to search in — resolved via Glassdoor's location API. |
| `startUrls` | Scrape specific Glassdoor search or job listing URLs. |
| `datePosted` | Only show jobs posted within a time range (24 h to 30 days). |
| `jobType` | Filter by Full-time, Part-time, Contract, Internship or Temporary. |
| `remoteWorkType` | Remote, Hybrid or On-site. |
| `seniorityType` | Entry Level, Mid-Senior Level, Director or Executive. |
| `minSalary` / `maxSalary` | Salary range filter (local currency). |
| `radius` | Distance in miles from the search location. |
| `minRating` | Only show jobs from companies rated at least this high (1.0–5.0). |
| `employerSize` | Filter by company size (1-200 up to 5,001+). |
| `easyApply` | Show only Easy Apply jobs. |
| `includeDetails` | Fetch full description and company intelligence per job. |
| `includeCompanyProfile` | Toggle company ratings, CEO, size, revenue and other company fields. |
| `requireContact` | Keep only listings with an email, phone or both — built-in lead-gen filter. |
| `compact` | Return only core fields — ideal for AI agents and MCP clients. |
| `incrementalMode` | Emit only what changed since the last run. |
| `skipReposts` | Skip jobs detected as reposts of previously seen listings. |
| `maxResults` | Cap the number of records (0 = unlimited). |
| `excludeJobIds` | List of job IDs to exclude from results. |

...and **42 inputs** in total — the table shows the essentials; the rest cover notification channels (Telegram, Slack, Discord, WhatsApp, webhook), description format, output/AI modes and advanced tuning, all in the visual editor.

#### Example inputs

**Basic search** — 100 software engineer jobs in the US:

```json
{ "query": "software engineer", "country": "United States", "maxResults": 100 }
```

**Filtered search** — remote data science roles, last 7 days, Easy Apply only:

```json
{
  "query": "data scientist",
  "country": "United States",
  "datePosted": "7",
  "remoteWorkType": ["remote"],
  "easyApply": true,
  "maxResults": 50
}
```

**Incremental monitoring** — daily watch for new marketing jobs in Germany with Slack alerts:

```json
{
  "query": "marketing manager",
  "country": "Germany",
  "incrementalMode": true,
  "slackWebhookUrl": "https://hooks.slack.com/services/..."
}
```

***

### Output

Each item in the dataset is one **job listing**. Every record includes the core fields; enabling **Fetch full details** (on by default) adds the full description, company ratings and company overview. Here is a real example record:

```json
{
  "id": "1010207918748",
  "title": "Software Engineer (Remote Opportunity)",
  "url": "https://www.glassdoor.com/job-listing/software-engineer-remote-opportunity-...",
  "applyUrl": "https://www.glassdoor.com/partner/jobListing.htm?...",
  "source": "glassdoor.com",
  "searchKeyword": "software engineer",
  "scrapedAt": "2026-08-24T07:13:01.391613+00:00",
  "detailFetched": true,

  "employerName": "Universal Background Screening",
  "employerId": "737244",
  "employerRating": 2.5,

  "locationName": "Phoenix, AZ",
  "locationCity": "Phoenix",
  "locationRegion": "AZ",
  "locationCountry": "United States",
  "isRemote": false,
  "sourceCountry": "us",
  "sourceDomain": "www.glassdoor.com",

  "salaryMin": 63186,
  "salaryMedian": 80369,
  "salaryMax": 102225,
  "salaryCurrency": "USD",
  "salaryPeriod": "ANNUAL",
  "salarySource": "ESTIMATED",

  "ageInDays": 31,
  "easyApply": true,
  "isExpired": false,
  "normalizedJobTitle": "software engineer",
  "jobCategory": "software engineer",
  "skills": ["Jira", "Azure", "SQL", ".NET Core", "AWS Lambda", "MongoDB", "..."],

  "description": "The Software Engineer is responsible for designing, developing, and maintaining ...",
  "descriptionHtml": "<div><p>The Software Engineer is responsible for ...</p>...</div>",
  "descriptionMarkdown": "**Job Summary:** The Software Engineer is responsible for ...",
  "descriptionLength": 4772,

  "companyRating": 2.5,
  "companyCeoRating": 0.19,
  "companyCeoRatingsCount": 28,
  "companyWorkLifeBalanceRating": 2.5,
  "companyCultureRating": 2.3,
  "companyCompensationRating": 1.9,
  "companyCareerOpportunitiesRating": 1.9,
  "companySeniorManagementRating": 2.2,
  "companyRecommendToFriendRating": 0.28,
  "companyReviewsCount": 13373,

  "companySize": "201 to 500 Employees",
  "companySector": "Management & Consulting",
  "companyWebsite": "https://www.universalbackground.com",
  "companyHeadquarters": "Phoenix, AZ",
  "companyRevenue": "$25 to $100 million (USD)",
  "companyType": "Company - Private",
  "companyYearFounded": 2002,
  "companyCeo": "Jane Smith"
}
```

Each record can also include `descriptionHtml` and `descriptionMarkdown` — choose the format with the **Description format** input. When incremental mode is on, records carry a `changeType` field (NEW / UPDATED / EXPIRED) and repost-detection fields.

#### Data fields

- **Core** — id, title, url, applyUrl, source, searchKeyword, scrapedAt, detailFetched.
- **Employer** — employerName, employerId, employerRating, companyLogo.
- **Location** — locationName, locationCity, locationRegion, locationCountry, locationType, isRemote, sourceCountry, sourceDomain.
- **Salary** — salaryMin, salaryMedian, salaryMax, salaryCurrency, salaryPeriod, salarySource.
- **Job details** — description (text / HTML / Markdown), descriptionLength, employmentType, ageInDays, easyApply, isExpired, isSponsoredJob, normalizedJobTitle, jobCategory, skills.
- **Company ratings (9 dimensions)** — companyRating, companyCeoRating, companyCeoRatingsCount, companyWorkLifeBalanceRating, companyCultureRating, companyCompensationRating, companyCareerOpportunitiesRating, companySeniorManagementRating, companyRecommendToFriendRating, companyReviewsCount.
- **Company overview** — companyCeo, companySize, companyIndustry, companySector, companyWebsite, companyHeadquarters, companyRevenue, companyType, companyYearFounded.
- **Contacts & signals** — extractedEmails, extractedPhones, extractedUrls, socialProfiles.
- **Incremental / repost** — changeType, contentHash, firstSeenAt, lastSeenAt, isRepost, repostOfId, repostDetectedAt.

Every field is present in standard mode (missing values are `null`); **compact mode** returns the core fields only, for lean AI/MCP payloads. With **`excludeEmptyFields`** enabled, null/empty fields are omitted entirely.

***

### 💡 What can you do with Glassdoor data?

- **Salary benchmarking** — compare salary ranges by role, seniority, location and company size across 22 markets.
- **Employer intelligence** — rank companies by their 9 rating dimensions to identify the best (or worst) employers in an industry.
- **Lead generation** — filter for listings with contact details using `requireContact` and feed them into your CRM or outreach tool.
- **Job market monitoring** — schedule incremental runs with notifications to track new openings, expired listings and salary changes daily.
- **Enrichment & aggregation** — feed clean, structured job data into your own app, spreadsheet or data warehouse.
- **AI agents & pipelines** — compact output plugs straight into LLM/MCP workflows for talent analytics, resume matching or market research agents.

***

### ♻️ Incremental monitoring — pay for changes, not repeats

Schedule the actor and turn on **incremental mode**: each run compares against the last and emits only **NEW / UPDATED / EXPIRED** records — unchanged items are skipped *before* their detail page is fetched, so a daily watch costs a fraction of a full re-scrape.

| Daily churn | of 1,000 tracked | billable records | you save |
|---|---|---|---|
| 5 % | 1,000 | 50 | **95 %** |
| 15 % | 1,000 | 150 | **85 %** |
| 30 % | 1,000 | 300 | **70 %** |

The first run seeds the baseline and bills in full; every run after that bills only the delta. Repost detection also flags relisted jobs so you never count them as genuinely new.

***

### 💰 How much does it cost to scrape Glassdoor?

This Actor uses the **pay-per-event** pricing model: a small fee at run start plus a per-record fee. It runs on direct HTTP with no browser overhead, so the underlying platform cost is minimal.

See the Actor's **Pricing** tab for exact current prices.

***

### 🔌 Integrations & export

Export to **JSON, CSV, Excel** or an HTML table, or pull from the **REST API** and the **JavaScript / Python** clients. Runs on a **schedule**, connects to **Google Sheets, Slack, Make, Zapier and n8n**, and works as an **MCP tool** for AI agents — compact mode keeps token usage small.

***

### 🔗 Using the API

You can run this Actor from your own code. Example with the Apify Python client:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "query": "software engineer",
    "country": "United States",
    "maxResults": 50,
}

run = client.actor("corvuslab/glassdoor-scraper").call(run_input=run_input)

print("Results: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

The Actor also works with the JavaScript/TypeScript client, the Apify CLI and the REST API.

***

### ❓ FAQ

**Do I need a proxy or login?** No — it runs out of the box with no login and no proxy required. Apify Proxy is available under Advanced for high-volume runs.

**Can I search multiple countries?** One country per run, but you can schedule separate runs or use comma-separated keywords to cover multiple searches within a country.

**Can I search by city or region?** Yes — type a city name (e.g. "San Francisco, CA") in the `location` field. The scraper resolves it via Glassdoor's location API and you can set a `radius` in miles for nearby results.

**Can I get only new jobs on a schedule?** Yes — turn on incremental mode and schedule it; each run emits only what changed and can notify your channel via Telegram, Slack, Discord, WhatsApp or a webhook.

**What formats can I export?** JSON, CSV, Excel, HTML table, or via the API.

**Is it good for AI agents?** Yes — enable compact mode; the output is MCP-friendly and keeps token usage small.

**How many records can I get?** Set `maxResults` to any number (0 = unlimited). Results are bounded only by what the search returns.

**What are the 9 company rating dimensions?** Overall rating, CEO approval, work-life balance, culture & values, compensation & benefits, career opportunities, senior management and recommend-to-friend — each as a separate numeric field.

**Is scraping Glassdoor legal?** This actor collects only **publicly available** data on Glassdoor. You are responsible for how you use the extracted data — in particular any personal information — and for complying with the site's terms and applicable law (including the GDPR where it applies). Not affiliated with, endorsed by, or sponsored by Glassdoor, Inc.

***

**Keywords:** glassdoor scraper · glassdoor api · glassdoor jobs scraper · scrape glassdoor · glassdoor salary data · glassdoor company ratings · glassdoor job listings · glassdoor data extraction · glassdoor crawler · glassdoor export csv · glassdoor export excel · job scraping tool · glassdoor company reviews · glassdoor no code scraper · glassdoor mcp tool · glassdoor job monitoring · glassdoor.com scraper

# Actor input Schema

## `query` (type: `string`):

Keywords to search for. Separate multiple searches with commas — each runs as its own search and results are merged and de-duplicated.

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

Which Glassdoor country site to search.

## `location` (type: `string`):

City, state or region to search in. Resolved via Glassdoor's location API. Leave empty for country-wide search.

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

Paste Glassdoor search or job listing URLs to scrape directly.

## `maxResults` (type: `integer`):

Maximum number of records to return. Set 0 for unlimited (bounded by how many the search has).

## `ignoreUrlFailures` (type: `boolean`):

Skip URLs that cannot be interpreted instead of failing the whole run.

## `datePosted` (type: `string`):

Only show jobs posted within this time range.

## `jobType` (type: `array`):

Filter by employment type.

## `remoteWorkType` (type: `array`):

Filter by remote, hybrid, or on-site.

## `seniorityType` (type: `array`):

Filter by seniority level.

## `easyApply` (type: `boolean`):

Show only jobs with Glassdoor Easy Apply.

## `minSalary` (type: `integer`):

Minimum annual salary filter (in the local currency).

## `maxSalary` (type: `integer`):

Maximum annual salary filter (in the local currency).

## `employerSize` (type: `array`):

Filter by company size.

## `radius` (type: `integer`):

Distance in miles from the search location. Requires a location to be set.

## `minRating` (type: `number`):

Only show jobs from companies rated at least this high (1.0–5.0).

## `sortBy` (type: `string`):

Sort order for search results.

## `requireContact` (type: `string`):

Keep only records that include a contact. off = keep everything; email / phone = require that channel; either = at least one; both = email and phone.

## `includeDetails` (type: `boolean`):

Fetch each job's full description and detailed company ratings. Turn off for the fastest, cheapest runs.

## `includeCompanyProfile` (type: `boolean`):

Include company ratings, size, revenue, CEO and other company intelligence fields. Turn off to keep records slim.

## `descriptionFormat` (type: `string`):

Which representation(s) of the job description to include.

## `descriptionMaxLength` (type: `integer`):

Truncate descriptions to this many characters. Leave empty for full text.

## `compact` (type: `boolean`):

Emit only the core fields (title, employer, location, salary, URL). Ideal for AI agents and MCP clients.

## `excludeEmptyFields` (type: `boolean`):

Remove null, empty-string and empty-array fields from each record.

## `incrementalMode` (type: `boolean`):

Track state between runs and tag every record with a changeType (NEW / UPDATED / UNCHANGED / EXPIRED).

## `stateKey` (type: `string`):

Stable name for the tracked search. Leave empty to derive one automatically from your search settings.

## `emitUnchanged` (type: `boolean`):

Also emit records that have not changed since the previous run.

## `skipReposts` (type: `boolean`):

Skip jobs detected as reposts of previously seen listings (incremental mode only).

## `emitExpired` (type: `boolean`):

Emit records for items present last run but gone now.

## `telegramToken` (type: `string`):

Bot token from @BotFather.

## `telegramChatId` (type: `string`):

Chat or channel ID, e.g. "-100123456789" or "@yourchannel".

## `slackWebhookUrl` (type: `string`):

Slack incoming-webhook URL.

## `discordWebhookUrl` (type: `string`):

Discord incoming-webhook URL.

## `whatsappToken` (type: `string`):

Permanent token from Meta for Business.

## `whatsappPhoneId` (type: `string`):

Phone number ID from your WhatsApp Business account.

## `whatsappRecipient` (type: `string`):

Recipient phone number in international format, e.g. "14155551234".

## `webhookUrl` (type: `string`):

Any HTTPS endpoint. Receives a JSON POST with the matched records — works with n8n, Make and Zapier.

## `webhookHeaders` (type: `object`):

Extra headers for the webhook request, e.g. {"Authorization": "Bearer xyz"}.

## `notifyOnlyChanges` (type: `boolean`):

Only include NEW and UPDATED records in notifications (incremental mode).

## `notificationLimit` (type: `integer`):

How many records to include in each notification message.

## `excludeJobIds` (type: `array`):

List of job IDs to exclude from results.

## `maxPages` (type: `integer`):

Maximum search result pages to scrape per query. Each page has up to 30 listings.

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

Residential proxy is recommended. Glassdoor blocks datacenter IPs.

## `maxRequestRetries` (type: `integer`):

How many times to retry a failed request before giving up on it.

## Actor input object example

```json
{
  "query": "data scientist",
  "country": "United States",
  "location": "New York, NY",
  "maxResults": 25,
  "ignoreUrlFailures": true,
  "datePosted": "",
  "easyApply": false,
  "sortBy": "relevance",
  "requireContact": "off",
  "includeDetails": true,
  "includeCompanyProfile": true,
  "descriptionFormat": "all",
  "compact": false,
  "excludeEmptyFields": false,
  "incrementalMode": false,
  "emitUnchanged": false,
  "skipReposts": false,
  "emitExpired": false,
  "notifyOnlyChanges": false,
  "notificationLimit": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxRequestRetries": 3
}
```

# Actor output Schema

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

No description

## `allItems` (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 = {
    "query": "software engineer"
};

// Run the Actor and wait for it to finish
const run = await client.actor("corvuslab/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 = { "query": "software engineer" }

# Run the Actor and wait for it to finish
run = client.actor("corvuslab/glassdoor-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 '{
  "query": "software engineer"
}' |
apify call corvuslab/glassdoor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corvuslab/glassdoor-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/qrc6nHhAygddcGwYQ/builds/pUpCb8ROLowXNIGSm/openapi.json
