# Glassdoor Jobs Scraper (Pay Ranges and Ratings, No Login) (`locaihost/glassdoor-jobs`) Actor

Scrape Glassdoor jobs with no login: title, employer, star rating, pay range (employer-provided or estimate), location, remote, Easy Apply and listing date. Each job carries the employer's US H-1B/PERM and UK visa-sponsor record. Optional full descriptions and company profiles. $0.75 per 1,000 jobs.

- **URL**: https://apify.com/locaihost/glassdoor-jobs.md
- **Developed by:** [locaihost data](https://apify.com/locaihost) (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.41 / 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 Scraper (Pay Ranges and Ratings, No Login)

Search Glassdoor jobs in 22 countries and get one row per job with title, employer, star rating, the pay range Glassdoor shows (and whether the employer provided it or it is a Glassdoor estimate), location, remote and Easy Apply flags, plus the employer's US H-1B/PERM filing record and UK sponsor licence. Full descriptions and company profiles are optional. No login, no cookies.

- **Compare pay across employers:** pay ranges as numbers, with the same range per year and a label saying where it came from.
- **Screen employers before applying:** star rating on every job, and with details on, CEO approval and category ratings.
- **Find jobs that can sponsor a visa:** keep only employers that file H-1B or PERM applications or hold a UK sponsor licence.
- **Get a daily job alert:** schedule a saved search with `onlyNew` and receive only jobs you haven't seen.
- **Profile a list of companies:** give employer names or Glassdoor links and get ratings, size, industry, revenue and headquarters.

### Quick start

Paste this into the **JSON** tab of the input and click **Start**:

```json
{"keywords": ["software engineer"], "locations": ["New York, NY"], "maxResults": 30}
```

You get 30 jobs in about 20 seconds. `maxResults` is the cap for the whole run; each keyword is searched in every location.

**Places.** Type places the way Glassdoor writes them ("New York, NY", "London", "Toronto") or naturally ("Austin, Texas", "Texas", "Remote"). About 7,000 cities and regions in 22 countries are matched, from Glassdoor's own place directory. For anywhere else, run the search on glassdoor.com and paste its address into `searchUrls`; any filters in it are kept.

### What data can I get?

| Group | Fields |
|---|---|
| Job | `jobId`, `title`, `companyName`, `companyId`, `companyRating`, `jobUrl`, `companyUrl`, `ageInDays`, `postedDate`, `descriptionSnippet` |
| Location | `location`, `locationType`, `country`, `remote` |
| Pay | `salaryMin`, `salaryMedian`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `salarySource` (`employer-provided` or `glassdoor-estimate`), `salaryYearlyMin`, `salaryYearlyMax` |
| Listing | `easyApply`, `sponsored`, `jobTypes`, `seniority`, `jobAttributes` (skills and requirements Glassdoor lists), `occupation` |
| US sponsorship | `sponsorSignal` (`strong`, `some`, `none`), `sponsorMatch`, `h1bEmployer`, `h1bCertifiedLatestFY`, `h1bCertifiedTotal`, `permCertifiedTotal`, `similarFiledTitle`, `similarTitleFilings`, `similarTitleMedianWage` + currency and period |
| UK sponsorship | `ukLicensed`, `ukSponsorName`, `ukRating`, `ukRoutes`, `ukMatchBasis`, `possibleMatches` |
| Plain English | `sponsorNote`: one sentence you can show a candidate |
| With `includeDetails` | `description`, `descriptionHtml`, `skills`, `education`, `yearsOfExperience`, `discoveredAt`, `city`, `region`, `postalCode`, `latitude`, `longitude`, and the employer's `companyLegalName`, `companyWebsite`, `companyIndustry`, `companySector`, `companySize`, `companyRevenue`, `companyType`, `companyHeadquarters`, `companyFounded`, `ceoApprovalPct`, `recommendToFriendPct`, five category ratings (`ratingCompensationBenefits`, `ratingCultureValues`, `ratingCareerOpportunities`, `ratingWorkLifeBalance`, `ratingSeniorManagement`) |
| Company profile rows (`companies`) | `overallRating`, `reviewCount`, `recommendToFriendPct`, `businessOutlookPct`, `ceoApprovalPct`, six category ratings, `size`, `industry`, `sector`, `revenue`, `stockTicker`, `headquarters`, `founded`, `website`, `mission`, `overviewUrl`, `found` |
| Run | `searchKeywords`, `searchLocation`, `searchCountry`, `searchUrl`, `searchVariant`, `scrapedAt` |

**How the sponsorship flag works.** US evidence is the employer's certified H-1B (and E-3) Labor Condition Applications and PERM certifications from the US Department of Labor's public disclosure files, FY2024 to date; `similarFiledTitle` is the employer's filed title closest to this job, with its median filed wage. UK evidence is the Home Office register of licensed sponsors; `ukMatchBasis` is `exact`, `trading-name`, `brand-map` (a reviewed brand to legal-entity list) or `unconfirmed` (only similar names, listed in `possibleMatches`). When nothing is found the note says *"no filings found under this name"*, never "doesn't sponsor". The flag is evidence, not legal advice.

One real row (run on 2026-10-18, shortened):

```json
{
  "jobId": "1010172384580",
  "title": "Software Engineer",
  "companyName": "Xoriant",
  "companyRating": 3.8,
  "location": "Edison, NJ",
  "country": "US",
  "remote": false,
  "easyApply": false,
  "sponsored": false,
  "salaryMin": 189592,
  "salaryMedian": 191796,
  "salaryMax": 194000,
  "salaryCurrency": "USD",
  "salaryPeriod": "annual",
  "salarySource": "employer-provided",
  "postedDate": "2026-06-19",
  "seniority": "Mid-level",
  "jobAttributes": ["Application Integration", "Tomcat", "UNIX", "Hibernate", "Master's degree in computer science"],
  "jobUrl": "https://www.glassdoor.com/job-listing/software-engineer-xoriant-JV_IC1126748_KO0,17_KE18,25.htm?jl=1010172384580",
  "sponsorSignal": "strong",
  "sponsorNote": "XORIANT CORPORATION: 73 certified H-1B/E-3 LCAs in FY2026 (year in progress), 246 in FY2024–FY2026, 25 certified PERM. Closest filed title: \"Software Engineer\" (48 filings, median wage $116,240). UK licensed sponsor: Xoriant UK Limited (A-rated), routes: Global Business Mobility: Senior or Specialist Worker, Skilled Worker.",
  "h1bCertifiedTotal": 246,
  "similarTitleMedianWage": 116240,
  "ukLicensed": true,
  "ukRating": "A",
  "ukMatchBasis": "exact"
}
```

The dataset has four views (**Jobs**, **Jobs with descriptions**, **Visa sponsorship evidence**, **Company profiles**) and exports to JSON, CSV, Excel or HTML. The run's `SUMMARY` record lists the searches run, jobs skipped and why.

### How much does it cost?

You pay per row returned, with ratings and sponsorship flags included. There is no charge for Apify platform usage on top.

| Row | Free and Starter | Scale | Business |
|---|---|---|---|
| Job | $0.75 per 1,000 | $0.5625 per 1,000 | $0.4125 per 1,000 |
| Detailed job (`includeDetails`: full description and employer profile; charged instead of Job, never on top) | $7.00 per 1,000 | $5.25 per 1,000 | $3.85 per 1,000 |
| Company profile (`companies`) | $15.00 per 1,000 | $11.25 per 1,000 | $8.25 per 1,000 |

Plus $0.00005 per run start. **Apify's free $5 monthly credit covers about 6,600 jobs** (or about 710 detailed jobs). A detailed job or a company profile takes one or two extra pages each, which is why they cost more. Free-plan runs stop at 1,000 jobs each; any paid Apify plan removes the cap.

**What's free:** a job found by two of your searches (returned and charged once), jobs left out by your filters, by `visaSponsorship: only-with-evidence`, by `onlyNew` or by `includeSponsored: false`, and companies Glassdoor has no page for (they come back as `found: false`). If a job's full description can't be read, the row is still delivered and charged as a plain job. To cap a run's spend, set **Maximum cost per run** in the run options.

### Limits, stated up front

- **One page per search.** Glassdoor's robots.txt asks automated visitors not to open page two, and the Actor follows it. Each search shows 30 jobs, so it also runs the narrower versions any visitor can run (last 1, 3 or 7 days, each job type, remote, Easy Apply and, in the US, pay bands). That usually reaches 100 to 300 different jobs per keyword and place, then mostly repeats. For more, add places or keywords.
- **Pay is what the card shows.** Glassdoor estimates are labelled `glassdoor-estimate`. Some jobs have no pay.
- **No reviews and no salary tables.** Logged-out visitors see three reviews per company and blurred salary figures; Glassdoor asks for an account for the rest. The Actor never signs in, so those are not included. The ratings, percentages and category ratings on each company's Overview page are.
- **Company names** are matched against employers with jobs on Glassdoor in the chosen country; a company with no open jobs may not be found by name. A Glassdoor company link always works.
- **Staffing agencies** are flagged with the agency's own filings, not those of the client they hire for. US filing data is refreshed quarterly; the latest fiscal year is partial.
- **Time limit:** if a run nears its timeout, it stops, keeps what it found and says so in the status message.

### Only new since last run, and schedules

Turn on `onlyNew` in a saved task and schedule it daily: each run skips jobs an earlier run with the same search already returned, so you get a clean daily list and never pay twice for the same job. Skipped jobs cost nothing. Set up a schedule under **Schedules** in Apify Console.

### Integrations: API, n8n, Make and AI agents

**API.** Run it and get the rows back in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/locaihost~glassdoor-jobs/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["data analyst"], "locations": ["London"], "country": "GB", "maxResults": 60}'
```

Apify's API clients for Python and JavaScript work the same way.

**n8n, Make, Zapier, Google Sheets, Slack, webhooks.** Apify's built-in integrations send each run's dataset wherever you need it.

**AI agents (MCP).** Add this Actor to Claude, Cursor or any MCP client with `https://mcp.apify.com/?tools=locaihost/glassdoor-jobs`, then ask something like *"Find nurse jobs in Austin, Texas with a stated pay range, at employers rated 4 stars or more."*

