# Glassdoor Jobs Scraper | Enterprise-Grade (`fatihtahta/glassdoor-jobs-scraper`) Actor

Extract structured Glassdoor job listings with titles, descriptions, salaries, company data, ratings, and employer insights. Built for enterprise-grade hiring intelligence, labor market analysis, and automated recruiting or analytics pipelines.

- **URL**: https://apify.com/fatihtahta/glassdoor-jobs-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 32 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.70 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Glassdoor Jobs Scraper

**Slug:** `fatihtahta/glassdoor-jobs-scraper`

### Overview

Glassdoor Jobs Scraper collects structured job listing records from Glassdoor, including job titles, descriptions, locations, company details, compensation estimates, ratings, application attributes, and source metadata. It is designed for collecting public job market data from <https://www.glassdoor.com/Job>, where job postings, employer context, and compensation signals can support hiring market analysis and operational planning. The actor turns repeatable job searches into normalized JSON records that can be exported, scheduled, and consumed by downstream systems. It supports automation workflows where teams need consistent data acquisition across keywords, locations, seniority levels, employer sizes, job types, and freshness windows. The output is intended for dependable recurring collection without making assumptions about total market completeness, availability, or service-level guarantees.

### Why Use This Actor

- **Market research and analytics:** collect structured job listings for labor-market intelligence, salary benchmarking, geographic demand analysis, and operational reporting.
- **Product and content teams:** monitor hiring trends, employer positioning, job-title vocabulary, and compensation ranges to support content strategy and product planning.
- **Developers and data engineering pipelines:** feed normalized JSON records into ETL pipelines, warehouses, search indexes, and monitoring workflows with minimal transformation.
- **Lead generation and enrichment:** identify employers, roles, locations, and hiring signals that can enrich CRM records or support targeted outreach workflows.
- **Monitoring and competitive tracking:** schedule recurring searches to track new postings, employer activity, Easy Apply availability, salary movements, and role demand over time.

### Common Use Cases

- **Market intelligence:** monitor job supply, compensation estimates, employer ratings, locations, seniority levels, and role-family movement.
- **Salary benchmarking:** compare estimated compensation ranges by title, location, employer segment, industry, and job function.
- **Competitive monitoring:** track public job posts from target employers or market segments over repeated runs.
- **Hiring-demand analysis:** collect keyword-based job datasets for analytics models, dashboards, and internal research.
- **Employer directory building:** populate internal databases with public employer, location, rating, and hiring attributes.
- **Data enrichment:** add current public job-market attributes to existing CRM, BI, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for alerts, trend analysis, and automated market updates.

### Quick Start

1. Enter one or more `queries` such as job titles, skills, employer names, or role-plus-location phrases.
2. Add optional filters such as `location`, `radius`, `datePosted`, `minRating`, salary range, `jobType`, industry, job function, seniority, employer size, Easy Apply, remote-only, or sort order.
3. Set a small `limit`, such as `25` or `100`, for your first validation run.
4. Run the actor in Apify Console.
5. Inspect the first dataset records to confirm that the fields, compensation data, company attributes, and location coverage match your use case.
6. Increase the limit, adjust filters, or schedule the actor once the output is verified.

### Input Parameters

