{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Jobs Scraper: Greenhouse, Lever, Ashby & Workday",
    "description": "Scrape job listings from company job boards on Greenhouse, Lever, Ashby and Workday into one normalized schema. Paste board URLs or careers pages, filter by keyword, location, remote or department, and use incremental mode to get only new jobs on a schedule. Pay per job. No browser or proxy.",
    "version": "0.0",
    "x-build-id": "42ohhVnhIdstG5d4H"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rjmacarthy~ats-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rjmacarthy-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/rjmacarthy~ats-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rjmacarthy-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/rjmacarthy~ats-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rjmacarthy-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 (job board URLs, careers pages or ats:slug)",
            "type": "array",
            "description": "One company per line. Accepted formats:<br>• <b>Job board URL</b>: <code>https://boards.greenhouse.io/stripe</code>, <code>https://jobs.lever.co/spotify</code>, <code>https://jobs.ashbyhq.com/ramp</code>, <code>https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite</code><br>• <b>ATS + slug</b>: <code>greenhouse:stripe</code>, <code>lever:spotify</code>, <code>ashby:ramp</code>, <code>workday:nvidia.wd5/NVIDIAExternalCareerSite</code><br>• <b>Company careers page</b>: <code>https://www.figma.com/careers</code> (the ATS is auto-detected; skipped with a warning if none is found)<br>• <b>Bare slug</b>: <code>stripe</code> (tried on Greenhouse, Ashby, then Lever)<br>Optionally add <code> | Company Name</code> at the end to set the company name in the output.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (any match)",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these keywords (case-insensitive, matches word starts: <code>engineer</code> matches 'Engineering'). Leave empty to keep all jobs.",
            "items": {
              "type": "string"
            }
          },
          "keywordsMatchIn": {
            "title": "Match keywords in",
            "enum": [
              "title",
              "titleAndDescription"
            ],
            "type": "string",
            "description": "Where to look for the keywords. Matching descriptions is broader but noisier. For Workday it requires one extra request per candidate job.",
            "default": "title"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these keywords, e.g. <code>Intern</code>, <code>Senior</code>, <code>Manager</code>.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (any match)",
            "type": "array",
            "description": "Keep only jobs whose location contains one of these texts (case-insensitive substring), e.g. <code>London</code>, <code>United States</code>, <code>Remote</code>, <code>Germany</code>.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs marked remote by the ATS or with 'Remote' in the location.",
            "default": false
          },
          "departments": {
            "title": "Departments / teams (any match)",
            "type": "array",
            "description": "Keep only jobs whose department or team contains one of these texts, e.g. <code>Engineering</code>, <code>Sales</code>. Workday boards do not publish departments, so Workday jobs never match this filter.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs first published within this many days. Leave empty for any date."
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Cap the number of jobs saved per company (newest first). 0 = no limit.",
            "default": 0
          },
          "includeDescription": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Add <code>descriptionHtml</code> and <code>descriptionText</code> to every job. Makes the dataset much larger. For Workday it adds one request per job.",
            "default": false
          },
          "onlyNewJobs": {
            "title": "Only new jobs (incremental mode)",
            "type": "boolean",
            "description": "Remember which jobs were already delivered and output only jobs that are new since the previous run with the same state key. The first run outputs all matching jobs and remembers them. You pay only for new jobs. Ideal for scheduled runs.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "pattern": "^[a-zA-Z0-9_.-]{1,50}$",
            "type": "string",
            "description": "Name of the memory used by incremental mode. Use a different key for each schedule or watchlist so they don't interfere (letters, numbers, - _ . only).",
            "default": "default"
          },
          "resetState": {
            "title": "Reset state (forget seen jobs)",
            "type": "boolean",
            "description": "Forget previously seen jobs for this state key before running, so all matching jobs are output again. Use it after changing filters. Turn it off again afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed for the public ATS APIs. Use a proxy only if you see blocking (HTTP 403/429) on Workday or careers pages.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxConcurrency": {
            "title": "Max concurrent companies",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many companies are scraped in parallel.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}