{
  "openapi": "3.0.1",
  "info": {
    "title": "Career Site Jobs API — Greenhouse, Lever, Ashby & 10+ ATS",
    "description": "Scrape job postings from any company career page. One Actor covers Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters, Teamtailor, Personio, Breezy, JazzHR and Workday, returning normalized JSON: title, location, remote flag, salary, apply URL and full description. No API key.",
    "version": "1.0",
    "x-build-id": "tt4jVg8pAKc6qVDnS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/insight.solutions~ats-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-insight.solutions-ats-jobs-api",
        "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/insight.solutions~ats-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-insight.solutions-ats-jobs-api",
        "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/insight.solutions~ats-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-insight.solutions-ats-jobs-api",
        "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": [
          "boards"
        ],
        "properties": {
          "boards": {
            "title": "Career boards",
            "type": "array",
            "description": "One entry per company. Use `ats:slug` (for example `greenhouse:stripe`, `ashby:ramp`, `bamboohr:beehiiv`), a bare company domain (`stripe.com`) for auto-detection, or a curated bundle: `preset:yc-top`, `preset:fintech`, `preset:devtools`, `preset:ai-labs`. Workday needs the board host and site name: `workday:nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`.",
            "items": {
              "type": "string"
            }
          },
          "listPresets": {
            "title": "List the board registry instead of scraping",
            "type": "boolean",
            "description": "Return the bundled registry — every verified board, the company it belongs to, which presets contain it and the evidence for it — as free rows, without reading a single career board. Use it to see what `preset:fintech` and friends actually contain before you spend anything. Nothing is charged for this run.",
            "default": false
          },
          "includeDescription": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Return the full posting body. Turn this off for a much smaller, faster response when you only need titles, locations and apply links.",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "How to render the posting body. `text` is plain text with the markup removed, `markdown` keeps headings and lists, `html` is the sanitized source HTML.",
            "default": "text"
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only postings the ATS flags as remote, whose workplace-type field says remote, or whose location text says remote. Job titles are never used for this, so `Distributed Systems` and `Virtual Reality` roles are not mistaken for remote ones.",
            "default": false
          },
          "titleFilter": {
            "title": "Job title contains any of",
            "type": "array",
            "description": "Keep only postings whose title contains one of these strings, case-insensitively. Any single match is enough, so `[\"engineer\", \"developer\"]` keeps both. Filtering happens before billing, so excluded postings cost you nothing. Leave empty to keep every title.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleExclude": {
            "title": "Job title must not contain",
            "type": "array",
            "description": "Drop postings whose title contains any of these strings, case-insensitively. Applied after the include list, so a posting matching both is dropped — useful for `[\"intern\", \"contract\"]` on a graduate-hiring watchlist. Leave empty to exclude nothing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "seniorityLevels": {
            "title": "Seniority levels",
            "type": "array",
            "description": "Keep only these bands, read from the job title (no ATS publishes a level). `mid` means a title carrying no seniority word at all, such as `Software Engineer`. `lead` also covers `Staff`, and `executive` also covers `VP`. Leave empty to keep every level.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "lead",
                "principal",
                "manager",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior / entry level",
                "Mid level (no seniority word in the title)",
                "Senior",
                "Lead / staff",
                "Principal",
                "Manager",
                "Director / head of",
                "Executive / VP"
              ]
            },
            "default": []
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only these employment types. Postings whose ATS publishes no employment type are excluded when this filter is set, because there is nothing to match them against. Leave empty to keep every type, published or not.",
            "items": {
              "type": "string",
              "enum": [
                "FullTime",
                "PartTime",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ],
              "enumTitles": [
                "Full time",
                "Part time",
                "Contract / freelance",
                "Temporary / fixed term",
                "Internship",
                "Volunteer",
                "Other"
              ]
            },
            "default": []
          },
          "workplaceTypes": {
            "title": "Workplace types",
            "type": "array",
            "description": "Keep only remote, hybrid or on-site roles. A posting counts as remote when the ATS says so or when its location text does. Postings the ATS says nothing about are excluded when this filter is set. Leave empty to keep them all.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            },
            "default": []
          },
          "countryCodes": {
            "title": "Country codes",
            "type": "array",
            "description": "Keep only postings in these countries, as ISO 3166-1 alpha-2 codes such as `US`, `GB`, `DE`. Country names the ATS wrote out are matched too, and a US state or Canadian province implies its country. Leave empty for every country.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locationFilter": {
            "title": "Location contains any of",
            "type": "array",
            "description": "Keep only jobs whose location text contains one of these strings (case-insensitive). Use it for cities and regions a country code cannot express, for example `Berlin`, `Bay Area`, `EMEA`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "hasSalary": {
            "title": "Only postings with a published salary",
            "type": "boolean",
            "description": "Keep only postings that carry a structured pay range from the ATS. Most postings do not publish one, so expect this to remove a large majority of rows — which also means you are not billed for them.",
            "default": false
          },
          "salaryFloor": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only postings whose published pay reaches this number, compared against the top of the range in the posting's own currency and period, with no conversion. Postings with no published pay are excluded. Leave at 0 for no floor.",
            "default": 0
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only postings first published within this many days. Postings whose ATS publishes no date are kept, exactly as `postedAfter` treats them. Leave at 0 for no age limit.",
            "default": 0
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Keep only jobs first published on or after this date. Jobs whose ATS does not publish a date are kept.",
            "default": ""
          },
          "maxJobsPerBoard": {
            "title": "Max jobs per board",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many jobs from any single board.",
            "default": 1000
          },
          "maxJobsTotal": {
            "title": "Max jobs in total",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard ceiling for the whole run. The run stops cleanly once it is reached and you are never charged for jobs that were not returned.",
            "default": 5000
          },
          "atsPlatforms": {
            "title": "Restrict ATS auto-detection",
            "type": "array",
            "description": "Only relevant for bare-domain inputs. When set, domain auto-detection will only consider these platforms. Leave empty to try all of them.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "workable",
                "recruitee",
                "smartrecruiters",
                "teamtailor",
                "personio",
                "workday",
                "breezy",
                "jazzhr",
                "bamboohr",
                "rippling"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workable",
                "Recruitee",
                "SmartRecruiters",
                "Teamtailor",
                "Personio",
                "Workday (beta)",
                "Breezy HR",
                "JazzHR (beta)",
                "BambooHR (beta)",
                "Rippling (beta)"
              ]
            },
            "default": []
          },
          "maxRunSecs": {
            "title": "Max run time (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "Whole-run wall-clock budget. When it is reached the Actor stops fetching, keeps everything it already collected, explains the stop in a diagnostic row and finishes. Raise it if you pass many boards, a large preset, or very large Workday boards.",
            "default": 240
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Per-HTTP-request timeout. Raise it only if you are pulling very large Workday boards.",
            "default": 20
          },
          "maxConcurrency": {
            "title": "Max concurrent boards",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many career boards to fetch at the same time. We never send more than one request at a time to the same host.",
            "default": 6
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}