# Glassdoor Jobs API (`deepmine/glassdoor-jobs`) Actor

Search Glassdoor jobs by keyword and location, US or worldwide: title, company, full description, posting date and Easy Apply, plus the company's Glassdoor rating, salary range, job type, remote/hybrid, level, benefits and skills when Glassdoor lists them. For recruiters, job feeds and pay research.

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

## Pricing

from $0.14 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## Glassdoor Jobs API

Search Glassdoor jobs by **keyword** and **location** (US or worldwide), or paste a **Glassdoor search URL**. You get each job's title, company, **full description** (text and HTML), **apply link**, posting date and **Easy Apply** flag, plus the **company profile** (rating, size, industry, revenue, founded, HQ, website, CEO, 5 sub-ratings), **salary range** (the employer's, or Glassdoor's estimate), **job type**, **remote/hybrid**, **level**, **benefits** and **skills** when Glassdoor lists them (live New York run, 2026-10-06: salary on 96% of jobs, rating 93%, company size 84%, job type 75%, benefits 61%, remote/hybrid 40%).

| 💼 Title | 🏢 Company | ⭐ Rating | 📍 Location | 💰 Salary | 🕒 Job Type | 📅 Posted |
|---|---|---|---|---|---|---|
| Senior Analyst, Data Analytics, SIU | Oscar Health | 3.1 | New York, NY | $86,628 - $109,761 a year | – | 2026-10-06 |
| Senior Analyst, Data Analytics | Prudential | 3.7 | Newark, NJ | $76,000 - $125,400 a year | Full-time | 2026-10-06 |
| Sr. Business Analyst | Jackson Lewis | 3.4 | New York, NY | $169,000 - $206,000 a year | Full-time | 2026-10-06 |

<sub>Collected 2026-10-06 ("data analyst", New York, NY, past week).</sub>

**$0.18 per 1,000 jobs** on the Starter plan ($0.20 Free, $0.16 Scale, $0.14 Business), full descriptions, company profiles and proxies included. The prefilled run (100 jobs) costs about $0.018 or less and took 6 to 10 seconds in six runs on 2026-10-07 (about 75 jobs matched that day).

No Glassdoor account, no cookies, no login.

### Why this one

- **Rich job rows.** 62 fields per job, none of them an always-empty placeholder, every one from Glassdoor's own answers: the job, the salary range with its median and source, the apply link, coordinates, Glassdoor's occupation, and the company's profile and employee ratings (overall, work/life balance, compensation, culture, career, management, CEO approval, recommend to a friend). On the same search, the most-used alternative returned 11 top-level fields per job (2026-10-06). Two employer ratings Glassdoor shows only on its company pages, business outlook and diversity, are not included (see the FAQ).
- **Deeper searches.** Pages of 100 jobs instead of 30, so one search reaches about 1,800 distinct jobs before Glassdoor's 30-page limit (1,844 and 1,862 on "software engineer", US, any time, in our tests), not 900.
- **First rows in seconds.** Rows go out in batches as their details arrive (each batch newest first), not when the search ends, and a details call that a slow IP holds up is sent again on another IP: the first rows of the prefilled run reached the dataset 3 to 7 seconds after the start request in those runs (container start included; the spread is how fast the proxy IPs answer).
- **Paste any Glassdoor search.** Build a search on glassdoor.com or a country site with any filters, paste the results URL, and it is read with its own keyword, place and filters.
- **Glassdoor's own filters, and yours.** Posted within, job type, seniority, company size, industry, job function, minimum salary, remote only, Easy Apply only and minimum company rating go to Glassdoor; exclude employers and skip job IDs (for schedules that should bring only new jobs) are checked on each job. Jobs a filter leaves out are never charged.
- **Each job charged once, restarts included.** A job several keywords find comes once, under the first. If Apify restarts or resurrects a run, it reads its dataset back first and never delivers or charges a job twice (live check: a resurrected 67-job run added only the 1 job Glassdoor had posted since, 68 rows = 68 charges).
- **Fails loudly.** A run never ends "succeeded" with an empty dataset or a cut-short search because Glassdoor refused it. Blocked requests and error answers are retried on new IPs; a search that still fails fails the run with a clear message (the jobs already found are still delivered). An empty answer is double-checked with a control search. If Glassdoor's job-details answers fail for most jobs, the run stops and fails instead of quietly handing you previews. Every run saves a summary (`OUTPUT`).
- **Worldwide.** Any city, state or country Glassdoor knows: `Austin, TX`, `Texas`, `London`, `Germany`. Salaries come in the local currency.