Provide one or more search queries, then optionally narrow the search by location, posting date, employer rating, salary, job type, industry, job function, seniority, employer size, sort order, Easy Apply, remote-only, coverage behavior, and per-query limit.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `queries` | array of strings | One or more Glassdoor job search keywords. Use job titles, skills, employer names, or role-plus-location phrases. | – |
| `location` | string | Optional location text applied to each query, such as `San Antonio`, `San Francisco, CA`, or `10001`. | – |
| `radius` | string | Optional search radius in miles. Allowed values: `10`, `20`, `30`, `50`, `100`, `200`. | – |
| `datePosted` | string | Optional recency filter. Allowed values: `1` for last 24 hours, `3` for last 3 days, `7` for last 7 days, `14` for last 14 days. | – |
| `minRating` | string | Optional minimum company rating filter. Allowed values: `1` for 4 stars and up, `2` for 3 stars and up, `3` for 2 stars and up, `4` for 1 star and up. | – |
| `minSalary` | integer | Optional minimum salary filter. Salary values use the currency and salary conventions available for the matching Glassdoor listings. | – |
| `maxSalary` | integer | Optional maximum salary filter. Use with `minSalary` when you need a target compensation range. | – |
| `jobType` | string | Optional employment type. Allowed values: `CF3CP` Full-time, `5QWDV` Permanent, `75GKK` Part-time, `NJXCK` Contract, `T9BXE` Fixed Term Contract, `VDTG7` Internship. | – |
| `industryNid` | string | Optional industry filter. Allowed values: `10002` Aerospace & Defense, `10019` Energy, Mining & Utilities, `10010` Finance, `10012` Healthcare, `10026` Human Resources and Staffing, `10013` Information Technology, `10014` Insurance, `10006` Management and Consulting, `10015` Manufacturing, `10016` Media and Communications, `10024` Transportation and Logistics. | – |
| `sgocId` | string | Optional job function filter. Allowed values: `1003` Business, `1004` Consulting, `1007` Engineering, `1011` Information Technology, `1016` Operations, `1017` Other, `1018` Product & Project Management, `1019` Research & Science, `1022` Skilled Labor & Manufacturing, `1023` Transportation. | – |
| `seniorityType` | string | Optional seniority filter. Allowed values: `internship`, `entrylevel`, `midseniorlevel`, `director`, `executive`. | – |
| `employerSize` | string | Optional employer size filter. Allowed values: `1` for 1-200 employees, `2` for 201-500 employees, `3` for 501-1000 employees, `4` for 1001-5000 employees, `5` for 5001+ employees. | – |
| `sortBy` | string | Optional sort order for search-based runs. Allowed values: `relevant_desc` Most relevant, `date_desc` Most recent. | – |
| `applicationType` | boolean | When enabled, keeps only jobs marked as Easy Apply. | – |
| `remoteWorkType` | boolean | When enabled, keeps only remote jobs in search-based runs. | – |
| `maximize_coverage` | boolean | When enabled, the actor applies additional coverage-oriented handling for broad searches. | `true` |
| `limit` | integer | Maximum number of listings to save per query. Use a small value for validation and a larger value for deeper collection. | `50000` |

### Choosing Inputs

Use `queries` when you want the actor to discover matching Glassdoor job listings from keywords, skills, roles, or employer names. Add `location` and `radius` when geography matters; leave them empty for broader discovery. Use `datePosted` and `sortBy` for monitoring fresh postings, and use `minSalary`, `maxSalary`, `minRating`, `jobType`, `industryNid`, `sgocId`, `seniorityType`, and `employerSize` when you need a cleaner, more targeted dataset. Narrower filters produce more precise records, while broader filters improve discovery and may return a wider mix of roles. Start with a small `limit` to validate output quality, then increase it after confirming that the records match your workflow.

### Example Inputs

#### Example: Location-Based Software Engineering Search

```json
{
  "queries": ["software engineer"],
  "location": "New York, NY",
  "radius": "20",
  "sortBy": "relevant_desc",
  "limit": 100
}
```

#### Example: Recently Posted Remote Data Roles

```json
{
  "queries": ["data analyst", "data scientist"],
  "datePosted": "7",
  "remoteWorkType": true,
  "sortBy": "date_desc",
  "limit": 150
}
```

#### Example: Targeted Finance Roles With Salary And Rating Filters

```json
{
  "queries": ["financial analyst"],
  "location": "Chicago, IL",
  "industryNid": "10010",
  "minRating": "2",
  "minSalary": 90000,
  "jobType": "CF3CP",
  "limit": 75
}
```

### Output

#### Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, this README documents each shape separately based on the provided Example Output. The provided output contains one record type: `job`.

#### Record Envelope And Stable Identifiers

Each record is a `job` object with a top-level `type`, `id`, `url`, `title`, and nested objects for job details, role classification, location, compensation, company, platform attributes, and source context.

Recommended idempotency key: `id`. If your destination requires a URL-based key, `source_context.canonical_url` or `url` can also be used. For deduplication and upserts, store records by `id` and update the existing record when the same job appears in a later run. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs.

The `source_context.canonical_url` field preserves the canonical listing URL, and `source_context.scraped_at` records when the record was collected.