### FAQ

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

$0.75 per 1,000 jobs on the Free and Starter plans, ratings and sponsorship flags included, and less on Scale and Business. Jobs with full descriptions are $7.00 per 1,000 and company profiles $15.00 per 1,000. Apify's free $5 monthly credit covers about 6,600 jobs.

#### Can I use it through the API or from Python?

Yes. Use the `run-sync-get-dataset-items` call above, or Apify's Python and JavaScript clients. Every run's data is also available as JSON, CSV or Excel from its dataset.

#### Can I use it from an AI agent?

Yes. Through the Apify MCP server (`https://mcp.apify.com/?tools=locaihost/glassdoor-jobs`) any MCP client can run a search and read the jobs back.

#### Is it legal to scrape Glassdoor jobs?

The Actor reads only what a logged-out visitor can see, follows Glassdoor's robots.txt on every page, and never logs in or asks for your account. Glassdoor's own terms restrict automated access, so weigh that for your use. Rows describe jobs and employers: email addresses and phone numbers in descriptions are removed, reviewers, review text and anything about individual employees are never read, and the sponsor data never names a private individual. You are responsible for using the data lawfully, including Glassdoor's terms and any data-protection law that applies to you.

#### Can I get Glassdoor reviews or salary reports?

No. Glassdoor shows those to signed-in members only, and the Actor never signs in. You get each job's pay range and each company's ratings, CEO approval and category ratings instead.