### Input

| Field | What it does | Default |
|---|---|---|
| `keywords` | Job titles, skills or companies, as you'd type them in Glassdoor's search box. Each is its own search. An empty list = every job in the place. | `["data analyst"]` |
| `location` | City, state or country, e.g. `New York, NY`, `Texas`, `London`, `Germany`. Empty = the whole United States. | – |
| `postedWithin` | `any`, `past24Hours`, `past3Days`, `pastWeek`, `past2Weeks` or `pastMonth`. | `pastWeek` |
| `maxResults` | Stop each search after this many jobs (up to 3,000; a big search holds about 1,800 distinct jobs). You pay per job, so this also caps the cost. | 100 |
| `remoteOnly` | 🎛️ Filters: only remote / work-from-home jobs. | off |
| `jobType` | 🎛️ Filters: `any`, `fullTime`, `partTime`, `contract`, `temporary` or `internship`. | `any` |
| `seniority` | 🎛️ Filters: `any`, `internship`, `entryLevel`, `midSenior`, `director` or `executive`. | `any` |
| `companySize` | 🎛️ Filters: `any`, `1-200`, `201-500`, `501-1000`, `1001-5000` or `5000+` employees. | `any` |
| `industry` | 🎛️ Filters: one of Glassdoor's 25 industries, e.g. `Information Technology`. | all |
| `jobFunction` | 🎛️ Filters: one of Glassdoor's 23 job functions, e.g. `Finance & Accounting`. | all |
| `minSalary` | 🎛️ Filters: Glassdoor's minimum pay filter, per year in the place's currency. | – |
| `easyApplyOnly` | 🎛️ Filters: only jobs you can apply to on Glassdoor in a few clicks. | off |
| `minRating` | 🎛️ Filters: only companies rated at least `1`, `2`, `3` or `4` stars (companies without a rating are left out). Glassdoor's own filter lets lower-rated jobs through, so the Actor checks every job and you never pay for one below your minimum. | `any` |
| `excludeCompanies` | 🎛️ Filters: leave out jobs whose company name contains one of these (e.g. staffing agencies). | – |
| `searchUrls` | 🔗 Glassdoor results URLs (glassdoor.com or a country site). Each is read with its own keyword, place and filters; the fields above are then not used. | – |
| `excludeJobIds` | 🔁 Job IDs or job links you already have, so a scheduled run brings only new jobs (not charged). | – |
| `includeDetails` | 🧾 Full description (text and HTML), apply link, company profile, sub-ratings and coordinates for each job (one more request per job, same price). | on |
| `proxyConfiguration` | ⚙️ Leave as is: Apify datacenter IPs first; when Glassdoor refuses them the Actor switches to residential IPs on its own. | Apify Proxy (datacenter first) |

Example:

```json
{
  "keywords": ["registered nurse", "nurse practitioner"],
  "location": "Texas",
  "postedWithin": "past3Days",
  "companySize": "5000+",
  "minRating": "4",
  "excludeCompanies": ["staffing"],
  "maxResults": 300
}
```

### Output

One dataset, **💼 All Jobs**, one row per job. Views:

- **📊 Overview**: 🖼️ Logo, 💼 Title, 🏢 Company, ⭐ Rating, 📍 Location, 💰 Salary, 🕒 Job Type, 🏠 Workplace, 📅 Posted, 🔗 Glassdoor, 📨 Apply, 🔍 Keyword
- **📈 Stats**: every number: salary min/median/max, years of experience, days ago, founded, CEO approval, recommend, the 5 sub-ratings, coordinates
- **📝 Details**: 💼 Title, 🏢 Company, 🎓 Level, 🎓 Min Years, 🕒 Job Type, 🏠 Workplace, ⚡ Easy Apply, 🧾 Salary Source, 🎁 Benefits, 🛠️ Skills, 📝 Description, 🔗 Glassdoor
- **🏢 Companies**: 🖼️ Logo, 🏢 Company, ⭐ Rating, 👥 Company Size, 🏭 Industry, 💵 Revenue, 📆 Founded, 🏙️ Headquarters, 🌐 Website, 🌐 Company Page, 💼 Title, 🔗 Glassdoor
- **🗺️ Places**: 💼 Title, 🏢 Company, 📍 Location, 🏙️ City, 🗺️ State, 🌍 Country, 📌 Latitude, 📌 Longitude, 🏠 Workplace, 🔗 Glassdoor

