# Glassdoor Jobs Scraper (`data_wiki/glassdoor-jobs-scraper`) Actor

Scrape Glassdoor job listings by keyword or link: title, company, rating, location, posting date, salary range and apply link. Add full descriptions and benefits. No login needed. Great for job hunting, salary research, recruiting and hiring-trend tracking.

- **URL**: https://apify.com/data_wiki/glassdoor-jobs-scraper.md
- **Developed by:** [Data WiKi](https://apify.com/data_wiki) (community)
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 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 is Glassdoor Jobs Scraper?

Glassdoor Jobs Scraper is an Apify Actor that collects jobs from Glassdoor by keyword, search link, job link or job ID. Each Glassdoor job listing comes back with its title, company, rating, location, posting age, salary range and apply link, and you can add the full description, an employer profile and a market salary benchmark.

- **Pay in every row that has it.** The salary range comes with a flag that tells you whether the employer published it or Glassdoor estimated it.
- **Company context next to the job.** Rating, size and, with full job details, industry, headquarters and website sit in the same row.
- **Many filters.** Posting age, job type, seniority, salary range, company rating, company size, radius, remote and Easy Apply.
- **Results while it runs.** Jobs appear in the Output tab as they are saved, split into separate tables per topic.
- **Mixed input.** Keywords, search links, job links and job IDs can share one run.

Click **Try for free**, type a job title and a location, and press **Start**. No Glassdoor account or cookies are needed, because the Actor reads public pages that any visitor can see.

### 📊 What data can you extract from Glassdoor?

As a Glassdoor job data extractor, the Actor returns up to 60 fields per job in the main table. Fields that Glassdoor does not publish for a job are `null`.

| Field | Description | Example |
|---|---|---|
| `job_id` | Glassdoor listing ID | 1000000000001 |
| `job_title`, `job_normalized_title` | Title as posted and the standard title Glassdoor maps it to | Data Analyst, data analyst |
| `job_url`, `job_apply_url` | Public job page and apply link | https://www.glassdoor.com/job-listing/example.htm?jl=1000000000001 |
| `job_posted_date`, `job_age_in_days` | Posting date (today minus the age in days) and age | 2026-11-03, 4 |
| `job_location`, `job_workplace_type`, `job_remote` | Location text, workplace type and a remote flag, which gives remote jobs data | Austin, TX, on-site, false |
| `job_city`, `job_state`, `job_country`, `job_latitude`, `job_longitude` | Map position of the job (needs full job details) | Austin, TX, US |
| `job_salary_min`, `job_salary_median`, `job_salary_max` | Low end (10th percentile), middle and high end (90th percentile) of the pay range | 80000, 95000, 112000 |
| `job_salary_currency`, `job_salary_period`, `job_salary_source`, `job_salary_estimated` | Currency, pay period, `employer` or `glassdoor_estimate`, and an estimate flag | USD, annual, employer, false |
| `job_types`, `job_skills`, `job_education`, `job_years_experience`, `job_attributes` | Employment types and requirements Glassdoor lists | Full-time, SQL |
| `job_description_text`, `job_description_html` | Full description (needs full job details) | Text of the posting |
| `company_name`, `company_rating`, `company_size`, `company_logo` | Employer name, overall rating, size bucket and logo | Example Analytics Inc., 4.1 |
| `company_industry`, `company_sector`, `company_headquarters`, `company_website`, `company_founded`, `company_revenue`, `company_type`, `company_ceo` | Employer facts (need full job details) | Software, Austin, TX |
| `company_ratings`, `company_review_count`, `company_review_highlights`, `company_benefits_rating`, `company_benefits_highlights` | Sub-ratings, review count, short review sentences and mentioned benefits (need full job details) | work_life_balance 3.9 |
| `company_profile` | Description, mission, awards and stock symbol (needs Company profile) | Object |
| `salary_benchmark` | Market pay for the title and location (needs Salary benchmark) | Object |
| `source_site`, `scraped_at`, `error` | Glassdoor site used, collection time, and a message for a job ID that was not found | www.glassdoor.com |

The employer rating sits in `company_rating`, and the companies table repeats it per employer. The rating fields follow the Glassdoor company ratings shown on each employer page. Compare Glassdoor employer ratings across companies in that table. Every row also holds Glassdoor salary data for that job when the page shows it.

### 💡 Use cases for Glassdoor job data

- **Salary research:** compare `job_salary_min`, `job_salary_median` and `job_salary_max` for one title across employers.
- **Salary comparison by city:** run the same title in several locations and compare `job_salary_median`.
- **Job market analysis:** count open roles by `company_size`, `job_workplace_type` and `job_age_in_days` for a field you follow.
- **Hiring trends:** run the same search again and again with `postedWithinDays` to see how many new roles appear.
- **Competitor hiring analysis:** set the `company` filter to a rival and read which roles and skills it advertises.
- **Recruitment lead generation:** collect employers with name, rating, size and website for outreach.
- **Remote job listings:** switch on `remoteOnly` and keep only jobs marked remote.
- **Best companies to work for:** combine `minCompanyRating` and `companySize` to shortlist employers that are hiring now.

### 🛠️ How to scrape Glassdoor jobs

1. Create a free Apify account and open the Actor in Apify Console.
2. Add one or more job titles, Glassdoor search links, job links or job IDs to **Search keywords, URLs or job IDs**.
3. Enter a **Location**, for example `Austin, TX`, `Germany` or `Remote`.
4. Set **Max jobs** and any filters, such as **Posted within (days)** or **Job type**.
5. Switch on **Full job details**, **Company profile** or **Salary benchmark** if you want more than the listing data.
6. Click **Start**, watch the numbered log lines, and open the **Output** tab when the run finishes.
7. Download the table as JSON, CSV, Excel, XML or HTML.

To find companies that are hiring for a role, leave the filters wide and read the `companies` table afterwards. For job market research, start with a wide search and narrow it with filters.

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

The Actor uses pay per event. One `main_result` event is charged for each job saved to the main table, and one `apify-actor-start` event of $0.00005 is charged when a run starts. Jobs that could not be found are not charged, and the extra tables cost nothing on top.

| Plan tier | Price per `main_result` | Price per 1,000 results |
|---|---|---|
| Free | $0.001 | $1.00 |
| Bronze | $0.0009 | $0.90 |
| Silver | $0.0008 | $0.80 |
| Gold, Platinum, Diamond | $0.0007 | $0.70 |

Apify platform usage (compute) is billed on top of the events above.

Worked example: 500 jobs on the Free tier cost 500 x $0.001 = $0.50, plus the $0.00005 start event. 1,000 jobs on the Gold tier cost 1,000 x $0.0007 = $0.70, plus the start event. The Actor is set to 1024 MB of memory. See the Pricing tab for the current prices and set a maximum charge per run if you want a hard cap.

### ⬇️ Input

Only **Search keywords, URLs or job IDs** is required. The example below searches full-time data analyst jobs from the last 7 days.

```json
{
  "urls": ["data analyst"],
  "location": "Austin, TX",
  "maxItems": 2,
  "scrapeJobDetails": false,
  "postedWithinDays": 7,
  "jobType": "fulltime",
  "minSalary": 80000
}
```

| Field | What it does |
|---|---|
| `urls` | Keywords, Glassdoor search links, job links or job IDs, one per line. Required. |
| `location` | City, state or country, or `Remote`, for your Glassdoor job search by location. Empty searches the whole country site. Default `New York, NY`. |
| `maxItems` | Total jobs across all searches. `0` means everything reachable. Default 10. |
| `scrapeJobDetails` | Adds the full description, skills, benefits, review highlights, employer snapshot and map position. One extra request per job. Default on. |
| `scrapeCompanyProfile` | Adds the employer description, mission, awards, stock symbol and review counts. One request per employer. Default off. |
| `salaryBenchmark` | Adds market pay (base, extra, total, 10th to 90th percentile) for the title and location. One request per title and location. Useful for salary benchmarking. Default off. |
| `postedWithinDays` | Only jobs posted in the last N days, `0` for any time. Glassdoor filters at 1, 3, 7, 14 and 30 days; other values are cut afterwards. |
| `jobType` | `any`, `fulltime`, `parttime`, `contract`, `internship`, `temporary` or `apprenticeship`. |
| `remoteOnly` | Keep only Glassdoor remote jobs. |
| `easyApplyOnly` | Keep only Glassdoor easy apply jobs, which you can apply to directly. |
| `seniority` | `any`, `entrylevel` (for entry level jobs data), `midseniorlevel`, `director` or `executive`. |
| `minSalary`, `maxSalary` | Yearly salary bounds in the site's currency, compared with the median pay. Jobs with no published salary are kept. |
| `minCompanyRating` | Minimum employer rating from 1 to 5. Jobs without a rating are kept. |
| `companySize` | `any`, `1-200`, `201-500`, `501-1000`, `1001-5000` or `5001+`. |
| `radius` | Distance around the location: miles on the .com site, kilometres on other sites. |
| `sortBy` | `relevance`, `newest` or `oldest`. |
| `company`, `excludeCompanies`, `excludeJobIds` | Keep one employer, drop employers, or skip job IDs you already have. |
| `proxyConfiguration` | Optional. The default is no proxy. |

> 💡 Start with a small `maxItems` to check the filters before a large run. Search one title at a time to read the salary range by job title in the salaries table.

### ⬆️ Output

The scraped results appear as a dataset in the **Storage** tab and the **Output** tab. The table view does not show all fields, so download the data to see every column. Each job is one row, and the run also fills separate tables for locations, salaries, descriptions, companies, company ratings, reviews and benefits, company profiles and salary benchmarks.

For the input above, a shortened row looks like this (fictional values):

```json
{
  "job_id": 1000000000001,
  "job_title": "Data Analyst",
  "job_url": "https://www.glassdoor.com/job-listing/example-data-analyst.htm?jl=1000000000001",
  "job_posted_date": "2026-11-03",
  "job_age_in_days": 4,
  "job_location": "Austin, TX",
  "job_salary_min": 80000,
  "job_salary_median": 95000,
  "job_salary_max": 112000,
  "job_salary_currency": "USD",
  "job_salary_period": "annual",
  "job_salary_source": "employer",
  "job_salary_estimated": false,
  "company_name": "Example Analytics Inc.",
  "company_rating": 4.1,
  "source_site": "www.glassdoor.com",
  "scraped_at": "2026-11-07T09:30:00Z"
}
```

Download a Glassdoor jobs CSV for spreadsheets.

Export Glassdoor jobs to Excel, JSON, XML or HTML.

The rows form a job postings dataset that you can load into a database or a notebook.

Glassdoor job data arrives as structured rows you can filter and export.

| Table | Contents |
|---|---|
| Jobs overview | One row per job with salary, company and location fields |
| Locations | City, state, country, map position and workplace type |
| Salaries | Salary range, currency, period and whether it is an employer figure or an estimate, enough for a Glassdoor salary by city comparison |
| Descriptions | Full descriptions, skills, education, experience and attributes |
| Companies | One row per employer, a hiring companies list with rating, size, headquarters and industry |
| Company ratings | Work-life balance, compensation, culture, careers, management and CEO approval |
| Reviews & benefits | Review highlights and the benefits employees mention most |
| Company profiles | Description, mission, awards and stock symbol |
| Salary benchmarks | Market pay for a title and location from the 10th to the 90th percentile |

### ⚠️ Limitations and error handling

- Glassdoor caps one search at roughly 800 rows. The Actor runs extra passes with other sort orders and filters to reach more and removes duplicates, but it cannot promise every posting.
- Duplicates are removed by job ID, so results from several searches are merged.
- Not every job has a salary. Jobs without one are kept with empty salary fields, and salary filters never drop them.
- `job_salary_min` and `job_salary_max` are the 10th and 90th percentile of the pay range, not the lowest and highest figure ever posted.
- `minSalary` and `maxSalary` are compared with the median pay converted to a yearly figure.
- Sorting by `oldest` collects first and lists the rows at the end of the run, so those rows do not appear while it runs.
- The site is chosen from the location. The .com, .co.uk, .de, .ca, .co.in, .com.au and .fr sites have been checked; other country sites are mapped but not verified, and the log says so.
- This Actor works as a job board scraper for Glassdoor only; other job boards are not covered.
- Private or login-only data is not collected. Reviews and interviews are not collected either; only short review highlights and benefits appear per employer.
- If Glassdoor refuses requests even after the Actor switches connections, the run stops and keeps the jobs it already saved.

| Message or value | Meaning | What to do |
|---|---|---|
| `Done: N jobs saved.` | The run finished normally | Open the Output tab |
| `No jobs found for this search.` | Nothing matched | Try other keywords, a wider location or fewer filters |
| `Spend limit reached after N results.` | Your maximum charge per run was reached | Raise the maximum charge to collect more |
| `Glassdoor refused the requests` | Requests were blocked | Try again later or choose a different proxy |
| `error`: `job not found (expired or removed)` | A job ID or job link no longer exists | Not charged; remove it from the list |

### 🔌 Integrating Glassdoor Jobs Scraper with other apps

Run the Actor from the Apify API, send results to other apps through [Apify integrations](https://docs.apify.com/integrations), or connect it to [Make](https://docs.apify.com/integrations/make), [Zapier](https://docs.apify.com/integrations/zapier) and [webhooks](https://docs.apify.com/integrations/webhooks). To repeat a search with the same filters, use [schedules](https://docs.apify.com/actors/running/schedules). The [Apify API reference](https://docs.apify.com/api/v2) explains how to start runs and read datasets.

```bash
curl -X POST "https://api.apify.com/v2/actors/data_wiki~glassdoor-jobs-scraper/runs" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"urls":["data analyst"],"location":"Austin, TX","maxItems":50}'
```

AI agents can find and run this Actor through the hosted [Apify MCP server](https://docs.apify.com/mcp).

### 🔗 Other hiring and company data Actors by data_wiki

These Actors sit next to this one in hiring and company research. Only the first covers the same site; the other three read different sources, so the relation is by use case only.

| Actor | What it extracts | When to use it |
|---|---|---|
| [Glassdoor employee reviews and interviews scraper](https://apify.com/data_wiki/glassdoor-reviews-jobs-scraper) | Starts from company names, links or IDs and returns typed rows: company profile, reviews, interviews, salaries and jobs | When you want what employees write about a company; this Actor instead starts from job searches |
| [Website contact details extractor](https://apify.com/data_wiki/contact-details-scraper) | Emails, phone numbers and social links from a list of websites | When you have company websites from `company_website` and want contact details |
| [Website technology lookup](https://apify.com/data_wiki/builtwith-official-technology-scraper) | Technologies a website runs, such as CMS, analytics and hosting | When you research an employer or competitor from its website |
| [LinkedIn public profile scraper](https://apify.com/data_wiki/linkedin-profile-scraper-email-no-cookies) | Public LinkedIn profile data from profile links | When you work in recruiting and need profile data, not job ads (different data and different site) |
| [LinkedIn candidate profile details](https://apify.com/data_wiki/profile-details-batch-scraper-for-linkedin-email-no-cookies) | Experience, education and employer details per listed profile | You found a job market and want profile details of professionals you picked. |

### ⚖️ Is it legal to scrape Glassdoor?

The Actor reads public pages that any visitor can see, with no login and no private data. Job posts can still contain personal data, such as a recruiter name, an email address or a phone number inside a description, and `company_ceo` is the name of a person. The same rules apply to any Glassdoor scraper. You are responsible for using the data under GDPR, CCPA, anti-spam rules and the [Glassdoor](https://www.glassdoor.com) terms. Keep personal details out of downstream use unless you have a lawful basis, and delete them on request. Read Apify's guides on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/). If you are unsure, ask a lawyer.

### ❓ FAQ

#### Do I need a Glassdoor account or cookies?

No. This Glassdoor job scraper reads public job pages with plain HTTP requests, no browser and no login.

#### Is there a Glassdoor jobs API?

You can run this Actor through the Apify API and read the results as JSON. It is not an official Glassdoor API. See the Integrating section for a call example.

#### How many jobs can one run collect?

Set `maxItems` up to 100000, or `0` for everything reachable. One Glassdoor search tops out near 800 rows, and the Actor runs extra passes and removes duplicates to get further.

#### Why do some jobs have no salary?

Glassdoor job postings do not all show pay. Those jobs stay in the results with empty salary fields. When Glassdoor shows an estimate instead of an employer figure, `job_salary_source` says `glassdoor_estimate`, which also helps you filter Glassdoor salary estimates out of a pay analysis.

#### Can the Glassdoor Jobs Scraper run on a schedule?

Yes. Use an Apify schedule with the same input. As a job scraper without memory between runs, it needs `postedWithinDays` or `excludeJobIds` to avoid repeats.

#### Do I need a proxy?

No. By default no proxy is used. If Glassdoor refuses requests, the Actor switches to a proxy automatically and keeps it for the rest of the run. You can also set your own in **Proxy configuration**.

#### How is this different from the Glassdoor Reviews & Jobs Scraper?

This Actor starts from job searches and returns one row per job, with salary and employer rating. The [Glassdoor reviews and jobs Actor](https://apify.com/data_wiki/glassdoor-reviews-jobs-scraper) starts from company names, links or IDs and returns typed rows such as reviews and interviews. As a Glassdoor job listings scraper, this one does not collect reviews or interviews.

#### Can I use it through an MCP server?

Yes. Add the hosted Apify MCP server to your AI client and ask it to find and call `data_wiki/glassdoor-jobs-scraper` with the input fields shown above.

### 💬 Your feedback

Found a bug or a missing field? Open an issue in the Issues tab and include the run link. Need a custom solution? Contact hello.datawiki@gmail.com.

# Actor input Schema

## `urls` (type: `array`):

One entry per line: a job keyword (for example python developer), a Glassdoor search link, a Glassdoor job link, or a job ID. You can mix all of them. Every keyword is searched in the location below.

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

City, state or country, for example New York, NY or Germany. Use Remote for remote jobs. Leave empty to search the whole country site. The country decides which Glassdoor site is used.

## `maxItems` (type: `integer`):

Total number of jobs to return across all searches. 0 means everything reachable.

## `scrapeJobDetails` (type: `boolean`):

Add the full description, skills, benefits, review highlights, employer snapshot and map position. Takes one extra request per job.

## `scrapeCompanyProfile` (type: `boolean`):

Add the employer description, mission, awards, stock symbol and review counts. One request per employer.

## `salaryBenchmark` (type: `boolean`):

Add market pay (base, extra and total, 10th to 90th percentile) for the job title in that location. One request per title and location.

## `postedWithinDays` (type: `integer`):

Only jobs posted in the last N days. Glassdoor filters at 1, 3, 7, 14 and 30 days. Use 0 for any time.

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

Employment type to keep.

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

Keep only remote jobs.

## `easyApplyOnly` (type: `boolean`):

Keep only jobs you can apply to directly on Glassdoor.

## `seniority` (type: `string`):

Experience level to keep. For internships use the Job type filter.

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

Minimum yearly salary in the site's currency. Jobs with no published salary are kept. 0 means no minimum.

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

Maximum yearly salary in the site's currency. Jobs with no published salary are kept. 0 means no maximum.

## `minCompanyRating` (type: `number`):

Minimum employer rating from 1 to 5 stars. 0 means any rating.

## `companySize` (type: `string`):

Number of employees.

## `radius` (type: `string`):

Distance around the location (miles on the .com site, kilometres on other sites).

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

Most relevant, newest first (freshest postings are collected first) or oldest first.

## `company` (type: `string`):

Keep only jobs from this employer, for example Amazon.

## `excludeCompanies` (type: `array`):

Employers to drop from the results, one per line, for example Dice or Jobot.

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

Job IDs you already have. They are skipped.

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

By default no proxy is used. If Glassdoor refuses the request, the Actor switches to a stronger proxy automatically and keeps using it.

## Actor input object example

```json
{
  "urls": [
    "software engineer"
  ],
  "location": "New York, NY",
  "maxItems": 10,
  "scrapeJobDetails": true,
  "scrapeCompanyProfile": false,
  "salaryBenchmark": false,
  "postedWithinDays": 0,
  "jobType": "any",
  "remoteOnly": false,
  "easyApplyOnly": false,
  "seniority": "any",
  "minSalary": 0,
  "maxSalary": 0,
  "minCompanyRating": 0,
  "companySize": "any",
  "radius": "25",
  "sortBy": "relevance",
  "excludeCompanies": [],
  "excludeJobIds": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per job.

## `locations` (type: `string`):

Where each job is: city, state, country, map position and workplace type.

## `salaries` (type: `string`):

Salary range, currency, pay period and whether it is an employer figure or an estimate.

## `descriptions` (type: `string`):

Full descriptions, skills, education, experience and job attributes.

## `companies` (type: `string`):

One row per employer: rating, size, headquarters, industry and more.

## `company_ratings` (type: `string`):

Employer sub-ratings: work-life balance, compensation, culture, careers and more.

## `reviews_benefits` (type: `string`):

Review highlights and the benefits employees mention most.

## `company_profiles` (type: `string`):

Employer description, mission, awards, stock symbol and review counts.

## `salary_benchmarks` (type: `string`):

Market pay for a job title in a location from the 10th to the 90th percentile.

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

Counts and timing of the 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 = {
    "urls": [
        "software engineer"
    ],
    "location": "New York, NY",
    "excludeCompanies": [],
    "excludeJobIds": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_wiki/glassdoor-jobs-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 = {
    "urls": ["software engineer"],
    "location": "New York, NY",
    "excludeCompanies": [],
    "excludeJobIds": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_wiki/glassdoor-jobs-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 '{
  "urls": [
    "software engineer"
  ],
  "location": "New York, NY",
  "excludeCompanies": [],
  "excludeJobIds": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_wiki/glassdoor-jobs-scraper --silent --output-dataset

```

## MCP server setup

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