{
  "openapi": "3.0.1",
  "info": {
    "title": "Career Site Jobs Scraper: Greenhouse, Lever, Ashby, Workday",
    "description": "Open jobs from company career sites on Greenhouse, Lever, Ashby, Workday and 4 more ATS, in one schema. Monitor new jobs; optional AI fields. Pay per job.",
    "version": "0.1",
    "x-build-id": "Kbbjgnfl7popagszG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fetchwise~career-site-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fetchwise-career-site-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/fetchwise~career-site-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fetchwise-career-site-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/fetchwise~career-site-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fetchwise-career-site-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",
            "type": "array",
            "description": "One company per line. Best is its job board link: boards.greenhouse.io/stripe, jobs.lever.co/palantir, jobs.ashbyhq.com/ramp, nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, careers.smartrecruiters.com/BoschGroup, apply.workable.com/huggingface, bunq.recruitee.com or ottonova.jobs.personio.de. Also accepted: platform and board name as greenhouse:stripe; a company website such as stripe.com, whose careers page must link to one of these boards; or a bare board name such as stripe, which is tried on Greenhouse, Lever, Ashby, Workable, Recruitee and Personio (Workday and SmartRecruiters need the link). Each company is read once; a company that cannot be read gets one free row with the reason.",
            "items": {
              "type": "string"
            }
          },
          "titleKeywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Keep only jobs whose title contains any of these words or phrases, ignoring case, whole words only (\"engineer\" matches \"Software Engineer\", not \"Engineering Manager\"). Jobs left out are not charged. Empty keeps every title.",
            "items": {
              "type": "string"
            }
          },
          "excludeTitleKeywords": {
            "title": "Exclude title keywords",
            "type": "array",
            "description": "Leave out jobs whose title contains any of these words or phrases, ignoring case, whole words only, e.g. senior, intern. Wins over Title keywords.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep only jobs in one of these places: a city, US state, country name or two-letter country code (DE). Matched against every location of the job, whole words. Jobs with no location are left out when this is set.",
            "items": {
              "type": "string"
            }
          },
          "workplaceTypes": {
            "title": "Workplace types",
            "type": "array",
            "description": "Keep only jobs with one of these workplace types, as the board states it or as the location says (e.g. \"Remote - US\"). Jobs whose workplace type is unknown are left out when this is set; the run summary counts them.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only jobs with one of these employment types. Jobs whose type is unknown are left out when this is set (Greenhouse rarely states one).",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "temporary",
                "internship"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship"
              ]
            }
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Keep only jobs whose department or team contains one of these texts, ignoring case, e.g. Engineering, Sales.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep only jobs posted in the last N days. Jobs whose board gives no posting date are left out when this is set."
          },
          "onlyWithSalary": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Keep only jobs with a salary from the board or from a pay range in the description text. A salary the AI step finds does not count here, so no AI charge is made for a job that is then left out.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "both",
              "none"
            ],
            "type": "string",
            "description": "How the job description is returned. html is the board's own markup with scripts, styles and frames removed. none is fastest: Workday and SmartRecruiters then skip one request per job. Descriptions are cut at 50,000 characters. AI enrichment needs a description and fetches it even with none.",
            "default": "text"
          },
          "maxJobsPerCompany": {
            "title": "Maximum jobs per company",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "At most this many jobs per company, newest first when the board gives dates. With a cap below the board's size, closed jobs are not reported for that company (the Actor cannot tell closed from not read).",
            "default": 1000
          },
          "maxItems": {
            "title": "Maximum charged jobs",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "At most this many charged job rows in the whole run. Free rows (closed jobs, errors) do not count. The run stops cleanly when it is reached.",
            "default": 1000
          },
          "onlyNewJobs": {
            "title": "Monitor: only new jobs",
            "type": "boolean",
            "description": "Monitor mode. Return only jobs not delivered before under this monitor name, plus free rows for delivered jobs that have closed. Schedule the Actor to get a feed. The first run returns every matching job, unless \"Skip existing jobs on the first run\" is on.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "pattern": "^[a-zA-Z0-9_-]{1,40}$",
            "type": "string",
            "description": "Only with monitor mode. Runs with the same name share what was delivered; use different names for separate watchlists. Changing filters keeps the history: a job that now passes the filters and was never delivered comes as new.",
            "default": "default"
          },
          "skipExistingOnFirstRun": {
            "title": "Skip existing jobs on the first run",
            "type": "boolean",
            "description": "Only with monitor mode. On the first run of a monitor name for a company, save the jobs that are open now without returning or charging them; later runs return only jobs posted after that. Good for alerts on new roles only.",
            "default": false
          },
          "reportClosedJobs": {
            "title": "Report closed jobs",
            "type": "boolean",
            "description": "Only with monitor mode. Add a free row with changeType \"closed\" for each delivered job that is no longer on its board, so a job board can delist it.",
            "default": true
          },
          "alertWebhookUrl": {
            "title": "Alert webhook URL",
            "type": "string",
            "description": "Optional. After a monitor run with new or closed jobs, send one short message: a Slack or Discord incoming webhook gets readable text, any other https URL (Make, Zapier, n8n) gets JSON. Nothing is sent when nothing changed."
          },
          "aiEnrichment": {
            "title": "AI enrichment",
            "type": "boolean",
            "description": "Add AI fields to each delivered job: salary from the description text when the board gives none, seniority, years of experience, skills, job function, visa sponsorship, remote regions and a two-sentence summary. Charged per enriched job as a separate event; a job the AI step could not enrich is not charged for it.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Companies at the same time",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Companies read at the same time. Requests to one ATS host are also limited per host.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Time limit per HTTP request. A company whose board does not answer gets a free row with the error.",
            "default": 30
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed: these are public APIs that companies publish so their jobs get indexed. Apify datacenter proxy or your own proxies work if a board rate-limits you. Residential proxy is not supported.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}