{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Job Feed: Greenhouse, Lever, Ashby, Workable, Recruitee",
    "description": "Get every open job from company career pages on Greenhouse, Lever, Ashby, Workable and Recruitee in one clean format, with salary, location and remote fields. Track new and closed jobs between runs. No personal data.",
    "version": "0.1",
    "x-build-id": "BtaavfHo3sDR396e5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kayorama~ats-job-board-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kayorama-ats-job-board-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/kayorama~ats-job-board-feed/runs": {
      "post": {
        "operationId": "runs-sync-kayorama-ats-job-board-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/kayorama~ats-job-board-feed/run-sync": {
      "post": {
        "operationId": "run-sync-kayorama-ats-job-board-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": {
          "boardUrls": {
            "title": "Job board URLs",
            "type": "array",
            "description": "Career page links on Greenhouse (job-boards.greenhouse.io/gitlab), Lever (jobs.lever.co/spotify), Ashby (jobs.ashbyhq.com/ramp), Workable (apply.workable.com/huggingface) or Recruitee (bunq.recruitee.com). You can also write a short form like greenhouse:gitlab or lever:spotify.",
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Company names (auto-find the board)",
            "type": "array",
            "description": "Don't know which ATS a company uses? Type the name, for example Notion or Hugging Face. We try the likely board slug on each ATS and use the first one that has open jobs. Lookups that find nothing are not charged.",
            "items": {
              "type": "string"
            }
          },
          "lookupAts": {
            "title": "ATS to try for company names",
            "uniqueItems": true,
            "type": "array",
            "description": "Which systems to check when looking up a company name. Fewer systems means fewer requests.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "workable",
                "recruitee"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workable",
                "Recruitee"
              ]
            },
            "default": [
              "greenhouse",
              "lever",
              "ashby",
              "workable",
              "recruitee"
            ]
          },
          "keywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these words, for example engineer or sales. Case does not matter. Leave empty for all jobs.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude title keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words, for example intern or senior.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Location contains",
            "type": "array",
            "description": "Keep only jobs where the location or country contains one of these, for example Amsterdam, Germany or Remote.",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Department or team contains",
            "type": "array",
            "description": "Keep only jobs whose department or team contains one of these, for example Engineering.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs the ATS marks as remote (or with Remote in the location on Greenhouse).",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs published in the last N days. Leave empty for any date. Jobs without a publish date are dropped when this is set."
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Add the full job description. Turn off for smaller, faster runs. Email addresses and phone numbers in descriptions are always replaced with [redacted].",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "both"
            ],
            "type": "string",
            "description": "Plain text, HTML, or both.",
            "default": "text"
          },
          "maxDescriptionChars": {
            "title": "Max description length",
            "minimum": 200,
            "maximum": 200000,
            "type": "integer",
            "description": "Longer descriptions are cut to this many characters.",
            "default": 20000
          },
          "trackChanges": {
            "title": "Track new and closed jobs",
            "type": "boolean",
            "description": "Compare each board with the previous run and mark every job as new, updated or unchanged, plus a row for each job that was taken down (closed). The first run only saves the snapshot. Use it with a schedule.",
            "default": false
          },
          "outputMode": {
            "title": "Rows to write",
            "enum": [
              "all",
              "changesOnly"
            ],
            "type": "string",
            "description": "All jobs: every open job every run. Changes only: just new, updated and closed jobs, which keeps scheduled runs cheap. Only used when change tracking is on.",
            "default": "all"
          },
          "stateStoreName": {
            "title": "Snapshot store name",
            "type": "string",
            "description": "Named key-value store that keeps the job list between runs. Use a different name for each watch list. Lowercase letters, digits and dashes.",
            "default": "ats-job-board-feed-state"
          },
          "maxJobsPerBoard": {
            "title": "Max jobs per board",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Read at most this many jobs from one board. If a board has more, closed jobs are not reported for it in that run.",
            "default": 1000
          },
          "maxJobsTotal": {
            "title": "Max job rows per run",
            "minimum": 1,
            "maximum": 500000,
            "type": "integer",
            "description": "Stop writing job rows after this many in one run.",
            "default": 10000
          },
          "requestDelayMs": {
            "title": "Delay between requests to the same host (ms)",
            "minimum": 250,
            "maximum": 30000,
            "type": "integer",
            "description": "Minimum wait between two requests to the same API host. A longer Crawl-delay in robots.txt wins.",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}