{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Job Scraper Pro: Workday, Personio, Greenhouse, Lever",
    "description": "Scrape open jobs from Workday, Personio, Greenhouse, Lever, Ashby and Workable boards in one run. Track new and closed jobs per company between runs. Normalized fields, salary ranges, remote flag, filters. Uses public job feeds and obeys robots.txt.",
    "version": "1.0",
    "x-build-id": "ujkWJ6lTw0A2AhtYD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hydrocore~ats-job-board-scraper-pro/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hydrocore-ats-job-board-scraper-pro",
        "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/hydrocore~ats-job-board-scraper-pro/runs": {
      "post": {
        "operationId": "runs-sync-hydrocore-ats-job-board-scraper-pro",
        "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/hydrocore~ats-job-board-scraper-pro/run-sync": {
      "post": {
        "operationId": "run-sync-hydrocore-ats-job-board-scraper-pro",
        "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": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "One company per line. Accepts: a job-board URL — Workday (https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite), Personio (https://ottonova.jobs.personio.de), Greenhouse (https://job-boards.greenhouse.io/airbnb), Lever (https://jobs.lever.co/spotify), Ashby (https://jobs.ashbyhq.com/ramp), Workable (https://apply.workable.com/huggingface); an ats:slug (workday:nvidia.wd5/NVIDIAExternalCareerSite, personio:ottonova, greenhouse:airbnb, lever:spotify, ashby:ramp, workable:huggingface); a bare slug (ramp), auto-detected across Greenhouse, Lever, Ashby, Workable and Personio; or a company careers-page URL, where we look for an embedded board. Workday boards need the full board URL or workday:tenant.wdN/Site.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Title keywords (any)",
            "type": "array",
            "description": "Keep jobs whose title contains ANY of these words (case-insensitive). Leave empty to keep all jobs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude title keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words, e.g. intern, senior, manager.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchInDescription": {
            "title": "Also search keywords in job description",
            "type": "boolean",
            "description": "If on, 'Title keywords' also match text in the job description (e.g. 'Python', 'Snowflake'). Needs 'Include description'. On Workday this fetches the detail page of every job on the board, so runs are slower.",
            "default": false
          },
          "locations": {
            "title": "Locations (any)",
            "type": "array",
            "description": "Keep jobs whose location contains ANY of these strings, e.g. 'New York', 'London', 'Germany', 'Remote'.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs marked remote by the ATS or whose location says Remote/Anywhere.",
            "default": false
          },
          "departments": {
            "title": "Departments / teams (any)",
            "type": "array",
            "description": "Keep jobs whose department or team contains ANY of these strings, e.g. Engineering, Sales, Marketing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs published in the last N days (0 = any date). Greenhouse uses 'first published', Lever 'created', Ashby 'published', Workable 'published on', Personio 'created', Workday the posting start date (or 'Posted N days ago' when no details are fetched; '30+ days ago' counts as unknown and is dropped).",
            "default": 0
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Include the full job description. On Workday each description is one extra request per saved job. Turn off for faster, lighter runs when you only need titles, locations and links.",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "both"
            ],
            "type": "string",
            "description": "Plain text (best for AI/LLM pipelines and spreadsheets), original HTML, or both.",
            "default": "text"
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Newest jobs first. 0 = no limit.",
            "default": 0
          },
          "maxJobs": {
            "title": "Max jobs in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after saving this many items (jobs, plus closed-job records in change tracking) across all companies. 0 = no limit (your 'Max cost per run' still applies).",
            "default": 0
          },
          "personioLanguage": {
            "title": "Personio feed language",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "nl"
            ],
            "type": "string",
            "description": "Language requested from Personio XML feeds. Jobs that have no text in this language fall back to the German feed.",
            "default": "en"
          },
          "mode": {
            "title": "Output mode",
            "enum": [
              "all",
              "new",
              "changes"
            ],
            "type": "string",
            "description": "All jobs: every matching open job, every run. Only new jobs: jobs that were not on the board at the previous run. New + closed jobs: also one record per job that disappeared from the board since the previous run (changeType = closed).",
            "default": "all"
          },
          "firstRunOutput": {
            "title": "First run of a company",
            "enum": [
              "all",
              "none"
            ],
            "type": "string",
            "description": "What to output the first time a company is tracked: all matching jobs (as new), or nothing (only save a baseline so later runs report changes). Only used in 'Only new' and 'New + closed' modes.",
            "default": "all"
          },
          "includeClosedJobs": {
            "title": "Report closed jobs",
            "type": "boolean",
            "description": "In 'New + closed jobs' mode, output a record for each job that was removed from the board since the previous run. Closed detection is off for Workday boards with more than 2,000 jobs (Workday's search limit).",
            "default": true
          },
          "stateStoreName": {
            "title": "Tracking store name",
            "type": "string",
            "description": "Name of the key-value store that remembers each board's jobs between runs. Use a different name per saved task or watchlist. Filters are applied before saving, so changing filters changes what counts as new.",
            "default": "ats-job-tracker"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}