{
  "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": "1smOd0P1Nqtl7XnuS"
  },
  "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 company per item (a comma is part of the name): a board token (gitlab), an ATS prefix + token (lever:palantir, ashby:openai; also sr:, workable:, recruitee:, personio:), a careers URL (jobs.lever.co/palantir) or a name (Scale AI). Unprefixed entries are auto-detected across the 7 ATSs and checked against the company name; unconfirmed boards return a free row. Up to 500. Cost: $0.005 per run + $0.002 per confirmed company + $0.0015 per job. Omit for a demo.",
            "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. Remote, London, US. Common spellings count as one: UK = United Kingdom = Great Britain, US = USA = United States (incl. 'Austin, TX'), California = CA, NYC = New York, plus about 40 countries' names and codes (Germany = Deutschland). A city (San Francisco) matches only that city. Filtered-out jobs are free; the company's $0.002 is still charged.",
            "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, cut to Description max characters). Off by default to keep records small. On Greenhouse, Workable and SmartRecruiters it also lets pay stated only in the posting text be read (salary_source = 'description'); on SmartRecruiters it adds one request per job. Boards too large to fetch with descriptions (over 25 MB, e.g. SpaceX) come back without them, noted on the company row. Details in the README.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}