#### Examples

##### Example: job (`type = "job"`)

```json
{
  "type": "job",
  "id": "1010116324041",
  "url": "https://www.glassdoor.com/job-listing/sr-software-engineer-intone-networks-JV_IC1132348_KO0,20_KE21,36.htm?jl=1010116324041",
  "title": "Sr. Software Engineer",
  "job": {
    "description": "Strong proficiency in Python and C# Frontend development experience using Angular and/or React Experience or familiarity with modern architectures leveraging…",
    "description_html": "Strong proficiency in Python and C# Frontend development experience using Angular and/or React Experience or familiarity with modern architectures leveraging…",
    "job_page_url": "https://www.glassdoor.com/partner/jobListing.htm?ao=1136043&cb=1780004209596&cs=1_57cebbb3&guid=0000019e7084c2a498f247d9b4df69be&jobListingId=1010116324041&jrtk=5-yul1-0-1jpo89gmkgctc800-f30db55d619a0b7d&pos=101&s=58&src=GD_JOB_AD&t=SR&vt=w",
    "listing_age_days": 30,
    "is_expired": false,
    "has_easy_apply": false,
    "import_config_id": 322429,
    "title_id": 0
  },
  "role": {
    "normalized_title": "software engineer",
    "occupation_name": "software engineer",
    "occupation_id": 100063,
    "occupations": [
      {
        "key": "5NN53"
      },
      {
        "key": "EHPW9"
      },
      {
        "key": "HJSX6"
      }
    ],
    "country_id": 1
  },
  "location": {
    "id": "1132348",
    "name": "New York, NY",
    "type": "C",
    "details": {
      "id": 1132348,
      "name": "New York, NY",
      "type": "C"
    }
  },
  "compensation": {
    "currency": "USD",
    "pay_period": "ANNUAL",
    "salary_source": "ESTIMATED",
    "estimated_range": {
      "low": 144734.0,
      "median": 174585.0,
      "high": 210592.0
    },
    "source_percentiles": {
      "p10": 144734.0,
      "p50": 174585.0,
      "p90": 210592.0
    },
    "search_midpoint": 174585.0
  },
  "company": {
    "id": "375310",
    "name": "Intone Networks",
    "legal_name": "Intone Networks, Inc.",
    "short_name": "Intone Networks",
    "logo_url": "https://media.glassdoor.com/sql/375310/intone-networks-squarelogo.png",
    "rating": 4.0,
    "ratings": {
      "overallRating": 4.0
    },
    "overview": {
      "shortName": "Intone Networks",
      "squareLogoUrl": "https://media.glassdoor.com/sql/375310/intone-networks-squarelogo.png"
    }
  },
  "platform": {
    "ad_order_id": 1136043,
    "is_sponsored_employer": false,
    "is_sponsored_job": false
  },
  "source_context": {
    "seed": {
      "id": "3d0d166abf3f",
      "type": "query",
      "value": "{\"filters\":{\"employerSizes\":\"2\"},\"locationId\":\"1132348\",\"locationType\":\"CITY\",\"query\":\"software engineer\"}"
    },
    "canonical_url": "https://www.glassdoor.com/job-listing/sr-software-engineer-intone-networks-JV_IC1132348_KO0,20_KE21,36.htm?jl=1010116324041",
    "job_page_url": "https://www.glassdoor.com/partner/jobListing.htm?ao=1136043&cb=1780004209596&cs=1_57cebbb3&guid=0000019e7084c2a498f247d9b4df69be&jobListingId=1010116324041&jrtk=5-yul1-0-1jpo89gmkgctc800-f30db55d619a0b7d&pos=101&s=58&src=GD_JOB_AD&t=SR&vt=w",
    "page_index": 1,
    "scraped_at": "2026-05-28T21:36:49.881825Z",
    "domain": "www.glassdoor.com",
    "snapshot": {
      "listing_id": "1010116324041",
      "title": "Sr. Software Engineer",
      "url": "https://www.glassdoor.com/job-listing/sr-software-engineer-intone-networks-JV_IC1132348_KO0,20_KE21,36.htm?jl=1010116324041",
      "job_page_url": "https://www.glassdoor.com/partner/jobListing.htm?ao=1136043&cb=1780004209596&cs=1_57cebbb3&guid=0000019e7084c2a498f247d9b4df69be&jobListingId=1010116324041&jrtk=5-yul1-0-1jpo89gmkgctc800-f30db55d619a0b7d&pos=101&s=58&src=GD_JOB_AD&t=SR&vt=w",
      "company_name": "Intone Networks",
      "location_name": "New York, NY",
      "currency": "USD",
      "pay_midpoint": 174585.0,
      "pay_period": "ANNUAL",
      "salary_source": "ESTIMATED",
      "has_easy_apply": false,
      "listing_age_days": 30,
      "company_id": "375310",
      "company_rating": 4.0
    },
    "api_details": {
      "job_listing": {
        "ad_order_id": 1136043,
        "age_in_days": 30,
        "easy_apply": false,
        "employer": {
          "id": 375310,
          "name": "Intone Networks, Inc.",
          "ratings": {
            "overall_rating": 4.0
          },
          "short_name": "Intone Networks"
        },
        "employer_name_from_search": "Intone Networks",
        "expired": false,
        "goc": "software engineer",
        "goc_id": 100063,
        "is_sponsored_employer": false,
        "is_sponsored_job": false,
        "job_country_id": 1,
        "job_link": "https://www.glassdoor.com/partner/jobListing.htm?ao=1136043&cb=1780004209596&cs=1_57cebbb3&guid=0000019e7084c2a498f247d9b4df69be&jobListingId=1010116324041&jrtk=5-yul1-0-1jpo89gmkgctc800-f30db55d619a0b7d&pos=101&s=58&src=GD_JOB_AD&t=SR&vt=w",
        "job_title_text": "Sr. Software Engineer",
        "loc_id": 1132348,
        "location_name": "New York, NY",
        "location_type": "C",
        "normalized_job_title": "software engineer",
        "occupations": [
          {
            "key": "5NN53"
          },
          {
            "key": "EHPW9"
          },
          {
            "key": "HJSX6"
          }
        ],
        "pay_currency": "USD",
        "pay_period": "ANNUAL",
        "pay_period_adjusted_pay": {
          "p10": 144734.0,
          "p50": 174585.0,
          "p90": 210592.0
        },
        "salary_source": "ESTIMATED",
        "seo_job_link": "https://www.glassdoor.com/job-listing/sr-software-engineer-intone-networks-JV_IC1132348_KO0,20_KE21,36.htm?jl=1010116324041"
      },
      "job_overview": {
        "description_fragments_text": [
          "Strong proficiency in Python and C# Frontend development experience using Angular and/or React Experience or familiarity with modern architectures leveraging…"
        ],
        "import_config_id": 322429,
        "job_title_id": 0,
        "job_title_text": "Sr. Software Engineer",
        "listing_id": 1010116324041
      },
      "employer_overview": {
        "short_name": "Intone Networks",
        "square_logo_url": "https://media.glassdoor.com/sql/375310/intone-networks-squarelogo.png"
      },
      "location": {
        "id": 1132348,
        "name": "New York, NY",
        "type": "C"
      }
    }
  }
}
```

