{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse, Lever & Ashby Job Monitor — New Job Alerts",
    "description": "Greenhouse jobs, Lever jobs and Ashby jobs monitor: get every open job from company career pages, then only what changed (new, updated, closed, reposted), with optional Slack/webhook alerts. Official public APIs, no login, no proxies. From $0.001 per job.",
    "version": "1.4",
    "x-build-id": "I3hgrkVxMYRmGQRHq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lone_fascia~ats-job-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lone_fascia-ats-job-monitor",
        "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/lone_fascia~ats-job-monitor/runs": {
      "post": {
        "operationId": "runs-sync-lone_fascia-ats-job-monitor",
        "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/lone_fascia~ats-job-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-lone_fascia-ats-job-monitor",
        "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": "Job board URLs or companies",
            "maxItems": 500,
            "type": "array",
            "description": "One per line (max 500 in total, including company packs; duplicates are removed). Leave empty if you only use a company pack. Guaranteed path: paste the company's job board URL, e.g. https://job-boards.greenhouse.io/duolingo, https://boards.greenhouse.io/airbnb, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/posthog, or write ats:slug (greenhouse:airbnb, lever:spotify, ashby:ramp). Bonus: a plain company domain (stripe.com) is auto-detected from links on the company website, then by guessing the board name; check the 'detection' field (confirmed / guessed / ambiguous / not_found). Boards that can't be found get a free row.",
            "items": {
              "type": "string"
            }
          },
          "companyPacks": {
            "title": "Company packs (optional)",
            "type": "array",
            "description": "Add a preset list of verified job boards to your companies. 'YC startups (verified boards)': 88 Y Combinator startups (active, hiring, 20+ staff, from a random sample of 200) whose Greenhouse, Lever or Ashby board was found via a link on the company website or a name guess confirmed by the job content, and re-checked on 2026-10-24 to have open jobs. Pack boards count like pasted board links (detection 'input', never charged as company-resolved) and toward the 500-company limit. Tip: in snapshot mode use filters (keywords, locations, posted within N days) to keep the run small; the pack had ~2,100 open jobs at verification.",
            "items": {
              "type": "string",
              "enum": [
                "yc-startups-verified"
              ],
              "enumTitles": [
                "YC startups (verified boards): 88 Y Combinator startups on Greenhouse, Lever or Ashby"
              ]
            },
            "default": []
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "snapshot",
              "monitor"
            ],
            "type": "string",
            "description": "Snapshot outputs every matching job. Monitor compares with the previous run of the same monitor ID and outputs only changes. The first monitor run of a company records a baseline and outputs no changes (see 'Output all jobs on the first monitor run'). Schedule monitor runs (e.g. daily) in Apify Schedules.",
            "default": "snapshot"
          },
          "monitorId": {
            "title": "Monitor ID",
            "type": "string",
            "description": "Name of this watchlist (letters, digits, hyphens), e.g. 'fintech-targets'. Runs with the same monitor ID share state, so keep it fixed when you add or remove companies. If empty, an ID is derived from the company list and filters (changing them starts a new baseline). State lives in a named key-value store 'monitor-<yourUserId>-<monitorId>' in your account."
          },
          "outputBaselineOnFirstRun": {
            "title": "Output all jobs on the first monitor run",
            "type": "boolean",
            "description": "Monitor mode only. Off (default): the first check of a company only records a baseline (no rows, only the monitor-check event). On: also output all its current jobs with changeType 'baseline' (charged as 'job', like snapshot).",
            "default": false
          },
          "monitorGuessedCompanies": {
            "title": "Monitor guessed boards",
            "type": "boolean",
            "description": "Monitor mode only. Off (default, confirm-first): a company domain whose board was only guessed from its name and not confirmed (detection 'guessed') is NOT monitored and NOT charged; you get a free Companies row with status 'needs_confirmation' and the found board URL. Paste that URL (or ats:slug) into Companies to confirm it. On: guessed boards are monitored like the others (monitor-check / job-change charged).",
            "default": false
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "pattern": "^https://.+",
            "type": "string",
            "description": "Monitor mode only. If set and there are changes, one POST is sent at the end of the run to this https URL: a Slack incoming webhook (hooks.slack.com, posts a short summary) or any URL (generic JSON with all change rows, without descriptions). Not charged. You can also use Apify integrations (Zapier, Make, webhooks). If delivery fails, the undelivered changes are re-sent with the next run's changes; all changes are always in the dataset."
          },
          "keywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these (case-insensitive), e.g. engineer, sales. Empty = all jobs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Departments / teams",
            "type": "array",
            "description": "Keep only jobs whose department or team contains one of these (case-insensitive). Empty = all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep only jobs whose location contains one of these (case-insensitive), e.g. London, Remote, Germany. Empty = all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs marked remote by the ATS or with 'remote' in the location.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Snapshot mode only: keep jobs posted (or, on Greenhouse, first published) within the last N days. 0 = no limit. Ignored in monitor mode so that aging jobs are not reported as closed.",
            "default": 0
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Add the plain-text job description (descriptionText) to every job row.",
            "default": true
          },
          "stripContactInfo": {
            "title": "Remove emails and phone numbers from descriptions",
            "type": "boolean",
            "description": "Replaces email addresses and phone numbers in descriptionText with [email removed] / [phone removed] (recruiter contact details).",
            "default": true
          },
          "websiteLookup": {
            "title": "Domain auto-detection: read the company website",
            "type": "boolean",
            "description": "For domain inputs only. On (default): first look for Greenhouse, Lever or Ashby links on the company's homepage, /careers, /jobs, /company/careers and /about/careers (one short request each), then fall back to guessing the board name. Off: guess only.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}