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

Scrape Glassdoor jobs by keyword, location, company or search URL in any country. Full description, salary range, skills, apply link, company size, revenue and 9 ratings. Goes past Glassdoor's ~1,000-job limit, no duplicates, only-new-jobs mode.

- **URL**: https://apify.com/epicscrapers/glassdoor-jobs-scraper.md
- **Developed by:** [Epic Scrapers](https://apify.com/epicscrapers) (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.30 / 1,000 job saveds

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 Scraper: job listings, salaries and company data

![Every Glassdoor job as clean data: search by keyword, location, company or URL and get descriptions, salaries, skills and full company profiles, in any country, with no duplicates and past Glassdoor's search limit](https://api.apify.com/v2/key-value-stores/LdifDW885d0wmgu14/records/hero.png)

<p align="center">
  <b>Full descriptions · Salary ranges · Skills · Company size, revenue &amp; 9 ratings · Any country</b><br>
  <sub>No Glassdoor account · No duplicates · Past Glassdoor's ~1,000-job limit · Only-new-jobs mode for schedules</sub>
</p>

Glassdoor Jobs Scraper turns Glassdoor job search into a clean dataset. Search by keyword, location, company or a Glassdoor URL you already have, in any country Glassdoor covers. Every job comes with its full description, the salary range with currency and pay period, skills, posting date, coordinates, the apply link, and the employer's full profile: size, revenue, industry, headquarters, website, CEO, and all nine Glassdoor ratings.

<table>
  <tr>
    <td width="33%" valign="top">
      <b>📈 More jobs per search</b><br>
      Glassdoor stops serving a search after about 1,000 jobs. When it does, the Actor splits the search by city, company size, job function, seniority, job type and date, and keeps going.<br>
      <sub>"Software engineer", New York: 2,592 jobs vs ~900 from one search</sub>
    </td>
    <td width="33%" valign="top">
      <b>🧾 ~60 fields per job</b><br>
      Description as HTML and text, salary min/median/max, skills, education, lat/long, company profile, CEO, 9 ratings, review and open-job counts, awards.<br>
      <sub>Everything included in one price</sub>
    </td>
    <td width="33%" valign="top">
      <b>🚫 No duplicates, ever</b><br>
      Glassdoor serves pages from two backends and repeats jobs across pages. The Actor checks every page, so each job is saved and charged once per run, even across keywords.<br>
      <sub>Only new jobs: skip what earlier runs saved</sub>
    </td>
  </tr>
</table>

- **Several searches in one run.** Lists of keywords, locations and companies; every combination is its own search.
- **Search by URL.** Paste Glassdoor job search pages (their keyword, location and filters are used), company job pages or single job listings, from any Glassdoor domain.
- **Refresh known jobs.** Paste job ids (the `jobId` of earlier results) or job links to fetch those jobs again with full details, without searching.
- **Fast and light.** Glassdoor's mobile API, no browser. 1,000 jobs with full details took 95 seconds in a test run.

### Who it's for

| You are…                          | Use it to…                                                                                                                   |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Job board or aggregator           | Fill your board daily with fresh Glassdoor jobs, full descriptions and salaries. Turn on **Only new jobs** and schedule it.  |
| Recruiter or staffing agency      | Find companies hiring for the roles you place, with their size, website and open-job count, and see who posts with salaries. |
| Sales and lead generation         | Build lists of companies hiring now in a city or industry: a hiring signal with company size, revenue, industry and website. |
| Labor-market or salary researcher | Collect pay ranges, skills and demand by role, city and company, in local currencies for any country.                        |
| Developer or AI agent             | Call it from the API or MCP and get a flat, documented JSON schema.                                                          |

### Quick start

1. Click <kbd>Try for free</kbd> and sign in to Apify.
2. Add **Keywords** ("Software Engineer") and **Locations** ("New York", "London", "Germany"), or **Companies** ("Google"), or paste **Glassdoor URLs or job ids**.
3. Set **Max jobs per search** to `100` for a first run and click <kbd>Start</kbd>.
4. Export from the **Output** tab as JSON, CSV or Excel, or read it from the API.

```json
{
    "keywords": ["Software Engineer"],
    "locations": ["New York"],
    "postedWithin": "7",
    "maxResults": 100
}
```

### Real output

From the Quick start search on 2026-10-21 ("Software Engineer" in New York, first jobs with a salary; a few columns):

| jobTitle                                         | companyName     | location         | salaryMin | salaryMax | salaryPeriod | companyRating | companySize            |
| ------------------------------------------------ | --------------- | ---------------- | --------: | --------: | ------------ | ------------: | ---------------------- |
| Software Developer - AI Trainer                  | DataAnnotation  | New York State   |        40 |       150 | HOURLY       |             4 | 1001 to 5000 Employees |
| Fullstack Engineer - Fortify                     | Pear (CA)       | New York, NY     |   120,000 |   155,000 | ANNUAL       |           4.8 | 1 to 50 Employees      |
| Mobile Software Engineer                         | Benjamin Moore  | Montvale, NJ     |   115,700 |   162,000 | ANNUAL       |             4 | 1001 to 5000 Employees |
| Senior Full Stack Engineer                       | Wissen Infotech | New York, NY     |   112,132 |   169,774 | ANNUAL       |           3.8 | 1001 to 5000 Employees |
| Reference Data Software Engineer                 | BIP.Monticello  | New York, NY     |   120,000 |   160,000 | ANNUAL       |           4.3 | 51 to 200 Employees    |
| Sr. Generative AI (GenAI) Software Engineer - hy | Calance         | New York, NY     |   160,000 |   180,000 | ANNUAL       |           3.6 | 201 to 500 Employees   |
| Software Developer - AI Trainer                  | DataAnnotation  | Mount Vernon, NY |        50 |       100 | HOURLY       |             4 | 1001 to 5000 Employees |
| Senior Forward Deployed Engineer - Vice Presiden | Citi            | New York, NY     |   142,320 |   213,480 | ANNUAL       |           3.6 | 10000+ Employees       |

One job with all fields (description shortened):

```json
{
    "jobId": "1010300331729",
    "jobTitle": "Senior Forward Deployed Engineer - Vice President",
    "normalizedJobTitle": "senior vice president programmer analyst",
    "companyName": "Citi",
    "companyNameInListing": "Citi",
    "companyId": 8843,
    "companyRating": 3.6,
    "companyLogoUrl": "https://media.glassdoor.com/sql/8843/citi-squareLogo-1686753614162.png",
    "location": "New York, NY",
    "city": "New York, NY",
    "state": "New York State",
    "country": "United States",
    "postalCode": null,
    "latitude": 40.71417,
    "longitude": -74.00639,
    "isRemote": false,
    "postedDate": "2026-10-19",
    "ageInDays": 1,
    "jobTypes": ["Full-time"],
    "easyApply": false,
    "isSponsored": true,
    "isExpired": false,
    "salaryMin": 142320,
    "salaryMedian": 177900,
    "salaryMax": 213480,
    "salaryCurrency": "USD",
    "salaryPeriod": "ANNUAL",
    "salarySource": "EMPLOYER_PROVIDED",
    "descriptionSnippet": "Appropriately assess risk when business decisions are made, demonstrating particular consideration for the firm's reputation and safeguarding Citigroup, its…",
    "description": "<div><h2 class=\"jobSectionHeader\"><b>Discover your future at Citi</b></h2>\n\n<p>Working at Citi is far more than just a job. A career with us means joining a tea…",
    "descriptionText": "Discover your future at Citi\n\nWorking at Citi is far more than just a job. A career with us means joining a team of approximately 219,000 dedicated people from …",
    "skills": [
        "Jira",
        "Enterprise software",
        "Git",
        "Docker",
        "REST",
        "ServiceNow",
        "Linux",
        "JSON",
        "Kafka",
        "gRPC",
        "Python"
    ],
    "education": ["Master's degree", "Bachelor's degree"],
    "url": "https://www.glassdoor.com/job-listing/senior-forward-deployed-engineer-vice-president-citi-JV_IC1132348_KO0,47_KE48,52.htm?jl=1010300331729",
    "applyUrl": "https://www.glassdoor.com/partner/jobListing.htm?pos=101&ao=1110586&s=344&guid=000001a15f1df1a2892971e6fb1bbf4a&src=GD_JOB_VIEW&t=NS&vt=w&cs=1_52a42338&cb=1792597160538&jobListingId=1010300331729&cpc=A65DF3A704A48F9B&jrtk=5-yul1-3-1k5fhrsej2i3fh00---6NYlbfkN0B7UYL49yWBrrOlEWIsfJu1HwdoffaEv3MPqVgUrdyA2tLe3-qLeVYbGWkeBscfLwWNTcMtV47ePR07bcYI3mebbt_q5m0e_XnbzT_POksvqhEe56HWtSpMLXXFyVz7mLeYRUNEwWtOs-ULk8sN0kONk3B5DXs3bCBpV2IkkfK9LwyAQjQxLHe1ETbPI_GFM3PQUplWGvz_z1EmlniaEfIz7VKZzTarXjZgRMU2I6EYbrxIiU5-mQFNmwjZcVaCKTythETmF6qnHAlLtKTjUkvH8FBKECTrcEweeLmTEmP7oVVHud8eDSj0HVAxQs3IB3PiuBKkqaKEWS6B8BJRJfkJXtI9U0-ZB9ru0wWkQgvqf0SRGKZEqUaYoivW5oW8W3sfZOMDZRGVN6kPaCLs97aUAVQJpW99F4Ni8_dZY6aW9mdYJ8nY4vF5V7KkyVjx0tdpFtGPjsv52_rm6miCJumS-_B9lYTjV5Ue0lg0Sv2HdCVH0_ljlRiR0jnCYnezOopc_FAfgJf7EOnbaf6aDX7fOqA7U651vFnfEjoLH_WQDza3_kRYbNV8ibC5dGk1_GQyFhMQbwehHyTQT9p_0OmfEvCnxVxMRI97Lr6Deo2lVebuninRyjr1",
    "industry": "Investment & Asset Management",
    "sector": "Financial Services",
    "companySize": "10000+ Employees",
    "companyRevenue": "$10+ billion (USD)",
    "companyType": "Company - Public",
    "companyFounded": 1812,
    "companyHeadquarters": "New York, NY",
    "companyWebsite": "www.citigroup.com",
    "companyDescription": "Working at Citi is far more than just a job. A career with us means joining a team of more than 225,000 dedicated people from around the globe. At Citi, you’ll …",
    "companyMission": "Citi’s mission is to serve as a trusted partner to our clients by responsibly providing financial services that enable growth and economic progress. Our core ac…",
    "ceoName": "Jane Fraser",
    "ceoPhotoUrl": "https://media.glassdoor.com/people/sql/8843/citi-ceo1614669101894.png",
    "ceoApproval": 0.65,
    "ceoRatingsCount": 4116,
    "recommendToFriend": 0.64,
    "ratingCareerOpportunities": 3.4,
    "ratingCompensationAndBenefits": 3.6,
    "ratingCultureAndValues": 3.4,
    "ratingSeniorManagement": 3,
    "ratingWorkLifeBalance": 3.4,
    "companyReviewCount": 42405,
    "companySalaryCount": 74436,
    "companyOpenJobs": 3216,
    "companyAwards": [],
    "companyGlassdoorUrl": "https://www.glassdoor.com/Overview/Working-at-Citi-EI_IE8843.11,15.htm",
    "companyReviewsUrl": "https://www.glassdoor.com/Reviews/Citi-Reviews-E8843.htm",
    "companySalariesUrl": "https://www.glassdoor.com/Salary/Citi-Salaries-E8843.htm",
    "companyJobsUrl": "https://www.glassdoor.com/Jobs/Citi-Jobs-E8843.htm",
    "searchKeyword": "software engineer",
    "searchLocation": "New York, NY",
    "searchCompany": null,
    "scrapedAt": "2026-10-21T15:39:12.632Z"
}
```

### Input

#### What to search

| Field            | What it does                                                                                                                                                                                                 |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `keywords`       | Job titles, skills or words. Each keyword is a separate search. Empty = all jobs of the companies or locations.                                                                                              |
| `locations`      | Cities, metros, states or countries in any country ("Austin", "California", "London", "Germany", "Bengaluru"). Add the country if a name is ambiguous ("Paris, France"). Empty = United States.              |
| `companies`      | Company names, Glassdoor company URLs or employer ids. Only jobs posted by these companies; with no keyword, all of their open jobs in the locations (Glassdoor searches one country at a time; empty = US). |
| `startUrls`      | Glassdoor URLs: job search pages, company job pages (`/Jobs/Google-Jobs-E9079.htm`), job listings (`?jl=…`) or bare job ids (`1010273184996`).                                                               |
| `maxResults`     | Jobs per search (each keyword × location × company). `0` = as many as the Actor can find, up to 10,000 per search.                                                                                           |
| `includeDetails` | On by default: full description, skills, education, company description, mission and awards. Off is about twice as fast; the price is the same.                                                              |

#### Filters

| Field                    | Values                                                                                         |
| ------------------------ | ---------------------------------------------------------------------------------------------- |
| `postedWithin`           | `1`, `3`, `7`, `14` or `30` days                                                               |
| `jobTypes`               | `fulltime`, `parttime`, `contract`, `internship`, `temporary` (several allowed)                |
| `seniority`              | `entrylevel`, `midseniorlevel`, `director`, `executive` (several allowed)                      |
| `remoteOnly`             | Remote jobs only. Glassdoor lists remote jobs by country, so use a country or no location.     |
| `easyApplyOnly`          | Jobs you can apply to on Glassdoor                                                             |
| `minRating`              | Minimum company rating, e.g. `3.5`                                                             |
| `minSalary`, `maxSalary` | Yearly pay in the local currency                                                               |
| `radius`                 | Miles around a city: `0` (city only), `5`, `10`, `15`, `25` (Glassdoor's default), `50`, `100` |
| `companySizes`           | `1` (1–200 employees), `2` (201–500), `3` (501–1,000), `4` (1,001–5,000), `5` (5,001+)         |

#### Monitoring

`onlyNewJobs`: for scheduled runs. The Actor remembers the jobs each search saved (in a key-value store named `glassdoor-jobs-scraper-seen` in your account) and skips them next time, so every run returns and charges only new jobs.

#### How searches combine

<table>
  <tr><th>You enter</th><th>You get</th></tr>
  <tr><td>Keywords + locations</td><td>Each keyword in each location</td></tr>
  <tr><td>Companies only</td><td>All open jobs of each company</td></tr>
  <tr><td>Companies + keywords</td><td>Each keyword at each company</td></tr>
  <tr><td>A location only</td><td>All jobs in that place</td></tr>
  <tr><td>A Glassdoor search URL</td><td>That search, with its filters</td></tr>
</table>

### Output fields

| Group            | Fields                                                                                                                                                                                                                                                                          |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Job              | `jobId`, `jobTitle`, `normalizedJobTitle`, `jobTypes`, `postedDate`, `ageInDays`, `easyApply`, `isSponsored`, `isExpired`, `url`, `applyUrl`                                                                                                                                    |
| Location         | `location`, `city`, `state`, `country`, `postalCode`, `latitude`, `longitude`, `isRemote`                                                                                                                                                                                       |
| Salary           | `salaryMin`, `salaryMedian`, `salaryMax`, `salaryCurrency`, `salaryPeriod` (ANNUAL, MONTHLY, HOURLY), `salarySource` (EMPLOYER_PROVIDED or ESTIMATED)                                                                                                                           |
| Description      | `descriptionSnippet`, `description` (HTML), `descriptionText`, `skills`, `education`                                                                                                                                                                                            |
| Company          | `companyName`, `companyNameInListing`, `companyId`, `companyLogoUrl`, `companyRating`, `companySize`, `companyRevenue`, `companyType`, `companyFounded`, `companyHeadquarters`, `companyWebsite`, `industry`, `sector`, `companyDescription`, `companyMission`, `companyAwards` |
| Ratings          | `ratingCareerOpportunities`, `ratingCompensationAndBenefits`, `ratingCultureAndValues`, `ratingSeniorManagement`, `ratingWorkLifeBalance`, `recommendToFriend`, `ceoName`, `ceoPhotoUrl`, `ceoApproval`, `ceoRatingsCount`                                                      |
| Company activity | `companyReviewCount`, `companySalaryCount`, `companyOpenJobs`, `companyGlassdoorUrl`, `companyReviewsUrl`, `companySalariesUrl`, `companyJobsUrl`                                                                                                                               |
| Run              | `searchKeyword`, `searchLocation`, `searchCompany`, `scrapedAt`                                                                                                                                                                                                                 |

`recommendToFriend` and `ceoApproval` are shares from 0 to 1 (0.63 = 63%). Fields Glassdoor doesn't have for a job are `null`.

### Pricing

You pay per job saved, with no subscription. Full details, company data, platform usage and proxy are included.

<table>
  <tr><th>Apify plan</th><th>Free</th><th>Bronze</th><th>Silver</th><th>Gold</th></tr>
  <tr><td>Per 1,000 jobs</td><td>$0.35</td><td>$0.31</td><td>$0.28</td><td>$0.24</td></tr>
</table>

Duplicates and jobs skipped by **Only new jobs** are never charged. A run with a spending limit fetches only as many jobs as the limit pays for, then stops.

### Tips and limits

- **Glassdoor's search limit:** one Glassdoor search serves about 800–1,100 jobs, even when it reports more, and its totals count jobs it never shows. The Actor gets past this by splitting the search; for very broad searches (a keyword across a whole country), add locations or filters to cover more.
- **Ambiguous places:** "London" means London, England; write "London, Ontario" for Canada. US states work as names or abbreviations ("Texas", "TX"). The run log shows what each location matched.
- **Apply links** go through Glassdoor and forward to the employer's site or Glassdoor's Easy Apply.
- **Bad input never fails a run:** an unknown location, company or URL is skipped with a warning in the log, and the run finishes with the rest. The `SUMMARY` record in the key-value store has the counts.

### Monitor jobs with scheduled runs

1. Set your input, turn on **Only new jobs**, and click **Save as a new task**.
2. In Apify Console, go to **Schedules**, click **Create new**, pick how often (daily at 7:00 is cron `0 7 * * *`) and add your task. See [Schedules](https://docs.apify.com/platform/schedules).

https://www.youtube.com/watch?v=GRFW_Loo2dk

3. Send each run's new jobs to Google Sheets, Slack or your database from the task's **Integrations** tab, or with a webhook.

https://www.youtube.com/watch?v=IFTeKdj6ZGM

### Use the API

Run the Actor and get the jobs in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/epicscrapers~glassdoor-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["Data Analyst"], "locations": ["Chicago"], "maxResults": 50}'
```

Or with the [Apify client for JavaScript](https://docs.apify.com/api/client/js/) or [Python](https://docs.apify.com/api/client/python/):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("epicscrapers/glassdoor-jobs-scraper").call(
    run_input={"keywords": ["Data Analyst"], "locations": ["Chicago"], "maxResults": 50}
)
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["jobTitle"], job["companyName"], job["salaryMin"], job["salaryMax"])
```

### For AI agents

Minimal input (all fields optional; give at least one of `keywords`, `locations`, `companies`, `startUrls`):

```json
{
    "keywords": ["Registered Nurse"],
    "locations": ["Texas"],
    "postedWithin": "7",
    "maxResults": 50,
    "includeDetails": true
}
```

Key output fields: `jobId`, `jobTitle`, `companyName`, `location`, `country`, `postedDate`, `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `descriptionText`, `skills`, `url`, `applyUrl`, `companyRating`, `companySize`, `companyWebsite`. One item per job; `jobId` is unique within a run.

### FAQ

**Do I need a Glassdoor account or cookies?** No.

**Which countries work?** Every country Glassdoor lists jobs in: write the city, state or country in **Locations**. Salaries come in the local currency.

**Is it legal to scrape Glassdoor?** The Actor collects publicly available job listings and doesn't log in. Check the terms and data-protection rules that apply to your use, especially if you store personal data such as CEO names.

**Something doesn't work?** Open an issue on the Actor's **Issues** tab with the run link, and we'll fix it.

# Actor input Schema

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

Enter job titles, skills or words, e.g. "Software Engineer", "registered nurse", "Python". Each keyword is its own search. Leave empty to get all jobs of the companies or locations.

## `locations` (type: `array`):

Enter cities, metro areas, states or countries in any country, e.g. "New York", "Texas", "London", "Germany", "Bengaluru". Add the country when a name is ambiguous ("Paris, France", "London, Ontario"). Each location is searched with each keyword.<br><br>Glassdoor searches one country at a time. Empty = United States, so add a country ("United Kingdom", "India") for jobs elsewhere.

## `companies` (type: `array`):

Get only jobs posted by these companies. Enter names ("Google"), Glassdoor company URLs ("https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm") or Glassdoor employer ids ("9079"). With no keyword, you get all of the company's open jobs in the locations (United States when empty).

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

Paste URLs from any Glassdoor domain:<br>• job search pages: the keyword, location and filters in the URL are used<br>• company jobs pages, e.g. "https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm"<br>• single job listings, e.g. "https://www.glassdoor.com/job-listing/j?jl=1010273184996", or just the job id, "1010273184996" (the <code>jobId</code> of an earlier run's results), to refresh jobs you already know<br><br>URLs and ids run on their own, next to the keywords and locations above.

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

Set the most jobs to save for each search (each keyword × location × company). 0 = as many as the Actor can find, up to 10,000 per search.<br><br>Glassdoor stops serving one search after about 800–1,100 jobs. Above that, the Actor splits the search by city, company size, job function, seniority, job type and date posted to find more.

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

Get only jobs posted in this period.

## `jobTypes` (type: `array`):

Get only these employment types. Leave empty for all.

## `seniority` (type: `array`):

Get only these seniority levels. Leave empty for all.

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

Get only remote / work-from-home jobs. Glassdoor lists remote jobs by country: use a country or no location, since a city returns few or none.

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

Get only jobs you can apply to directly on Glassdoor.

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

Get only jobs paying at least this much per year, in the local currency (USD in the United States, GBP in the UK…). When set, jobs without a salary are left out.

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

Get only jobs paying at most this much per year, in the local currency.

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

Get only jobs at companies rated at least this on Glassdoor, e.g. 3.5. 0 = any rating.

## `companySizes` (type: `array`):

Get only companies with this many employees. Each size is a separate search, so Max jobs per search counts per size. Leave empty for all sizes.

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

Choose how far around a city location to search.

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

Add the full job description (HTML and plain text), skills, education, the company's description and mission, and awards. Turn it off if you only need titles, companies, salaries and links: the run is about twice as fast, and the price is the same.

## `onlyNewJobs` (type: `boolean`):

Use it for scheduled runs: skip jobs that the same search already saved in earlier runs, so each run returns, and charges for, new jobs only. The Actor remembers job ids in a key-value store named "glassdoor-jobs-scraper-seen" in your account.

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

Keep the default. Glassdoor limits requests per IP address, so the Actor spreads its requests over several proxy IPs and changes IP when one is limited. Datacenter proxy is enough.

## Actor input object example

```json
{
  "keywords": [
    "Software Engineer"
  ],
  "locations": [
    "New York"
  ],
  "maxResults": 100,
  "postedWithin": "",
  "remoteOnly": false,
  "easyApplyOnly": false,
  "minRating": 0,
  "radius": "",
  "includeDetails": true,
  "onlyNewJobs": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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": [
        "Software Engineer"
    ],
    "locations": [
        "New York"
    ],
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("epicscrapers/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"],
    "locations": ["New York"],
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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