{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse, Lever & Ashby Jobs Scraper + Monitor",
    "description": "Scrape open jobs from company career sites on Greenhouse, Lever, Ashby, Workable and Recruitee via their official public APIs. Track a watchlist of companies and get only new or closed jobs on each run (hiring signals). Salary, remote and job type normalized. No proxies.",
    "version": "0.2",
    "x-build-id": "M5tHXNzDNs1wyahyd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mayevil~greenhouse-lever-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mayevil-greenhouse-lever-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/mayevil~greenhouse-lever-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-mayevil-greenhouse-lever-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/mayevil~greenhouse-lever-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-mayevil-greenhouse-lever-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 (board URLs or slugs)",
            "type": "array",
            "description": "One company per line. Accepted: https://boards.greenhouse.io/airbnb, https://job-boards.greenhouse.io/x, https://jobs.lever.co/palantir, https://jobs.eu.lever.co/x, https://jobs.ashbyhq.com/ramp, https://apply.workable.com/huggingface, https://x.recruitee.com, \"greenhouse:airbnb\", \"lever:palantir\", \"lever-eu:x\", \"ashby:ramp\", \"workable:huggingface\", \"recruitee:x\", or a bare slug like \"ramp\" (the Actor probes each ATS and uses the first board that has jobs).",
            "items": {
              "type": "string"
            }
          },
          "atsToTry": {
            "title": "ATS platforms to probe for bare slugs",
            "type": "array",
            "description": "Order in which ATS platforms are probed when an entry is a bare slug. Entries given as URLs or with an \"ats:\" prefix ignore this.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "workable",
                "recruitee"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workable",
                "Recruitee"
              ]
            },
            "default": [
              "greenhouse",
              "lever",
              "ashby",
              "workable",
              "recruitee"
            ]
          },
          "titleKeywords": {
            "title": "Job title must contain (any of)",
            "type": "array",
            "description": "Case-insensitive substrings. A job is kept if its title contains at least one. Leave empty to keep all titles.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleExcludeKeywords": {
            "title": "Job title must NOT contain",
            "type": "array",
            "description": "Case-insensitive substrings. Jobs whose title contains any of these are dropped (e.g. \"intern\", \"senior\").",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location contains (any of)",
            "type": "array",
            "description": "Case-insensitive substrings matched against the job location(s) and country, e.g. \"London\", \"Singapore\", \"Hong Kong\", \"Remote\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs flagged as remote by the ATS (or with \"remote\" in the location when the ATS has no flag).",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs published in the last N days. 0 = no date filter. Jobs without a published date are kept.",
            "default": 0
          },
          "monitorMode": {
            "title": "Monitor mode (output only NEW jobs since the last run)",
            "type": "boolean",
            "description": "Remembers which jobs it has already seen (in a named key-value store) and outputs only jobs that are new since the previous run with the same state key. You only pay for new jobs, which makes scheduled hiring-signal monitoring cheap.",
            "default": false
          },
          "monitorStateKey": {
            "title": "Monitor state key",
            "type": "string",
            "description": "Name of the watchlist memory. Use a different key for each independent watchlist/schedule.",
            "default": "default"
          },
          "skipExistingOnFirstRun": {
            "title": "Skip existing jobs on the first monitored run",
            "type": "boolean",
            "description": "When a company is seen for the first time in monitor mode, just record its current jobs as a baseline instead of outputting them.",
            "default": false
          },
          "outputClosedJobs": {
            "title": "Also output jobs that were closed/removed",
            "type": "boolean",
            "description": "In monitor mode, also output a record with status \"closed\" for each job that disappeared from a board since the last run.",
            "default": false
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Include the full job description. Turn off for smaller, faster datasets.",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html"
            ],
            "type": "string",
            "description": "Plain text (clean, LLM-friendly) or the original HTML.",
            "default": "text"
          },
          "includeGreenhouseSalary": {
            "title": "Fetch Greenhouse pay ranges for large outputs",
            "type": "boolean",
            "description": "Greenhouse publishes pay-transparency ranges only on single-job pages. When 100 or fewer Greenhouse jobs per company are output, they are fetched automatically together with the description. Turn this on to also fetch them for larger outputs (one extra request per job, slower). Ashby, Lever and Recruitee salaries are always included when published.",
            "default": false
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on output jobs per company. 0 = no cap.",
            "default": 0
          },
          "maxJobsTotal": {
            "title": "Max jobs in total",
            "minimum": 0,
            "type": "integer",
            "description": "The run stops gracefully after outputting this many jobs (cost control). 0 = no cap.",
            "default": 1000
          },
          "maxConcurrency": {
            "title": "Max concurrent companies",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many companies are processed in parallel. Requests to the same ATS host are additionally throttled (Lever: max 1 request/second as requested in its robots.txt).",
            "default": 5
          },
          "maxRequestsPerMinute": {
            "title": "Max companies started per minute",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Upper bound on how many company boards are started per minute.",
            "default": 60
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}