# Glassdoor Jobs, Reviews & Salary Scraper (`khadinakbar/glassdoor-scraper`) Actor

Scrape public Glassdoor jobs, reviews, company profiles and salary pages for recruiting, employer research, salary benchmarking and HR analytics. Each record is one job, review, company or salary, with source URL.

- **URL**: https://apify.com/khadinakbar/glassdoor-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 glassdoor result scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 is Glassdoor Jobs, Reviews & Salary Scraper?

Glassdoor Jobs, Reviews & Salary Scraper extracts public Glassdoor job listings, employee reviews, company profiles and salary pages into one dataset with a `recordType` on every row. Job rows carry the title, company, company rating, location, remote type, salary text with numeric min and max, description and job URL; review, company and salary rows carry ratings, pros and cons, firmographics and pay figures when Glassdoor shows them. Recruiters, HR analysts, compensation teams and AI agents use it for hiring research, employer reputation analysis and salary benchmarking.

### Why teams use it

- **Four record types, one schema.** `job`, `review`, `company` and `salary` rows share one flat shape, so a single export covers them all.
- **Salary numbers, not just text.** Job rows turn `$125K–$183K/yr` into `salaryMin`, `salaryMax`, `salaryCurrency` and `salaryPeriod`.
- **Several ways in.** Start from a job keyword and location, from company names, or from Glassdoor company, review or salary URLs.
- **Budget per data type.** `maxJobs` and `maxReviewsPerCompany` split the overall `maxResults` budget between jobs and reviews.
- **Job filters.** `daysOld`, `jobType`, `remoteOnly` and `includeNoSalaryJobs` narrow the job feed.

### Best fit for this Actor

