{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse Jobs Scraper: Lever, Ashby, Workday API",
    "description": "ATS Jobs API: Greenhouse, Lever, Ashby, Workday, Workable & SmartRecruiters jobs scraper. Enter company domains or careers URLs; ATS is auto-detected. One normalized schema with salary, remote flag & dates, filters and new-job monitoring.",
    "version": "1.0",
    "x-build-id": "fivOfwkN0oBFtcX5K"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/adyg~ats-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-adyg-ats-jobs-api",
        "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/adyg~ats-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-adyg-ats-jobs-api",
        "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/adyg~ats-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-adyg-ats-jobs-api",
        "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 (domains, careers URLs, ATS URLs or board tokens)",
            "minItems": 1,
            "type": "array",
            "description": "One company per line. Accepted formats:<br>• Company domain: <code>stripe.com</code> (careers page is scanned and ATS boards are probed)<br>• Careers page URL: <code>https://www.figma.com/careers/</code><br>• ATS board URL: <code>https://boards.greenhouse.io/stripe</code>, <code>https://jobs.lever.co/spotify</code>, <code>https://jobs.ashbyhq.com/notion</code>, <code>https://apply.workable.com/huggingface</code>, <code>https://jobs.smartrecruiters.com/BoschGroup</code>, <code>https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite</code><br>• Board token: <code>notion</code> (all token-based ATSs are tried)<br>• Prefixed token to skip detection: <code>greenhouse:stripe</code>, <code>lever:spotify</code>, <code>ashby:notion</code>, <code>workable:huggingface</code>, <code>smartrecruiters:BoschGroup</code><br>Workday sites must be given as a URL (or found on the company's careers page).",
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of job postings to save per company (after filters). Leave empty or 0 for no limit. Large Workday and SmartRecruiters employers can have thousands of open roles."
          },
          "maxItems": {
            "title": "Max jobs in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after saving this many jobs across all companies. Leave empty or 0 for no limit. The run also stops automatically when your 'Maximum cost per run' is reached."
          },
          "keywords": {
            "title": "Keywords (match any)",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these words or phrases (case-insensitive, whole words). Example: <code>engineer</code>, <code>data scientist</code>, <code>product manager</code>.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words. Example: <code>intern</code>, <code>senior</code>.",
            "items": {
              "type": "string"
            }
          },
          "searchInDescription": {
            "title": "Also match keywords in job description",
            "type": "boolean",
            "description": "When enabled, keywords are matched against the title and the full job description.",
            "default": false
          },
          "locations": {
            "title": "Locations (match any)",
            "type": "array",
            "description": "Keep only jobs where any location (or the country) contains one of these words or phrases, case-insensitive, whole words (<code>US</code> won't match <i>Austria</i>). Remote jobs also match <code>Remote</code>. Example: <code>New York</code>, <code>London</code>, <code>Germany</code>, <code>Remote</code>.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs marked as remote by the ATS (or with 'Remote' in the location).",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs first published within this many days. Jobs whose ATS does not expose a posting date are kept."
          },
          "departments": {
            "title": "Departments / teams (match any)",
            "type": "array",
            "description": "Keep only jobs whose department or team contains one of these strings. Example: <code>Engineering</code>, <code>Sales</code>.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment types (match any)",
            "type": "array",
            "description": "Keep only these normalized employment types: <code>Full-time</code>, <code>Part-time</code>, <code>Contract</code>, <code>Internship</code>, <code>Temporary</code>. Jobs whose ATS doesn't publish an employment type (common on Greenhouse) are kept.",
            "items": {
              "type": "string"
            }
          },
          "monitoringMode": {
            "title": "Only new or changed jobs since last run (monitoring)",
            "type": "boolean",
            "description": "Remember every job saved per company in a named key-value store and on later runs save only postings that are new (or changed, see below). Perfect for scheduled runs that feed alerts, Slack, CRMs or job boards. The first run saves everything and creates the baseline. Jobs skipped because of the max-jobs limits are not remembered, so they show up on a later run.",
            "default": false
          },
          "monitoringIncludeChanged": {
            "title": "Also output changed postings",
            "type": "boolean",
            "description": "In monitoring mode, also save jobs whose title, location, department, employment type or salary changed since they were last seen (marked with changeType = 'changed').",
            "default": true
          },
          "monitoringStoreName": {
            "title": "Monitoring state store name",
            "type": "string",
            "description": "Name of the key-value store holding the 'already seen' state. Use a different name for each independent monitor (e.g. one per schedule or client).",
            "default": "ats-jobs-monitor"
          },
          "includeDescription": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Save the full description as plain text and HTML. Turn off for faster, smaller runs (Workday and SmartRecruiters need one extra request per job for descriptions).",
            "default": true
          },
          "fetchGreenhouseSalary": {
            "title": "Fetch structured Greenhouse pay ranges",
            "type": "boolean",
            "description": "Greenhouse only exposes structured pay ranges per job. Enable to make one extra request per Greenhouse job to get exact min/max salary. When disabled, salary is still extracted from the description text when present.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Companies processed in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many companies are scraped at the same 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}