Fields, in row order (empty = `null`; ✱ = only with `includeDetails` on, the default):

| Field | Example |
|---|---|
| `companyLogo` | `https://media.glassdoor.com/sql/1843/ross-stores-squareLogo-1747176103018.png` (doesn't expire; 93% of jobs) |
| `title` | `Senior Analyst, Data Analytics, SIU` |
| `company` | `Oscar Health` |
| `companyRating` | `3.1` (the company's overall Glassdoor rating, 1-5; empty when it has none yet) |
| `location` | `New York, NY` (as Glassdoor shows it; `Remote` or a country for jobs without a city) |
| `salary` | `$84,700 - $136,150 a year`, `$50 an hour`, `$61,000 - $104,000 a year (Glassdoor estimate)` |
| `salaryMin`, `salaryMedian` | `84700`, `110425` (numbers, per `salaryPeriod`) |
| `salaryMax`, `salaryCurrency` | `136150`, `USD` |
| `salaryPeriod`, `salarySource` | `year` (or `month`, `week`, `day`, `hour`); `Employer` or `Glassdoor estimate` |
| `isSalaryEstimate` | `false` when the employer gave the pay |
| `jobType`, `workplace` | `Full-time` (several are comma-separated); `Remote`, `Hybrid` or `In-person` when Glassdoor tags it |
| `seniority`, `minExperienceYears` | `Mid-level`; `3` ✱ |
| `isEasyApply`, `isSponsored` | `true` when you can apply on Glassdoor itself; `true` when the employer pays to promote the job |
| `postedAt`, `postedDaysAgo` | `2026-10-06` (UTC day); `0` |
| `jobUrl` | `https://www.glassdoor.com/job-listing/business-analyst-ross-stores-JV_IC1132348_KO0,16_KE17,28.htm?jl=1010286426494` |
| `applyUrl` | `https://www.glassdoor.com/partner/jobListing.htm?pos=101&ao=1110586&tgt=APPLY_START&…` ✱ (Easy Apply on Glassdoor, or a redirect to the employer's form) |
| `companyUrl`, `companyWebsite` | `https://www.glassdoor.com/Overview/W-EI_IE1843.htm`; `https://jobs.rossstores.com/` ✱ |
| `companySize`, `companyIndustry` | `10000+ Employees` ✱; `Department, Clothing & Shoe Stores` ✱ |
| `companySector`, `companyType` | `Retail & Wholesale` ✱; `Company - Public` ✱ |
| `companyRevenue`, `companyFounded` | `$10+ billion (USD)` ✱; `1982` ✱ |
| `companyHeadquarters`, `companyCeo` | `Dublin, CA` ✱; `Jim Conroy` ✱ |
| `companyCeoApprovalPercent`, `companyRecommendPercent` | `60`, `48` ✱ (percent of reviewing employees) |
| `companyRatingWorkLifeBalance`, `companyRatingCompensation` | `3`, `2.9` ✱ (1-5) |
| `companyRatingCulture`, `companyRatingCareer` | `3.1`, `3.1` ✱ |
| `companyRatingManagement` | `2.9` ✱ |
| `occupation`, `normalizedTitle` | `business analyst` (Glassdoor's normalized role, the same across country sites) |
| `city`, `state` | `New York`, `New York State` ✱ |
| `country`, `latitude` | `United States`, `40.71417` ✱ |
| `longitude` | `-74.00639` ✱ |
| `benefits` | `["Yearly bonus", "Health insurance", "Dental insurance", "Paid time off"]` (up to 12) |
| `skills` | `["Computer science", "SAFe", "Process mapping"]` (up to 15) |
| `descriptionSnippet` | `GENERAL PURPOSE The Business Analyst is an IT func…` (first 50 characters) |
| `description` | Full description as plain text; with `includeDetails` off, the 150-character preview from Glassdoor's search results |
| `descriptionHtml` | The description as Glassdoor's HTML ✱ |
| `isExpired` | `false` (search results show live jobs) |
| `jobSource` | `Indeed Job Search Platform` (the feed Glassdoor imported the job from; empty for a feed we don't know) |
| `jobId`, `companyId` | `1010286426494` (the `jl` in job links); `1843` |
| `occupationId`, `locationId` | `100169`; `1132348` (Glassdoor's ids) |
| `locationType` | `City`, `State`, `Country` or `Metro area` |
| `keyword` | `data analyst`: the keyword whose search delivered this job (the first, when several found it) |
| `searchUrl` | The Glassdoor results page of that search: your pasted URL, or the page for your keyword, place and filters |
| `scrapedAt` | `2026-10-06T22:00:34Z` |

#### Run summary (`OUTPUT`)

```json
{
  "results": 67,
  "stopReason": "complete",
  "deliveredBeforeRestart": 0,
  "where": "New York, NY (US)",
  "searches": [
    {"keyword": "data analyst", "searchUrl": "https://www.glassdoor.com/Job/new-york-ny-us-data-analyst-jobs-SRCH_IL.0,14_IC1132348_KO15,27.htm?fromAge=7",
     "status": "ok", "stopReason": "complete", "glassdoorTotal": 85, "jobsFound": 67, "delivered": 67,
     "deliveredBeforeRestart": 0, "alreadyDeliveredByEarlierKeyword": 0, "pages": 1, "repeatedOnLaterPages": 0,
     "filteredOut": 0, "detailsFailed": 0}
  ],
  "requests": 69,
  "details": {"tried": 67, "failed": 0, "failedBy": {}},
  "statusMessage": "67 jobs from 1 search in New York, NY (US), past week. Download them from the Output tab (CSV, Excel, JSON) or schedule this run to get new jobs daily. …"
}
```

- `stopReason` for the run is `complete`, or `spendingLimit` when your spending limit for the run was reached.
- Per search, `stopReason` is `maxResults` (there were more jobs), `complete` (Glassdoor had no more pages for it), `glassdoorLimit` (Glassdoor's 30-page limit per search: add keywords, a place or filters to split it), `glassdoorError` (Glassdoor kept answering a page with an error, so the search stopped early and failed) or `spendingLimit`.
- `glassdoorTotal` is the count Glassdoor reports; Glassdoor usually pages through less than that, and later pages repeat more and more jobs (`repeatedOnLaterPages`).
- `filteredOut` counts jobs Glassdoor sent that failed `minRating`, `easyApplyOnly`, `excludeCompanies` or `excludeJobIds` (not delivered, not charged).
- `deliveredBeforeRestart` counts jobs an earlier start of the same run delivered (after a migration or resurrection); they are counted in `results` and never sent or charged again.
- `detailsFailed` counts jobs delivered without full details because the job-details call failed for that job on every try; their `description` is the preview and the ✱ fields are empty. `details` gives the run's totals and `failedBy` the causes (`http_404`, `blocked`, …; `unpaid` when Glassdoor refused every datacenter IP and residential IPs for that job's details would have cost more than the job's price). When more than half of the details calls fail (and at least 5, or all of them in a smaller run, `unpaid` ones aside), the run stops and fails with that message.
- A search that fails after retries on other IPs has `status: "error"` and a `reason`, and the run fails after delivering the jobs already read.

### Pricing

Pay per job, no start fee and no minimum. Each job is charged once, even when several keywords find it and even when Apify restarts the run. Proxies (residential too, when needed) and full details are included.

| Your Apify plan | Per 1,000 jobs |
|---|---|
| Free | $0.20 |
| Starter | $0.18 |
| Scale | $0.16 |
| Business | $0.14 |

You're billed only for rows that reach your dataset. When your spending limit is reached, the run stops, and you never pay more than the limit.

### FAQ

**Do I need a Glassdoor account?** No. The Actor reads Glassdoor's public job search, logged out.

**Does it scrape reviews or salaries pages?** No, jobs only. Each job carries the company's overall rating, its 5 sub-ratings, CEO approval and recommend-to-a-friend share, and links to the company's Glassdoor page.

**What about business outlook and diversity ratings?** Glassdoor's job answers don't carry them. They sit on the company's Overview and Reviews pages, which Glassdoor shows only to a logged-in or browser-verified visitor, so this Actor, which never logs in, can't read them.

**Why do some salaries say "(Glassdoor estimate)"?** When the employer gives no pay, Glassdoor shows its own estimate for the role. We keep that label (and `isSalaryEstimate`) so you can tell the two apart.

**Why fewer jobs than Glassdoor's count?** Glassdoor's count is approximate, it stops paging a search after 30 pages, and its later pages repeat more and more jobs: a big search gives about 1,800 distinct jobs. For more, split the search by location, keywords or filters.

**How fresh are the jobs?** Glassdoor gives each job's age in days, so `postedAt` is a date. For a daily job feed, schedule a `past24Hours` run and put the `jobId`s you already have in `excludeJobIds`, or dedupe on `jobId`.

**How big can one run be?** The prefilled run read 75 jobs with full details in 6 to 10 seconds of run time. The default 1-hour timeout fits several thousand jobs with details; for more, raise the timeout in the run options or turn off Full details. Searches that finished before a timeout keep their jobs.

**Which locations work?** Anything Glassdoor's own "Location" box understands: a city, a state or a country. For remote jobs, turn on `remoteOnly` (typing "Remote" as the location does the same). Glassdoor country sites work through pasted search URLs.

### Feedback

Missing a field, or a search that doesn't come back the way you expect? Open an issue on the **Issues** tab and we'll look into it. If the data helped you, a short review on this page helps other people find it.

# Actor input Schema

## `keywords` (type: `array`):

Job title, skill or company as you'd type it in Glassdoor's search box, e.g. data analyst. Each keyword is its own search; a job several keywords find comes once. Empty = all jobs.

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

City, state or country as Glassdoor's location box understands it, e.g. New York, NY, Texas, London or Germany. Empty = the whole United States. Remote jobs: turn on Remote only.

## `postedWithin` (type: `string`):

Only jobs Glassdoor posted in this period.

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

Stop each search after this many jobs. Glassdoor shows 30 pages of 100 per search, about 1,800 distinct jobs on a big one. You pay per job, so this also caps the cost.

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

Only jobs Glassdoor lists as remote or work from home.

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

Only jobs Glassdoor lists with this job type.

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

Only jobs at this level, as Glassdoor classifies them.

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

Only jobs at companies of this size (employees).

## `industry` (type: `string`):

Only jobs at companies in this industry (Glassdoor's sectors). Empty = all industries.

## `jobFunction` (type: `string`):

Narrow a broad keyword to one kind of role, e.g. manager + Finance & Accounting. Empty = all functions.

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

Glassdoor's minimum pay filter, per year in the place's currency, e.g. 90000. Empty = no minimum.

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

Only jobs you can apply to on Glassdoor in a few clicks.

## `minRating` (type: `string`):

Only jobs at companies with at least this Glassdoor rating. Companies without a rating are left out too; each job is checked, so none slip through.

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

Leave out jobs whose company name contains one of these, e.g. Robert Half (staffing agencies). Not case-sensitive. Empty = keep all.

## `searchUrls` (type: `array`):

Built a search on glassdoor.com (or a country site)? Paste the results page address, e.g. https://www.glassdoor.com/Job/new-york-ny-nurse-jobs-SRCH_IL.0,11_IC1132348_KO12,17.htm?fromAge=7. Each URL is its own search.

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

Job IDs or Glassdoor job links you already have (the jobId column of an earlier run), so a scheduled run brings only new jobs. Skipped jobs are not charged.

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

Read each job's page: full description (text and HTML), apply link, company profile, sub-ratings and coordinates. Same price. Off: the description is the search-result preview and runs are faster.

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

Leave as is: Apify datacenter IPs first; when Glassdoor refuses them the Actor switches to residential IPs on its own (included in the price).

## Actor input object example

```json
{
  "keywords": [
    "data analyst"
  ],
  "location": "New York, NY",
  "postedWithin": "pastWeek",
  "maxResults": 100,
  "remoteOnly": false,
  "jobType": "any",
  "seniority": "any",
  "companySize": "any",
  "industry": "",
  "jobFunction": "",
  "easyApplyOnly": false,
  "minRating": "any",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "keywords": [
        "data analyst"
    ],
    "location": "New York, NY",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/glassdoor-jobs").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 = {
    "keywords": ["data analyst"],
    "location": "New York, NY",
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/glassdoor-jobs").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 '{
  "keywords": [
    "data analyst"
  ],
  "location": "New York, NY",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/glassdoor-jobs --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deepmine/glassdoor-jobs"
        }
    }
}
```

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/GI5utwNiVHpwFfSDv/builds/DTEhCvfyOfL0lHBtI/openapi.json