- **Designed for** public Glassdoor data where a recruiter or analyst wants jobs, reviews, company facts and pay in one run.
- **Best fit for** employer-brand research, competitive hiring intelligence and salary benchmarking for a role and city.
- When employee reviews are the main goal, use [Glassdoor Reviews Scraper](https://apify.com/khadinakbar/glassdoor-reviews-scraper) for a review-focused workflow.
- To compare the same role across several boards, start with [Jobs Scraper — Indeed, LinkedIn & Glassdoor](https://apify.com/khadinakbar/jobs-scraper) and keep this Actor for Glassdoor-specific company and salary detail.

### Example workflow: salary benchmark for a new role

A talent-acquisition lead is opening a software engineering manager role in New York. She starts with `searchQuery: "software engineering manager"`, `location: "New York, NY"`, `includeJobs` on, `includeNoSalaryJobs` off and `maxJobs` at 50. The dataset returns comparable listings with `salaryMin`, `salaryMax` and `companyRating`. She computes the median range, compares it with her planned band, then runs a second task with `includeJobs` off and `companyNames` set to her top three competitors to read their reviews and company profiles. She exports both datasets into the hiring brief for her leadership team.

### Input

Job search example:

```json
{
  "searchQuery": "software engineer",
  "location": "New York, NY",
  "country": "US",
  "includeJobs": true,
  "includeReviews": false,
  "includeCompanies": false,
  "includeSalaries": false,
  "maxResults": 25,
  "maxJobs": 25,
  "daysOld": 14,
  "jobType": "all",
  "remoteOnly": false,
  "includeNoSalaryJobs": true
}
```

Company reviews and profile example:

```json
{
  "startUrls": [{ "url": "https://www.glassdoor.com/Reviews/Apify-Reviews-E3100324.htm" }],
  "companyNames": [],
  "includeJobs": false,
  "includeReviews": true,
  "includeCompanies": true,
  "maxResults": 50,
  "maxReviewsPerCompany": 50,
  "sortReviewsBy": "recent"
}
```

| Field | Type | What it controls |
|---|---|---|
| `searchQuery`, `location`, `country` | string | Job keyword, city or region, and two-letter country. Defaults `software engineer`, `New York, NY`, `US`. |
| `startUrls` | array | Glassdoor company, review, salary or overview URLs as `{ "url": "..." }`. |
| `companyNames` | array | Company names such as `Stripe` when you have no URLs. |
| `includeJobs`, `includeReviews`, `includeCompanies`, `includeSalaries` | boolean | Which record types to collect. Salaries default to `false`. |
| `maxResults` | integer | Billable rows across all types. Default 25. |
| `maxJobs`, `maxReviewsPerCompany`, `maxPagesPerTarget` | integer | Budget for jobs, reviews per company and review pages per URL. |
| `daysOld`, `jobType`, `remoteOnly`, `includeNoSalaryJobs` | mixed | Job recency, type, remote filter and whether to keep jobs without pay. |
| `sortReviewsBy`, `responseFormat` | string | Review order (`default`, `recent`, `popular`) and review detail level (`detailed`, `concise`). |
| `deduplicate`, `maxConcurrency`, `proxyConfiguration` | mixed | Duplicate removal, browser pages at once and proxy settings (Residential by default). |

### Output

Every row has a `recordType`. Fields that belong to other record types stay `null`.

| `recordType` | One row represents | Key fields |
|---|---|---|
| `job` | One job listing | `title`, `companyName`, `companyRating`, `location`, `remoteType`, `easyApply`, `salaryText`, `salaryMin`, `salaryMax`, `description`, `jobUrl`, `applyUrl` |
| `review` | One employee review | `rating`, `reviewTitle`, `pros`, `cons`, `reviewDate`, `jobTitle`, `recommendToFriend`, `employerResponse` |
| `company` | One company profile | `companyRating`, `companyReviewCount`, `website`, `industry`, `headquarters`, `size`, `revenue`, `ceoName`, `about` |
| `salary` | One pay row | `salaryTitle`, `salaryLocation`, `salaryMedian`, `salaryBasePay`, `salaryAdditionalPay`, `salarySampleCount` |
| `diagnostic` | A free note about a target | `diagnosticStatus`, `diagnosticMessage` |

All rows also carry `source`, `sourceUrl`, `glassdoorUrl`, `provenance`, `searchQuery`, `requestedLocation`, `requestedCountry` and `scrapedAt`. A job row looks like this (null fields for other record types trimmed for reading):

```json
{
  "recordType": "job",
  "source": "glassdoor",
  "sourceUrl": "https://www.glassdoor.com/Job/jobs.htm?sc.keyword=Google&locT=N&locKeyword=New+York%2C+NY&jobType=all&fromAge=14",
  "glassdoorUrl": "https://www.glassdoor.com/job-listing/policy-strategist-kids-and-families-google-JV_IC1132348_KO0,35_KE36,42.htm?jl=1010253819537",
  "scrapedAt": "2026-10-01T12:53:13.678Z",
  "companyName": "Google",
  "companyRating": 4.4,
  "companyReviewCount": null,
  "industry": null,
  "jobId": "1010253819537",
  "title": "Policy Strategist, Kids and Families",
  "location": "New York, NY",
  "remoteType": "On-site or hybrid",
  "employmentType": null,
  "easyApply": false,
  "salaryText": "$164K–$239K/yr",
  "salaryMin": 164000,
  "salaryMax": 239000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "datePosted": null,
  "description": "Advanced degree in an academic field focused on pediatric or adolescent development, child protection policy, or the psychological impact of digital products… Skills: Childhood development, Product management, Risk management, Communication skills",
  "jobUrl": "https://www.glassdoor.com/job-listing/policy-strategist-kids-and-families-google-JV_IC1132348_KO0,35_KE36,42.htm?jl=1010253819537",
  "applyUrl": "https://www.glassdoor.com/job-listing/policy-strategist-kids-and-families-google-JV_IC1132348_KO0,35_KE36,42.htm?jl=1010253819537",
  "searchQuery": "Google",
  "requestedLocation": "New York, NY",
  "requestedCountry": "US",
  "reviewId": null,
  "rating": null,
  "pros": null,
  "cons": null,
  "salaryId": null,
  "salaryMedian": null
}
```

Each run writes `OUTPUT` and `RUN_SUMMARY` to the default key-value store with the outcome (`COMPLETE`, `PARTIAL`, `VALID_EMPTY` and others) and counts per record type.

### Pricing

This Actor uses Pay per event plus Apify platform usage. The events are:

- **Actor Start**, once per run.
- **Glassdoor result scraped**, once for each job, review, company or salary row saved to the dataset. `diagnostic` rows are free.

Worked example: a job search with `maxResults` at 25 that saves 25 jobs costs one Actor Start event plus 25 result events, plus the browser and residential proxy usage of the run. Review and company runs use more browser time than job searches. Check the live Pricing tab on this page for current event prices.

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~glassdoor-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQuery": "data analyst", "location": "London", "country": "GB", "includeJobs": true, "includeReviews": false, "includeCompanies": false, "maxResults": 25}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("khadinakbar/glassdoor-scraper").call(
    run_input={"searchQuery": "product manager", "location": "Austin, TX", "includeReviews": False,
               "includeCompanies": False, "includeNoSalaryJobs": False, "maxResults": 25}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["recordType"] == "job":
        print(row["companyName"], row["title"], row["salaryMin"], row["salaryMax"])
```

### Use it with AI agents (MCP)

Connect the Actor to Claude, ChatGPT, Cursor or another MCP client through [Apify MCP](https://mcp.apify.com), then ask:

> Find 25 data analyst jobs in London on Glassdoor that list a salary. Return company, title, salary range and company rating, and give me the median salary range.

The agent reads rows with `get-dataset-items`, groups them by `recordType`, and can cite `jobUrl` and `scrapedAt` as provenance. `OUTPUT.outcome` reports how the run ended. Cost scales with saved rows, so `maxResults` keeps the scope bounded.

### Best results

| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Salary benchmarking | Set `includeNoSalaryJobs` to `false` | Only jobs with published pay |
| Reviews and company facts | Turn `includeJobs` off and provide `startUrls` or `companyNames` | The full `maxResults` budget goes to reviews and profiles |
| A large employer | Set `maxReviewsPerCompany` | Balanced coverage across several companies |
| Fresh openings only | Set `daysOld` to 1 or 7 | Recently posted roles |
| Remote hiring research | Turn on `remoteOnly` | Remote listings only |

### Builder's note

I built this for people who ask a whole employer question at once: what a company is hiring for, what it pays and what its employees say. I designed one flat schema with a `recordType` discriminator so jobs, reviews, company profiles and salary rows can land in one spreadsheet or one agent context. I found budget control matters most on mixed runs, which is why jobs and reviews each have their own cap inside `maxResults`.

### FAQ

#### Do I need a Glassdoor account?

No. The Actor reads public Glassdoor pages and uses no login.

#### Why does my run return only jobs?

With all types switched on, jobs can fill the `maxResults` budget first. Turn `includeJobs` off, or raise `maxResults` above `maxJobs`, to leave room for reviews, companies and salaries.

#### Are salaries verified pay data?

Salary fields reflect what Glassdoor publishes on the listing or salary page.

### Responsible use

This Actor collects public Glassdoor pages and URLs you supply. Reviews can include job titles and other personal details, so use the data with a lawful basis, respect Glassdoor's terms and privacy laws such as the GDPR and CCPA, and keep it to legitimate research and hiring purposes. Glassdoor is a trademark of its owner, and this independent Actor is not affiliated with or endorsed by Glassdoor. For questions, open a ticket in the Issues tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/khadinakbar/glassdoor-scraper/changelog.md

# Actor input Schema

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

Use this when you already have Glassdoor company, review, salary, or overview URLs. Accepts Request List objects such as \[{"url":"https://www.glassdoor.com/Reviews/Apify-Reviews-E3100324.htm"}]. Defaults to an empty list. NOT for LinkedIn, Indeed, or non-Glassdoor URLs.

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

Use this when you know company names but not Glassdoor URLs. Accepts a list such as \["Apify", "Stripe"]. Defaults to an empty list. NOT a place for job keywords; use searchQuery for jobs.

## `searchQuery` (type: `string`):

Use this when scraping Glassdoor job listings by keyword. Accepts plain text such as "software engineer" or "data analyst". Defaults to "software engineer" for health checks and quick tests. NOT a company review URL.

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

Location used with searchQuery for Glassdoor job search. Use a city, region, or country such as "New York, NY" or "London". Defaults to "New York, NY". NOT used to geocode company review URLs.

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

Two-letter country hint used for proxy routing and job-search context. Use ISO-style values such as "US", "GB", or "CA". Defaults to "US". NOT a free-form location; use location for city or region.

## `includeJobs` (type: `boolean`):

Turn this on to scrape Glassdoor jobs through the portfolio jobs backend. Uses searchQuery, location, country, jobType, daysOld, and remoteOnly. Defaults to true so the actor has a useful one-click run. Turn off for URL-only company review research.

## `includeReviews` (type: `boolean`):

Turn this on to extract Glassdoor employee reviews from review URLs or company searches. Returns ratings, pros, cons, review date, role, and employer responses when visible. Defaults to true for URL/company-name runs. NOT used for job-search-only runs without URLs.

## `includeCompanies` (type: `boolean`):

Turn this on to save one company profile record from each Glassdoor company page. Returns rating, review count, website, industry, headquarters, size, revenue, CEO, and about text when visible. Defaults to true. NOT a business-email enrichment mode.

## `includeSalaries` (type: `boolean`):

Turn this on to extract salary rows from Glassdoor salary pages. Returns job title, pay text, min/max/median pay, currency, period, location, and sample count when visible. Defaults to false because salary pages are more block-prone. NOT compensation verification.

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

Maximum number of billable Glassdoor records to save across all selected data types. Use a small number like 25 for tests or up to 5000 for larger batches. Defaults to 25. Diagnostic rows do not count toward this limit or result charges.

## `maxJobs` (type: `integer`):

Maximum Glassdoor job records to request from the jobs backend. Use this when jobs should consume only part of the total maxResults budget. Defaults to 25. NOT a page count; it is a result count.

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

Maximum number of employee reviews to save from each company target. Use this to prevent one large employer from consuming the whole run budget. Defaults to 25. NOT the global limit; maxResults still caps the whole run.

## `maxPagesPerTarget` (type: `integer`):

Maximum review pagination pages to visit for each Glassdoor URL. Use 1-5 for quick runs and higher values for deeper review collection. Defaults to 5. NOT a guarantee that Glassdoor exposes that many pages publicly.

## `daysOld` (type: `integer`):

Recency filter for Glassdoor job search. Use values like 1, 7, 14, or 30. Defaults to 14 days. NOT applied to employee reviews or salary pages.

## `jobType` (type: `string`):

Job type filter passed to the jobs backend. Use "all", "fulltime", "parttime", "contract", or "internship". Defaults to "all". NOT used for employee review role titles.

## `remoteOnly` (type: `boolean`):

Restrict the jobs backend to remote Glassdoor job listings when supported. Use this for remote-only recruiting or market research. Defaults to false. NOT a review or salary-page filter.

## `includeNoSalaryJobs` (type: `boolean`):

Keep job listings even when Glassdoor does not show salary data. Turn off when salary benchmarking requires only rows with compensation text. Defaults to true. NOT used for salary-page records.

## `sortReviewsBy` (type: `string`):

Sort order applied to Glassdoor review pages before extraction. Use "default" to keep the URL unchanged, "recent" for newest reviews, or "popular" for relevance. Defaults to "default" for reliability. NOT used for job listings.

## `responseFormat` (type: `string`):

Controls how much review context each item includes. Use "concise" for lighter agent output or "detailed" for subratings, advice, location, outlook, and employer responses when visible. Defaults to "detailed". NOT a CSV formatting option.

## `deduplicate` (type: `boolean`):

Skip repeated jobs, reviews, companies, and salary rows detected within the same run. Keep this on for most Glassdoor batches. Defaults to true. NOT cross-run monitoring or database syncing.

## `maxConcurrency` (type: `integer`):

Maximum number of Glassdoor browser pages processed at once. Use 1 for reliability on Cloudflare-protected pages or up to 3 for faster small batches. Defaults to 1. NOT used by the internal jobs backend.

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

Optional override for Glassdoor browser-page traffic. Defaults to Apify Residential US proxies because Glassdoor uses anti-bot protection. Keep the default unless you know your proxy pool works. NOT where you enter Glassdoor cookies or passwords.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.glassdoor.com/Reviews/Apify-Reviews-E3100324.htm"
    }
  ],
  "companyNames": [
    "Apify"
  ],
  "searchQuery": "software engineer",
  "location": "New York, NY",
  "country": "US",
  "includeJobs": true,
  "includeReviews": true,
  "includeCompanies": true,
  "includeSalaries": false,
  "maxResults": 25,
  "maxJobs": 25,
  "maxReviewsPerCompany": 25,
  "maxPagesPerTarget": 5,
  "daysOld": 14,
  "jobType": "all",
  "remoteOnly": false,
  "includeNoSalaryJobs": true,
  "sortReviewsBy": "default",
  "responseFormat": "detailed",
  "deduplicate": true,
  "maxConcurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

API URL for saved Glassdoor job, review, company, salary, and diagnostic dataset rows.

## `summary` (type: `string`):

API URL for RUN_SUMMARY with outcome, counts, warnings, provider routes, storage IDs, and charge totals.

## `output` (type: `string`):

API URL for the compact OUTPUT record with terminal outcome, message, item counts, warnings, and charged events.

# 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": [
        {
            "url": "https://www.glassdoor.com/Reviews/Apify-Reviews-E3100324.htm"
        }
    ],
    "companyNames": [
        "Apify"
    ],
    "searchQuery": "software engineer",
    "location": "New York, NY",
    "country": "US",
    "includeJobs": true,
    "includeReviews": true,
    "includeCompanies": true,
    "includeSalaries": false,
    "maxResults": 25,
    "maxJobs": 25,
    "maxReviewsPerCompany": 25,
    "maxPagesPerTarget": 5,
    "daysOld": 14,
    "jobType": "all",
    "remoteOnly": false,
    "includeNoSalaryJobs": true,
    "sortReviewsBy": "default",
    "responseFormat": "detailed",
    "deduplicate": true,
    "maxConcurrency": 1,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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 = {
    "startUrls": [{ "url": "https://www.glassdoor.com/Reviews/Apify-Reviews-E3100324.htm" }],
    "companyNames": ["Apify"],
    "searchQuery": "software engineer",
    "location": "New York, NY",
    "country": "US",
    "includeJobs": True,
    "includeReviews": True,
    "includeCompanies": True,
    "includeSalaries": False,
    "maxResults": 25,
    "maxJobs": 25,
    "maxReviewsPerCompany": 25,
    "maxPagesPerTarget": 5,
    "daysOld": 14,
    "jobType": "all",
    "remoteOnly": False,
    "includeNoSalaryJobs": True,
    "sortReviewsBy": "default",
    "responseFormat": "detailed",
    "deduplicate": True,
    "maxConcurrency": 1,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/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 '{
  "startUrls": [
    {
      "url": "https://www.glassdoor.com/Reviews/Apify-Reviews-E3100324.htm"
    }
  ],
  "companyNames": [
    "Apify"
  ],
  "searchQuery": "software engineer",
  "location": "New York, NY",
  "country": "US",
  "includeJobs": true,
  "includeReviews": true,
  "includeCompanies": true,
  "includeSalaries": false,
  "maxResults": 25,
  "maxJobs": 25,
  "maxReviewsPerCompany": 25,
  "maxPagesPerTarget": 5,
  "daysOld": 14,
  "jobType": "all",
  "remoteOnly": false,
  "includeNoSalaryJobs": true,
  "sortReviewsBy": "default",
  "responseFormat": "detailed",
  "deduplicate": true,
  "maxConcurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call khadinakbar/glassdoor-scraper --silent --output-dataset

```

## MCP server setup

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