### Field Reference

#### `job` Records

**type** *(string, required)*: Record type. For job listings, this is `job`.

**id** *(string, required)*: Stable job listing identifier and recommended idempotency key.

**url** *(string, required)*: Canonical public job listing URL.

**title** *(string, required)*: Job title shown for the listing.

**job.description** *(string, optional)*: Plain-text job description or description excerpt.

**job.description\_html** *(string, optional)*: HTML-formatted job description or description excerpt when available.

**job.job\_page\_url** *(string, optional)*: Job application or listing page URL associated with the record.

**job.listing\_age\_days** *(integer, optional)*: Approximate listing age in days.

**job.is\_expired** *(boolean, optional)*: Whether the listing is marked as expired.

**job.has\_easy\_apply** *(boolean, optional)*: Whether the listing is marked as Easy Apply.

**job.import\_config\_id** *(integer, optional)*: Source-provided listing configuration identifier.

**job.title\_id** *(integer, optional)*: Source-provided job title identifier.

**role.normalized\_title** *(string, optional)*: Normalized role title.

**role.occupation\_name** *(string, optional)*: Occupation name associated with the role.

**role.occupation\_id** *(integer, optional)*: Occupation identifier associated with the role.

**role.occupations** *(array, optional)*: Source-provided occupation key objects.