#### Why are some fields empty?

Some jobs show no pay, some employers have no rating yet, and the description, map and employer profile fields are filled only with `includeDetails` on. Sponsorship fields are `null` when no filing matched the employer's name.

### More from locaihost data

- [LinkedIn Jobs Scraper](https://apify.com/locaihost/linkedin-jobs): LinkedIn jobs with the same visa sponsorship flags.
- [Indeed Jobs Scraper](https://apify.com/locaihost/indeed-jobs): Indeed jobs in 51 countries, salaries as yearly USD.
- [Google Jobs Scraper](https://apify.com/locaihost/google-jobs): jobs from many boards at once, with every apply link.
- [H1B and UK Visa Sponsor Lookup](https://apify.com/locaihost/visa-sponsors): check a list of employers' sponsorship records directly.

### Did it help?

If this saved you time, a quick rating on the Store helps other people find it.

### Support

Something not working, or a field you need? Open an issue on the **Issues** tab: we answer issues within 24 hours.

# Changelog

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

# Actor input Schema

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

What you would type into Glassdoor's job search, e.g. "data analyst", "registered nurse". Each keyword is searched in every location.

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

City, state or region, e.g. "New York, NY", "Austin, Texas", "London", "Remote". Leave empty to search the whole country. We match about 7,000 places Glassdoor uses; for anywhere else, paste a Glassdoor search URL below.

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

The country the locations are in (and the one searched when no location is given).

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

Stop after this many jobs in total. Glassdoor shows 30 jobs per search page; to go past that we also run the same search by date, job type, remote, Easy Apply and (US) pay band, which usually finds 100 to 300 different jobs per keyword and place.

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

Optional. Run a job search on glassdoor.com with any filters, then paste the address here. Works for any place, including ones not in our list. Page numbers and sorting are removed: the first page of each search is read.

## `daysPosted` (type: `string`):

Only jobs posted in the last 1, 3, 7, 14 or 30 days. Other numbers round up to the next of these.

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

Only this kind of job.

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

Only jobs Glassdoor lists as work from home.

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

Only jobs you can apply to on Glassdoor itself.

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

Glassdoor's own pay filter, in the country's currency per year, e.g. 90000.

## `visaSponsorship` (type: `string`):

"only-with-evidence" keeps jobs at employers with US H-1B/PERM filings or a UK sponsor licence under the employer's name. Every row carries the evidence either way.

## `includeSponsored` (type: `boolean`):

Glassdoor marks some cards as sponsored. They are real jobs, flagged sponsored: true. Turn off to leave them out.

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

Adds each job's full description (text and HTML), skills, education, years of experience and map position, plus the employer's size, industry, revenue, headquarters, founding year, CEO approval and category ratings. Takes one extra page per job, so it is priced per detailed job (see How much does it cost? in the README).

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

Optional. Employer names or Glassdoor company URLs. Each one returns the company's Glassdoor profile: rating, % recommend, CEO approval, category ratings, size, industry, revenue, headquarters, founded, website and description. Names are matched against employers with jobs on Glassdoor in the chosen country; a URL always works. Not-found names come back as free rows.

## `onlyNew` (type: `boolean`):

For schedules: skip jobs an earlier run with the same search already returned (and charged). Leave off for one-off runs.

## Actor input object example

```json
{
  "keywords": [
    "software engineer",
    "data analyst"
  ],
  "locations": [
    "New York, NY",
    "Remote"
  ],
  "country": "US",
  "maxResults": 30,
  "searchUrls": [
    "https://www.glassdoor.com/Job/austin-tx-data-analyst-jobs-SRCH_IL.0,9_IC1139761_KO10,22.htm"
  ],
  "remoteOnly": false,
  "easyApplyOnly": false,
  "visaSponsorship": "any",
  "includeSponsored": true,
  "includeDetails": false,
  "companies": [
    "Stripe",
    "https://www.glassdoor.com/Overview/Working-at-Google-EI_IE9079.11,17.htm"
  ],
  "onlyNew": false
}
```

# Actor output Schema

## `jobs` (type: `string`):

One record per job: title, employer, rating, location, pay range with its source, remote, Easy Apply, listing date and sponsorship evidence.

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

One record per company asked for: rating, % recommend, CEO approval, category ratings, size, industry, revenue, headquarters.

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

Searches run, jobs returned and skipped, block rate, field-drift check and measured cost per 1,000.

# 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, NY"
    ],
    "maxResults": 30
};

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

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

```

## MCP server setup

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