{
  "openapi": "3.0.1",
  "info": {
    "title": "Glassdoor Jobs Scraper — Glassdoor API Alternative + Ratings",
    "description": "Glassdoor API alternative: job listings with the employer's star rating on the same row — no second run; about 4 in 5 rows carry one. From $1.20 per 1,000 job listings. Your row cap and deadline are hard limits. Blocked pages, empty searches and repeats are never charged.",
    "version": "1.0",
    "x-build-id": "gVumtU5XC2RkdzddG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~glassdoor-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-glassdoor-jobs-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/steadyfetch~glassdoor-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-glassdoor-jobs-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/steadyfetch~glassdoor-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-glassdoor-jobs-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",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Search terms",
            "type": "array",
            "description": "Job titles or keywords (for example \"data analyst\"). You can also paste a Glassdoor search URL such as https://www.glassdoor.co.uk/Job/data-analyst-jobs-SRCH_KO0,12.htm — a pasted search keeps its own country, location and filters, which is how you search one city. No result fee for a search matching nothing, a blocked or removed listing, or a listing this account already has. An Indeed search is steadyfetch/indeed-jobs-scraper; a company's own careers page is steadyfetch/company-jobs-by-domain. Called with no input at all (an empty {} from the API or an agent), the run is a 5-listing sample — \"software engineer\" on Glassdoor US — charged like any run, and setting only the filters below leaves that sample running under them.",
            "default": [
              "_demo"
            ],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Country sites",
            "type": "array",
            "description": "Which Glassdoor country sites to search. Each country is a separate search, so two terms across two countries is four searches. glassdoor.com and glassdoor.co.uk are verified end to end; the others use the identical Glassdoor search grammar.",
            "items": {
              "type": "string",
              "enum": [
                "US",
                "GB",
                "CA",
                "IE",
                "AU",
                "NZ",
                "IN",
                "SG"
              ],
              "enumTitles": [
                "United States",
                "United Kingdom",
                "Canada",
                "Ireland",
                "Australia",
                "New Zealand",
                "India",
                "Singapore"
              ]
            },
            "default": [
              "US"
            ]
          },
          "minEmployerRating": {
            "title": "Minimum employer rating",
            "minimum": 1,
            "type": "number",
            "description": "Keep only listings whose employer carries at least this Glassdoor star rating, from 1 to 5. Half stars work — 3.5 is a sensible floor. Glassdoor's scale stops at 5, so ask for more and the run continues at 5, with one uncharged row saying so. Listings for employers Glassdoor has no rating for are left out when this is set: about one row in five has no rating."
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only listings Glassdoor labels as posted in the last N days. Glassdoor publishes an age (\"14d\", \"24h\", \"30d+\"), not a date, and its oldest bucket is \"30d+\" — so 30 keeps everything, and a longer window continues at 30 with one uncharged row saying so."
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only listings whose Glassdoor location line says Remote. Glassdoor has no separate remote flag on the results page, so this reads the location exactly as printed.",
            "default": false
          },
          "includeEmployerProfiles": {
            "title": "Include employer profiles",
            "type": "boolean",
            "description": "Fetch the Glassdoor employer profile for each unique employer in your delivered job listings — one profile per employer per run, however many listings it has. Off by default. Each delivered profile is charged as its own event; a profile that cannot be fetched is reported in an uncharged row.",
            "default": false
          },
          "maxItems": {
            "title": "Max job listings for the whole run",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on delivered job listings across every search in this run. This actor delivers up to 10,000 listings in one run; ask for more and the run continues at 10,000, with one uncharged row saying so.",
            "default": 100
          },
          "maxPagesPerSearch": {
            "title": "Max result pages per search",
            "minimum": 1,
            "type": "integer",
            "description": "How many Glassdoor result pages one search may walk, up to 10 — ask for more and the run continues at 10, with one uncharged row saying so. A search stops earlier on its own once two pages in a row add nothing new — Glassdoor often serves the same 30 listings again, and this actor will not fetch or charge for them twice.",
            "default": 5
          },
          "maxRunSeconds": {
            "title": "Max run seconds",
            "type": "integer",
            "description": "The run stops cleanly before this many seconds and reports what is left, instead of being killed by a timeout. A run is given between 30 and 3,600 seconds; ask for more or less and the run continues at whichever of the two is nearer, with one uncharged row saying so.",
            "default": 900
          },
          "includeSeen": {
            "title": "Include listings you already have",
            "type": "boolean",
            "description": "OFF (default): a listing (or employer profile) already delivered to your account is skipped before it takes a row slot — not delivered again, not charged, not counted against your row cap. ON: those rows come back anyway, marked `repeat: true` with `firstSeenAt` and `firstSeenRunId` naming the run that first delivered them, and still not charged. Use it when you want one complete dataset per run rather than only what changed.",
            "default": false
          },
          "resumeFromDatasetId": {
            "title": "Continue from an earlier run's dataset",
            "type": "string",
            "description": "The default dataset ID of an earlier run of this actor. Leave empty to start fresh. If the dataset cannot be read, the run stops before fetching anything and charges nothing, rather than risk billing you twice."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}