{
  "data": {
    "id": "BdZTD0QnUCK2T2UIM",
    "actId": "DSfF2NaAOpJo6ZUsx",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-20T18:13:54.831Z",
    "finishedAt": "2026-10-20T18:13:57.578Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 2635,
      "runTimeSecs": 2.635,
      "computeUnits": 0.002927777777777778,
      "imageSizeBytes": 6084913664
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Glassdoor Jobs Scraper Input\",\n  \"description\": \"Search Glassdoor job listings by keyword and location, or scrape search, job, and company URLs. Filter by date, type, rating, salary, Easy Apply, company size, industry, and job function.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"Search by keyword and location, or scrape specific Glassdoor URLs and job IDs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byUrl\"\n      ],\n      \"enumTitles\": [\n        \"Search jobs by keyword\",\n        \"Scrape specific URLs or job IDs\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries\",\n      \"type\": \"array\",\n      \"description\": \"Job titles, skills, or company names to search for (mode=search). One search is run per query.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": [\n        \"software engineer\"\n      ]\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"City, state, or country, e.g. 'New York, NY', 'London', 'Berlin'. Leave empty for the selected country's whole market.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"New York, NY\"\n    },\n    \"country\": {\n      \"title\": \"Country\",\n      \"type\": \"string\",\n      \"description\": \"Which Glassdoor country site to search.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"united-states\",\n        \"united-kingdom\",\n        \"canada\",\n        \"ireland\",\n        \"france\",\n        \"germany\",\n        \"spain\",\n        \"italy\",\n        \"netherlands\",\n        \"belgium\",\n        \"austria\",\n        \"switzerland\",\n        \"australia\",\n        \"new-zealand\",\n        \"india\",\n        \"singapore\",\n        \"hong-kong\",\n        \"brazil\",\n        \"mexico\",\n        \"argentina\"\n      ],\n      \"enumTitles\": [\n        \"United States\",\n        \"United Kingdom\",\n        \"Canada\",\n        \"Ireland\",\n        \"France\",\n        \"Germany\",\n        \"Spain\",\n        \"Italy\",\n        \"Netherlands\",\n        \"Belgium\",\n        \"Austria\",\n        \"Switzerland\",\n        \"Australia\",\n        \"New Zealand\",\n        \"India\",\n        \"Singapore\",\n        \"Hong Kong\",\n        \"Brazil\",\n        \"Mexico\",\n        \"Argentina\"\n      ],\n      \"default\": \"united-states\",\n      \"prefill\": \"united-states\"\n    },\n    \"startUrls\": {\n      \"title\": \"Start URLs (mode=byUrl)\",\n      \"type\": \"array\",\n      \"description\": \"Glassdoor search, job, or company jobs page URLs. Job URLs return one detailed record each.\",\n      \"editor\": \"requestListSources\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"url\": {\n            \"title\": \"URL\",\n            \"type\": \"string\",\n            \"description\": \"Glassdoor search, job, or company jobs page URL.\"\n          }\n        }\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"jobIds\": {\n      \"title\": \"Job IDs (mode=byUrl)\",\n      \"type\": \"array\",\n      \"description\": \"Glassdoor job listing IDs to refresh directly, e.g. '1010224897915'. The country site decides the domain.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"postedWithin\": {\n      \"title\": \"Posted within\",\n      \"type\": \"string\",\n      \"description\": \"Only include jobs posted within this window.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"1\",\n        \"3\",\n        \"7\",\n        \"14\",\n        \"30\"\n      ],\n      \"enumTitles\": [\n        \"Any time\",\n        \"Last 24 hours\",\n        \"Last 3 days\",\n        \"Last 7 days\",\n        \"Last 14 days\",\n        \"Last 30 days\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"employmentType\": {\n      \"title\": \"Employment type\",\n      \"type\": \"string\",\n      \"description\": \"Filter by the type of employment.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"fulltime\",\n        \"parttime\",\n        \"contract\"\n      ],\n      \"enumTitles\": [\n        \"All types\",\n        \"Full-time\",\n        \"Part-time\",\n        \"Contract\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"seniority\": {\n      \"title\": \"Seniority\",\n      \"type\": \"string\",\n      \"description\": \"Filter by the role's seniority level.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"entrylevel\",\n        \"midseniorlevel\",\n        \"director\",\n        \"executive\"\n      ],\n      \"enumTitles\": [\n        \"All levels\",\n        \"Entry level\",\n        \"Mid-senior level\",\n        \"Director\",\n        \"Executive\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"minRating\": {\n      \"title\": \"Minimum company rating\",\n      \"type\": \"string\",\n      \"description\": \"Only include employers rated at least this well on Glassdoor.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"0.0\",\n        \"1.0\",\n        \"2.0\",\n        \"3.0\",\n        \"4.0\"\n      ],\n      \"enumTitles\": [\n        \"Any rating\",\n        \"1.0+\",\n        \"2.0+\",\n        \"3.0+\",\n        \"4.0+\"\n      ],\n      \"default\": \"0.0\",\n      \"prefill\": \"0.0\"\n    },\n    \"minSalary\": {\n      \"title\": \"Minimum salary\",\n      \"type\": \"integer\",\n      \"description\": \"Only include jobs paying at least this much per year, in the country's currency. Leave empty for no minimum.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000\n    },\n    \"maxSalary\": {\n      \"title\": \"Maximum salary\",\n      \"type\": \"integer\",\n      \"description\": \"Only include jobs paying at most this much per year, in the country's currency. Leave empty for no maximum.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000\n    },\n    \"easyApplyOnly\": {\n      \"title\": \"Easy Apply only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only return jobs you can apply to directly on Glassdoor.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"remoteOnly\": {\n      \"title\": \"Remote only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only return remote jobs. Remote-only searches run market-wide because Glassdoor rejects city-scoped remote filters.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"companySize\": {\n      \"title\": \"Company size\",\n      \"type\": \"string\",\n      \"description\": \"Filter by the employer's employee-count band.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\"\n      ],\n      \"enumTitles\": [\n        \"Any size\",\n        \"Tiny (1-50)\",\n        \"Small (51-200)\",\n        \"Medium (201-1000)\",\n        \"Large (1001-5000)\",\n        \"Huge (5001+)\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"industry\": {\n      \"title\": \"Industry\",\n      \"type\": \"string\",\n      \"description\": \"Filter by the employer's industry.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"information-technology\",\n        \"hr-staffing\",\n        \"financial-services\",\n        \"management-consulting\",\n        \"media-communication\",\n        \"healthcare\",\n        \"insurance\",\n        \"pharma-biotech\",\n        \"aerospace-defense\",\n        \"manufacturing\",\n        \"consumer-services\"\n      ],\n      \"enumTitles\": [\n        \"Any industry\",\n        \"Information Technology\",\n        \"Human Resources & Staffing\",\n        \"Financial Services\",\n        \"Management & Consulting\",\n        \"Media & Communication\",\n        \"Healthcare\",\n        \"Insurance\",\n        \"Pharmaceutical & Biotechnology\",\n        \"Aerospace & Defense\",\n        \"Manufacturing\",\n        \"Personal Consumer Services\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"jobFunction\": {\n      \"title\": \"Job function\",\n      \"type\": \"string\",\n      \"description\": \"Narrow the search to one kind of role.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"engineering\",\n        \"information-technology\",\n        \"business\",\n        \"other\",\n        \"research-science\",\n        \"arts-design\",\n        \"consulting\",\n        \"finance-accounting\",\n        \"product-project-management\",\n        \"healthcare\",\n        \"sales\",\n        \"skilled-labor-manufacturing\",\n        \"administrative\",\n        \"human-resources\",\n        \"customer-support\",\n        \"retail-food\",\n        \"operations\"\n      ],\n      \"enumTitles\": [\n        \"Any function\",\n        \"Engineering\",\n        \"Information Technology\",\n        \"Business\",\n        \"Other\",\n        \"Research & Science\",\n        \"Arts & Design\",\n        \"Consulting\",\n        \"Finance & Accounting\",\n        \"Product & Project Management\",\n        \"Healthcare\",\n        \"Sales\",\n        \"Skilled Labor & Manufacturing\",\n        \"Administrative\",\n        \"Human Resources\",\n        \"Customer Services & Support\",\n        \"Retail & Food Services\",\n        \"Operations\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"radius\": {\n      \"title\": \"Search radius\",\n      \"type\": \"string\",\n      \"description\": \"How far around the location to search. Only used when a location is set.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"0\",\n        \"5\",\n        \"10\",\n        \"15\",\n        \"25\",\n        \"50\",\n        \"100\"\n      ],\n      \"enumTitles\": [\n        \"Default\",\n        \"Exact location\",\n        \"5 miles\",\n        \"10 miles\",\n        \"15 miles\",\n        \"25 miles\",\n        \"50 miles\",\n        \"100 miles\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort by\",\n      \"type\": \"string\",\n      \"description\": \"Order of the results. Sponsored listings may stay pinned at the top.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"relevance\",\n        \"date_desc\",\n        \"date_asc\"\n      ],\n      \"enumTitles\": [\n        \"Relevance\",\n        \"Newest first\",\n        \"Oldest first\"\n      ],\n      \"default\": \"relevance\",\n      \"prefill\": \"relevance\"\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum items\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of job listings to return across all queries and slices.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 100,\n      \"prefill\": 3\n    },\n    \"includeDetails\": {\n      \"title\": \"Include full details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch each job page for the full description, exact dates, benefits, requirements, coordinates, apply URL, and company profile. Slower and uses more requests.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maximizeCoverage\": {\n      \"title\": \"Maximize coverage\",\n      \"type\": \"boolean\",\n      \"description\": \"Run additional searches split by date, job type, rating, and salary to get past a single search's depth limit.\",\n      \"default\": false,\n      \"prefill\": false\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Glassdoor Job Listings Salary & Rating Scraper\n\nScrape **Glassdoor** job listings with salary percentiles, employer ratings and company profiles, full descriptions, and the site's own search filters. Search by keyword and location, paste search or company URLs, or refresh known job IDs across 20 Glassdoor country sites.\n\n## What this actor does\n\n- **Two modes:** `search` for keyword + location searches, and `byUrl` for search pages, company jobs pages, job URLs, and job IDs\n- **Full filter surface:** posting date, employment type, seniority, company rating, salary range, Easy Apply, company size, industry, job function, radius, and sort order\n- **Salary percentiles:** p10, median, and p90 with currency, pay period, and whether the employer or Glassdoor supplied the figure\n- **Company context:** overall rating, logo, profile URL, size, revenue, headquarters, website, founded year, CEO, review count, and sub-ratings when available\n- **Detail enrichment:** full description, exact posting and expiry dates, benefits, education and experience requirements, coordinates, and the Glassdoor apply link\n- **Multi-country:** United States, United Kingdom, Canada, Ireland, France, Germany, Spain, Italy, Netherlands, Belgium, Austria, Switzerland, Australia, New Zealand, India, Singapore, Hong Kong, Brazil, Mexico, and Argentina\n- **Omit-empty output:** fields Glassdoor does not provide are left out instead of returned as null, zero, or an empty list\n\n## Output per job listing\n\n- `jobListingId` — Glassdoor's internal listing ID\n- `jobTitle`, `normalizedJobTitle` — posted title and Glassdoor's normalized role title\n- `companyName`, `companyId` — employer and its Glassdoor ID\n- `companyRating`, `companyLogo`, `companyProfileUrl` — overall rating, logo, and profile link\n- `location`, `city`, `state`, `country`, `postalCode` — location as displayed plus structured parts when available\n- `latitude`, `longitude` — coordinates when Glassdoor provides them\n- `salary_min`, `salary_median`, `salary_max` — 10th percentile, median, and 90th percentile pay\n- `salaryCurrency`, `salaryPeriod`, `salarySource` — currency, pay period, and pay source\n- `datePosted`, `validThrough` — ISO posting and expiry dates when details are enabled\n- `ageInDays` — listing age as shown in search results\n- `employmentType`, `employmentTypes`, `jobTypes` — normalized and site-specific employment types\n- `easyApply`, `directApply`, `isSponsored` — apply and placement flags\n- `applyUrl` — Glassdoor's apply link for the listing\n- `description` — the search-result description snippet\n- `fullDescription`, `fullDescriptionHtml` — full posting text and HTML when details are enabled\n- `benefits`, `educationRequirements`, `experienceMonths`, `experienceDescription` — structured requirements and benefits\n- `industry`, `occupation`, `occupationId` — employer industry and Glassdoor occupation\n- `skills` — skills Glassdoor extracted from the posting\n- `companySize`, `companyRevenue`, `companyWebsite`, `companyHeadquarters`, `companyType`, `companyFoundedYear`, `companyCeo`, `companyReviewCount`, `companySubRatings` — employer profile fields\n- `jobUrl` — direct link to the listing\n- `searchQuery`, `searchLocation`, `searchUrl`, `sourceDomain` — search context\n- `recordType`, `scrapedAt` — record metadata\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` or `byUrl` |\n| `searchQueries` | array | `[]` | Job titles, skills, or company names to search for (mode=search) |\n| `location` | string | – | City, state, or country; leave empty for the country's whole market |\n| `country` | string | `united-states` | Glassdoor country site |\n| `startUrls` | array | `[]` | Search, job, or company jobs page URLs (mode=byUrl) |\n| `jobIds` | array | `[]` | Glassdoor job IDs to refresh (mode=byUrl) |\n| `postedWithin` | string | – | Any time, 24 hours, 3, 7, 14, or 30 days |\n| `employmentType` | string | `all` | All, full-time, part-time, or contract |\n| `seniority` | string | `all` | All, entry, mid-senior, director, or executive |\n| `minRating` | string | `0.0` | Minimum employer rating: 1.0 through 4.0 |\n| `minSalary` | integer | – | Minimum yearly pay in the country's currency |\n| `maxSalary` | integer | – | Maximum yearly pay in the country's currency |\n| `easyApplyOnly` | boolean | `false` | Only Easy Apply jobs |\n| `remoteOnly` | boolean | `false` | Prefer remote jobs; the site filter is best-effort |\n| `companySize` | string | `any` | Employer size band |\n| `industry` | string | `any` | Employer industry |\n| `jobFunction` | string | `any` | Role function |\n| `radius` | string | – | Distance around the location in miles |\n| `sortBy` | string | `relevance` | Relevance, newest first, or oldest first |\n| `maxItems` | integer | `100` | Hard cap across all queries and slices (1–1000) |\n| `includeDetails` | boolean | `false` | Fetch each job page for full details |\n| `maximizeCoverage` | boolean | `false` | Run extra date, type, rating, and salary slices to go beyond one search's depth |\n\n## Example: US search with rating and Easy Apply filters\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"software engineer\"],\n  \"location\": \"New York, NY\",\n  \"country\": \"united-states\",\n  \"minRating\": \"4.0\",\n  \"easyApplyOnly\": true,\n  \"maxItems\": 50,\n  \"includeDetails\": true\n}\n```\n\n## Example: UK search for recent contract roles\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"data analyst\"],\n  \"location\": \"London\",\n  \"country\": \"united-kingdom\",\n  \"postedWithin\": \"7\",\n  \"employmentType\": \"contract\",\n  \"minSalary\": 50000,\n  \"maxItems\": 30\n}\n```\n\n## Example: all current roles at one company\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"startUrls\": [\n    { \"url\": \"https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm\" }\n  ],\n  \"maxItems\": 100,\n  \"includeDetails\": true\n}\n```\n\n## Example: refresh known job IDs\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"jobIds\": [\"1010224897915\", \"1010283907867\"],\n  \"country\": \"united-states\",\n  \"includeDetails\": true\n}\n```\n\n## Use cases\n\n- **Salary benchmarking** — compare Glassdoor's 10th, 50th, and 90th percentile pay for a role across cities, companies, and countries\n- **Recruiting intelligence** — see which employers are hiring, for what, and how they are rated\n- **Competitor hiring monitoring** — schedule a daily or weekly run for a company or job family\n- **Lead generation for staffing agencies** — build lists of companies with open requisitions in a skill area\n- **Job-board aggregation** — feed a niche board or newsletter with fresh listings\n- **Labor-market research** — measure demand by industry, function, seniority, and location\n\n## FAQ\n\n### Do I need a Glassdoor account, cookies, or a proxy?\n\nNo. The actor reads public Glassdoor pages without logging in and chooses a working connection automatically. Just fill in the input and run it.\n\n### Are salaries employer-reported or estimated?\n\nBoth happen. Check `salarySource`: `EMPLOYER_PROVIDED` means the posting states the pay; `ESTIMATED` means Glassdoor estimated it. When a listing publishes no pay, the salary fields are omitted.\n\n### Why did I get fewer results than `maxItems`?\n\nGlassdoor reports a large match count but stops serving new pages well before that number. The actor stops when the cursor chain is exhausted or several pages bring no new listings, and reports the site's own match count in the run status. Turn on `maximizeCoverage` to split the search by date, job type, rating, and salary for more rows.\n\n### Why are some fields missing from a record?\n\nGlassdoor does not provide every field for every listing. Company profiles, benefits, ratings, coordinates, and salary are the most common gaps. Fields with no value are omitted instead of returned as null. If `includeDetails` is on but `fullDescription`, dates, or company profile fields are absent, Glassdoor blocked the job page for this run; the record still contains every search-result field.\n\n### What does `includeDetails` change?\n\nWith details on, each job page is opened for the full description, exact dates, benefits, requirements, coordinates, apply link, and company profile. With details off, the actor uses the search results only: title, company, location, salary percentiles, rating, snippet, and flags. The daily test runs with details off.\n\n### Can I search more than one country in one run?\n\nEach run uses one country site. Run the actor once per country to compare markets; `sourceDomain` records which site produced each row.\n\n### Does the remote filter always work?\n\nRemote-only searches run market-wide. Glassdoor's remote filter can report matches but serve no rows when it is combined with a city, so the actor deliberately drops the city filter for remote-only runs and searches the selected country.\n\n### Can I scrape a company's open roles?\n\nYes. Use `mode=byUrl` with the company's Glassdoor jobs page URL, or search the company name as a keyword.\n\n### Why did a job ID or job URL return no record?\n\nJob IDs and direct job URLs need Glassdoor's job detail page. If that page is blocked for the current network, the actor cannot rebuild the record; keyword/company searches and company jobs pages still work. Try a search by title or company instead of a bare job ID.\n\n### Is this affiliated with Glassdoor?\n\nNo. This is an independent, third-party actor that reads Glassdoor's public job pages. It has no connection to Glassdoor.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "glassdoor-job-listings-salary-and-rating-scraper",
      "title": "Glassdoor Job Listings Salary & Rating Scraper",
      "description": "Scrape Glassdoor job listings with salary percentiles, company ratings and profiles, filters, full descriptions, and multi-country support.",
      "version": "1.0",
      "minMemoryMbytes": 1024,
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "Glassdoor Jobs Scraper Input",
        "description": "Search Glassdoor job listings by keyword and location, or scrape search, job, and company URLs. Filter by date, type, rating, salary, Easy Apply, company size, industry, and job function.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "Search by keyword and location, or scrape specific Glassdoor URLs and job IDs.",
            "editor": "select",
            "enum": [
              "search",
              "byUrl"
            ],
            "enumTitles": [
              "Search jobs by keyword",
              "Scrape specific URLs or job IDs"
            ],
            "default": "search",
            "prefill": "search"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Job titles, skills, or company names to search for (mode=search). One search is run per query.",
            "editor": "stringList",
            "default": [],
            "prefill": [
              "software engineer"
            ]
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, state, or country, e.g. 'New York, NY', 'London', 'Berlin'. Leave empty for the selected country's whole market.",
            "editor": "textfield",
            "prefill": "New York, NY"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Which Glassdoor country site to search.",
            "editor": "select",
            "enum": [
              "united-states",
              "united-kingdom",
              "canada",
              "ireland",
              "france",
              "germany",
              "spain",
              "italy",
              "netherlands",
              "belgium",
              "austria",
              "switzerland",
              "australia",
              "new-zealand",
              "india",
              "singapore",
              "hong-kong",
              "brazil",
              "mexico",
              "argentina"
            ],
            "enumTitles": [
              "United States",
              "United Kingdom",
              "Canada",
              "Ireland",
              "France",
              "Germany",
              "Spain",
              "Italy",
              "Netherlands",
              "Belgium",
              "Austria",
              "Switzerland",
              "Australia",
              "New Zealand",
              "India",
              "Singapore",
              "Hong Kong",
              "Brazil",
              "Mexico",
              "Argentina"
            ],
            "default": "united-states",
            "prefill": "united-states"
          },
          "startUrls": {
            "title": "Start URLs (mode=byUrl)",
            "type": "array",
            "description": "Glassdoor search, job, or company jobs page URLs. Job URLs return one detailed record each.",
            "editor": "requestListSources",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "URL",
                  "type": "string",
                  "description": "Glassdoor search, job, or company jobs page URL."
                }
              }
            },
            "default": [],
            "prefill": []
          },
          "jobIds": {
            "title": "Job IDs (mode=byUrl)",
            "type": "array",
            "description": "Glassdoor job listing IDs to refresh directly, e.g. '1010224897915'. The country site decides the domain.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "postedWithin": {
            "title": "Posted within",
            "type": "string",
            "description": "Only include jobs posted within this window.",
            "editor": "select",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "enumTitles": [
              "Any time",
              "Last 24 hours",
              "Last 3 days",
              "Last 7 days",
              "Last 14 days",
              "Last 30 days"
            ],
            "default": "",
            "prefill": ""
          },
          "employmentType": {
            "title": "Employment type",
            "type": "string",
            "description": "Filter by the type of employment.",
            "editor": "select",
            "enum": [
              "all",
              "fulltime",
              "parttime",
              "contract"
            ],
            "enumTitles": [
              "All types",
              "Full-time",
              "Part-time",
              "Contract"
            ],
            "default": "all",
            "prefill": "all"
          },
          "seniority": {
            "title": "Seniority",
            "type": "string",
            "description": "Filter by the role's seniority level.",
            "editor": "select",
            "enum": [
              "all",
              "entrylevel",
              "midseniorlevel",
              "director",
              "executive"
            ],
            "enumTitles": [
              "All levels",
              "Entry level",
              "Mid-senior level",
              "Director",
              "Executive"
            ],
            "default": "all",
            "prefill": "all"
          },
          "minRating": {
            "title": "Minimum company rating",
            "type": "string",
            "description": "Only include employers rated at least this well on Glassdoor.",
            "editor": "select",
            "enum": [
              "0.0",
              "1.0",
              "2.0",
              "3.0",
              "4.0"
            ],
            "enumTitles": [
              "Any rating",
              "1.0+",
              "2.0+",
              "3.0+",
              "4.0+"
            ],
            "default": "0.0",
            "prefill": "0.0"
          },
          "minSalary": {
            "title": "Minimum salary",
            "type": "integer",
            "description": "Only include jobs paying at least this much per year, in the country's currency. Leave empty for no minimum.",
            "minimum": 0,
            "maximum": 10000000
          },
          "maxSalary": {
            "title": "Maximum salary",
            "type": "integer",
            "description": "Only include jobs paying at most this much per year, in the country's currency. Leave empty for no maximum.",
            "minimum": 0,
            "maximum": 10000000
          },
          "easyApplyOnly": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only return jobs you can apply to directly on Glassdoor.",
            "default": false,
            "prefill": false
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Only return remote jobs. Remote-only searches run market-wide because Glassdoor rejects city-scoped remote filters.",
            "default": false,
            "prefill": false
          },
          "companySize": {
            "title": "Company size",
            "type": "string",
            "description": "Filter by the employer's employee-count band.",
            "editor": "select",
            "enum": [
              "any",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "enumTitles": [
              "Any size",
              "Tiny (1-50)",
              "Small (51-200)",
              "Medium (201-1000)",
              "Large (1001-5000)",
              "Huge (5001+)"
            ],
            "default": "any",
            "prefill": "any"
          },
          "industry": {
            "title": "Industry",
            "type": "string",
            "description": "Filter by the employer's industry.",
            "editor": "select",
            "enum": [
              "any",
              "information-technology",
              "hr-staffing",
              "financial-services",
              "management-consulting",
              "media-communication",
              "healthcare",
              "insurance",
              "pharma-biotech",
              "aerospace-defense",
              "manufacturing",
              "consumer-services"
            ],
            "enumTitles": [
              "Any industry",
              "Information Technology",
              "Human Resources & Staffing",
              "Financial Services",
              "Management & Consulting",
              "Media & Communication",
              "Healthcare",
              "Insurance",
              "Pharmaceutical & Biotechnology",
              "Aerospace & Defense",
              "Manufacturing",
              "Personal Consumer Services"
            ],
            "default": "any",
            "prefill": "any"
          },
          "jobFunction": {
            "title": "Job function",
            "type": "string",
            "description": "Narrow the search to one kind of role.",
            "editor": "select",
            "enum": [
              "any",
              "engineering",
              "information-technology",
              "business",
              "other",
              "research-science",
              "arts-design",
              "consulting",
              "finance-accounting",
              "product-project-management",
              "healthcare",
              "sales",
              "skilled-labor-manufacturing",
              "administrative",
              "human-resources",
              "customer-support",
              "retail-food",
              "operations"
            ],
            "enumTitles": [
              "Any function",
              "Engineering",
              "Information Technology",
              "Business",
              "Other",
              "Research & Science",
              "Arts & Design",
              "Consulting",
              "Finance & Accounting",
              "Product & Project Management",
              "Healthcare",
              "Sales",
              "Skilled Labor & Manufacturing",
              "Administrative",
              "Human Resources",
              "Customer Services & Support",
              "Retail & Food Services",
              "Operations"
            ],
            "default": "any",
            "prefill": "any"
          },
          "radius": {
            "title": "Search radius",
            "type": "string",
            "description": "How far around the location to search. Only used when a location is set.",
            "editor": "select",
            "enum": [
              "",
              "0",
              "5",
              "10",
              "15",
              "25",
              "50",
              "100"
            ],
            "enumTitles": [
              "Default",
              "Exact location",
              "5 miles",
              "10 miles",
              "15 miles",
              "25 miles",
              "50 miles",
              "100 miles"
            ],
            "default": "",
            "prefill": ""
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "Order of the results. Sponsored listings may stay pinned at the top.",
            "editor": "select",
            "enum": [
              "relevance",
              "date_desc",
              "date_asc"
            ],
            "enumTitles": [
              "Relevance",
              "Newest first",
              "Oldest first"
            ],
            "default": "relevance",
            "prefill": "relevance"
          },
          "maxItems": {
            "title": "Maximum items",
            "type": "integer",
            "description": "Maximum number of job listings to return across all queries and slices.",
            "minimum": 1,
            "maximum": 1000,
            "default": 100,
            "prefill": 3
          },
          "includeDetails": {
            "title": "Include full details",
            "type": "boolean",
            "description": "Fetch each job page for the full description, exact dates, benefits, requirements, coordinates, apply URL, and company profile. Slower and uses more requests.",
            "default": false,
            "prefill": false
          },
          "maximizeCoverage": {
            "title": "Maximize coverage",
            "type": "boolean",
            "description": "Run additional searches split by date, job type, rating, and salary to get past a single search's depth limit.",
            "default": false,
            "prefill": false
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Glassdoor Job Listings Salary & Rating Scraper Output",
        "description": "Glassdoor job listings with salary percentiles, employer ratings and profiles, full descriptions, dates, benefits, requirements, coordinates, and apply links.",
        "properties": {
          "jobs": {
            "type": "string",
            "title": "Job Listings",
            "description": "Dataset containing scraped job listings",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "readme": "# Glassdoor Job Listings Salary & Rating Scraper\n\nScrape **Glassdoor** job listings with salary percentiles, employer ratings and company profiles, full descriptions, and the site's own search filters. Search by keyword and location, paste search or company URLs, or refresh known job IDs across 20 Glassdoor country sites.\n\n## What this actor does\n\n- **Two modes:** `search` for keyword + location searches, and `byUrl` for search pages, company jobs pages, job URLs, and job IDs\n- **Full filter surface:** posting date, employment type, seniority, company rating, salary range, Easy Apply, company size, industry, job function, radius, and sort order\n- **Salary percentiles:** p10, median, and p90 with currency, pay period, and whether the employer or Glassdoor supplied the figure\n- **Company context:** overall rating, logo, profile URL, size, revenue, headquarters, website, founded year, CEO, review count, and sub-ratings when available\n- **Detail enrichment:** full description, exact posting and expiry dates, benefits, education and experience requirements, coordinates, and the Glassdoor apply link\n- **Multi-country:** United States, United Kingdom, Canada, Ireland, France, Germany, Spain, Italy, Netherlands, Belgium, Austria, Switzerland, Australia, New Zealand, India, Singapore, Hong Kong, Brazil, Mexico, and Argentina\n- **Omit-empty output:** fields Glassdoor does not provide are left out instead of returned as null, zero, or an empty list\n\n## Output per job listing\n\n- `jobListingId` — Glassdoor's internal listing ID\n- `jobTitle`, `normalizedJobTitle` — posted title and Glassdoor's normalized role title\n- `companyName`, `companyId` — employer and its Glassdoor ID\n- `companyRating`, `companyLogo`, `companyProfileUrl` — overall rating, logo, and profile link\n- `location`, `city`, `state`, `country`, `postalCode` — location as displayed plus structured parts when available\n- `latitude`, `longitude` — coordinates when Glassdoor provides them\n- `salary_min`, `salary_median`, `salary_max` — 10th percentile, median, and 90th percentile pay\n- `salaryCurrency`, `salaryPeriod`, `salarySource` — currency, pay period, and pay source\n- `datePosted`, `validThrough` — ISO posting and expiry dates when details are enabled\n- `ageInDays` — listing age as shown in search results\n- `employmentType`, `employmentTypes`, `jobTypes` — normalized and site-specific employment types\n- `easyApply`, `directApply`, `isSponsored` — apply and placement flags\n- `applyUrl` — Glassdoor's apply link for the listing\n- `description` — the search-result description snippet\n- `fullDescription`, `fullDescriptionHtml` — full posting text and HTML when details are enabled\n- `benefits`, `educationRequirements`, `experienceMonths`, `experienceDescription` — structured requirements and benefits\n- `industry`, `occupation`, `occupationId` — employer industry and Glassdoor occupation\n- `skills` — skills Glassdoor extracted from the posting\n- `companySize`, `companyRevenue`, `companyWebsite`, `companyHeadquarters`, `companyType`, `companyFoundedYear`, `companyCeo`, `companyReviewCount`, `companySubRatings` — employer profile fields\n- `jobUrl` — direct link to the listing\n- `searchQuery`, `searchLocation`, `searchUrl`, `sourceDomain` — search context\n- `recordType`, `scrapedAt` — record metadata\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` or `byUrl` |\n| `searchQueries` | array | `[]` | Job titles, skills, or company names to search for (mode=search) |\n| `location` | string | – | City, state, or country; leave empty for the country's whole market |\n| `country` | string | `united-states` | Glassdoor country site |\n| `startUrls` | array | `[]` | Search, job, or company jobs page URLs (mode=byUrl) |\n| `jobIds` | array | `[]` | Glassdoor job IDs to refresh (mode=byUrl) |\n| `postedWithin` | string | – | Any time, 24 hours, 3, 7, 14, or 30 days |\n| `employmentType` | string | `all` | All, full-time, part-time, or contract |\n| `seniority` | string | `all` | All, entry, mid-senior, director, or executive |\n| `minRating` | string | `0.0` | Minimum employer rating: 1.0 through 4.0 |\n| `minSalary` | integer | – | Minimum yearly pay in the country's currency |\n| `maxSalary` | integer | – | Maximum yearly pay in the country's currency |\n| `easyApplyOnly` | boolean | `false` | Only Easy Apply jobs |\n| `remoteOnly` | boolean | `false` | Prefer remote jobs; the site filter is best-effort |\n| `companySize` | string | `any` | Employer size band |\n| `industry` | string | `any` | Employer industry |\n| `jobFunction` | string | `any` | Role function |\n| `radius` | string | – | Distance around the location in miles |\n| `sortBy` | string | `relevance` | Relevance, newest first, or oldest first |\n| `maxItems` | integer | `100` | Hard cap across all queries and slices (1–1000) |\n| `includeDetails` | boolean | `false` | Fetch each job page for full details |\n| `maximizeCoverage` | boolean | `false` | Run extra date, type, rating, and salary slices to go beyond one search's depth |\n\n## Example: US search with rating and Easy Apply filters\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"software engineer\"],\n  \"location\": \"New York, NY\",\n  \"country\": \"united-states\",\n  \"minRating\": \"4.0\",\n  \"easyApplyOnly\": true,\n  \"maxItems\": 50,\n  \"includeDetails\": true\n}\n```\n\n## Example: UK search for recent contract roles\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"data analyst\"],\n  \"location\": \"London\",\n  \"country\": \"united-kingdom\",\n  \"postedWithin\": \"7\",\n  \"employmentType\": \"contract\",\n  \"minSalary\": 50000,\n  \"maxItems\": 30\n}\n```\n\n## Example: all current roles at one company\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"startUrls\": [\n    { \"url\": \"https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm\" }\n  ],\n  \"maxItems\": 100,\n  \"includeDetails\": true\n}\n```\n\n## Example: refresh known job IDs\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"jobIds\": [\"1010224897915\", \"1010283907867\"],\n  \"country\": \"united-states\",\n  \"includeDetails\": true\n}\n```\n\n## Use cases\n\n- **Salary benchmarking** — compare Glassdoor's 10th, 50th, and 90th percentile pay for a role across cities, companies, and countries\n- **Recruiting intelligence** — see which employers are hiring, for what, and how they are rated\n- **Competitor hiring monitoring** — schedule a daily or weekly run for a company or job family\n- **Lead generation for staffing agencies** — build lists of companies with open requisitions in a skill area\n- **Job-board aggregation** — feed a niche board or newsletter with fresh listings\n- **Labor-market research** — measure demand by industry, function, seniority, and location\n\n## FAQ\n\n### Do I need a Glassdoor account, cookies, or a proxy?\n\nNo. The actor reads public Glassdoor pages without logging in and chooses a working connection automatically. Just fill in the input and run it.\n\n### Are salaries employer-reported or estimated?\n\nBoth happen. Check `salarySource`: `EMPLOYER_PROVIDED` means the posting states the pay; `ESTIMATED` means Glassdoor estimated it. When a listing publishes no pay, the salary fields are omitted.\n\n### Why did I get fewer results than `maxItems`?\n\nGlassdoor reports a large match count but stops serving new pages well before that number. The actor stops when the cursor chain is exhausted or several pages bring no new listings, and reports the site's own match count in the run status. Turn on `maximizeCoverage` to split the search by date, job type, rating, and salary for more rows.\n\n### Why are some fields missing from a record?\n\nGlassdoor does not provide every field for every listing. Company profiles, benefits, ratings, coordinates, and salary are the most common gaps. Fields with no value are omitted instead of returned as null. If `includeDetails` is on but `fullDescription`, dates, or company profile fields are absent, Glassdoor blocked the job page for this run; the record still contains every search-result field.\n\n### What does `includeDetails` change?\n\nWith details on, each job page is opened for the full description, exact dates, benefits, requirements, coordinates, apply link, and company profile. With details off, the actor uses the search results only: title, company, location, salary percentiles, rating, snippet, and flags. The daily test runs with details off.\n\n### Can I search more than one country in one run?\n\nEach run uses one country site. Run the actor once per country to compare markets; `sourceDomain` records which site produced each row.\n\n### Does the remote filter always work?\n\nRemote-only searches run market-wide. Glassdoor's remote filter can report matches but serve no rows when it is combined with a city, so the actor deliberately drops the city filter for remote-only runs and searches the selected country.\n\n### Can I scrape a company's open roles?\n\nYes. Use `mode=byUrl` with the company's Glassdoor jobs page URL, or search the company name as a keyword.\n\n### Why did a job ID or job URL return no record?\n\nJob IDs and direct job URLs need Glassdoor's job detail page. If that page is blocked for the current network, the actor cannot rebuild the record; keyword/company searches and company jobs pages still work. Try a search by title or company instead of a bare job ID.\n\n### Is this affiliated with Glassdoor?\n\nNo. This is an independent, third-party actor that reads Glassdoor's public job pages. It has no connection to Glassdoor.\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Glassdoor Job Listings",
          "views": {
            "overview": {
              "title": "Job Overview",
              "transformation": {
                "fields": [
                  "jobTitle",
                  "companyName",
                  "companyRating",
                  "location",
                  "salary_min",
                  "salary_median",
                  "salary_max",
                  "salaryCurrency",
                  "salaryPeriod",
                  "datePosted",
                  "easyApply",
                  "jobUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "jobTitle": {
                    "label": "Job Title",
                    "format": "text"
                  },
                  "companyName": {
                    "label": "Company",
                    "format": "text"
                  },
                  "companyRating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "salary_min": {
                    "label": "Salary min",
                    "format": "number"
                  },
                  "salary_median": {
                    "label": "Salary median",
                    "format": "number"
                  },
                  "salary_max": {
                    "label": "Salary max",
                    "format": "number"
                  },
                  "salaryCurrency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "salaryPeriod": {
                    "label": "Period",
                    "format": "text"
                  },
                  "datePosted": {
                    "label": "Posted",
                    "format": "text"
                  },
                  "easyApply": {
                    "label": "Easy Apply",
                    "format": "text"
                  },
                  "jobUrl": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            },
            "salary": {
              "title": "Salary & Company",
              "transformation": {
                "fields": [
                  "jobTitle",
                  "companyName",
                  "companyRating",
                  "companySize",
                  "industry",
                  "salary_min",
                  "salary_median",
                  "salary_max",
                  "salaryCurrency",
                  "salaryPeriod",
                  "salarySource",
                  "datePosted"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "jobTitle": {
                    "label": "Job Title",
                    "format": "text"
                  },
                  "companyName": {
                    "label": "Company",
                    "format": "text"
                  },
                  "companyRating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "companySize": {
                    "label": "Size",
                    "format": "text"
                  },
                  "industry": {
                    "label": "Industry",
                    "format": "text"
                  },
                  "salary_min": {
                    "label": "Min",
                    "format": "number"
                  },
                  "salary_median": {
                    "label": "Median",
                    "format": "number"
                  },
                  "salary_max": {
                    "label": "Max",
                    "format": "number"
                  },
                  "salaryCurrency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "salaryPeriod": {
                    "label": "Period",
                    "format": "text"
                  },
                  "salarySource": {
                    "label": "Source",
                    "format": "text"
                  },
                  "datePosted": {
                    "label": "Posted",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 1024
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "643c70c1407fa20142af42572dcf4bd81b1adadfc74083c4a30a48e6307dda30",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.002927777777777778
    }
  }
}