{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Job Boards Scraper - Greenhouse, Ashby, Lever",
    "description": "Scrape open job postings from any company's Greenhouse, Ashby or Lever job board into one unified schema. Auto-detects the ATS from just a company slug. Every row carries the full decoded description, department, location, remote flag, employment type, salary band and apply URL.",
    "version": "0.1",
    "x-build-id": "6ycXyqaExEWCEFAU0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cirkit~ats-job-boards-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cirkit-ats-job-boards-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/cirkit~ats-job-boards-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cirkit-ats-job-boards-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/cirkit~ats-job-boards-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cirkit-ats-job-boards-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",
        "properties": {
          "companies": {
            "title": "Company board slugs",
            "type": "array",
            "description": "One company per line, using the slug from its careers URL. For job-boards.greenhouse.io/gitlab the slug is gitlab. The ATS is detected automatically, so a bare slug is enough. Prefix it to skip detection and save a request: greenhouse:gitlab, ashby:linear, lever:palantir.",
            "default": [
              "gitlab",
              "ashby:linear",
              "lever:palantir"
            ],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Careers page URLs",
            "type": "array",
            "description": "Paste full job board URLs instead of slugs, for example https://job-boards.greenhouse.io/gitlab, https://jobs.ashbyhq.com/linear or https://jobs.lever.co/palantir. The ATS is read from the hostname, so these never need a detection request.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ats": {
            "title": "ATS for bare slugs",
            "enum": [
              "auto",
              "greenhouse",
              "ashby",
              "lever"
            ],
            "type": "string",
            "description": "Which ATS to assume for slugs that are not prefixed. Leave on Auto-detect to try Greenhouse, then Ashby, then Lever. Choosing one saves up to two failed requests per company when you already know where the board lives.",
            "default": "auto"
          },
          "titleKeywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Keep only postings whose title contains one of these, case-insensitive. Leave empty to return every open role. For example engineer, designer.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location keywords",
            "type": "array",
            "description": "Keep only postings whose location contains one of these, case-insensitive. Matched against the primary location and every additional location. For example London, Remote, Germany.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only these employment types. Postings that do not publish an employment type are excluded when this filter is set, so leave it empty unless you need it. Greenhouse rarely publishes this field.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "intern",
                "volunteer"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Intern",
                "Volunteer"
              ]
            },
            "default": []
          },
          "remoteOnly": {
            "title": "Remote roles only",
            "type": "boolean",
            "description": "Return only postings confirmed remote. Ashby and Lever publish a remote flag directly. Greenhouse publishes none, so its postings qualify only when the location text itself says remote, which means this filter can hide remote Greenhouse roles that do not say so.",
            "default": false
          },
          "includeDescriptions": {
            "title": "Include full descriptions",
            "type": "boolean",
            "description": "On by default. Returns the complete posting body as both HTML and plain text. Turning it off makes Greenhouse boards about 20 times smaller and faster to fetch, and does not change what you are charged. Important tradeoff on Greenhouse only: that API returns department, team and pay range in the same payload as the description, so turning this off leaves those three fields null on Greenhouse rows. Ashby and Lever are unaffected and keep every field.",
            "default": true
          },
          "maxItemsPerCompany": {
            "title": "Maximum jobs per company",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap on postings taken from any single board, applied before filters. Useful when one large employer would otherwise use up the whole run. Leave empty for no per-company cap."
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on postings returned across every board, and the cap on what you are charged. A single large employer can publish 800 or more open roles, so raise this when scraping big boards.",
            "default": 200
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. These job board APIs are public and do not block datacenter IPs, so no proxy is needed. Enable one only if you are scraping hundreds of boards and want the requests spread across addresses.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}