**role.occupations\[].key** *(string, optional)*: Occupation key.

**role.country\_id** *(integer, optional)*: Country identifier associated with the role.

**location.id** *(string, optional)*: Location identifier.

**location.name** *(string, optional)*: Human-readable location name.

**location.type** *(string, optional)*: Source-provided location type.

**location.details.id** *(integer, optional)*: Detailed location identifier.

**location.details.name** *(string, optional)*: Detailed location name.

**location.details.type** *(string, optional)*: Detailed source-provided location type.

**compensation.currency** *(string, optional)*: Compensation currency, such as `USD`.

**compensation.pay\_period** *(string, optional)*: Pay period, such as `ANNUAL`.

**compensation.salary\_source** *(string, optional)*: Salary data source label, such as `ESTIMATED`.

**compensation.estimated\_range.low** *(number, optional)*: Estimated low compensation value.

**compensation.estimated\_range.median** *(number, optional)*: Estimated median compensation value.

**compensation.estimated\_range.high** *(number, optional)*: Estimated high compensation value.

**compensation.source\_percentiles.p10** *(number, optional)*: 10th percentile compensation estimate.

**compensation.source\_percentiles.p50** *(number, optional)*: 50th percentile compensation estimate.

**compensation.source\_percentiles.p90** *(number, optional)*: 90th percentile compensation estimate.

**compensation.search\_midpoint** *(number, optional)*: Compensation midpoint used for search and analysis.

**company.id** *(string, optional)*: Company identifier.

**company.name** *(string, optional)*: Company display name.

**company.legal\_name** *(string, optional)*: Company legal name when available.

**company.short\_name** *(string, optional)*: Short company name.

**company.logo\_url** *(string, optional)*: Company logo URL.

**company.rating** *(number, optional)*: Company rating.

**company.ratings.overallRating** *(number, optional)*: Overall company rating.

**company.overview.shortName** *(string, optional)*: Short company name from the company overview.

**company.overview.squareLogoUrl** *(string, optional)*: Square company logo URL.

**platform.ad\_order\_id** *(integer, optional)*: Source-provided advertising order identifier.

**platform.is\_sponsored\_employer** *(boolean, optional)*: Whether the employer is marked as sponsored.

**platform.is\_sponsored\_job** *(boolean, optional)*: Whether the job is marked as sponsored.

**source\_context.seed.id** *(string, optional)*: Identifier for the input seed that produced the record.

**source\_context.seed.type** *(string, optional)*: Seed type, such as `query`.

**source\_context.seed.value** *(string, optional)*: Serialized seed value used for collection context.

**source\_context.canonical\_url** *(string, optional)*: Canonical URL for the job listing.

**source\_context.job\_page\_url** *(string, optional)*: Job page URL captured in the source context.

**source\_context.page\_index** *(integer, optional)*: Result page index associated with the record.

**source\_context.scraped\_at** *(string, optional)*: ISO 8601 timestamp for when the record was collected.

**source\_context.domain** *(string, optional)*: Source domain.

**source\_context.snapshot.listing\_id** *(string, optional)*: Listing identifier captured in the snapshot.

**source\_context.snapshot.title** *(string, optional)*: Job title captured in the snapshot.

**source\_context.snapshot.url** *(string, optional)*: Listing URL captured in the snapshot.

**source\_context.snapshot.job\_page\_url** *(string, optional)*: Job page URL captured in the snapshot.

**source\_context.snapshot.company\_name** *(string, optional)*: Company name captured in the snapshot.

**source\_context.snapshot.location\_name** *(string, optional)*: Location name captured in the snapshot.

**source\_context.snapshot.currency** *(string, optional)*: Compensation currency captured in the snapshot.

**source\_context.snapshot.pay\_midpoint** *(number, optional)*: Compensation midpoint captured in the snapshot.

**source\_context.snapshot.pay\_period** *(string, optional)*: Pay period captured in the snapshot.

