{
  "openapi": "3.0.1",
  "info": {
    "title": "Glassdoor Jobs, Reviews & Salary Scraper",
    "description": "Scrape Glassdoor jobs, reviews, company profiles, and salary pages for recruiting, employer research, salary benchmarking, and HR analytics. Avoid private login-only data. Returns one record per job, review, company, salary, or diagnostic. Charged $0.006 per result.",
    "version": "1.0",
    "x-build-id": "ijTGlZ9zIeX2Mwe9x"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~glassdoor-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-glassdoor-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/khadinakbar~glassdoor-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-glassdoor-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/khadinakbar~glassdoor-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-glassdoor-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Glassdoor start URLs",
            "type": "array",
            "description": "Use this when you already have Glassdoor company, review, salary, or overview URLs. Accepts Request List objects such as [{\"url\":\"https://www.glassdoor.com/Reviews/Apify-Reviews-E3100324.htm\"}]. Defaults to an empty list. NOT for LinkedIn, Indeed, or non-Glassdoor URLs.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL",
                  "description": "A public Glassdoor company, review, salary, or overview URL to process."
                }
              }
            },
            "default": []
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Use this when you know company names but not Glassdoor URLs. Accepts a list such as [\"Apify\", \"Stripe\"]. Defaults to an empty list. NOT a place for job keywords; use searchQuery for jobs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "searchQuery": {
            "title": "Job search query",
            "type": "string",
            "description": "Use this when scraping Glassdoor job listings by keyword. Accepts plain text such as \"software engineer\" or \"data analyst\". Defaults to \"software engineer\" for health checks and quick tests. NOT a company review URL.",
            "default": "software engineer"
          },
          "location": {
            "title": "Job search location",
            "type": "string",
            "description": "Location used with searchQuery for Glassdoor job search. Use a city, region, or country such as \"New York, NY\" or \"London\". Defaults to \"New York, NY\". NOT used to geocode company review URLs.",
            "default": "New York, NY"
          },
          "country": {
            "title": "Proxy/search country",
            "type": "string",
            "description": "Two-letter country hint used for proxy routing and job-search context. Use ISO-style values such as \"US\", \"GB\", or \"CA\". Defaults to \"US\". NOT a free-form location; use location for city or region.",
            "default": "US"
          },
          "includeJobs": {
            "title": "Include job listings",
            "type": "boolean",
            "description": "Turn this on to scrape Glassdoor jobs through the portfolio jobs backend. Uses searchQuery, location, country, jobType, daysOld, and remoteOnly. Defaults to true so the actor has a useful one-click run. Turn off for URL-only company review research.",
            "default": true
          },
          "includeReviews": {
            "title": "Include employee reviews",
            "type": "boolean",
            "description": "Turn this on to extract Glassdoor employee reviews from review URLs or company searches. Returns ratings, pros, cons, review date, role, and employer responses when visible. Defaults to true for URL/company-name runs. NOT used for job-search-only runs without URLs.",
            "default": true
          },
          "includeCompanies": {
            "title": "Include company profiles",
            "type": "boolean",
            "description": "Turn this on to save one company profile record from each Glassdoor company page. Returns rating, review count, website, industry, headquarters, size, revenue, CEO, and about text when visible. Defaults to true. NOT a business-email enrichment mode.",
            "default": true
          },
          "includeSalaries": {
            "title": "Include salary records",
            "type": "boolean",
            "description": "Turn this on to extract salary rows from Glassdoor salary pages. Returns job title, pay text, min/max/median pay, currency, period, location, and sample count when visible. Defaults to false because salary pages are more block-prone. NOT compensation verification.",
            "default": false
          },
          "maxResults": {
            "title": "Max billable results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of billable Glassdoor records to save across all selected data types. Use a small number like 25 for tests or up to 5000 for larger batches. Defaults to 25. Diagnostic rows do not count toward this limit or result charges.",
            "default": 25
          },
          "maxJobs": {
            "title": "Max job results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum Glassdoor job records to request from the jobs backend. Use this when jobs should consume only part of the total maxResults budget. Defaults to 25. NOT a page count; it is a result count.",
            "default": 25
          },
          "maxReviewsPerCompany": {
            "title": "Max reviews per company",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of employee reviews to save from each company target. Use this to prevent one large employer from consuming the whole run budget. Defaults to 25. NOT the global limit; maxResults still caps the whole run.",
            "default": 25
          },
          "maxPagesPerTarget": {
            "title": "Max pages per URL target",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Maximum review pagination pages to visit for each Glassdoor URL. Use 1-5 for quick runs and higher values for deeper review collection. Defaults to 5. NOT a guarantee that Glassdoor exposes that many pages publicly.",
            "default": 5
          },
          "daysOld": {
            "title": "Jobs posted within days",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Recency filter for Glassdoor job search. Use values like 1, 7, 14, or 30. Defaults to 14 days. NOT applied to employee reviews or salary pages.",
            "default": 14
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "all",
              "fulltime",
              "parttime",
              "contract",
              "internship"
            ],
            "type": "string",
            "description": "Job type filter passed to the jobs backend. Use \"all\", \"fulltime\", \"parttime\", \"contract\", or \"internship\". Defaults to \"all\". NOT used for employee review role titles.",
            "default": "all"
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Restrict the jobs backend to remote Glassdoor job listings when supported. Use this for remote-only recruiting or market research. Defaults to false. NOT a review or salary-page filter.",
            "default": false
          },
          "includeNoSalaryJobs": {
            "title": "Include jobs without salary",
            "type": "boolean",
            "description": "Keep job listings even when Glassdoor does not show salary data. Turn off when salary benchmarking requires only rows with compensation text. Defaults to true. NOT used for salary-page records.",
            "default": true
          },
          "sortReviewsBy": {
            "title": "Review sort order",
            "enum": [
              "recent",
              "popular",
              "default"
            ],
            "type": "string",
            "description": "Sort order applied to Glassdoor review pages before extraction. Use \"default\" to keep the URL unchanged, \"recent\" for newest reviews, or \"popular\" for relevance. Defaults to \"default\" for reliability. NOT used for job listings.",
            "default": "default"
          },
          "responseFormat": {
            "title": "Response detail level",
            "enum": [
              "detailed",
              "concise"
            ],
            "type": "string",
            "description": "Controls how much review context each item includes. Use \"concise\" for lighter agent output or \"detailed\" for subratings, advice, location, outlook, and employer responses when visible. Defaults to \"detailed\". NOT a CSV formatting option.",
            "default": "detailed"
          },
          "deduplicate": {
            "title": "Deduplicate records",
            "type": "boolean",
            "description": "Skip repeated jobs, reviews, companies, and salary rows detected within the same run. Keep this on for most Glassdoor batches. Defaults to true. NOT cross-run monitoring or database syncing.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Browser max concurrency",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Maximum number of Glassdoor browser pages processed at once. Use 1 for reliability on Cloudflare-protected pages or up to 3 for faster small batches. Defaults to 1. NOT used by the internal jobs backend.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional override for Glassdoor browser-page traffic. Defaults to Apify Residential US proxies because Glassdoor uses anti-bot protection. Keep the default unless you know your proxy pool works. NOT where you enter Glassdoor cookies or passwords.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}