{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Postings API & Change Tracker: Greenhouse, Lever, Ashby +4",
    "description": "Hiring signals and job postings API for Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee and Personio. Paste company domains, get every open job, then only new, closed and edited ones each run, plus a surge or freeze signal per company. Slack alerts. No API key.",
    "version": "1.3",
    "x-build-id": "8NHMLaKK09iq4SwQ4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fulox~ats-hiring-signals/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fulox-ats-hiring-signals",
        "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/fulox~ats-hiring-signals/runs": {
      "post": {
        "operationId": "runs-sync-fulox-ats-hiring-signals",
        "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/fulox~ats-hiring-signals/run-sync": {
      "post": {
        "operationId": "run-sync-fulox-ats-hiring-signals",
        "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": {
          "boards": {
            "title": "Companies: domains or career boards",
            "maxItems": 100,
            "type": "array",
            "description": "Company domains (acme.com) or career pages (https://acme.com/careers): the job board is found for you, free. Or name the board yourself: greenhouse:vercel, lever:spotify, ashby:linear, smartrecruiters:Ubisoft2, workable:mindvalley, recruitee:bunq, personio:acme, or a link such as https://jobs.lever.co/spotify, https://apply.workable.com/mindvalley, https://bunq.recruitee.com or https://acme.jobs.personio.de. Invalid entries are skipped free. Duplicates removed. Up to 100.",
            "items": {
              "type": "string"
            }
          },
          "presets": {
            "title": "Company presets (optional)",
            "type": "array",
            "description": "Add a ready-made list of well-known companies without typing them: ai-labs (OpenAI, Anthropic, Cohere...), dev-tools (Vercel, GitLab, Datadog...), fintech (Stripe, Plaid, Brex...), b2b-saas (Notion, Asana, Miro...). 20 companies each, checked 2026-10-14. They are added to your list, count toward the 100-company limit, and their boards are found for you, free. A run finds up to 20 new company domains, so use one or two presets per first run.",
            "items": {
              "type": "string",
              "enum": [
                "ai-labs",
                "dev-tools",
                "fintech",
                "b2b-saas"
              ],
              "enumTitles": [
                "AI labs (20)",
                "Developer tools (20)",
                "Fintech (20)",
                "B2B SaaS (20)"
              ]
            },
            "default": []
          },
          "emitBaseline": {
            "title": "List every open posting on a company's first run",
            "type": "boolean",
            "description": "On a company's first run, output every open posting (after your filters) as a baseline row; each row is charged. Turn off to record the starting point only (one charge for the company check).",
            "default": true
          },
          "titleIncludes": {
            "title": "Only titles containing",
            "type": "array",
            "description": "Keep postings whose title contains any of these words (not case sensitive). Example: engineer, sales.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Skip titles containing",
            "type": "array",
            "description": "Drop postings whose title contains any of these words. Example: intern.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Only departments or functions",
            "type": "array",
            "description": "Keep postings whose department, team or function (engineering, product, design, data, sales, marketing, customer success, finance, legal, people, operations, security) contains any of these.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Only locations containing",
            "type": "array",
            "description": "Keep postings whose location contains any of these words. Example: Berlin, United States.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote postings only",
            "type": "boolean",
            "description": "Keep only postings marked remote.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Only postings from the last N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep postings first published (or, when the board gives no date, first seen) within this many days, 1 to 365. Older postings are not listed and not charged. Company counts in the board row stay whole. Leave empty for no limit."
          },
          "statuses": {
            "title": "Posting changes to list",
            "type": "array",
            "description": "Which posting rows to deliver: baseline (first-run listing), new, closed, changed. Empty = all. Example: [\"closed\"] gives an expired-jobs feed; [\"new\"] a new-jobs feed. Each company check is still charged once.",
            "items": {
              "type": "string",
              "enum": [
                "baseline",
                "new",
                "closed",
                "changed"
              ],
              "enumTitles": [
                "Baseline (first-run listing)",
                "New postings",
                "Closed postings",
                "Edited postings"
              ]
            },
            "default": []
          },
          "includeDescription": {
            "title": "Add the posting description",
            "type": "boolean",
            "description": "Adds a plain-text description field (HTML removed, up to 5,000 characters) to posting rows. Greenhouse, Ashby, Lever, Recruitee and Personio publish the text; Workable and SmartRecruiters do not (the field is null). Same price.",
            "default": false
          },
          "descriptionIncludes": {
            "title": "Only descriptions containing",
            "type": "array",
            "description": "Keep postings whose description contains any of these words (not case sensitive). Example: kubernetes, visa sponsorship. Works on the five ATSs that publish the text; closed rows carry no text, so they are not listed while this is set.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "watchlistName": {
            "title": "Watchlist name",
            "type": "string",
            "description": "Letters, digits, - and _ (up to 40). Each name keeps its own saved snapshots, so one account can track several lists of companies without mixing their changes.",
            "default": "default"
          },
          "report": {
            "title": "Competitor hiring report",
            "type": "boolean",
            "description": "Adds one free report row that compares the companies in this run: open roles, 7 and 30 day change, function and seniority mix, remote share, median posted salary by function (posted ranges, not actual pay), top tools, and the top 25 tools across all postings with the ones that are rising since your last report. Default: on when two or more companies are read; set false to turn it off. The row is never charged."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL (optional)",
            "type": "string",
            "description": "A Slack incoming webhook (https://hooks.slack.com/...). A digest is posted only when something changed. Free."
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "An https URL that receives the same digest as JSON (n8n, Make, Zapier, your own endpoint), only when something changed. Free. Private and local addresses are refused."
          },
          "resetState": {
            "title": "Forget saved snapshots",
            "type": "boolean",
            "description": "Forget the saved snapshot (and the saved board lookup) of the listed companies; this run is their first run again.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}