**source\_context.snapshot.salary\_source** *(string, optional)*: Salary source captured in the snapshot.

**source\_context.snapshot.has\_easy\_apply** *(boolean, optional)*: Easy Apply status captured in the snapshot.

**source\_context.snapshot.listing\_age\_days** *(integer, optional)*: Listing age captured in the snapshot.

**source\_context.snapshot.company\_id** *(string, optional)*: Company identifier captured in the snapshot.

**source\_context.snapshot.company\_rating** *(number, optional)*: Company rating captured in the snapshot.

**source\_context.api\_details.job\_listing.ad\_order\_id** *(integer, optional)*: Source detail advertising order identifier.

**source\_context.api\_details.job\_listing.age\_in\_days** *(integer, optional)*: Source detail listing age in days.

**source\_context.api\_details.job\_listing.easy\_apply** *(boolean, optional)*: Source detail Easy Apply status.

**source\_context.api\_details.job\_listing.employer.id** *(integer, optional)*: Source detail employer identifier.

**source\_context.api\_details.job\_listing.employer.name** *(string, optional)*: Source detail employer name.

**source\_context.api\_details.job\_listing.employer.ratings.overall\_rating** *(number, optional)*: Source detail overall employer rating.

**source\_context.api\_details.job\_listing.employer.short\_name** *(string, optional)*: Source detail employer short name.

**source\_context.api\_details.job\_listing.employer\_name\_from\_search** *(string, optional)*: Employer name as represented in the search result.

**source\_context.api\_details.job\_listing.expired** *(boolean, optional)*: Source detail expired status.

**source\_context.api\_details.job\_listing.goc** *(string, optional)*: Source detail occupation name.

**source\_context.api\_details.job\_listing.goc\_id** *(integer, optional)*: Source detail occupation identifier.

**source\_context.api\_details.job\_listing.is\_sponsored\_employer** *(boolean, optional)*: Source detail sponsored employer status.

**source\_context.api\_details.job\_listing.is\_sponsored\_job** *(boolean, optional)*: Source detail sponsored job status.

**source\_context.api\_details.job\_listing.job\_country\_id** *(integer, optional)*: Source detail country identifier.

**source\_context.api\_details.job\_listing.job\_link** *(string, optional)*: Source detail job link.

**source\_context.api\_details.job\_listing.job\_title\_text** *(string, optional)*: Source detail job title.

**source\_context.api\_details.job\_listing.loc\_id** *(integer, optional)*: Source detail location identifier.

**source\_context.api\_details.job\_listing.location\_name** *(string, optional)*: Source detail location name.

**source\_context.api\_details.job\_listing.location\_type** *(string, optional)*: Source detail location type.

**source\_context.api\_details.job\_listing.normalized\_job\_title** *(string, optional)*: Source detail normalized job title.

**source\_context.api\_details.job\_listing.occupations** *(array, optional)*: Source detail occupation key objects.

**source\_context.api\_details.job\_listing.occupations\[].key** *(string, optional)*: Source detail occupation key.

**source\_context.api\_details.job\_listing.pay\_currency** *(string, optional)*: Source detail compensation currency.

**source\_context.api\_details.job\_listing.pay\_period** *(string, optional)*: Source detail compensation pay period.

**source\_context.api\_details.job\_listing.pay\_period\_adjusted\_pay.p10** *(number, optional)*: Source detail 10th percentile compensation estimate.

**source\_context.api\_details.job\_listing.pay\_period\_adjusted\_pay.p50** *(number, optional)*: Source detail 50th percentile compensation estimate.

**source\_context.api\_details.job\_listing.pay\_period\_adjusted\_pay.p90** *(number, optional)*: Source detail 90th percentile compensation estimate.

**source\_context.api\_details.job\_listing.salary\_source** *(string, optional)*: Source detail salary source.

**source\_context.api\_details.job\_listing.seo\_job\_link** *(string, optional)*: Source detail public listing URL.

**source\_context.api\_details.job\_overview.description\_fragments\_text** *(array, optional)*: Source detail description text fragments.

**source\_context.api\_details.job\_overview.import\_config\_id** *(integer, optional)*: Source detail import configuration identifier.

