{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Jobs Scraper: Greenhouse, Lever, Ashby & more",
    "description": "Scrape and monitor jobs straight from employers' Greenhouse, Lever, Ashby, SmartRecruiters and Workable boards via their public APIs. Auto-detects the ATS. Filters, salary, normalised output, new-jobs-only mode. No LinkedIn.",
    "version": "1.0",
    "x-build-id": "ZfWstsCQ4Ww6Sm44c"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pinkish_armada~ats-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pinkish_armada-ats-jobs-scraper",
        "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/pinkish_armada~ats-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-pinkish_armada-ats-jobs-scraper",
        "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/pinkish_armada~ats-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-pinkish_armada-ats-jobs-scraper",
        "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, careers pages or job boards",
            "type": "array",
            "description": "One per line. Accepts:<br>• <b>ATS board URLs</b>: <code>https://job-boards.greenhouse.io/airbnb</code>, <code>https://jobs.lever.co/palantir</code>, <code>https://jobs.ashbyhq.com/ramp</code>, <code>https://jobs.smartrecruiters.com/BoschGroup</code>, <code>https://apply.workable.com/huggingface</code><br>• <b>platform:token</b>: <code>greenhouse:airbnb</code>, <code>lever:palantir</code>, <code>ashby:ramp</code>, <code>smartrecruiters:BoschGroup</code>, <code>workable:huggingface</code> (<code>lever-eu:</code> for Lever EU)<br>• <b>Careers page or website URL</b>: <code>https://stripe.com/jobs</code>: the page is scanned for an embedded ATS board (robots.txt respected)<br>• <b>Company name</b>: <code>Palantir</code>: probes each platform for a matching board (best effort; check <code>confidence</code> in the run summary).",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (job title)",
            "type": "array",
            "description": "Keep jobs whose title contains ANY of these (case-insensitive). Acronyms and 1–2 letter terms like <code>AI</code>, <code>QA</code>, <code>iOS</code>, <code>SRE</code> match whole words only. Use <code>/regex/</code> for patterns, e.g. <code>/senior|staff/</code>. Leave empty for all jobs.",
            "items": {
              "type": "string"
            }
          },
          "keywordsMatchDescription": {
            "title": "Also match keywords in the description",
            "type": "boolean",
            "description": "Search the full job description as well as the title (e.g. to find all jobs mentioning <code>Kubernetes</code>).",
            "default": false
          },
          "excludeKeywords": {
            "title": "Exclude titles containing",
            "type": "array",
            "description": "Drop jobs whose title contains ANY of these, e.g. <code>intern</code>, <code>/principal|director/</code>.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep jobs whose location (any listed location, city, region or country) contains ANY of these, e.g. <code>London</code>, <code>Australia</code>, <code>NY</code>. Two-letter country codes such as <code>AU</code> also match the country code. <code>Remote</code> matches remote jobs.",
            "items": {
              "type": "string"
            }
          },
          "remote": {
            "title": "Workplace type",
            "enum": [
              "any",
              "remote",
              "remoteOrHybrid",
              "hybrid",
              "onsite"
            ],
            "type": "string",
            "description": "Filter by remote / hybrid / on-site. Greenhouse doesn't publish a workplace field, so for Greenhouse it is inferred from the location text and custom fields (unknown counts as on-site).",
            "default": "any"
          },
          "departments": {
            "title": "Departments / teams",
            "type": "array",
            "description": "Keep jobs whose department or team contains ANY of these, e.g. <code>Engineering</code>, <code>Sales</code>.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only these types. Jobs whose platform doesn't state a type (common on Greenhouse) are kept.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "internship",
                "temporary",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Internship",
                "Temporary",
                "Other"
              ]
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs first published in the last N days. 0 = any date.",
            "default": 0
          },
          "monitorMode": {
            "title": "Monitoring mode",
            "enum": [
              "off",
              "new",
              "newAndChanged"
            ],
            "type": "string",
            "description": "<b>Off</b>: return every matching job on each run.<br><b>New jobs only</b>: return only jobs that weren't on the board at the previous run (ideal for schedules and alerts).<br><b>New + changed</b>: also return jobs whose title, location, department, type, salary, apply URL or description changed.<br>State is kept per board in a named key-value store in your account, so it survives between runs and schedules.",
            "default": "off"
          },
          "monitorId": {
            "title": "Monitor ID",
            "type": "string",
            "description": "Separate monitors (e.g. one per client or task) by giving each a different ID. Change it to start from scratch.",
            "default": "default"
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Name of the key-value store (in your account) that remembers which jobs were already seen.",
            "default": "ats-jobs-monitor"
          },
          "firstRunEmitsAll": {
            "title": "First run returns all current jobs",
            "type": "boolean",
            "description": "On the first monitored run of a board, return all matching jobs (on) or just record them silently as a baseline (off) so that only future new jobs are returned.",
            "default": true
          },
          "reportRemovedJobs": {
            "title": "Report removed (closed) jobs",
            "type": "boolean",
            "description": "In monitoring mode, also add a row with <code>changeType: \"removed\"</code> for each job that disappeared from the board since the last run. Removed-job rows are free.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Job description",
            "enum": [
              "both",
              "text",
              "html",
              "none"
            ],
            "type": "string",
            "description": "Include the description as plain text, HTML, both, or not at all (smaller output). Descriptions are always read internally so salary ranges written in the text can still be extracted.",
            "default": "both"
          },
          "fetchSalaryDetails": {
            "title": "Fetch Greenhouse pay ranges",
            "type": "boolean",
            "description": "Greenhouse publishes pay-transparency ranges on each job's detail endpoint. When on, one extra lightweight request is made per saved Greenhouse job to get structured salary min/max/currency.",
            "default": true
          },
          "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 jobs. 0 = no limit. You can also cap spending with the run's maximum cost setting.",
            "default": 0
          },
          "platforms": {
            "title": "Platforms to search (name & domain detection)",
            "type": "array",
            "description": "Which ATS platforms to probe when an input is a company name or a website without an embedded board. Explicit board URLs and platform:token inputs are always fetched.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "smartrecruiters",
                "workable"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "SmartRecruiters",
                "Workable"
              ]
            },
            "default": [
              "greenhouse",
              "lever",
              "ashby",
              "smartrecruiters",
              "workable"
            ]
          },
          "nameMatchMode": {
            "title": "If several boards match",
            "enum": [
              "best",
              "all"
            ],
            "type": "string",
            "description": "When a company name or website matches boards on more than one platform: keep the best match (name match + most jobs) or fetch all of them.",
            "default": "best"
          },
          "detectFromWebsites": {
            "title": "Scan careers pages for embedded boards",
            "type": "boolean",
            "description": "For website / careers page URLs, fetch the page (and up to 5 careers-looking pages on the same site) to find an embedded or linked ATS board. robots.txt is respected. If off or nothing is found, the domain name is tried as a board slug.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Boards fetched in parallel. Per-platform rate limits are always respected (e.g. Workable is fetched one request at a time).",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}