{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Job Scraper API: Workday, Greenhouse, Lever, Ashby & Oracle",
    "description": "Scrape open jobs from Workday, Greenhouse, Lever, Ashby and Oracle career sites by company name or URL, or search 14,100+ verified job boards by title, location, remote and minimum salary. One schema, salaries where published, new/closed job feed, no login. $1.50 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "2oX332vK2vmEyqwKt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hirewatch~career-sites-jobs-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hirewatch-career-sites-jobs-tracker",
        "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/hirewatch~career-sites-jobs-tracker/runs": {
      "post": {
        "operationId": "runs-sync-hirewatch-career-sites-jobs-tracker",
        "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/hirewatch~career-sites-jobs-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-hirewatch-career-sites-jobs-tracker",
        "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": {
          "targets": {
            "title": "Companies (names, career-site URLs or domains)",
            "type": "array",
            "description": "Companies to scrape, one per item: a company name (e.g. 'NVIDIA', 'Stripe', 'Scale AI'), a job-board or career-site URL (Workday, Oracle Recruiting Cloud, Greenhouse, Lever, Ashby), a company careers page that embeds one, or a company website domain (e.g. 'stripe.com'). Names are looked up in the built-in directory of 14,152 verified job boards, then directly on Greenhouse, Lever and Ashby. Oracle needs the career-site URL. Optional display name: 'Name | URL'. Leave empty and turn on 'Search all companies' to search every board in the directory instead.",
            "default": [
              "https://boards.greenhouse.io/stripe",
              "https://jobs.ashbyhq.com/ramp"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchAllCompanies": {
            "title": "Search all companies (job search mode)",
            "type": "boolean",
            "description": "Search jobs across the built-in directory of 14,152 verified job boards (biggest employers first) instead of naming companies. Combine with the filters below, e.g. title keywords ['data analyst'], location ['Canada'], remote only, minimum salary. Outputs jobs only (no company summaries); stops at 'Max job records in total' (500 if left at 0). Workday sites are searched with Workday's own keyword search and at most 100 jobs are read per site.",
            "default": false
          },
          "maxCompanies": {
            "title": "Search all: max job boards to search",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Search-all mode only: how many directory boards to search, biggest first (default 100, about 1-3 minutes). Raise it for wider coverage.",
            "default": 100
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many jobs per company (default 1000). 0 = no limit (fetch the whole board). New/closed tracking is only fully accurate when the whole board is fetched.",
            "default": 1000
          },
          "maxItems": {
            "title": "Max job records in total",
            "minimum": 0,
            "type": "integer",
            "description": "Overall cap on job records this run outputs across all companies (and therefore on cost). 0 = no overall cap (500 in search-all mode). AI agents: set e.g. 50-200 for quick answers.",
            "default": 0
          },
          "includeDescriptions": {
            "title": "Include full job descriptions",
            "type": "boolean",
            "description": "Adds descriptionText and descriptionHtml (e-mails and phone numbers removed). Free for Greenhouse/Lever/Ashby; for Workday and Oracle it needs one extra polite request per job (about 1 job per second per site), so runs are much slower.",
            "default": false
          },
          "titleKeywords": {
            "title": "Title keywords (any)",
            "type": "array",
            "description": "Only output jobs whose title contains at least one of these words or phrases (case-insensitive), e.g. [\"engineer\", \"data analyst\"]. Tracking still covers all jobs. These are also the search keywords in search-all mode.",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location keywords (any)",
            "type": "array",
            "description": "Only output jobs whose location or country contains at least one of these, e.g. [\"Remote\", \"London\", \"United States\"].",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Only output jobs marked remote. Workday marks remote type only when descriptions are fetched.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Only output jobs posted in the last N days (e.g. 7). 0 = any date. Jobs without a posted date are excluded when this is set. Workday only shows approximate dates ('Posted 3 Days Ago', '30+ Days Ago').",
            "default": 0
          },
          "minSalary": {
            "title": "Minimum salary (yearly)",
            "minimum": 0,
            "type": "integer",
            "description": "Only output jobs that publish pay with a top of range at or above this yearly amount (hourly/monthly pay is converted to yearly, full time). Jobs without published pay are excluded when this is set. 0 = no salary filter.",
            "default": 0
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "type": "string",
            "description": "Optional 3-letter currency for the salary filter, e.g. USD, EUR, GBP, CAD. Empty = any."
          },
          "onlyWithSalary": {
            "title": "Only jobs with published salary",
            "type": "boolean",
            "description": "Only output jobs that publish a salary range or pay text.",
            "default": false
          },
          "trackChanges": {
            "title": "Track new and closed jobs between runs",
            "type": "boolean",
            "description": "Remembers each company's jobs in a named key-value store, so every run labels jobs as new / unchanged / closed. Schedule the Actor (e.g. daily) to get a hiring-change feed.",
            "default": true
          },
          "outputMode": {
            "title": "Output",
            "enum": [
              "allJobs",
              "changesOnly"
            ],
            "type": "string",
            "description": "'allJobs' outputs every open job (plus jobs closed since the last run, labelled). 'changesOnly' outputs just new and closed jobs since the previous run, which is cheaper for daily monitoring.",
            "default": "allJobs"
          },
          "includeBaselineOnFirstRun": {
            "title": "Only changes: output all jobs on the first run",
            "type": "boolean",
            "description": "In 'changesOnly' mode the first run just records a baseline and outputs nothing. Turn this on to also get the full list on the first run.",
            "default": false
          },
          "includeCompanySummary": {
            "title": "Add a hiring-signal summary per company",
            "type": "boolean",
            "description": "One extra record per company (charged as one 'company-summary' event): total open jobs, new/closed since last run, trend, jobs posted in the last 7/30 days, top departments and locations, remote mix.",
            "default": true
          },
          "includeJobs": {
            "title": "Output job records",
            "type": "boolean",
            "description": "Turn off to get only company summaries (cheapest way to monitor hiring at many companies).",
            "default": true
          },
          "trackerId": {
            "title": "Tracker ID",
            "type": "string",
            "description": "Separate change histories for different tasks/schedules that watch the same companies.",
            "default": "default"
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store that keeps the previous run's jobs.",
            "default": "job-listings-tracker-state"
          },
          "requestDelaySecs": {
            "title": "Delay between requests to the same site (seconds)",
            "minimum": 0.5,
            "maximum": 30,
            "type": "number",
            "description": "Polite rate limit per host (minimum 0.5 s). A site's robots.txt Crawl-delay is used when larger.",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Companies processed in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many companies are fetched at the same time. Requests to any single site are still spaced by the delay above.",
            "default": 4
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries on timeouts, 429 and 5xx responses, with exponential back-off and Retry-After support.",
            "default": 3
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}