**source\_context.api\_details.job\_overview.job\_title\_id** *(integer, optional)*: Source detail job title identifier.

**source\_context.api\_details.job\_overview.job\_title\_text** *(string, optional)*: Source detail job title text.

**source\_context.api\_details.job\_overview.listing\_id** *(integer, optional)*: Source detail listing identifier.

**source\_context.api\_details.employer\_overview.short\_name** *(string, optional)*: Source detail employer short name.

**source\_context.api\_details.employer\_overview.square\_logo\_url** *(string, optional)*: Source detail square logo URL.

**source\_context.api\_details.location.id** *(integer, optional)*: Source detail location identifier.

**source\_context.api\_details.location.name** *(string, optional)*: Source detail location name.

**source\_context.api\_details.location.type** *(string, optional)*: Source detail location type.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, and source-side presentation changes.
- **Optional fields:** null-check optional values in downstream code, especially compensation, ratings, descriptions, logos, and source-specific details.
- **Deduplication:** use `id` as the strongest stable key available in the output; `source_context.canonical_url` or `url` can be used as secondary keys where needed.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.

### Tips For Best Results

- Start with a small `limit` to validate the output shape before scaling up.
- Use one geography, role family, industry, or employer segment per run when you need clean segmentation.
- Leave optional filters empty when the goal is broad discovery.
- Add filters gradually to understand how each field changes coverage and record mix.
- Use `datePosted` with `sortBy` set to `date_desc` for recurring monitoring of fresher postings.
- Use `remoteWorkType` or `applicationType` only when those attributes are important to your workflow.
- Store records by `id` when maintaining historical datasets across repeated runs.

### How To Run On Apify

1. Open the Actor in Apify Console.
2. Configure the available input fields for the target scope.
3. Set the maximum number of outputs to collect with `limit`.
4. Click **Start** and wait for the run to finish.
5. Open the dataset to review the first records.
6. Download results in JSON, CSV, Excel, or another supported format.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

You can schedule runs to keep job-market datasets fresh for recurring reporting, monitoring, and enrichment workflows. Scheduled inputs should be reviewed periodically to confirm that filters still match the target market segment.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **CRM enrichment:** sync employer, role, location, rating, compensation, and Easy Apply attributes into account or lead records.
- **Google Sheets or Airtable:** review smaller job datasets, validate segments, and share curated lists with operations or research teams.
- **BI dashboards:** monitor hiring activity, salary estimates, employer ratings, and geographic demand over time.
- **Webhooks:** trigger ingestion, validation, alerting, or notification workflows after each completed run.
- **Data enrichment pipelines:** join job listings with existing employer, market, or recruiting datasets.
- **Warehouse and ETL workflows:** load normalized job records into analytical systems for reporting and historical trend analysis.

### Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for analysis, reporting, and operational workflows.

- **JSON:** for APIs, applications, and data pipelines.
- **CSV or Excel:** for spreadsheet workflows and manual review.
- **API access:** for automated ingestion into internal systems.
- **BI and warehouses:** for reporting, dashboards, and historical analysis.

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3-5 minutes
- **Medium runs (1,000-5,000 outputs):** ~5-15 minutes
- **Large runs (5,000+ outputs):** ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what <https://www.glassdoor.com/Job> publicly exposes at run time.
- Some optional fields may be missing on sparse listings or listings without public compensation, rating, logo, or description data.
- Very broad searches may take longer or require higher limits to collect a useful sample.
- Source-side changes can affect field availability, naming, or record shape.
- Regional, account, or availability differences may change the visible results.
- Salary values are based on the public compensation information available for each listing and should be treated as estimates when marked as estimated.

### Troubleshooting

- **No results returned:** check query spelling, filters, location text, and whether Glassdoor has matching public records for the selected scope.
- **Fewer results than expected:** broaden filters, raise the `limit`, use a larger `radius`, or verify that the target segment contains enough matching listings.
- **Some fields are empty:** optional fields depend on what each record publicly provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller segments.
- **Output changed:** compare the current output with the field reference and provide a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public Glassdoor job listing data, including job title, description, location, company information, ratings, compensation estimates, application attributes, and source context.

#### Can I filter by location, category, date, salary, or other criteria?

