{
  "openapi": "3.0.1",
  "info": {
    "title": "Glassdoor + AI Employer Intelligence · No-Limit Reviews·Jobs",
    "description": "Glassdoor scraper that survives the anti-bot wall — no 200-review cap: full reviews with sub-ratings, pros/cons, employer replies, plus jobs, salaries & interviews. New AI Employer Intelligence: per-employer complaint themes, attrition-risk signals & quick wins from real reviews.",
    "version": "0.0",
    "x-build-id": "T0BUb7ffR69lWFEfD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~glassdoor-scraper-ppr/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-glassdoor-scraper-ppr",
        "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/memo23~glassdoor-scraper-ppr/runs": {
      "post": {
        "operationId": "runs-sync-memo23-glassdoor-scraper-ppr",
        "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/memo23~glassdoor-scraper-ppr/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-glassdoor-scraper-ppr",
        "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": "Start URLs",
            "type": "array",
            "description": "URLs to start with. Glassdoor company-page URLs from any tab (Reviews, Jobs, Salaries, Interviews, Overview) and any country's Glassdoor domain, e.g. https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm. The 'command' field selects which dataset is scraped from them.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "command": {
            "title": "Choose which data to scrape reviews or interviews for the links(s) you provided",
            "enum": [
              "reviews",
              "interviews",
              "locations",
              "salaries",
              "jobs",
              "overview",
              "benefits",
              "culture"
            ],
            "type": "string",
            "description": "Choose which data to scrape (reviews or interviews or locations or salaries or jobs) for the links(s) you provided. Also supports 'overview' (company profile), 'benefits' and 'culture' (diversity ratings). Default: reviews.",
            "default": "reviews"
          },
          "searchJobsByKeyword": {
            "title": "Search jobs by keyword & filters",
            "type": "boolean",
            "description": "Turn this ON to run a keyword/location/filter job search using the fields below. When OFF, these fields are ignored and the actor uses the Start URLs / command above.",
            "default": false
          },
          "searchKeyword": {
            "title": "Search keyword",
            "type": "string",
            "description": "Job title or keyword to search for (e.g. \"Software Developer\", \"Registered Nurse\"). Requires the toggle above to be ON."
          },
          "searchLocation": {
            "title": "Search location",
            "type": "string",
            "description": "City, state, or country to search in (e.g. \"New York\", \"United States\", \"London\"). Optional — omit for a nationwide/global search."
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "relevant_desc",
              "date_desc"
            ],
            "type": "string",
            "description": "Order of the returned jobs.",
            "default": "relevant_desc"
          },
          "maxDaysOld": {
            "title": "Posted within (days)",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Only return jobs posted within this many days.",
            "default": "any"
          },
          "remoteWorkType": {
            "title": "Workplace type",
            "enum": [
              "any",
              "1",
              "2",
              "3"
            ],
            "type": "string",
            "description": "Filter by remote / hybrid / on-site.",
            "default": "any"
          },
          "applicationType": {
            "title": "Easy Apply only",
            "enum": [
              "any",
              "1"
            ],
            "type": "string",
            "description": "Restrict to Glassdoor Easy Apply jobs.",
            "default": "any"
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "any",
              "CF3CP",
              "5QWDV",
              "75GKK",
              "NJXCK",
              "T9BXE",
              "VDTG7"
            ],
            "type": "string",
            "description": "Filter jobs by employment type.",
            "default": "any"
          },
          "minSalary": {
            "title": "Minimum salary",
            "type": "string",
            "description": "Only return jobs with an estimated salary at or above this amount (e.g. \"80000\"). Annual, in the location's currency."
          },
          "maxSalary": {
            "title": "Maximum salary",
            "type": "string",
            "description": "Only return jobs with an estimated salary at or below this amount (e.g. \"150000\")."
          },
          "minRating": {
            "title": "Minimum company rating",
            "enum": [
              "any",
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "Only return jobs at companies with at least this Glassdoor rating.",
            "default": "any"
          },
          "employerSize": {
            "title": "Company size",
            "enum": [
              "any",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Filter jobs by employer size band.",
            "default": "any"
          },
          "radius": {
            "title": "Search radius (miles)",
            "enum": [
              "any",
              "10",
              "20",
              "30",
              "50",
              "100",
              "200"
            ],
            "type": "string",
            "description": "Distance around the search location to include.",
            "default": "any"
          },
          "industryNid": {
            "title": "Industry",
            "enum": [
              "any",
              "10002",
              "10019",
              "10010",
              "10012",
              "10026",
              "10013",
              "10014",
              "10006",
              "10015",
              "10016",
              "10024"
            ],
            "type": "string",
            "description": "Filter jobs by company industry.",
            "default": "any"
          },
          "sgocId": {
            "title": "Job function",
            "enum": [
              "any",
              "1003",
              "1004",
              "1007",
              "1011",
              "1016",
              "1017",
              "1018",
              "1019",
              "1022",
              "1023"
            ],
            "type": "string",
            "description": "Filter jobs by job function / department.",
            "default": "any"
          },
          "resumeKeywords": {
            "title": "🎯 Profile match — your resume / CV skills",
            "type": "array",
            "description": "Optional. Paste your resume/CV skills to score every job against your profile. Each entry is {\"keyword\":\"Python\",\"aliases\":[\"py\"]} (aliases optional). Adds matchScore (0–100), matchedSkills and missingSkills to each job row. This does NOT change which jobs are returned — it's a triage aid so you can skip jobs you're not qualified for."
          },
          "deepSearch": {
            "title": "Deep search (expand related keywords)",
            "type": "boolean",
            "description": "Go beyond Glassdoor's single-search depth cap: after the base search, the actor harvests the related job titles Glassdoor returned and re-runs the search for each, merging results and removing duplicates by job ID. Best for keyword searches expecting many results. Increases run time and result count; still bounded by Max items.",
            "default": false
          },
          "expandKeywords": {
            "title": "Additional expansion keywords",
            "type": "array",
            "description": "Optional extra keywords to also search and merge in when Deep search is on (e.g. synonyms or adjacent roles). Each runs as its own search; duplicates across searches are removed.",
            "items": {
              "type": "string"
            }
          },
          "saveOnlyUniqueItems": {
            "title": "Save only unique items",
            "type": "boolean",
            "description": "Remove duplicate rows before they are saved. Deduplicates by job ID (jobs) or review ID (reviews), falling back to full-content matching. Useful for job searches, which can return the same posting across multiple pages. On pay-per-result billing this also means you are not charged twice for the same item.",
            "default": false
          },
          "includes": {
            "title": "Include only reviews containing specific keywords.",
            "type": "array",
            "description": "Only include reviews that contain at least one of the specified keywords. For now keywords are use only on 'Cons' property of the review.",
            "items": {
              "type": "string"
            }
          },
          "includeCompanyReviewStats": {
            "title": "Include Company Review Stats",
            "type": "boolean",
            "description": "Include company review stats in the output.",
            "default": false
          },
          "includeAllReviews": {
            "title": "Include All Reviews.",
            "type": "boolean",
            "description": "Include all possible reviews in the output from all available languages like: 'eng', 'fra', 'por', 'spa', 'ita', 'nld', 'deu'.",
            "default": false
          },
          "monitoringModeForReviews": {
            "title": "Run in monitoring mode where only newly reviews compared to previous runs will be scraped",
            "type": "boolean",
            "description": "If checked, it will only scrape newly reviews compared to what has been scraped in previous runs. Please turn on or check 'Include posts' setting above in case you want this feature.",
            "default": false
          },
          "sortReviewsBy": {
            "title": "Sort review by",
            "enum": [
              "RELEVANCE",
              "DATE",
              "RATING",
              "RATING_ASC"
            ],
            "type": "string",
            "description": "Sort reviews by criteria",
            "default": "RELEVANCE"
          },
          "reviewsStartDate": {
            "title": "Only scrape reviews newer than [date]",
            "type": "string",
            "description": "Format should be YYYY-MM-DD, e.g., 2025-02-20"
          },
          "includeCompanyInterviewStats": {
            "title": "Include Company Interview Stats.",
            "type": "boolean",
            "description": "Include company interview stats in the output.",
            "default": false
          },
          "interviewsStartDate": {
            "title": "Only scrape interviews newer than [date]",
            "type": "string",
            "description": "Format should be YYYY-MM-DD, e.g., 2025-02-20"
          },
          "includeCompanyBenefitsStats": {
            "title": "Include Company Benefits Stats.",
            "type": "boolean",
            "description": "Include company benefits stats in the output.",
            "default": false
          },
          "benefitsStartDate": {
            "title": "Only scrape benefits newer than [date]",
            "type": "string",
            "description": "Format should be YYYY-MM-DD, e.g., 2025-02-20"
          },
          "includeAllSalaries": {
            "title": "Include All Salaries.",
            "type": "boolean",
            "description": "Include all possible salaries in the output from all available languages like: 'eng', 'fra', 'por', 'spa', 'ita', 'nld', 'deu'.",
            "default": false
          },
          "enrichEmails": {
            "title": "Enrich with company contact emails (experimental, billed per email)",
            "type": "boolean",
            "description": "If enabled, reads the company's own website (shown on its Glassdoor profile) for contact emails (e.g. info@, press@), or discovers it from the company name. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object to company/overview records. Best-effort, billed per contact email found; only charged when an email is returned, never for misses.",
            "default": false
          },
          "qualifyByPayment": {
            "title": "💳 Qualify by payment (flag businesses that take money online)",
            "type": "boolean",
            "description": "Requires \"Enrich with contact emails\". Scans each business's website — reusing the pages already fetched for email discovery, so no extra cost or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds takesPayments (is this a real paying business?), paymentProcessors (which stack), stripeLiveKey (the public key if exposed) and paymentConfidence. Turn raw contacts into monetization-qualified leads. No extra charge — included with each enriched company.",
            "default": false
          },
          "reviewInsights": {
            "title": "📊 Review insights — instant digest per employer (no AI, billed per employer)",
            "type": "boolean",
            "description": "Adds one `review_insights` row per employer: rating breakdown & sentiment split, the recurring workplace complaint themes (management, pay, work-life balance, culture, career growth, job security…), top negative-review terms, and advice-to-management snippets. Deterministic — instant, no AI credits or keys required. Billed per employer analyzed.",
            "default": false
          },
          "painPointAnalysis": {
            "title": "Run AI pain-point analysis (one report per employer)",
            "type": "boolean",
            "description": "Adds a single `painPointAnalysis` row per employer alongside the reviews: top complaint themes (each with severity + how often it recurs), standout strengths, attrition-risk signals, quick wins, overall sentiment and a short summary — the 'what should this employer fix' teardown, straight from real Glassdoor employee reviews. Requires a paid Apify plan; billed per employer analyzed.",
            "default": false
          },
          "maxItems": {
            "title": "Max number items per input URL (like reviews, salaries, interviews and etc)",
            "type": "integer",
            "description": "Maximum number of items (like reviews, salaries, interviews and etc) that will be scraped FROM EACH input URL independently. If you provide 3 URLs and set maxItems to 100, you can get up to 300 total items (100 from each URL).",
            "default": 20000
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 7
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 100
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}