{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Jobs API — Greenhouse, Lever, Ashby & more",
    "description": "Open jobs from Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee and Personio as one JSON schema: title, location, remote flag, salary when published, apply URL. Diff mode flags new and closed roles. Official public job-board APIs only, no login.",
    "version": "0.1",
    "x-build-id": "S2gCdm5smqYcipdNK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/bigdavidson~ats-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-bigdavidson-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/bigdavidson~ats-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-bigdavidson-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/bigdavidson~ats-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-bigdavidson-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",
        "properties": {
          "companies": {
            "title": "Companies (board tokens, names or careers URLs)",
            "maxItems": 500,
            "type": "array",
            "description": "One entry per item: a board token/slug (gitlab), an ATS-prefixed token (lever:palantir, ashby:openai, sr:Equinox, workable:blueground, recruitee:bunq, personio:1komma5grad), a careers URL (boards.greenhouse.io/gitlab, jobs.lever.co/palantir, jobs.ashbyhq.com/openai, ...) or a company name (Scale AI). Entries without a prefix or URL are auto-detected across Greenhouse, Lever, Ashby, Workable, Recruitee, Personio and SmartRecruiters and checked against the company name each ATS reports; a board that is empty, holds placeholder postings or belongs to another company comes back as a free 'unconfirmed' row. Prefixes and URLs pin an exact board. Case and spacing don't matter; a comma inside an item is part of the name. Up to 500 per run. Leave it out for the demo (gitlab, palantir, openai); an empty list or only blank entries gives one free explanatory row and no demo. Cost: $0.005 once per run (actor-start, when the first board answers) + $0.002 per company whose board is found and confirmed (also when your filters leave 0 of its roles) + $0.0015 per job row. Not-found, unconfirmed, duplicate and blank entries are free.",
            "items": {
              "type": "string"
            }
          },
          "ats": {
            "title": "ATS (for plain tokens)",
            "enum": [
              "auto",
              "greenhouse",
              "lever",
              "ashby",
              "smartrecruiters",
              "workable",
              "recruitee",
              "personio"
            ],
            "type": "string",
            "description": "Which job-board system plain tokens belong to. 'auto' probes Greenhouse, Lever, Ashby, Workable, Recruitee, Personio and SmartRecruiters and keeps the board whose company name matches (then the one with the most open roles). Prefixes and URLs in the list always win.",
            "default": "auto"
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Newest open roles returned per company (0 = all). Each returned job costs $0.0015 (plus $0.005 per run and $0.002 per confirmed company).",
            "default": 20
          },
          "maxRecords": {
            "title": "Max job records in total (optional)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Stop after this many job records across all companies (0 = no limit). Caps the job-record cost of a run."
          },
          "titleKeywords": {
            "title": "Title keywords (optional)",
            "type": "array",
            "description": "Keep only jobs whose title contains any of these words (case-insensitive), e.g. engineer, data, sales. Filtered-out jobs are not charged; the company's $0.002 is still charged when its board is confirmed, even if no job matches.",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location keywords (optional)",
            "type": "array",
            "description": "Keep only jobs whose location contains any of these (case-insensitive), e.g. London, UK, Remote. Common spellings count as one: UK = United Kingdom = Great Britain (plus England/Scotland/Wales), US = USA = United States plus US places written 'City, ST' (Austin, TX), California = CA, NYC = New York, Canada plus 'Toronto, ON', and about 40 countries' names and codes (Germany = Deutschland). A location written only as a city (San Francisco) matches only that city name. Filtered-out jobs are not charged; the company's $0.002 still is.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs that can be done remotely: marked remote by the board's own workplace field (ATS remote flag, or a Greenhouse field such as Workplace Type / Location Type), or listing an explicitly remote location (e.g. an Ashby or Lever Hybrid role with a 'Remote (US)' location), or, on boards without a workplace field, whose location says Remote.",
            "default": false
          },
          "includeDescription": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Add the plain-text job description (HTML stripped, trimmed to Description max characters). Off by default to keep records small. It also lets pay written only in the posting text be read on Greenhouse, Workable and SmartRecruiters (Lever, Ashby, Recruitee and Personio always send the text; salary_source = 'description' marks such rows). On SmartRecruiters this adds one request per returned job, which also fills the salary fields from the posting's published compensation. On Personio, descriptions missing from the English feed are taken from the board's default-language (often German) feed. A Greenhouse or Workable board that is over the 25 MB response cap with descriptions (e.g. SpaceX) is returned without them (description null, noted on its company row).",
            "default": false
          },
          "descriptionMaxChars": {
            "title": "Description max characters",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Trim each description to this many characters (0 = full text). Only used with Include job descriptions.",
            "default": 3000
          },
          "diffMode": {
            "title": "Diff mode: new / closed since last run",
            "type": "boolean",
            "description": "Remember each company's open roles between runs (in a named key-value store keyed by this input, or by Diff key) and flag jobs as new / unchanged, plus a free row for each job that closed. The first run records the baseline. A new job not returned because of Max jobs per company, Max job records or the charge limit is reported as new by the next run. The flags and closed rows are free.",
            "default": false
          },
          "onlyChanges": {
            "title": "Diff mode: return only changes",
            "type": "boolean",
            "description": "With diff mode on: return only new jobs (+ free closed rows) instead of every open job flagged new/unchanged. Great for daily scheduled monitoring.",
            "default": true
          },
          "diffKey": {
            "title": "Diff key (optional)",
            "type": "string",
            "description": "Name for this monitor's saved state. By default the state is keyed by a hash of the companies + filters, so editing the list starts a new baseline; set a fixed name (e.g. 'my-watchlist') to keep history while you add or remove companies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}