{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse, Lever & Ashby Jobs API with New-Job Alerts",
    "description": "Job postings API for company career sites on Greenhouse, Lever, Ashby, Workable and SmartRecruiters. Give it a company name or domain. You get normalised location, country and salary, a country filter, and alerts for new and removed jobs between runs.",
    "version": "0.1",
    "x-build-id": "x0uJm8dgxFRTcW1hG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neorhapsody~ats-jobs-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neorhapsody-ats-jobs-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/neorhapsody~ats-jobs-feed/runs": {
      "post": {
        "operationId": "runs-sync-neorhapsody-ats-jobs-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/neorhapsody~ats-jobs-feed/run-sync": {
      "post": {
        "operationId": "run-sync-neorhapsody-ats-jobs-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",
        "required": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies",
            "minItems": 1,
            "type": "array",
            "description": "One company per line. Accepts a company slug (\"stripe\"), a company domain (\"notion.so\") for auto-detection, a job board URL (\"https://jobs.lever.co/spotify\"), or an explicit \"platform:slug\" (\"greenhouse:stripe\", \"smartrecruiters:BoschGroup\"). Through the API, send a JSON list of strings, e.g. [\"stripe\", \"lever:spotify\"].",
            "items": {
              "type": "string"
            }
          },
          "platforms": {
            "title": "Platforms to try",
            "minItems": 1,
            "type": "array",
            "description": "Which ATS platforms to probe when a slug or domain is given. Pick at least one.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "workable",
                "smartrecruiters"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workable",
                "SmartRecruiters"
              ]
            },
            "default": [
              "greenhouse",
              "lever",
              "ashby",
              "workable",
              "smartrecruiters"
            ]
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Only jobs located in these countries. Use ISO codes or country names, such as MY, SG or United States. Regions (Europe, EMEA, APAC) and \"Remote\" aren't accepted: unrecognised values are ignored with a warning, and if none is recognised, no companies are looked up and nothing is charged. Use \"Remote jobs only\" for remote roles. Leave empty for all.",
            "items": {
              "type": "string"
            }
          },
          "includeRemoteWithoutCountry": {
            "title": "Include remote jobs with no country",
            "type": "boolean",
            "description": "When filtering by country, also keep remote jobs whose location does not name any country (e.g. \"Remote\", \"Anywhere\").",
            "default": false
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs marked as remote.",
            "default": false
          },
          "titleKeywords": {
            "title": "Title must contain (any)",
            "type": "array",
            "description": "Keep jobs whose title contains any of these words (case-insensitive), e.g. engineer, data, sales.",
            "items": {
              "type": "string"
            }
          },
          "excludeTitleKeywords": {
            "title": "Title must not contain",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words, e.g. intern, senior.",
            "items": {
              "type": "string"
            }
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "all",
              "newOnly",
              "changes"
            ],
            "type": "string",
            "description": "All jobs (each marked new or existing), only jobs that are new since the last run, or changes (new + removed).",
            "default": "all"
          },
          "monitorId": {
            "title": "Monitor ID",
            "pattern": "\\S",
            "minLength": 1,
            "type": "string",
            "description": "Name for this watch list (must not be blank). Runs with the same Monitor ID share memory of previously seen jobs; use different IDs for separate schedules.",
            "default": "default"
          },
          "baselineFirstRun": {
            "title": "Silent first run",
            "type": "boolean",
            "description": "In 'new only' / 'changes' mode, the first run for a board just records the current jobs and outputs nothing, so you only get alerts for genuinely new postings afterwards.",
            "default": false
          },
          "stateStore": {
            "title": "State store (pick an existing one)",
            "type": "string",
            "description": "Optional. Pick a key-value store from your account to keep the memory of seen jobs in, for example one an earlier tool or schedule already uses. Apify then lets the Actor read and write that store, and nothing else in your account. When set, it replaces \"State store name\". Through the API, send the store's ID or name. Leave empty to use \"State store name\"."
          },
          "stateStoreName": {
            "title": "State store name",
            "pattern": "^(\\s*|[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)$",
            "maxLength": 63,
            "type": "string",
            "description": "Name of the key-value store that remembers jobs between runs. The Actor creates it in your account on the first run. Use only letters, digits and hyphens (not at the start or end), up to 63 characters, e.g. my-job-alerts. Empty means the default. Usually leave as is, and use Monitor ID to separate watch lists. To use a store that already exists (made by you or another tool), select it in \"State store (pick an existing one)\" instead: the Actor isn't allowed to open it by name. If it can't open the name you type, it uses its own store \"<name>-own\" and warns you.",
            "default": "neorhapsody-ats-jobs-feed-state-v2"
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Add the full plain-text description. Emails and phone numbers of individuals are removed. Makes results larger (and SmartRecruiters slower: one extra request per job, max 200 per company).",
            "default": false
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Limit output per company (0 = no limit). For SmartRecruiters this limits how many postings are fetched before filters are applied (otherwise up to 2000), so with country or title filters, leave it at 0 or set it high. A BOARD_TRUNCATED warning is logged when a board is cut.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Companies in parallel",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many companies to process at the same time (1-5). Requests to the same platform are always spaced out politely.",
            "default": 3
          },
          "requestDelayMs": {
            "title": "Delay between requests to the same host (ms)",
            "minimum": 200,
            "maximum": 10000,
            "type": "integer",
            "description": "Polite rate limit per host. Minimum 200 ms.",
            "default": 500
          },
          "disableErrorReports": {
            "title": "Turn off error reports",
            "type": "boolean",
            "description": "When a run fails, the Actor sends the developer a small anonymous error report (error type, cleaned message, build, stage, memory and coarse input shape: no company names, keywords, URLs or IDs). Turn this on to send nothing. See \"Error reports\" in the README.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}