# Glassdoor Jobs Scraper: Full Ads, Pay Ranges, Apply Links (`clearpath/glassdoor-jobs-scraper`) Actor

Glassdoor job listings with the complete job in every row: full description, apply link and pay range (low, median, high), plus the employer's rating, size and industry. Search any job title in any city, state or country, with 12 optional filters. Large searches go past 1,000 jobs. No login.

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

## Pricing

from $0.69 / 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

[![Richer Glassdoor job data: full descriptions, apply links, pay ranges and company profiles.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/glassdoor-jobs-scraper-readme-hero-v2-e7bfbb826e00.png)](https://console.apify.com/actors/Ou2hHh12qrnDkzuBJ/input)

From **Clearpath**, creators of the [Welcome to the Jungle](https://apify.com/clearpath/welcome-to-the-jungle-jobs-api) and [Wellfound](https://apify.com/clearpath/wellfound-api-ppe) job scrapers, with **40,000+ combined lifetime runs** across these two actors.

### Why choose this Glassdoor jobs scraper?

- **Full job ads, ready to use.** Collect the description as HTML and plain text, with the Glassdoor apply link. Full details are enabled by default, at no extra charge.
- **Pay and employer context together.** Low, median and high pay, currency, period and employer-stated or estimated source. Add company size, industry, revenue, CEO and ratings wherever Glassdoor supplies them. Join employer reviews using `employer_id`.
- **Detailed output, fast.** A recorded New York search returned **871 unique jobs in 65 seconds**, all with descriptions and apply links. **836 included all three pay values.** Results and runtime vary by search.

<a href="https://console.apify.com/actors/Ou2hHh12qrnDkzuBJ/input" data-demo-cta="true"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/glassdoor-jobs-scraper-readme-cta-v1-a71cc1ed0bd8.png" width="292" height="50" alt="Collect Glassdoor jobs"></a>

#### Try 20 software engineer jobs in New York

```json
{
  "keywords": [
    "software engineer"
  ],
  "location": "New York",
  "maxItems": 20,
  "includeDetails": true
}
```

[Open the actor input](https://console.apify.com/actors/Ou2hHh12qrnDkzuBJ/input), select JSON and paste this example. `includeDetails: true` requests full descriptions and company profiles. Pay and employer fields depend on what Glassdoor publishes. Export JSON for nested ratings, or CSV/Excel for a spreadsheet.

The hero uses a collected Atrium Staffing LLC job, with a shortened description. Its pay values are annual USD and employer-stated. The speed result used `software engineer`, `New York`, `postedWithinDays: "30"`, `maxItems: 1000` and full details; the 20-job trial does not reproduce that benchmark.

<table>
<tr>
<td colspan="2" style="padding:10px 14px;background:#003A9B;border:none">
<strong style="color:#FFFFFF;font-size:14px">Clearpath Job Boards</strong>
</td>
</tr>
<tr>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#D8E4FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-WefmR41HxSeENoZ7M-CYr5o45qXo-glassdoor-reviews-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://console.apify.com/actors/Ou2hHh12qrnDkzuBJ/input" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">Glassdoor Jobs</a>
<br>
<span style="color:#364C70;font-size:12px">You are here</span>
</td>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-Z1aLN1Uv3ycPUkfTd-DwRlvqITvt-linkedin-jobs-scraper-icon.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/linkedin-jobs-scraper" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">LinkedIn Jobs</a>
<br>
<span style="color:#364C70;font-size:12px">Jobs &amp; company profiles</span>
</td>
</tr>
<tr>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-6rcYeTIheXEqHWWBX-lafSkrHVf0-indeed-jobs-api-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/indeed-jobs-scraper" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">Indeed Jobs</a>
<br>
<span style="color:#364C70;font-size:12px">Jobs &amp; employer ratings</span>
</td>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-GiLUIZMS4N0QQ8W7O-iS7Xl8y42f-icon-512.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/google-jobs-scraper" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">Google Jobs</a>
<br>
<span style="color:#364C70;font-size:12px">Aggregated job listings</span>
</td>
</tr>
<tr>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-MdJIadsWKRaguareT-XPALnVdNgE-welcome-to-the-jungle-jobs-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/welcome-to-the-jungle-jobs-api" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">Welcome to the Jungle</a>
<br>
<span style="color:#364C70;font-size:12px">European job listings</span>
</td>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-sqkHGNG0toRTR3ORV-zgctRChWeu-wellfound-jobs-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/wellfound-api-ppe" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">Wellfound</a>
<br>
<span style="color:#364C70;font-size:12px">Startup job listings</span>
</td>
</tr>
<tr>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-cB8bzys6LuwcwX70q-fJBZqO5VQe-stepstone-deutschland-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/stepstone-de-job-scraper" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">StepStone</a>
<br>
<span style="color:#364C70;font-size:12px">Jobs in DE, AT, BE and NL</span>
</td>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-bc0M5EvO4rEZNuHqM-2cGUywMaMX-stepstone-deutschland-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/totaljobs-uk-job-scraper" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">Totaljobs</a>
<br>
<span style="color:#364C70;font-size:12px">UK jobs &amp; advertised pay</span>
</td>
</tr>
<tr>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-kam9EOjkCveB9j6ET-o4Yg9S4Dwg-workday-jobs-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/workday-jobs-scraper" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">Workday Jobs</a>
<br>
<span style="color:#364C70;font-size:12px">Company career sites</span>
</td>
<td style="padding:12px 10px;border:1px solid #AEC4E8;background:#EAF0FF;vertical-align:top;width:50%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-9QmCVplwYguH9FndJ-4C6nohUa6D-ycombinator-scraper-api-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp; <a href="https://apify.com/clearpath/ycombinator-api-scraper" style="color:#00123C;font-size:13px;font-weight:700;text-decoration:none">Y Combinator</a>
<br>
<span style="color:#364C70;font-size:12px">Startups &amp; founders</span>
</td>
</tr>
</table>

#### Copy to your AI assistant

```text
clearpath/glassdoor-jobs-scraper on Apify returns Glassdoor job listings, one row per unique job with 72 fields: title, the full description (description_html and description_text), apply_url, pay_p10/pay_p50/pay_p90 with pay_currency, pay_period and pay_source (EMPLOYER_PROVIDED or ESTIMATED), location with coordinates, and the employer's company profile and ratings with employer_id, which joins to zen-studio/glassdoor-reviews-scraper. keywords runs one search per entry (leave it empty and set location to collect every job in that place); location takes a city, state or country name (empty searches the United States); maxItems is per keyword (default 100, 0 = every job Glassdoor shows). The description, job types, remote status, address, coordinates and company profile need includeDetails=true (the default, no extra charge); with false only the search fields remain. Optional filters, all off by default: postedWithinDays (1, 3, 7, 14, 30), jobType, seniority, remoteOnly, easyApplyOnly, minSalary and maxSalary (yearly, local currency; jobs that show no pay are kept), minRating (1-4), companySize (1 = 1-200 employees, 2 = 201-500, 3 = 501-1,000, 4 = 1,001-5,000, 5 = 5,001+), radius (0 = the city itself; Glassdoor's default is 25 miles), sortBy=date (newest first), company (Glassdoor company URL or ID), sectorId (take sector_id from any result) and excludeJobIds (known job_id values are skipped and not charged). Glassdoor's listed total for a search is larger than what it shows; a run collects what it shows, past 1,000 jobs for large searches. Charging is per job row delivered ($0.00099, lower on higher plans) plus $0.00399 once per run; jobs left out by filters or excludeJobIds are never charged. No Glassdoor account or login is needed. Full specification: https://api.apify.com/v2/actors/clearpath~glassdoor-jobs-scraper/builds/default and current pricing at https://apify.com/clearpath/glassdoor-jobs-scraper. To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: feature requests, a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
```

### How to scrape Glassdoor jobs

1. Add one or more job titles or keywords, such as `software engineer` or `nurse`. Each one is its own search.
2. Add a location: a city (`London`), a state (`Texas`) or a country (`Germany`). Leave it empty to search the United States, or leave the keywords empty to collect every job in that place.
3. Set how many jobs you want per keyword. The default is 100; `0` collects every job Glassdoor shows for the search.
4. Run it. Jobs stream into the dataset as they arrive, so you can export before the run finishes.

#### Input options

| Parameter | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array | none | Job titles or keywords, one search each. Duplicates are ignored. |
| `location` | string | United States | City, state or country. The run log names the place it matched. |
| `maxItems` | integer | `100` | Jobs per keyword. `0` collects every job Glassdoor shows. |
| `includeDetails` | boolean | `true` | Full description, job type, remote status, address and coordinates, and the company profile. No extra charge. |
| `postedWithinDays` | string | any | `1`, `3`, `7`, `14` or `30`. |
| `jobType` | string | any | `fulltime`, `parttime`, `contract`, `internship`, `temporary`, `apprenticeship`. |
| `seniority` | string | any | `internship`, `entrylevel`, `midseniorlevel`, `director`, `executive`. |
| `remoteOnly` | boolean | `false` | Only jobs that can be done from home. |
| `easyApplyOnly` | boolean | `false` | Only jobs you can apply to directly on Glassdoor. |
| `minSalary` / `maxSalary` | integer | none | Yearly pay bounds in the local currency. Jobs that show no pay are kept. |
| `minRating` | string | any | Company rating of at least `1` to `4` stars. |
| `companySize` | string | any | `1` (1 to 200 employees), `2` (201 to 500), `3` (501 to 1,000), `4` (1,001 to 5,000), `5` (5,001 or more). |
| `radius` | string | 25 miles | `0` for the exact location, or `5`, `10`, `15`, `25`, `50`, `100` miles. |
| `sortBy` | string | `relevance` | `date` puts the newest jobs first. |
| `company` | string | none | Only one company: a Glassdoor company URL or numeric company ID. |
| `sectorId` | integer | none | Only one sector, by the `sector_id` shown on any result, for example `10013` for Information Technology. |
| `excludeJobIds` | array | none | Job IDs you already have. They are skipped and not charged. |

Every filter is off by default, so nothing narrows your results unless you ask for it. When a job's own data contradicts a filter you set, for example a job that is not Easy Apply in an Easy Apply search, it is left out and not charged.

#### Useful recipes

**Several roles in one city**

```json
{
  "keywords": ["software engineer", "data engineer", "product manager"],
  "location": "London",
  "maxItems": 200
}
```

Each keyword collects up to 200 jobs. A job that matches two keywords appears once.

**Every new job, every day**

```json
{
  "keywords": ["nurse"],
  "location": "Texas",
  "postedWithinDays": "1",
  "sortBy": "date",
  "maxItems": 0
}
```

Schedule this daily. To skip jobs you already have, pass their `job_id` values in `excludeJobIds`; they are neither collected nor charged again.

**Remote part-time roles**

```json
{
  "keywords": ["customer service"],
  "remoteOnly": true,
  "jobType": "parttime",
  "maxItems": 100
}
```

**Well-paid jobs at small companies**

```json
{
  "keywords": ["software engineer"],
  "location": "New York",
  "minSalary": 150000,
  "companySize": "1",
  "maxItems": 100
}
```

**Every opening at one company in one city**

```json
{
  "location": "Berlin",
  "company": "https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm",
  "maxItems": 0
}
```

**The city itself, not the commuter belt**

```json
{
  "keywords": ["accountant"],
  "location": "Chicago",
  "radius": "0",
  "maxItems": 100
}
```

Glassdoor's default distance is 25 miles. At `0` you get jobs filed in the city, plus remote roles open to the whole state.

### What data you get from Glassdoor

Each row is one job listing, with 72 fields always present:

- **The job:** title, normalized title, occupation, job types, remote options, posting age and date, Easy Apply, sponsored and expired flags.
- **The full ad:** the description as HTML and as plain text, screening questions and employer media when the listing has them.
- **Pay:** the low (10th percentile), median and high (90th percentile) of the pay range, with currency, period and whether the employer stated it or Glassdoor estimated it.
- **Where:** location name and type, street address and postal code when published, city, state, country and coordinates.
- **Links:** the Glassdoor job page, the apply link and the search page that shows the job.
- **The employer:** Glassdoor company ID, name, logo, rating, size, revenue, type, founding year, headquarters, website, CEO, industry and sector, the full company ratings breakdown and current Glassdoor awards, with links to the company's reviews, salaries, benefits and photos.

This is a real row from a run with this input:

```json
{
  "keywords": [
    "software engineer",
    "nurse"
  ],
  "location": "New York",
  "maxItems": 200,
  "easyApplyOnly": true,
  "minSalary": 120000,
  "companySize": "1"
}
```

```json
{
  "record_type": "job",
  "job_id": 1010208487030,
  "title": "Python Developer with Risk Modelling",
  "normalized_title": "software developer",
  "occupation": "software developer",
  "occupation_codes": [
    "5NN53",
    "EG6MP",
    "EHPW9",
    "HJSX6"
  ],
  "occupation_group_id": 1007,
  "occupation_category_id": 10132,
  "job_url": "https://www.glassdoor.com/job-listing/j?jl=1010208487030",
  "apply_url": "https://www.glassdoor.com/partner/jobListing.htm?pos=101&ao=1110586&tgt=APPLY_START&s=344&guid=000001a11162b28287b4d01e9f3d52ef&src=GD_JOB_VIEW&t=NS&vt=w&ea=1&cs=1_9fc8e9f6&cb=1791293043514&jobListingId=1010208487030&jrtk=5-yul1-3-1k48m5cl72k04m00---6NYlbfkN0CMMQh_vh03lgJPJxo1psrfTeMB0ngTh1sO5jtgNxiUf1ffF7uKkEtUZhJYcHABFA6SSxjHdH-5fdMS0UvqQIXkdE0amt70PPx5JHCTuL9Xv6gE28EG3XunNY3dUK7HkuDHWyN__UdL2X0L5hgSAb7whWWF4SNEJZMC1SEuE0uYbyoJW28neQaONGvTXXo9sKOr9jFGDefAb0210VN2bUxzRMD_hrh9aIgvHDE5vyDzmDB7XMZjyvp9Emgr0TFW2KCFC6iRDfVVfL7EWy4DxCQmRmD-Po-D80pBCYL-uw406Om-KuvUFrfqJDOUTsoDPPk_kc2U1un3-FpcbZsZlsjch8Emxd3IOyiw0oGnwcLxLAg5RdVhJkb0YSQ6fSC6CrivF_CkouU9MfSzAtMyyNb0j5GW4ZY1EJhSe-YLNqXumEgCFGSlAd_vppmis1OjUdLZjnVeKwK0dvt57wsazfZEy838PCdSMZfXm4EgV9OC-G7sHejjEGJR51UozvwbQkAoezd25dmpEZDEvCJUT63s-Pm65iYYqOvAX4BddF0zC7rGG4z3Gb4bAlSfAO4lAZ1rexXpaycyFw%3D%3D",
  "search_page_url": "https://www.glassdoor.com/Job/new-york-ny-software-developer-jobs-SRCH_IL.0,11_IC1132348_KO12,30.htm?jl=1010208487030&srs=JV_APPLYPANE",
  "easy_apply": true,
  "is_sponsored": false,
  "is_expired": false,
  "age_in_days": 74,
  "posted_date": "2026-09-23",
  "posted_label": "Jul 23, 2026",
  "job_types": [
    "contract"
  ],
  "remote_work_types": [],
  "location_name": "New York, NY",
  "location_id": 1132348,
  "location_type": "CITY",
  "country_id": 1,
  "address": null,
  "city": "New York, NY",
  "state": "New York State",
  "country": "United States",
  "postal_code": null,
  "latitude": 40.71417,
  "longitude": -74.00639,
  "pay_p10": 104430.0,
  "pay_p50": 132852.0,
  "pay_p90": 169008.0,
  "pay_currency": "USD",
  "pay_period": "ANNUAL",
  "pay_source": "ESTIMATED",
  "description_html": "<div><p><b>Job Description:</b></p>\n<p>1. Collaborate with different line of businesses to convert Excel-based business logic and calculations to into python programs/tools to support Ul dashboard creation that presents scenario results and visualizations of metrics to senior management.</p>\n<p>2. Strong working knowledge of CCAR stress testing or scenario-driven stress testing, balance sheet line item modeling and projections, Liquidity stress testing and Interest Rate Risk (IRR) analytics, sensitivity analysis, curve construction and treasury analytics.</p>\n<p>3. Collaborate on the development of REST APis that interface with scenario engines, model layers and user applications.</p></div>",
  "description_text": "Job Description:\n\n1. Collaborate with different line of businesses to convert Excel-based business logic and calculations to into python programs/tools to support Ul dashboard creation that presents scenario results and visualizations of metrics to senior management.\n\n2. Strong working knowledge of CCAR stress testing or scenario-driven stress testing, balance sheet line item modeling and projections, Liquidity stress testing and Interest Rate Risk (IRR) analytics, sensitivity analysis, curve construction and treasury analytics.\n\n3. Collaborate on the development of REST APis that interface with scenario engines, model layers and user applications.",
  "employer_id": 252151,
  "employer_name": "Delan Associates Inc",
  "employer_short_name": "Delan Associates Inc",
  "employer_name_on_listing": "Delan Associates, Inc",
  "division_name": null,
  "employer_logo_url": "https://media.glassdoor.com/sql/252151/delan-associates-inc-squarelogo-1428399422815.png",
  "employer_rating": 4.2,
  "employer_awards": {
    "best_places_to_work": [],
    "best_led_companies": [],
    "best_ceos": []
  },
  "company_size": "51 to 200 Employees",
  "company_revenue": "$5 to $25 million (USD)",
  "company_type": "Company - Private",
  "company_founded": null,
  "company_headquarters": "Freeport, NY",
  "company_website": "www.delanassociates.com",
  "company_ceo": "Mike Chung",
  "company_ceo_photo_url": null,
  "industry": "Accounting & Tax",
  "industry_id": 200001,
  "sector": "Financial Services",
  "sector_id": 10010,
  "company_ratings": {
    "overall": 4.2,
    "ceo_approval": 1.0,
    "ceo_ratings_count": 4,
    "recommend_to_friend": 1.0,
    "career_opportunities": 3.0,
    "compensation_and_benefits": 3.6,
    "culture_and_values": 4.8,
    "senior_management": 4.5,
    "work_life_balance": 4.5
  },
  "company_overview_url": "https://www.glassdoor.com/Overview/Working-at-Delan-Associates-Inc-EI_IE252151.11,31.htm",
  "company_reviews_url": "https://www.glassdoor.com/Reviews/Delan-Associates-Inc-Reviews-E252151.htm",
  "company_salaries_url": "https://www.glassdoor.com/Salary/Delan-Associates-Inc-Salaries-E252151.htm",
  "company_benefits_url": "https://www.glassdoor.com/Benefits/Delan-Associates-Inc-Benefits-E252151.htm",
  "company_photos_url": "https://www.glassdoor.com/Photos/Delan-Associates-Inc-Office-Photos-E252151.htm",
  "employer_content": null,
  "urgency_signal": null,
  "screening_questions": [],
  "indeed_apply": null,
  "source_job_id": "d7899f1d8a550767",
  "search_keyword": "software engineer",
  "search_location": "New York, NY",
  "scraped_at": "2026-10-06T13:24:05+00:00"
}
```

This job's pay is Glassdoor's estimate (`pay_source` is `ESTIMATED`); employer-stated pay shows `EMPLOYER_PROVIDED`. Its company has no current awards, so the three award lists are empty; awarded employers carry each award's name, rank and period.

#### When fields are empty

- **Pay:** about nine in ten US and UK jobs show a pay range. German listings rarely do, so most Berlin rows have no pay. A job without pay has all six pay fields empty, never zeros.
- **Details off:** with `includeDetails` set to `false`, the description, job type, remote status, address, coordinates and company profile fields are empty, and the search fields (title, employer, location, pay, rating, apply link) remain.

#### Exports

JSON keeps the nested company ratings and award lists intact. Two CSV downloads are offered on every run: **Jobs** holds the main columns (title, employer, location, pay, age, job type, apply link) and **Pay** holds the pay range per job with employer size, industry and sector, for salary analysis in a spreadsheet. Excel, XML and RSS are available too. Jobs are pushed as they arrive, so a long run can be exported while it is still going.

`employer_id` matches the company ID in the [Glassdoor Reviews Scraper](https://apify.com/zen-studio/glassdoor-reviews-scraper), so you can join every job to its employer's reviews.

### Pricing

You pay per job delivered: **$0.99 per 1,000 jobs** on the Free plan. Bronze pays $0.89, Silver $0.79, Gold and above $0.69. The full details cost nothing extra. Jobs your filters leave out, and jobs listed in `excludeJobIds`, are never charged.

| What you collect | Job charges (Free plan) |
|---|---|
| 100 jobs | $0.10 |
| 1,000 jobs | $0.99 |
| 10,000 jobs | $9.90 |

Free Apify accounts get a trial: up to 100 jobs per run, for a small number of runs. Paid plans have no cap. Current rates for your plan are on the [pricing tab](https://apify.com/clearpath/glassdoor-jobs-scraper/pricing).

### FAQ

**Do I need a Glassdoor account?** No. No login, no cookies, nothing to configure.

**Why did my run collect fewer jobs than Glassdoor says it has?** Glassdoor's listed total for a search counts more jobs than it actually shows in results; the run log prints that total next to what was collected. The run collects what Glassdoor shows, and for large searches it reaches well past a single results list: a broad `software engineer` search in the United States delivered 1,500 of 1,500 requested unique jobs in one run. If you need more, split the search: add a filter, a narrower location or a second keyword.

**Are sponsored jobs included?** Yes, flagged with `is_sponsored`, which is Glassdoor's own marking. Glassdoor places sponsored jobs first, so a small run is often sponsored throughout. Over a whole search the share varies: about one job in ten in a New York `software engineer` run over the last 30 days, all 1,500 jobs of a broad search with no location, and none in London. To keep only unsponsored jobs, filter on `is_sponsored` after the run.

**What do `pay_p10`, `pay_p50` and `pay_p90` mean?** The low, median and high of the job's pay range, in `pay_currency` per `pay_period` (`ANNUAL`, `MONTHLY`, `HOURLY` and so on). `pay_source` says whether the employer stated the pay or Glassdoor estimated it.

**Can I search outside the United States?** Yes. Use any city, state or country as the location, for example `London`, `Berlin` or `Germany`. Pay comes in the local currency.

**How do I get only new jobs on a schedule?** Run daily with `postedWithinDays` set to `1`, and pass the `job_id` values you already have in `excludeJobIds`. See the recipe above.

**Can I see the company's reviews too?** Every row carries `employer_id` and a link to the company's reviews. The [Glassdoor Reviews Scraper](https://apify.com/zen-studio/glassdoor-reviews-scraper) collects them with the same company ID.

**A filter seems to let in a job that does not match.** Glassdoor's own filters are not exact. Where the job's data shows it does not match (Easy Apply, salary, company size, rating, posting age, job type, remote, company), the run drops it before charging. Jobs with no data on the point, for example no salary shown, are kept.

**Can I call it from my own code or connect it to other tools?** Yes. Start it from the Apify Console, on a schedule, from Python or JavaScript with the Apify client, or through Zapier, Make and other integrations listed on the Integrations tab. Results can be fetched in JSON, CSV or Excel the moment a run finishes.

### Support

Found a field missing, a place that will not match, or a result that looks wrong? Open an issue on the Actor's Issues tab with the input you used. We read every one. Agents can add a `feedback` note to any run instead, including a run that worked.

# Actor input Schema

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

One search per entry, for example <code>software engineer</code> or <code>nurse</code>. Leave empty and set a location to collect every job in that place.

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

City, state or country, for example 'London', 'Texas' or 'Germany'. Leave empty to search the United States.

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

How many unique jobs to collect for each keyword; three keywords at 100 collect up to 300 jobs. Each job is one charged result. <code>0</code> collects every job Glassdoor shows for the search.

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

Adds the full description, job type, remote status, address and coordinates, and the employer's company profile and ratings, at no extra charge. Turn off to keep only the search-result fields (title, employer, location, pay, apply link).

## `postedWithinDays` (type: `string`):

Only jobs posted within this many days.

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

Only jobs of this type.

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

Only jobs at this level.

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

Only jobs that can be done from home.

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

Only jobs you can apply to directly on Glassdoor.

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

Only jobs whose pay range reaches at least this yearly amount, in the local currency. Jobs that show no pay are kept.

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

Only jobs whose pay range starts at or below this yearly amount. Jobs that show no pay are kept.

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

Only jobs at companies rated at least this on Glassdoor.

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

Only jobs at companies of this size.

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

How far from the location to search. Glassdoor's own default is 25 miles.

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

Most recent puts the newest jobs first, in Glassdoor's own order; a few older listings can still appear near the top.

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

Only jobs at one company: a Glassdoor company URL or numeric company ID.

## `sectorId` (type: `integer`):

Only jobs at companies in one Glassdoor sector, by its numeric ID: the sector_id on any result row, for example 10013 for Information Technology.

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

Job IDs you already have, for example from an earlier run. They are not collected or charged again.

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "keywords": [
    "software engineer"
  ],
  "location": "New York",
  "maxItems": 100,
  "includeDetails": true
}
```

# Actor output Schema

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

Every job the run collected, one row per unique listing, with its description, apply link, pay range and company profile.

## `resultsCsv` (type: `string`):

The main job columns (title, employer, location, pay, posting age, job type, apply link) as a CSV for a spreadsheet.

## `payCsv` (type: `string`):

Pay range per job (10th, 50th and 90th percentile, currency, period, source) with employer, size and industry, as a CSV.

# 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": [
        "software engineer"
    ],
    "location": "New York"
};

// Run the Actor and wait for it to finish
const run = await client.actor("clearpath/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 = {
    "keywords": ["software engineer"],
    "location": "New York",
}

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

```

## MCP server setup

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