{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Jobs Feed & Scraper: Greenhouse, Lever, Ashby & more",
    "description": "Get every open job of a company from Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee or Personio by company name, website or board URL. Markdown description, remote, seniority, employment type, salary in USD. Diff mode returns only new and closed jobs and flags re-posts.",
    "version": "0.12",
    "x-build-id": "teu1LcKB1tUGXqjAe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vellumlabs~ats-job-boards-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vellumlabs-ats-job-boards-feed",
        "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/vellumlabs~ats-job-boards-feed/runs": {
      "post": {
        "operationId": "runs-sync-vellumlabs-ats-job-boards-feed",
        "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/vellumlabs~ats-job-boards-feed/run-sync": {
      "post": {
        "operationId": "run-sync-vellumlabs-ats-job-boards-feed",
        "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 (names, websites or job boards)",
            "type": "array",
            "description": "Company names (`\"PostHog\"`), websites (`\"posthog.com\"`), objects `{ \"ats\": \"greenhouse|lever|ashby|workable|smartrecruiters|recruitee|personio\", \"slug\": \"<board token>\" }` or board URLs (ATS auto-detected). Names / websites are looked up on all seven vendors (website links first, then slug guesses) and the board with open jobs wins; the result is in `SUMMARY.json` (`resolved` / `unresolved`) and on every record as `company_query`. Give the board URL or `{ ats, slug }` when you already know it: that skips the lookup and is exact. Up to 100 lookups per run."
          },
          "companiesDatasetId": {
            "title": "Companies from a dataset (e.g. an ATS Job Board Finder run)",
            "type": "string",
            "description": "Optional. ID of a dataset whose rows are added to `companies`. Rows from ATS Job Board Finder are read through their `feed_input` ({ ats, slug }); rows it could not resolve are skipped. Other datasets work too: each row needs `ats` + `slug`, or a `board_url` / `url` / `website` / `domain` / `company_name` / `company` / `name` field. In an Apify integration (run this Actor after the finder) use `{{resource.defaultDatasetId}}`. Up to 5,000 rows; reading them is not billed."
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep only jobs whose title or description contains at least one of these words or phrases (case-insensitive). Leave empty for all jobs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locationContains": {
            "title": "Location contains",
            "type": "array",
            "description": "Keep only jobs whose location text contains at least one of these strings (case-insensitive), e.g. `Berlin`, `United States`, `EMEA`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only jobs flagged remote by the ATS or whose location / title says remote.",
            "default": false
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Keep only jobs whose department or team contains one of these strings (case-insensitive), e.g. `Engineering`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "seniority": {
            "title": "Seniority",
            "type": "array",
            "description": "Keep only jobs whose title maps to one of these levels: `intern`, `junior`, `mid`, `senior`, `staff`, `principal`, `lead`, `manager`, `director`, `vp`, `executive`. Use `none` for titles without a level word. Inferred from the title only (see the `seniority` field).",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "staff",
                "principal",
                "lead",
                "manager",
                "director",
                "vp",
                "executive",
                "none"
              ]
            },
            "default": []
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only jobs with one of these types: `full-time`, `part-time`, `contract`, `temporary` (fixed-term), `internship`. Read from the ATS's own employment field, else the title (\"Intern\", \"(12-month fixed-term contract)\"), else an explicit sentence in the description (\"This is a full-time position\"). Add `unknown` to also keep jobs that state no type (most Greenhouse boards publish none). See the `employment_types` field.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship",
                "unknown"
              ]
            },
            "default": []
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs the company published in the last N days (by the ATS publish date, `published_at`). `1` = last 24 hours, `7` = last week. `0` keeps every open job. Jobs without a publish date are dropped while this is set. Filtered jobs are not billed. In diff mode this only limits what is exported: closures are still detected from the full board.",
            "default": 0
          },
          "minAnnualSalary": {
            "title": "Minimum annual salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose disclosed pay range reaches this yearly amount (top of the range, annualised from hourly / monthly pay). Jobs without a published salary are dropped when this is set. Compared in **Salary currency**; other currencies are converted with the day's ECB rate when the currency is USD.",
            "default": 0
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "type": "string",
            "description": "ISO code of **Minimum annual salary** (`USD`, `EUR`, `GBP`, ...). With `USD`, non-USD ranges are converted; with any other code only ranges published in that currency match.",
            "default": "USD"
          },
          "maxJobs": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on job records exported in one run, across all boards. Each exported record is one `job-exported` billing event, so this also caps your cost.",
            "default": 500
          },
          "diff": {
            "title": "Diff mode (new / updated / closed since the previous run)",
            "type": "boolean",
            "description": "Remember every job seen (per board) in a named key-value store and mark each record `new`, `updated` or `closed` compared with the previous run. Unchanged jobs are not exported unless **Emit unchanged jobs** is on. Schedule the Actor and you get a change feed.",
            "default": false
          },
          "emitUnchanged": {
            "title": "Emit unchanged jobs (diff mode)",
            "type": "boolean",
            "description": "In diff mode, also export jobs that did not change (status `unchanged`). Off by default so a scheduled run only bills for changes.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name (diff mode)",
            "type": "string",
            "description": "Name of the key-value store that keeps the seen-jobs state between runs. Use a different name per schedule / per filter set.",
            "default": "ats-jobs-feed-state"
          },
          "includeHtml": {
            "title": "Include description HTML",
            "type": "boolean",
            "description": "Also store the original job description HTML on each record (`description_html`). Increases dataset size.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}