Yes. The actor supports location, radius, date posted, minimum rating, salary range, job type, industry, job function, seniority, employer size, sort order, Easy Apply, remote-only, and limit controls.

#### Why did I receive fewer results than my limit?

The `limit` is a maximum, not a guarantee. The run may return fewer records when the selected query, filters, location, or public availability has fewer matching listings.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor on a daily, weekly, or custom cadence for monitoring, reporting, and enrichment workflows.

#### How do I avoid duplicates across runs?

Use the job `id` as the primary idempotency key. You can also use `source_context.canonical_url` or `url` as secondary matching keys in systems that rely on URLs.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets can be downloaded in JSON, CSV, Excel, and other supported formats.

#### Does this actor collect private data?

The actor is intended to collect publicly available job listing information from Glassdoor. Users are responsible for using the data lawfully and respecting applicable privacy requirements.

#### What should I include when reporting an issue?

Include the input used, the run ID, expected versus actual behavior, and a small output sample if it helps illustrate the issue.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available **job listing** information from **https://www.glassdoor.com/Job** for legitimate business purposes, including:

- **Labor-market** research and market analysis
- Hiring-demand monitoring and compensation benchmarking
- CRM, BI, and analytics dataset enrichment

Users are responsible for ensuring that their use of collected data complies with applicable laws, regulations, contractual obligations, and platform terms. This section is informational and not legal advice.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site’s terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, including GDPR and CCPA

### Support

For help, use the Issues tab or the actor page on Apify. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when available. Avoid sharing private credentials, confidential business data, or unnecessary personal information in support requests.

# Actor input Schema

## `queries` (type: `array`):

Enter one or more Glassdoor search phrases, such as `software engineer`, `data analyst`, `registered nurse`, or an employer name. Each query is collected separately using the filters configured below.

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

Enter a city, metro area, state, or ZIP code to apply to every search query, for example `San Antonio`, `San Francisco, CA`, or `10001`. Use this when all queries should target the same market.

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

Choose the search radius in miles for the selected location. Smaller radii keep results local; larger radii broaden the market and may return more mixed-location listings.

## `datePosted` (type: `string`):

Limit results to jobs posted within the selected time window. Leave this unset when historical breadth is more important than freshness.

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

Choose the lowest Glassdoor company rating you want included. This narrows the dataset to employers at or above the selected review threshold.

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

Enter the minimum salary threshold for every search query. Use this to exclude roles below your target compensation range when salary filtering is available.

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

Enter the maximum salary threshold for every search query. Use this with the minimum salary field to keep results within a specific compensation band.

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

Select the employment arrangement to apply to every search query. Leave unset to include all supported employment types returned for the search.

## `industryNid` (type: `string`):

Select an industry to apply to every search query. Use this to focus results on employers operating in a specific sector.

## `sgocId` (type: `string`):

Select a job function to apply to every search query. Use this when you want broader role families such as Engineering, Information Technology, Operations, or Product and Project Management.

## `seniorityType` (type: `string`):

Select the experience level to apply to every search query. Leave unset to include roles across seniority levels.

## `employerSize` (type: `string`):

Select the company size band to apply to every search query. Use this to focus on smaller companies, mid-sized employers, or large enterprises.

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

Choose how Glassdoor results are prioritized for each search query. Most recent emphasizes newer postings; most relevant emphasizes Glassdoor's match ranking.

## `applicationType` (type: `boolean`):

Enable this to keep only listings marked as Easy Apply. Disable it for broader coverage across all application types.

## `remoteWorkType` (type: `boolean`):

Enable this to keep only remote listings for each search query. Disable it when location-based, hybrid, or on-site roles are also useful.

## `maximize_coverage` (type: `boolean`):

Enable this to collect more results from broad search queries. Disable it for faster validation runs or when a smaller sample is enough.

## `limit` (type: `integer`):

Enter the maximum number of job listings to save for each query. Use a smaller value for fast test runs and a larger value for deeper production collection.

## Actor input object example

```json
{
  "maximize_coverage": true,
  "limit": 50000
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/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 '{}' |
apify call fatihtahta/glassdoor-jobs-scraper --silent --output-dataset

```

## MCP server setup

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