{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Job Feed — Greenhouse, Lever, Ashby, Workday & More",
    "description": "Jobs straight from six public ATS APIs (Greenhouse, Lever, Ashby, Workable, Personio, Workday) — no scraping, no login, no keys. Normalises salaries to annual USD, de-duplicates across boards, and can return only jobs you have not seen yet.",
    "version": "0.1",
    "x-build-id": "QfV43pRbJd7enc1e5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/contributory_garnet_hyz~ats-job-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-contributory_garnet_hyz-ats-job-feed",
        "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/contributory_garnet_hyz~ats-job-feed/runs": {
      "post": {
        "operationId": "runs-sync-contributory_garnet_hyz-ats-job-feed",
        "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/contributory_garnet_hyz~ats-job-feed/run-sync": {
      "post": {
        "operationId": "run-sync-contributory_garnet_hyz-ats-job-feed",
        "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": "Companies",
            "uniqueItems": true,
            "type": "array",
            "description": "Company slugs or career-page URLs. A slug is usually just the lowercase company name (try \"stripe\", \"gitlab\", \"openai\"). Full careers URLs also work and are required for Workday boards, e.g. \"https://acme.wd5.myworkdayjobs.com/en-US/AcmeCareers\". Greenhouse, Lever, Ashby, Workable, Personio and Workday are supported and detected automatically.",
            "default": [
              "stripe",
              "gitlab",
              "anthropic",
              "reddit",
              "figma",
              "brex",
              "openai",
              "notion",
              "ramp",
              "linear",
              "supabase",
              "posthog",
              "nvidia"
            ],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Only keep jobs whose title, department or summary contains at least one of these words (case-insensitive). Leave empty for everything.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ats": {
            "title": "Force ATS",
            "enum": [
              "auto",
              "greenhouse",
              "lever",
              "ashby",
              "workable",
              "workday",
              "personio"
            ],
            "type": "string",
            "description": "Skip auto-detection and query one ATS only. Leave on Auto unless you already know the answer.",
            "default": "auto"
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only jobs whose location or workplace type says remote.",
            "default": false
          },
          "salaryOnly": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "Drop every job that has no published pay range. About 43% of the bundled pool has one, so this typically cuts the result set by more than half — use it when pay is the whole point and you would rather get 40 priced jobs than 200 unpriced ones.",
            "default": false
          },
          "minSalaryUsd": {
            "title": "Minimum salary (USD/year)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose published salary reaches this annual USD amount. Jobs with no published salary are dropped when this is set — that is the point of the filter.",
            "default": 0
          },
          "excludeSenior": {
            "title": "Exclude senior roles",
            "type": "boolean",
            "description": "Drop titles containing senior, staff, principal, lead, head, director, VP, manager, architect.",
            "default": false
          },
          "excludeJunior": {
            "title": "Exclude junior roles",
            "type": "boolean",
            "description": "Drop titles containing junior, intern, internship, entry level, graduate, apprentice.",
            "default": false
          },
          "excludeNonTech": {
            "title": "Exclude non-technical roles",
            "type": "boolean",
            "description": "Drop sales, marketing, recruiting, finance, legal, support and operations titles.",
            "default": false
          },
          "maxAgeDays": {
            "title": "Max posting age (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop postings older than this. Leave 0 to keep everything — many ATS boards leave evergreen roles up for years.",
            "default": 0
          },
          "maxJobs": {
            "title": "Max jobs returned",
            "minimum": 1,
            "type": "integer",
            "description": "How many jobs to output after filtering and ranking (jobs with a published salary first, then higher salary, then newer).",
            "default": 200
          },
          "maxPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Cap how many rows a single company can take in the output, so one high-paying employer cannot flood the feed. Set 0 to disable the cap.",
            "default": 20
          },
          "onlyNew": {
            "title": "Only return jobs not seen before",
            "type": "boolean",
            "description": "Skip every job this Actor already returned in a previous run by the same account. Meant for scheduled runs: you only pay for genuinely new postings instead of re-buying the same list every day. The first run returns everything and remembers it; history is capped at the 50,000 most recent fingerprints.",
            "default": false
          },
          "resetSeen": {
            "title": "Forget the seen history",
            "type": "boolean",
            "description": "Clear the remembered jobs for this account before running, so the next run returns everything again. Use it after a long pause, or if you want a full list once more.",
            "default": false
          },
          "workdayPayRanges": {
            "title": "Dig pay ranges out of Workday postings",
            "type": "boolean",
            "description": "Workday's list API has no salary field, so this opens up to 20 Workday job pages per company and reads the pay range from the description. It is the only way to get a salary for Workday companies, but it costs extra requests — turn it off if you only want the job list.",
            "default": true
          },
          "useVerifiedPool": {
            "title": "Use the bundled pool of 260 verified companies",
            "type": "boolean",
            "description": "Ignore the companies list above and scan the bundled pool instead: 260 companies that were all verified live (18,813 jobs, 2,944 with a published salary). Each entry already knows which ATS answers, so there is no probing. A wide scan like this returns thousands of rows — pair it with keywords, minSalaryUsd and maxJobs to keep the output and the bill small.",
            "default": false
          },
          "maxWorkers": {
            "title": "Concurrent company requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many companies to fetch in parallel. Higher is faster on big lists; lower is gentler on the ATS endpoints. Results keep the input order either way.",
            "default": 6
          },
          "includeDescriptions": {
            "title": "Download job descriptions (Greenhouse)",
            "type": "boolean",
            "description": "Greenhouse boards only ship salary ranges inside the job body. Downloading bodies costs bandwidth: a full-pool run measured 138s with bodies vs 66s without, and salary coverage 44% vs 18%. Ashby and Lever publish salaries as structured fields, so they are unaffected. Forced on when salaryOnly or minSalaryUsd is set.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}