{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Job Scraper: Greenhouse, Lever, Ashby & More",
    "description": "Get every open job from company careers pages on Greenhouse, Lever, Ashby, Workable, Recruitee and Personio in one clean format. Filter by keyword, location and remote, or track only new and closed jobs.",
    "version": "1.0",
    "x-build-id": "kYbRAdfm78l4GlYU7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/planetlinux98~ats-job-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-planetlinux98-ats-job-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/planetlinux98~ats-job-scraper/runs": {
      "post": {
        "operationId": "runs-sync-planetlinux98-ats-job-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/planetlinux98~ats-job-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-planetlinux98-ats-job-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",
            "minItems": 1,
            "maxItems": 5000,
            "type": "array",
            "description": "One company per line. The most reliable option is the address of the company's job board, for example <code>https://jobs.lever.co/spotify</code> or <code>https://job-boards.greenhouse.io/stripe</code>. You can also write <code>system:board</code> (for example <code>greenhouse:stripe</code>), paste the company's own careers page (we look for a job-board link on it), or just type the company name and we'll try each system. Supported: Greenhouse, Lever, Ashby, Workable, Recruitee and Personio.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords in the job title",
            "type": "array",
            "description": "Only keep jobs whose title contains at least one of these words. Matching ignores case and works on the start of words, so <code>engineer</code> also matches \"Engineering\", but <code>AI</code> doesn't match \"Maintenance\". Leave empty to keep every job.",
            "items": {
              "type": "string"
            }
          },
          "searchInDescription": {
            "title": "Also look for keywords in the job description",
            "type": "boolean",
            "description": "Turn this on to also match keywords anywhere in the job description, not just the title.",
            "default": false
          },
          "excludeKeywords": {
            "title": "Leave out titles containing",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words, for example <code>intern</code> or <code>senior</code>.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Only keep jobs whose location mentions at least one of these places, for example <code>Toronto</code>, <code>Canada</code> or <code>London</code>. Add <code>Remote</code> to also keep remote jobs. Leave empty for all locations.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Only keep jobs the company marks as remote.",
            "default": false
          },
          "departments": {
            "title": "Departments or teams",
            "type": "array",
            "description": "Only keep jobs in departments or teams whose name contains one of these words, for example <code>Engineering</code> or <code>Sales</code>.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within the last (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Only keep jobs posted in the last this-many days. Jobs without a posting date are left out when this is set. Leave empty or 0 for no date filter."
          },
          "descriptionFormat": {
            "title": "Job description",
            "enum": [
              "text",
              "html",
              "both",
              "none"
            ],
            "type": "string",
            "description": "How to include the job description. Plain text is easiest to read and to use with AI tools. Choose \"None\" for smaller, faster results.",
            "default": "text"
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "The newest jobs are kept first. 0 means no limit.",
            "default": 0
          },
          "maxJobs": {
            "title": "Max jobs in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop once this many jobs have been saved across all companies. 0 means no limit. You can also cap spending with the run's maximum cost setting.",
            "default": 0
          },
          "onlyNewJobs": {
            "title": "Only new jobs since the last run (monitoring)",
            "type": "boolean",
            "description": "Remembers which jobs it has already given you and only returns jobs that are new since the last run. The first run returns every matching job. Ideal for scheduled runs and job alerts. Keep the same company list and filters between runs.",
            "default": false
          },
          "includeClosedJobs": {
            "title": "Also report jobs that were taken down",
            "type": "boolean",
            "description": "In monitoring mode, also add a row for each job that was open last time but has since disappeared from the board (marked <code>changeType: closed</code>).",
            "default": true
          },
          "monitorName": {
            "title": "Monitor name",
            "maxLength": 60,
            "type": "string",
            "description": "Optional. Give each monitor a name (for example <code>toronto-design-jobs</code>) so several schedules can keep separate memories. If left empty, the name is based on your company list. Monitor memory is kept in a key-value store called <code>ats-job-scraper-monitors</code> in your account."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}