{
  "data": {
    "id": "B9tylrs090JyxycAl",
    "actId": "iAMfb4Uf2haeImsKk",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-11-10T16:22:26.060Z",
    "finishedAt": "2026-11-10T16:22:37.009Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 10859,
      "runTimeSecs": 10.859,
      "computeUnits": 0.012065555555555555,
      "imageSizeBytes": 319399424
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Greenhouse Jobs Scraper Input\",\n  \"description\": \"Scrape jobs from Greenhouse company boards by token, board URL, job URL, company name or domain. Get structured pay, locations, departments, questions and dates.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to fetch: jobs from company boards, specific job URLs, or company board lookup.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"companyJobs\",\n        \"jobDetails\",\n        \"companySearch\",\n        \"getJobs\",\n        \"getJob\"\n      ],\n      \"enumTitles\": [\n        \"Jobs from company boards\",\n        \"Specific jobs by URL or ID\",\n        \"Company board lookup\",\n        \"All jobs from company boards (legacy alias)\",\n        \"Specific job by company + ID (legacy alias)\"\n      ],\n      \"default\": \"companyJobs\",\n      \"prefill\": \"companyJobs\"\n    },\n    \"companies\": {\n      \"title\": \"Companies\",\n      \"type\": \"array\",\n      \"description\": \"Board tokens, board URLs, embed URLs, job URLs, company names or domains. Examples: \\\"stripe\\\", \\\"https://job-boards.greenhouse.io/figma\\\", \\\"Airbnb\\\", \\\"jobs.elastic.co\\\".\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"airbnb\"\n      ]\n    },\n    \"jobUrls\": {\n      \"title\": \"Job URLs (mode=jobDetails)\",\n      \"type\": \"array\",\n      \"description\": \"Full Greenhouse job URLs to fetch one by one. A company board URL alone is not enough; include /jobs/<id>.\",\n      \"editor\": \"stringList\"\n    },\n    \"searchQuery\": {\n      \"title\": \"Company search (mode=companySearch)\",\n      \"type\": \"string\",\n      \"description\": \"Name or token text to match against the built-in company directory. Leave empty to resolve the Companies list instead.\",\n      \"editor\": \"textfield\"\n    },\n    \"titleKeywords\": {\n      \"title\": \"Job title must contain\",\n      \"type\": \"array\",\n      \"description\": \"Keep jobs whose title contains any of these words (case-insensitive).\",\n      \"editor\": \"stringList\"\n    },\n    \"excludeTitleKeywords\": {\n      \"title\": \"Job title must not contain\",\n      \"type\": \"array\",\n      \"description\": \"Drop jobs whose title contains any of these words (case-insensitive).\",\n      \"editor\": \"stringList\"\n    },\n    \"locations\": {\n      \"title\": \"Locations\",\n      \"type\": \"array\",\n      \"description\": \"Keep jobs whose location or office contains any of these words, e.g. Remote, London, New York.\",\n      \"editor\": \"stringList\"\n    },\n    \"departments\": {\n      \"title\": \"Departments\",\n      \"type\": \"array\",\n      \"description\": \"Keep jobs in departments that contain any of these words, e.g. Engineering, Sales.\",\n      \"editor\": \"stringList\"\n    },\n    \"workplaceType\": {\n      \"title\": \"Workplace type\",\n      \"type\": \"string\",\n      \"description\": \"Keep remote, hybrid or on-site roles. Jobs without a stated arrangement are dropped when this is not Any.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"remote\",\n        \"hybrid\",\n        \"onsite\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"Remote\",\n        \"Hybrid\",\n        \"On-site\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"employmentType\": {\n      \"title\": \"Employment type\",\n      \"type\": \"string\",\n      \"description\": \"Keep full-time, part-time, contract, internship or temporary roles when the employer states it.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"full-time\",\n        \"part-time\",\n        \"contract\",\n        \"internship\",\n        \"temporary\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"Full-time\",\n        \"Part-time\",\n        \"Contract\",\n        \"Internship\",\n        \"Temporary\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"publishedAfter\": {\n      \"title\": \"Published after\",\n      \"type\": \"string\",\n      \"description\": \"Keep jobs first published on or after this date (YYYY-MM-DD).\",\n      \"editor\": \"datepicker\"\n    },\n    \"updatedAfter\": {\n      \"title\": \"Updated after\",\n      \"type\": \"string\",\n      \"description\": \"Keep jobs last updated on or after this date (YYYY-MM-DD).\",\n      \"editor\": \"datepicker\"\n    },\n    \"onlyWithSalary\": {\n      \"title\": \"Only jobs with salary\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only jobs with a published or clearly stated pay range.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"minAnnualSalary\": {\n      \"title\": \"Minimum annual salary\",\n      \"type\": \"integer\",\n      \"description\": \"Keep jobs whose base pay reaches at least this yearly amount. Hourly, monthly and weekly ranges are annualized.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000\n    },\n    \"salaryCurrency\": {\n      \"title\": \"Salary currency\",\n      \"type\": \"string\",\n      \"description\": \"Only keep jobs with pay in this currency. Use Any to ignore currency.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"USD\",\n        \"EUR\",\n        \"GBP\",\n        \"CAD\",\n        \"AUD\",\n        \"SGD\",\n        \"INR\",\n        \"JPY\",\n        \"CNY\",\n        \"CHF\",\n        \"SEK\",\n        \"NOK\",\n        \"DKK\",\n        \"PLN\",\n        \"CZK\",\n        \"HUF\",\n        \"RON\",\n        \"BRL\",\n        \"MXN\",\n        \"ARS\",\n        \"CLP\",\n        \"COP\",\n        \"ZAR\",\n        \"AED\",\n        \"SAR\",\n        \"ILS\",\n        \"TRY\",\n        \"KRW\",\n        \"TWD\",\n        \"HKD\",\n        \"NZD\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"USD\",\n        \"EUR\",\n        \"GBP\",\n        \"CAD\",\n        \"AUD\",\n        \"SGD\",\n        \"INR\",\n        \"JPY\",\n        \"CNY\",\n        \"CHF\",\n        \"SEK\",\n        \"NOK\",\n        \"DKK\",\n        \"PLN\",\n        \"CZK\",\n        \"HUF\",\n        \"RON\",\n        \"BRL\",\n        \"MXN\",\n        \"ARS\",\n        \"CLP\",\n        \"COP\",\n        \"ZAR\",\n        \"AED\",\n        \"SAR\",\n        \"ILS\",\n        \"TRY\",\n        \"KRW\",\n        \"TWD\",\n        \"HKD\",\n        \"NZD\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort results\",\n      \"type\": \"string\",\n      \"description\": \"Result order after filtering.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"board\",\n        \"publishedNewest\",\n        \"publishedOldest\",\n        \"updatedNewest\",\n        \"titleAZ\"\n      ],\n      \"enumTitles\": [\n        \"Board order\",\n        \"Newest published\",\n        \"Oldest published\",\n        \"Recently updated\",\n        \"Title A–Z\"\n      ],\n      \"default\": \"board\",\n      \"prefill\": \"board\"\n    },\n    \"content\": {\n      \"title\": \"Include job descriptions\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the full job description. Departments and offices are always included (fetched separately when descriptions are off).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"descriptionFormat\": {\n      \"title\": \"Description format\",\n      \"type\": \"string\",\n      \"description\": \"Format used when Include job descriptions is on. HTML is always the content field; text/markdown add contentText/contentMarkdown.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"html\",\n        \"text\",\n        \"markdown\",\n        \"all\"\n      ],\n      \"enumTitles\": [\n        \"HTML\",\n        \"HTML + plain text\",\n        \"HTML + Markdown\",\n        \"HTML + text + Markdown\"\n      ],\n      \"default\": \"html\",\n      \"prefill\": \"html\"\n    },\n    \"includeQuestions\": {\n      \"title\": \"Include application questions\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch each job's application form questions. Adds one request per emitted job.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of job or company records to emit.\",\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"default\": 500,\n      \"prefill\": 1\n    },\n    \"maxJobsPerCompany\": {\n      \"title\": \"Max jobs per company\",\n      \"type\": \"integer\",\n      \"description\": \"Cap jobs per company after filters (mode=companyJobs). 0 means no per-company cap.\",\n      \"minimum\": 0,\n      \"maximum\": 10000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"verifyCompanies\": {\n      \"title\": \"Verify companies live (mode=companySearch)\",\n      \"type\": \"boolean\",\n      \"description\": \"Check each company against the live board and report its open-job count.\",\n      \"default\": true,\n      \"prefill\": true\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Greenhouse ATS Job Board Lookup by Company\n\nPull every open role from any company hiring on Greenhouse, or look up specific postings by URL. Start from a board token, a careers link, a company name or a domain; get clean job records with structured pay ranges, locations, departments, application questions, published dates and direct apply links. Greenhouse's public job board data is read directly, with no login, API key, cookie or proxy.\n\n## What this actor does\n\n- **Three modes:** scrape company boards, fetch specific job URLs, or resolve company boards from names and domains.\n- **Flexible company input:** board tokens, `boards.greenhouse.io` / `job-boards.greenhouse.io` links, embed links, single-job links, company names and domains.\n- **Structured pay:** every disclosed pay band is preserved with min/max, currency, period and base/OTE labelling.\n- **Useful filters:** title, location, department, workplace type, employment type, published/updated date, salary and currency.\n- **Descriptions and questions:** full HTML, plain text or Markdown, plus the application questions each posting asks.\n- **Complete context:** published and updated dates, offices, department hierarchy, metadata, language, requisition ID and apply URL.\n- **Empty fields are omitted** — not set to `null`, `\"\"` or a placeholder.\n\n## Output per job\n\n- `id` — Greenhouse job post ID\n- `internalJobId` — Greenhouse's internal job ID\n- `requisitionId` — employer requisition number, when published\n- `title` — job title\n- `companySlug` — Greenhouse board token\n- `companyName` — employer name\n- `location` — primary location object with `name`, `city`, `state`, `country`\n- `locations[]` — every location when a posting covers several\n- `isRemote` — `true` when the posting is remote\n- `workplaceType` — `remote`, `hybrid` or `onsite` when stated\n- `departments[]` — department names\n- `departmentsDetailed[]` — department `id`, `name` and `parentId`\n- `offices[]` — office names\n- `officesDetailed[]` — office `id`, `name`, `location` and `parentId`\n- `employmentType` — full-time, part-time, contract, internship or temporary, when stated\n- `educationLevel` — Greenhouse education requirement code, when published\n- `salary` — primary pay object with `min`, `max`, `currency`, `period`, `range` and `source`\n- `salaryBands[]` — every disclosed band with `label`, `min`, `max`, `currency`, `period`, `kind` and `source`\n- `publishedAt` — first published timestamp\n- `updatedAt` — last updated timestamp\n- `applicationDeadline` — application deadline, when set\n- `language` — posting language code\n- `metadata[]` — custom fields with `name`, `value` and `valueType`\n- `team` — team name from metadata, when present\n- `seniority` — seniority from metadata, when present\n- `content` — full description HTML, when descriptions are enabled\n- `contentText` — plain-text description, when requested\n- `contentMarkdown` — Markdown description, when requested\n- `questions[]` — application questions with `label`, `required` and `fields`\n- `applyUrl` — direct apply link\n- `absoluteUrl` — Greenhouse-hosted posting URL\n- `boardUrl` — company's Greenhouse board URL\n- `sourceUrl` — stable Greenhouse posting URL\n- `region` — `us` or `eu`\n- `recordType` — `job`\n- `scrapedAt` — UTC timestamp of the scrape\n\n## Output per company (mode = `companySearch`)\n\n- `companySlug`, `companyName`, `companyDescription` (when published)\n- `boardUrl`, `region`, `openJobs` (open jobs when `verifyCompanies` is true)\n- `status` — `found`, `empty`, `not_found` or `ambiguous`\n- `sourceUrl`, `recordType: \"company\"`, `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `companyJobs` | `companyJobs`, `jobDetails` or `companySearch` (legacy `getJobs`/`getJob` aliases are accepted) |\n| `companies` | array | – | Tokens, board URLs, job URLs, company names or domains |\n| `jobUrls` | array | – | Full job URLs for `jobDetails` |\n| `searchQuery` | string | – | Directory search text for `companySearch` |\n| `titleKeywords` | array | – | Keep titles containing any of these words |\n| `excludeTitleKeywords` | array | – | Drop titles containing any of these words |\n| `locations` | array | – | Keep locations or offices containing any of these words |\n| `departments` | array | – | Keep departments containing any of these words |\n| `workplaceType` | string | `any` | `any`, `remote`, `hybrid` or `onsite` |\n| `employmentType` | string | `any` | `any`, `full-time`, `part-time`, `contract`, `internship` or `temporary` |\n| `publishedAfter` | string | – | First-published cutoff (`YYYY-MM-DD`) |\n| `updatedAfter` | string | – | Last-updated cutoff (`YYYY-MM-DD`) |\n| `onlyWithSalary` | boolean | `false` | Keep only jobs with a stated pay range |\n| `minAnnualSalary` | integer | – | Minimum annualized base pay |\n| `salaryCurrency` | string | `any` | Only jobs with pay in this currency |\n| `sortBy` | string | `board` | `board`, `publishedNewest`, `publishedOldest`, `updatedNewest` or `titleAZ` |\n| `content` | boolean | `false` | Include full job descriptions |\n| `descriptionFormat` | string | `html` | `html`, `text`, `markdown` or `all` |\n| `includeQuestions` | boolean | `false` | Fetch application questions (one extra request per emitted job) |\n| `maxItems` | integer | `500` | Maximum records to emit (1–10,000) |\n| `maxJobsPerCompany` | integer | `0` | Per-company cap after filters; `0` means no cap |\n| `verifyCompanies` | boolean | `true` | Live-check companies in `companySearch` and report open jobs |\n\n### Example: all engineering roles at three companies\n\n```json\n{\n  \"mode\": \"companyJobs\",\n  \"companies\": [\"stripe\", \"figma\", \"https://job-boards.greenhouse.io/airbnb\"],\n  \"titleKeywords\": [\"engineer\", \"developer\"],\n  \"workplaceType\": \"remote\",\n  \"content\": false,\n  \"maxItems\": 200\n}\n```\n\n### Example: company names and domains\n\n```json\n{\n  \"mode\": \"companyJobs\",\n  \"companies\": [\"Anthropic\", \"jobs.elastic.co\", \"HubSpot\"],\n  \"onlyWithSalary\": true,\n  \"minAnnualSalary\": 120000,\n  \"salaryCurrency\": \"USD\",\n  \"sortBy\": \"publishedNewest\",\n  \"maxItems\": 100\n}\n```\n\n### Example: specific jobs with descriptions, Markdown and questions\n\n```json\n{\n  \"mode\": \"jobDetails\",\n  \"jobUrls\": [\n    \"https://job-boards.greenhouse.io/gitlab/jobs/8860302002\",\n    \"https://boards.greenhouse.io/figma/jobs/5426468004\"\n  ],\n  \"content\": true,\n  \"descriptionFormat\": \"all\",\n  \"includeQuestions\": true\n}\n```\n\n### Example: resolve a company list\n\n```json\n{\n  \"mode\": \"companySearch\",\n  \"companies\": [\"Airbnb\", \"stripe.com\", \"HubSpot\", \"not-a-real-board\"],\n  \"verifyCompanies\": true,\n  \"maxItems\": 10\n}\n```\n\n## Use cases\n\n- **Job boards and aggregators** — build live company career pages from the source, with stable IDs and apply links.\n- **Recruiting and sourcing** — monitor target companies by department, location and seniority.\n- **Compensation research** — collect disclosed pay bands with currency and period labels.\n- **Sales and hiring signals** — see which teams and locations are expanding.\n- **AI agents and enrichment** — feed clean job text, questions and structured pay into matching or RAG pipelines.\n- **Applicant tooling** — list the exact questions a Greenhouse application will ask before a candidate starts.\n\n## FAQ\n\n**Do I need a Greenhouse account, API key or proxy?**\nNo. The actor reads publicly published job boards. There is nothing to configure and no login, cookie or proxy needed.\n\n**How do I find a company's board token?**\nPaste the company's Greenhouse board link, embed link or a single job link. If you only have a company name or domain, the actor tries the built-in verified directory, then common board-name variants. Name/domain lookup is best-effort; a board URL or token is always exact.\n\n**Does this work for companies on the EU Greenhouse host?**\nYes. EU boards return the same public data and are marked `region: \"eu\"`.\n\n**Why is salary missing from some jobs?**\nPay disclosure is a company choice. Many employers publish no range at all; the field is included only when a real range is available. The actor never invents a number.\n\n**What is the difference between `salary` and `salaryBands`?**\n`salary` is the primary base-pay summary. `salaryBands` keeps every disclosed band, including location zones and OTE ranges, because one posting can publish several. OTE and commission bands stay in `salaryBands` but are excluded from the `salary` envelope.\n\n**Why is employment type missing?**\nGreenhouse no longer exposes a dedicated employment-type field. The actor reads it from employer metadata when present and omits it otherwise.\n\n**Can I get the full job description and questions?**\nYes. Turn on descriptions and choose HTML, text, Markdown or all three. Questions are optional because they require one additional request per job.\n\n**How many jobs can I get per company?**\nA company's whole board is returned in one response, so there is no page limit. Use `maxItems` and `maxJobsPerCompany` to control run size.\n\n**Does this work for private or unlisted boards?**\nNo. Only publicly published Greenhouse boards are readable.\n\n**Is this affiliated with Greenhouse?**\nNo. This is an independent third-party actor that reads publicly published job board data and is not operated by or affiliated with Greenhouse Software, Inc.\n\n## Limitations\n\n- Pay, employment type and some metadata are employer-optional; missing values are real, not parsing failures.\n- Company name/domain resolution is best-effort. Use a board URL or token for an exact match.\n- Application questions are only available per job and add one request per record.\n- A posting can publish multiple pay bands; the actor preserves all of them instead of picking one.\n\n## Use it as an API (server mode)\n\nNeed one answer right away instead of a batch job? Send the input as an HTTP request and the results come back in the response. There's no run to start and poll.\n\n```bash\ncurl -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  \"https://dataspryva--greenhouse-ats-job-board-lookup-by-company.apify.actor/?mode=companyJobs&companies=airbnb&maxItems=5\"\n```\n\nOr POST the same input as JSON:\n\n```bash\ncurl -X POST -H \"Authorization: Bearer $APIFY_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": \"companyJobs\", \"companies\": [\"airbnb\"], \"maxItems\": 5}' \\\n  \"https://dataspryva--greenhouse-ats-job-board-lookup-by-company.apify.actor/\"\n```\n\n- The fields are the same as in the input above. With GET, repeat a parameter once for each value in a list.\n- You get back a JSON array with the same records a normal run saves. They're saved to the run's dataset too.\n- Each request is capped at 50 results and 4 minutes. For bigger jobs, start a normal run.\n- The request runs in your own Apify account at the Actor's normal price (a start fee plus a price per result). The server shuts down after a minute with no requests.\n- The Server tab on this page lists every parameter and lets you try a request from your browser.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "greenhouse-ats-job-board-lookup-by-company",
      "title": "Greenhouse ATS Job Board Lookup by Company",
      "description": "Scrape every open role from Greenhouse company boards by token, board URL, job URL, company name or domain. Get structured pay ranges, locations, departments, application questions, published dates and apply links.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Greenhouse ATS Job Board Lookup by Company\n\nPull every open role from any company hiring on Greenhouse, or look up specific postings by URL. Start from a board token, a careers link, a company name or a domain; get clean job records with structured pay ranges, locations, departments, application questions, published dates and direct apply links. Greenhouse's public job board data is read directly, with no login, API key, cookie or proxy.\n\n## What this actor does\n\n- **Three modes:** scrape company boards, fetch specific job URLs, or resolve company boards from names and domains.\n- **Flexible company input:** board tokens, `boards.greenhouse.io` / `job-boards.greenhouse.io` links, embed links, single-job links, company names and domains.\n- **Structured pay:** every disclosed pay band is preserved with min/max, currency, period and base/OTE labelling.\n- **Useful filters:** title, location, department, workplace type, employment type, published/updated date, salary and currency.\n- **Descriptions and questions:** full HTML, plain text or Markdown, plus the application questions each posting asks.\n- **Complete context:** published and updated dates, offices, department hierarchy, metadata, language, requisition ID and apply URL.\n- **Empty fields are omitted** — not set to `null`, `\"\"` or a placeholder.\n\n## Output per job\n\n- `id` — Greenhouse job post ID\n- `internalJobId` — Greenhouse's internal job ID\n- `requisitionId` — employer requisition number, when published\n- `title` — job title\n- `companySlug` — Greenhouse board token\n- `companyName` — employer name\n- `location` — primary location object with `name`, `city`, `state`, `country`\n- `locations[]` — every location when a posting covers several\n- `isRemote` — `true` when the posting is remote\n- `workplaceType` — `remote`, `hybrid` or `onsite` when stated\n- `departments[]` — department names\n- `departmentsDetailed[]` — department `id`, `name` and `parentId`\n- `offices[]` — office names\n- `officesDetailed[]` — office `id`, `name`, `location` and `parentId`\n- `employmentType` — full-time, part-time, contract, internship or temporary, when stated\n- `educationLevel` — Greenhouse education requirement code, when published\n- `salary` — primary pay object with `min`, `max`, `currency`, `period`, `range` and `source`\n- `salaryBands[]` — every disclosed band with `label`, `min`, `max`, `currency`, `period`, `kind` and `source`\n- `publishedAt` — first published timestamp\n- `updatedAt` — last updated timestamp\n- `applicationDeadline` — application deadline, when set\n- `language` — posting language code\n- `metadata[]` — custom fields with `name`, `value` and `valueType`\n- `team` — team name from metadata, when present\n- `seniority` — seniority from metadata, when present\n- `content` — full description HTML, when descriptions are enabled\n- `contentText` — plain-text description, when requested\n- `contentMarkdown` — Markdown description, when requested\n- `questions[]` — application questions with `label`, `required` and `fields`\n- `applyUrl` — direct apply link\n- `absoluteUrl` — Greenhouse-hosted posting URL\n- `boardUrl` — company's Greenhouse board URL\n- `sourceUrl` — stable Greenhouse posting URL\n- `region` — `us` or `eu`\n- `recordType` — `job`\n- `scrapedAt` — UTC timestamp of the scrape\n\n## Output per company (mode = `companySearch`)\n\n- `companySlug`, `companyName`, `companyDescription` (when published)\n- `boardUrl`, `region`, `openJobs` (open jobs when `verifyCompanies` is true)\n- `status` — `found`, `empty`, `not_found` or `ambiguous`\n- `sourceUrl`, `recordType: \"company\"`, `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `companyJobs` | `companyJobs`, `jobDetails` or `companySearch` (legacy `getJobs`/`getJob` aliases are accepted) |\n| `companies` | array | – | Tokens, board URLs, job URLs, company names or domains |\n| `jobUrls` | array | – | Full job URLs for `jobDetails` |\n| `searchQuery` | string | – | Directory search text for `companySearch` |\n| `titleKeywords` | array | – | Keep titles containing any of these words |\n| `excludeTitleKeywords` | array | – | Drop titles containing any of these words |\n| `locations` | array | – | Keep locations or offices containing any of these words |\n| `departments` | array | – | Keep departments containing any of these words |\n| `workplaceType` | string | `any` | `any`, `remote`, `hybrid` or `onsite` |\n| `employmentType` | string | `any` | `any`, `full-time`, `part-time`, `contract`, `internship` or `temporary` |\n| `publishedAfter` | string | – | First-published cutoff (`YYYY-MM-DD`) |\n| `updatedAfter` | string | – | Last-updated cutoff (`YYYY-MM-DD`) |\n| `onlyWithSalary` | boolean | `false` | Keep only jobs with a stated pay range |\n| `minAnnualSalary` | integer | – | Minimum annualized base pay |\n| `salaryCurrency` | string | `any` | Only jobs with pay in this currency |\n| `sortBy` | string | `board` | `board`, `publishedNewest`, `publishedOldest`, `updatedNewest` or `titleAZ` |\n| `content` | boolean | `false` | Include full job descriptions |\n| `descriptionFormat` | string | `html` | `html`, `text`, `markdown` or `all` |\n| `includeQuestions` | boolean | `false` | Fetch application questions (one extra request per emitted job) |\n| `maxItems` | integer | `500` | Maximum records to emit (1–10,000) |\n| `maxJobsPerCompany` | integer | `0` | Per-company cap after filters; `0` means no cap |\n| `verifyCompanies` | boolean | `true` | Live-check companies in `companySearch` and report open jobs |\n\n### Example: all engineering roles at three companies\n\n```json\n{\n  \"mode\": \"companyJobs\",\n  \"companies\": [\"stripe\", \"figma\", \"https://job-boards.greenhouse.io/airbnb\"],\n  \"titleKeywords\": [\"engineer\", \"developer\"],\n  \"workplaceType\": \"remote\",\n  \"content\": false,\n  \"maxItems\": 200\n}\n```\n\n### Example: company names and domains\n\n```json\n{\n  \"mode\": \"companyJobs\",\n  \"companies\": [\"Anthropic\", \"jobs.elastic.co\", \"HubSpot\"],\n  \"onlyWithSalary\": true,\n  \"minAnnualSalary\": 120000,\n  \"salaryCurrency\": \"USD\",\n  \"sortBy\": \"publishedNewest\",\n  \"maxItems\": 100\n}\n```\n\n### Example: specific jobs with descriptions, Markdown and questions\n\n```json\n{\n  \"mode\": \"jobDetails\",\n  \"jobUrls\": [\n    \"https://job-boards.greenhouse.io/gitlab/jobs/8860302002\",\n    \"https://boards.greenhouse.io/figma/jobs/5426468004\"\n  ],\n  \"content\": true,\n  \"descriptionFormat\": \"all\",\n  \"includeQuestions\": true\n}\n```\n\n### Example: resolve a company list\n\n```json\n{\n  \"mode\": \"companySearch\",\n  \"companies\": [\"Airbnb\", \"stripe.com\", \"HubSpot\", \"not-a-real-board\"],\n  \"verifyCompanies\": true,\n  \"maxItems\": 10\n}\n```\n\n## Use cases\n\n- **Job boards and aggregators** — build live company career pages from the source, with stable IDs and apply links.\n- **Recruiting and sourcing** — monitor target companies by department, location and seniority.\n- **Compensation research** — collect disclosed pay bands with currency and period labels.\n- **Sales and hiring signals** — see which teams and locations are expanding.\n- **AI agents and enrichment** — feed clean job text, questions and structured pay into matching or RAG pipelines.\n- **Applicant tooling** — list the exact questions a Greenhouse application will ask before a candidate starts.\n\n## FAQ\n\n**Do I need a Greenhouse account, API key or proxy?**\nNo. The actor reads publicly published job boards. There is nothing to configure and no login, cookie or proxy needed.\n\n**How do I find a company's board token?**\nPaste the company's Greenhouse board link, embed link or a single job link. If you only have a company name or domain, the actor tries the built-in verified directory, then common board-name variants. Name/domain lookup is best-effort; a board URL or token is always exact.\n\n**Does this work for companies on the EU Greenhouse host?**\nYes. EU boards return the same public data and are marked `region: \"eu\"`.\n\n**Why is salary missing from some jobs?**\nPay disclosure is a company choice. Many employers publish no range at all; the field is included only when a real range is available. The actor never invents a number.\n\n**What is the difference between `salary` and `salaryBands`?**\n`salary` is the primary base-pay summary. `salaryBands` keeps every disclosed band, including location zones and OTE ranges, because one posting can publish several. OTE and commission bands stay in `salaryBands` but are excluded from the `salary` envelope.\n\n**Why is employment type missing?**\nGreenhouse no longer exposes a dedicated employment-type field. The actor reads it from employer metadata when present and omits it otherwise.\n\n**Can I get the full job description and questions?**\nYes. Turn on descriptions and choose HTML, text, Markdown or all three. Questions are optional because they require one additional request per job.\n\n**How many jobs can I get per company?**\nA company's whole board is returned in one response, so there is no page limit. Use `maxItems` and `maxJobsPerCompany` to control run size.\n\n**Does this work for private or unlisted boards?**\nNo. Only publicly published Greenhouse boards are readable.\n\n**Is this affiliated with Greenhouse?**\nNo. This is an independent third-party actor that reads publicly published job board data and is not operated by or affiliated with Greenhouse Software, Inc.\n\n## Limitations\n\n- Pay, employment type and some metadata are employer-optional; missing values are real, not parsing failures.\n- Company name/domain resolution is best-effort. Use a board URL or token for an exact match.\n- Application questions are only available per job and add one request per record.\n- A posting can publish multiple pay bands; the actor preserves all of them instead of picking one.\n\n## Use it as an API (server mode)\n\nNeed one answer right away instead of a batch job? Send the input as an HTTP request and the results come back in the response. There's no run to start and poll.\n\n```bash\ncurl -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  \"https://dataspryva--greenhouse-ats-job-board-lookup-by-company.apify.actor/?mode=companyJobs&companies=airbnb&maxItems=5\"\n```\n\nOr POST the same input as JSON:\n\n```bash\ncurl -X POST -H \"Authorization: Bearer $APIFY_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": \"companyJobs\", \"companies\": [\"airbnb\"], \"maxItems\": 5}' \\\n  \"https://dataspryva--greenhouse-ats-job-board-lookup-by-company.apify.actor/\"\n```\n\n- The fields are the same as in the input above. With GET, repeat a parameter once for each value in a list.\n- You get back a JSON array with the same records a normal run saves. They're saved to the run's dataset too.\n- Each request is capped at 50 results and 4 minutes. For bigger jobs, start a normal run.\n- The request runs in your own Apify account at the Actor's normal price (a start fee plus a price per result). The server shuts down after a minute with no requests.\n- The Server tab on this page lists every parameter and lets you try a request from your browser.\n",
      "input": {
        "title": "Greenhouse Jobs Scraper Input",
        "description": "Scrape jobs from Greenhouse company boards by token, board URL, job URL, company name or domain. Get structured pay, locations, departments, questions and dates.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to fetch: jobs from company boards, specific job URLs, or company board lookup.",
            "editor": "select",
            "enum": [
              "companyJobs",
              "jobDetails",
              "companySearch",
              "getJobs",
              "getJob"
            ],
            "enumTitles": [
              "Jobs from company boards",
              "Specific jobs by URL or ID",
              "Company board lookup",
              "All jobs from company boards (legacy alias)",
              "Specific job by company + ID (legacy alias)"
            ],
            "default": "companyJobs",
            "prefill": "companyJobs"
          },
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Board tokens, board URLs, embed URLs, job URLs, company names or domains. Examples: \"stripe\", \"https://job-boards.greenhouse.io/figma\", \"Airbnb\", \"jobs.elastic.co\".",
            "editor": "stringList",
            "prefill": [
              "airbnb"
            ]
          },
          "jobUrls": {
            "title": "Job URLs (mode=jobDetails)",
            "type": "array",
            "description": "Full Greenhouse job URLs to fetch one by one. A company board URL alone is not enough; include /jobs/<id>.",
            "editor": "stringList"
          },
          "searchQuery": {
            "title": "Company search (mode=companySearch)",
            "type": "string",
            "description": "Name or token text to match against the built-in company directory. Leave empty to resolve the Companies list instead.",
            "editor": "textfield"
          },
          "titleKeywords": {
            "title": "Job title must contain",
            "type": "array",
            "description": "Keep jobs whose title contains any of these words (case-insensitive).",
            "editor": "stringList"
          },
          "excludeTitleKeywords": {
            "title": "Job title must not contain",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words (case-insensitive).",
            "editor": "stringList"
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep jobs whose location or office contains any of these words, e.g. Remote, London, New York.",
            "editor": "stringList"
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Keep jobs in departments that contain any of these words, e.g. Engineering, Sales.",
            "editor": "stringList"
          },
          "workplaceType": {
            "title": "Workplace type",
            "type": "string",
            "description": "Keep remote, hybrid or on-site roles. Jobs without a stated arrangement are dropped when this is not Any.",
            "editor": "select",
            "enum": [
              "any",
              "remote",
              "hybrid",
              "onsite"
            ],
            "enumTitles": [
              "Any",
              "Remote",
              "Hybrid",
              "On-site"
            ],
            "default": "any",
            "prefill": "any"
          },
          "employmentType": {
            "title": "Employment type",
            "type": "string",
            "description": "Keep full-time, part-time, contract, internship or temporary roles when the employer states it.",
            "editor": "select",
            "enum": [
              "any",
              "full-time",
              "part-time",
              "contract",
              "internship",
              "temporary"
            ],
            "enumTitles": [
              "Any",
              "Full-time",
              "Part-time",
              "Contract",
              "Internship",
              "Temporary"
            ],
            "default": "any",
            "prefill": "any"
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Keep jobs first published on or after this date (YYYY-MM-DD).",
            "editor": "datepicker"
          },
          "updatedAfter": {
            "title": "Updated after",
            "type": "string",
            "description": "Keep jobs last updated on or after this date (YYYY-MM-DD).",
            "editor": "datepicker"
          },
          "onlyWithSalary": {
            "title": "Only jobs with salary",
            "type": "boolean",
            "description": "Keep only jobs with a published or clearly stated pay range.",
            "default": false,
            "prefill": false
          },
          "minAnnualSalary": {
            "title": "Minimum annual salary",
            "type": "integer",
            "description": "Keep jobs whose base pay reaches at least this yearly amount. Hourly, monthly and weekly ranges are annualized.",
            "minimum": 0,
            "maximum": 10000000
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "type": "string",
            "description": "Only keep jobs with pay in this currency. Use Any to ignore currency.",
            "editor": "select",
            "enum": [
              "any",
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "SGD",
              "INR",
              "JPY",
              "CNY",
              "CHF",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "RON",
              "BRL",
              "MXN",
              "ARS",
              "CLP",
              "COP",
              "ZAR",
              "AED",
              "SAR",
              "ILS",
              "TRY",
              "KRW",
              "TWD",
              "HKD",
              "NZD"
            ],
            "enumTitles": [
              "Any",
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "SGD",
              "INR",
              "JPY",
              "CNY",
              "CHF",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "RON",
              "BRL",
              "MXN",
              "ARS",
              "CLP",
              "COP",
              "ZAR",
              "AED",
              "SAR",
              "ILS",
              "TRY",
              "KRW",
              "TWD",
              "HKD",
              "NZD"
            ],
            "default": "any",
            "prefill": "any"
          },
          "sortBy": {
            "title": "Sort results",
            "type": "string",
            "description": "Result order after filtering.",
            "editor": "select",
            "enum": [
              "board",
              "publishedNewest",
              "publishedOldest",
              "updatedNewest",
              "titleAZ"
            ],
            "enumTitles": [
              "Board order",
              "Newest published",
              "Oldest published",
              "Recently updated",
              "Title A–Z"
            ],
            "default": "board",
            "prefill": "board"
          },
          "content": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Include the full job description. Departments and offices are always included (fetched separately when descriptions are off).",
            "default": false,
            "prefill": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "type": "string",
            "description": "Format used when Include job descriptions is on. HTML is always the content field; text/markdown add contentText/contentMarkdown.",
            "editor": "select",
            "enum": [
              "html",
              "text",
              "markdown",
              "all"
            ],
            "enumTitles": [
              "HTML",
              "HTML + plain text",
              "HTML + Markdown",
              "HTML + text + Markdown"
            ],
            "default": "html",
            "prefill": "html"
          },
          "includeQuestions": {
            "title": "Include application questions",
            "type": "boolean",
            "description": "Fetch each job's application form questions. Adds one request per emitted job.",
            "default": false,
            "prefill": false
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Maximum number of job or company records to emit.",
            "minimum": 1,
            "maximum": 10000,
            "default": 500,
            "prefill": 1
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "type": "integer",
            "description": "Cap jobs per company after filters (mode=companyJobs). 0 means no per-company cap.",
            "minimum": 0,
            "maximum": 10000,
            "default": 0,
            "prefill": 0
          },
          "verifyCompanies": {
            "title": "Verify companies live (mode=companySearch)",
            "type": "boolean",
            "description": "Check each company against the live board and report its open-job count.",
            "default": true,
            "prefill": true
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Greenhouse ATS Job Board Lookup by Company Output",
        "description": "One record per Greenhouse job (title, company, locations, departments, structured pay, dates, apply link) or per company in company-search mode.",
        "properties": {
          "jobs": {
            "type": "string",
            "title": "Greenhouse job listings",
            "description": "Dataset containing Greenhouse job records, plus company rows when mode=companySearch.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Jobs",
              "transformation": {
                "fields": [
                  "title",
                  "companySlug",
                  "companyName",
                  "location",
                  "departments",
                  "employmentType",
                  "publishedAt",
                  "updatedAt",
                  "applyUrl",
                  "region"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 1800,
        "memoryMbytes": 1024
      },
      "webServerSchema": {
        "openapi": "3.0.3",
        "info": {
          "title": "Greenhouse ATS Job Board Lookup by Company (server mode)",
          "version": "1.1",
          "description": "Send one lookup and get the results back in the response. It takes the same input as a normal run: query parameters with GET, or a JSON body with POST. At most 50 results and 240 seconds per request; start a normal run for bigger jobs. Requests run in your own Apify account at the Actor's normal price.",
          "x-oa-server-mode": "1.1"
        },
        "paths": {
          "/": {
            "get": {
              "operationId": "lookupGet",
              "summary": "Run one lookup (query parameters)",
              "parameters": [
                {
                  "name": "mode",
                  "in": "query",
                  "required": true,
                  "description": "What to fetch: jobs from company boards, specific job URLs, or company board lookup.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "companyJobs",
                      "jobDetails",
                      "companySearch",
                      "getJobs",
                      "getJob"
                    ],
                    "default": "companyJobs"
                  },
                  "example": "companyJobs"
                },
                {
                  "name": "companies",
                  "in": "query",
                  "required": false,
                  "description": "Board tokens, board URLs, embed URLs, job URLs, company names or domains. Examples: \"stripe\", \"https://job-boards.greenhouse.io/figma\", \"Airbnb\", \"jobs.elastic.co\". (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 3
                  },
                  "style": "form",
                  "explode": true,
                  "example": [
                    "airbnb"
                  ]
                },
                {
                  "name": "jobUrls",
                  "in": "query",
                  "required": false,
                  "description": "Full Greenhouse job URLs to fetch one by one. A company board URL alone is not enough; include /jobs/<id>. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 10
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "searchQuery",
                  "in": "query",
                  "required": false,
                  "description": "Name or token text to match against the built-in company directory. Leave empty to resolve the Companies list instead.",
                  "schema": {
                    "type": "string"
                  }
                },
                {
                  "name": "titleKeywords",
                  "in": "query",
                  "required": false,
                  "description": "Keep jobs whose title contains any of these words (case-insensitive). (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "excludeTitleKeywords",
                  "in": "query",
                  "required": false,
                  "description": "Drop jobs whose title contains any of these words (case-insensitive). (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "locations",
                  "in": "query",
                  "required": false,
                  "description": "Keep jobs whose location or office contains any of these words, e.g. Remote, London, New York. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "departments",
                  "in": "query",
                  "required": false,
                  "description": "Keep jobs in departments that contain any of these words, e.g. Engineering, Sales. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "workplaceType",
                  "in": "query",
                  "required": false,
                  "description": "Keep remote, hybrid or on-site roles. Jobs without a stated arrangement are dropped when this is not Any.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "any",
                      "remote",
                      "hybrid",
                      "onsite"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "employmentType",
                  "in": "query",
                  "required": false,
                  "description": "Keep full-time, part-time, contract, internship or temporary roles when the employer states it.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "any",
                      "full-time",
                      "part-time",
                      "contract",
                      "internship",
                      "temporary"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "publishedAfter",
                  "in": "query",
                  "required": false,
                  "description": "Keep jobs first published on or after this date (YYYY-MM-DD).",
                  "schema": {
                    "type": "string"
                  }
                },
                {
                  "name": "updatedAfter",
                  "in": "query",
                  "required": false,
                  "description": "Keep jobs last updated on or after this date (YYYY-MM-DD).",
                  "schema": {
                    "type": "string"
                  }
                },
                {
                  "name": "onlyWithSalary",
                  "in": "query",
                  "required": false,
                  "description": "Keep only jobs with a published or clearly stated pay range.",
                  "schema": {
                    "type": "boolean",
                    "default": false
                  }
                },
                {
                  "name": "minAnnualSalary",
                  "in": "query",
                  "required": false,
                  "description": "Keep jobs whose base pay reaches at least this yearly amount. Hourly, monthly and weekly ranges are annualized.",
                  "schema": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10000000
                  }
                },
                {
                  "name": "salaryCurrency",
                  "in": "query",
                  "required": false,
                  "description": "Only keep jobs with pay in this currency. Use Any to ignore currency.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "any",
                      "USD",
                      "EUR",
                      "GBP",
                      "CAD",
                      "AUD",
                      "SGD",
                      "INR",
                      "JPY",
                      "CNY",
                      "CHF",
                      "SEK",
                      "NOK",
                      "DKK",
                      "PLN",
                      "CZK",
                      "HUF",
                      "RON",
                      "BRL",
                      "MXN",
                      "ARS",
                      "CLP",
                      "COP",
                      "ZAR",
                      "AED",
                      "SAR",
                      "ILS",
                      "TRY",
                      "KRW",
                      "TWD",
                      "HKD",
                      "NZD"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "sortBy",
                  "in": "query",
                  "required": false,
                  "description": "Result order after filtering.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "board",
                      "publishedNewest",
                      "publishedOldest",
                      "updatedNewest",
                      "titleAZ"
                    ],
                    "default": "board"
                  }
                },
                {
                  "name": "content",
                  "in": "query",
                  "required": false,
                  "description": "Include the full job description. Departments and offices are always included (fetched separately when descriptions are off).",
                  "schema": {
                    "type": "boolean",
                    "default": false
                  }
                },
                {
                  "name": "descriptionFormat",
                  "in": "query",
                  "required": false,
                  "description": "Format used when Include job descriptions is on. HTML is always the content field; text/markdown add contentText/contentMarkdown.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "html",
                      "text",
                      "markdown",
                      "all"
                    ],
                    "default": "html"
                  }
                },
                {
                  "name": "includeQuestions",
                  "in": "query",
                  "required": false,
                  "description": "Fetch each job's application form questions. Adds one request per emitted job.",
                  "schema": {
                    "type": "boolean",
                    "default": false
                  }
                },
                {
                  "name": "maxItems",
                  "in": "query",
                  "required": false,
                  "description": "Maximum number of job or company records to emit.",
                  "schema": {
                    "type": "integer",
                    "default": 50,
                    "minimum": 1,
                    "maximum": 50
                  },
                  "example": 5
                },
                {
                  "name": "maxJobsPerCompany",
                  "in": "query",
                  "required": false,
                  "description": "Cap jobs per company after filters (mode=companyJobs). 0 means no per-company cap.",
                  "schema": {
                    "type": "integer",
                    "default": 50,
                    "minimum": 0,
                    "maximum": 50
                  }
                },
                {
                  "name": "verifyCompanies",
                  "in": "query",
                  "required": false,
                  "description": "Check each company against the live board and report its open-job count.",
                  "schema": {
                    "type": "boolean",
                    "default": true
                  }
                }
              ],
              "responses": {
                "200": {
                  "description": "The results as a JSON array (at most 50). They are also saved to the run's dataset and billed per result, like a normal run.",
                  "headers": {
                    "X-Item-Count": {
                      "schema": {
                        "type": "integer"
                      },
                      "description": "Results returned."
                    },
                    "X-Status-Message": {
                      "schema": {
                        "type": "string"
                      },
                      "description": "The Actor's last status message, e.g. why nothing was found."
                    }
                  },
                  "content": {
                    "application/json": {
                      "schema": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/Item"
                        }
                      },
                      "example": [
                        {
                          "id": 8365363,
                          "internalJobId": 3614972,
                          "requisitionId": "ONE",
                          "title": "Account Executive (Hotels)",
                          "companySlug": "airbnb",
                          "companyName": "Airbnb",
                          "location": {
                            "name": "Barcelona, Spain",
                            "country": "Spain",
                            "city": "Barcelona"
                          },
                          "workplaceType": "hybrid",
                          "departments": [
                            "Sales"
                          ],
                          "departmentsDetailed": [
                            {
                              "id": 57796,
                              "name": "Sales",
                              "parentId": 73691
                            }
                          ],
                          "offices": [
                            "Barcelona, Spain"
                          ],
                          "officesDetailed": [
                            {
                              "id": 155,
                              "name": "Barcelona, Spain",
                              "location": "Barcelona, Spain",
                              "parentId": 64284
                            }
                          ],
                          "metadata": [
                            {
                              "name": "Is this job part of ACC?",
                              "value": false,
                              "valueType": "yes_no"
                            },
                            {
                              "name": "Workplace Type",
                              "value": "Hybrid",
                              "valueType": "single_select"
                            }
                          ],
                          "publishedAt": "2026-11-10T04:49:33-05:00",
                          "updatedAt": "2026-11-10T04:49:33-05:00",
                          "language": "en",
                          "applyUrl": "https://careers.airbnb.com/positions/8365363?gh_jid=8365363",
                          "absoluteUrl": "https://careers.airbnb.com/positions/8365363?gh_jid=8365363",
                          "sourceUrl": "https://boards.greenhouse.io/airbnb/jobs/8365363",
                          "boardUrl": "https://job-boards.greenhouse.io/airbnb",
                          "region": "us",
                          "recordType": "job",
                          "scrapedAt": "2026-11-10T15:35:11.336009+00:00"
                        }
                      ]
                    }
                  }
                },
                "400": {
                  "description": "Invalid, missing or unknown input fields. Nothing ran.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      },
                      "example": {
                        "error": "invalid_input",
                        "errorDescription": "mode: required"
                      }
                    }
                  }
                },
                "422": {
                  "description": "The Actor could not complete this request (for example, nothing matches). No results were delivered.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "500": {
                  "description": "Unexpected failure. Safe to retry.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "504": {
                  "description": "The request used up its 240 s budget. The results found so far are in partialItems.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Error"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "partialItems": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Item"
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            },
            "post": {
              "operationId": "lookupPost",
              "summary": "Run one lookup (JSON body)",
              "requestBody": {
                "required": true,
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "object",
                      "properties": {
                        "mode": {
                          "type": "string",
                          "enum": [
                            "companyJobs",
                            "jobDetails",
                            "companySearch",
                            "getJobs",
                            "getJob"
                          ],
                          "default": "companyJobs",
                          "description": "What to fetch: jobs from company boards, specific job URLs, or company board lookup."
                        },
                        "companies": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 3,
                          "description": "Board tokens, board URLs, embed URLs, job URLs, company names or domains. Examples: \"stripe\", \"https://job-boards.greenhouse.io/figma\", \"Airbnb\", \"jobs.elastic.co\"."
                        },
                        "jobUrls": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 10,
                          "description": "Full Greenhouse job URLs to fetch one by one. A company board URL alone is not enough; include /jobs/<id>."
                        },
                        "searchQuery": {
                          "type": "string",
                          "description": "Name or token text to match against the built-in company directory. Leave empty to resolve the Companies list instead."
                        },
                        "titleKeywords": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Keep jobs whose title contains any of these words (case-insensitive)."
                        },
                        "excludeTitleKeywords": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Drop jobs whose title contains any of these words (case-insensitive)."
                        },
                        "locations": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Keep jobs whose location or office contains any of these words, e.g. Remote, London, New York."
                        },
                        "departments": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Keep jobs in departments that contain any of these words, e.g. Engineering, Sales."
                        },
                        "workplaceType": {
                          "type": "string",
                          "enum": [
                            "any",
                            "remote",
                            "hybrid",
                            "onsite"
                          ],
                          "default": "any",
                          "description": "Keep remote, hybrid or on-site roles. Jobs without a stated arrangement are dropped when this is not Any."
                        },
                        "employmentType": {
                          "type": "string",
                          "enum": [
                            "any",
                            "full-time",
                            "part-time",
                            "contract",
                            "internship",
                            "temporary"
                          ],
                          "default": "any",
                          "description": "Keep full-time, part-time, contract, internship or temporary roles when the employer states it."
                        },
                        "publishedAfter": {
                          "type": "string",
                          "description": "Keep jobs first published on or after this date (YYYY-MM-DD)."
                        },
                        "updatedAfter": {
                          "type": "string",
                          "description": "Keep jobs last updated on or after this date (YYYY-MM-DD)."
                        },
                        "onlyWithSalary": {
                          "type": "boolean",
                          "default": false,
                          "description": "Keep only jobs with a published or clearly stated pay range."
                        },
                        "minAnnualSalary": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 10000000,
                          "description": "Keep jobs whose base pay reaches at least this yearly amount. Hourly, monthly and weekly ranges are annualized."
                        },
                        "salaryCurrency": {
                          "type": "string",
                          "enum": [
                            "any",
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "SGD",
                            "INR",
                            "JPY",
                            "CNY",
                            "CHF",
                            "SEK",
                            "NOK",
                            "DKK",
                            "PLN",
                            "CZK",
                            "HUF",
                            "RON",
                            "BRL",
                            "MXN",
                            "ARS",
                            "CLP",
                            "COP",
                            "ZAR",
                            "AED",
                            "SAR",
                            "ILS",
                            "TRY",
                            "KRW",
                            "TWD",
                            "HKD",
                            "NZD"
                          ],
                          "default": "any",
                          "description": "Only keep jobs with pay in this currency. Use Any to ignore currency."
                        },
                        "sortBy": {
                          "type": "string",
                          "enum": [
                            "board",
                            "publishedNewest",
                            "publishedOldest",
                            "updatedNewest",
                            "titleAZ"
                          ],
                          "default": "board",
                          "description": "Result order after filtering."
                        },
                        "content": {
                          "type": "boolean",
                          "default": false,
                          "description": "Include the full job description. Departments and offices are always included (fetched separately when descriptions are off)."
                        },
                        "descriptionFormat": {
                          "type": "string",
                          "enum": [
                            "html",
                            "text",
                            "markdown",
                            "all"
                          ],
                          "default": "html",
                          "description": "Format used when Include job descriptions is on. HTML is always the content field; text/markdown add contentText/contentMarkdown."
                        },
                        "includeQuestions": {
                          "type": "boolean",
                          "default": false,
                          "description": "Fetch each job's application form questions. Adds one request per emitted job."
                        },
                        "maxItems": {
                          "type": "integer",
                          "default": 50,
                          "minimum": 1,
                          "maximum": 50,
                          "description": "Maximum number of job or company records to emit."
                        },
                        "maxJobsPerCompany": {
                          "type": "integer",
                          "default": 50,
                          "minimum": 0,
                          "maximum": 50,
                          "description": "Cap jobs per company after filters (mode=companyJobs). 0 means no per-company cap."
                        },
                        "verifyCompanies": {
                          "type": "boolean",
                          "default": true,
                          "description": "Check each company against the live board and report its open-job count."
                        }
                      },
                      "additionalProperties": false,
                      "required": [
                        "mode"
                      ]
                    },
                    "example": {
                      "mode": "companyJobs",
                      "companies": [
                        "airbnb"
                      ],
                      "maxItems": 5
                    }
                  }
                }
              },
              "responses": {
                "200": {
                  "description": "The results as a JSON array (at most 50). They are also saved to the run's dataset and billed per result, like a normal run.",
                  "headers": {
                    "X-Item-Count": {
                      "schema": {
                        "type": "integer"
                      },
                      "description": "Results returned."
                    },
                    "X-Status-Message": {
                      "schema": {
                        "type": "string"
                      },
                      "description": "The Actor's last status message, e.g. why nothing was found."
                    }
                  },
                  "content": {
                    "application/json": {
                      "schema": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/Item"
                        }
                      },
                      "example": [
                        {
                          "id": 8365363,
                          "internalJobId": 3614972,
                          "requisitionId": "ONE",
                          "title": "Account Executive (Hotels)",
                          "companySlug": "airbnb",
                          "companyName": "Airbnb",
                          "location": {
                            "name": "Barcelona, Spain",
                            "country": "Spain",
                            "city": "Barcelona"
                          },
                          "workplaceType": "hybrid",
                          "departments": [
                            "Sales"
                          ],
                          "departmentsDetailed": [
                            {
                              "id": 57796,
                              "name": "Sales",
                              "parentId": 73691
                            }
                          ],
                          "offices": [
                            "Barcelona, Spain"
                          ],
                          "officesDetailed": [
                            {
                              "id": 155,
                              "name": "Barcelona, Spain",
                              "location": "Barcelona, Spain",
                              "parentId": 64284
                            }
                          ],
                          "metadata": [
                            {
                              "name": "Is this job part of ACC?",
                              "value": false,
                              "valueType": "yes_no"
                            },
                            {
                              "name": "Workplace Type",
                              "value": "Hybrid",
                              "valueType": "single_select"
                            }
                          ],
                          "publishedAt": "2026-11-10T04:49:33-05:00",
                          "updatedAt": "2026-11-10T04:49:33-05:00",
                          "language": "en",
                          "applyUrl": "https://careers.airbnb.com/positions/8365363?gh_jid=8365363",
                          "absoluteUrl": "https://careers.airbnb.com/positions/8365363?gh_jid=8365363",
                          "sourceUrl": "https://boards.greenhouse.io/airbnb/jobs/8365363",
                          "boardUrl": "https://job-boards.greenhouse.io/airbnb",
                          "region": "us",
                          "recordType": "job",
                          "scrapedAt": "2026-11-10T15:35:11.336009+00:00"
                        }
                      ]
                    }
                  }
                },
                "400": {
                  "description": "Invalid, missing or unknown input fields. Nothing ran.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      },
                      "example": {
                        "error": "invalid_input",
                        "errorDescription": "mode: required"
                      }
                    }
                  }
                },
                "422": {
                  "description": "The Actor could not complete this request (for example, nothing matches). No results were delivered.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "500": {
                  "description": "Unexpected failure. Safe to retry.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "504": {
                  "description": "The request used up its 240 s budget. The results found so far are in partialItems.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Error"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "partialItems": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Item"
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "components": {
          "schemas": {
            "Item": {
              "type": "object",
              "description": "One result, the same record a normal run saves to its dataset.",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "internalJobId": {
                  "type": "integer"
                },
                "requisitionId": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "companySlug": {
                  "type": "string"
                },
                "companyName": {
                  "type": "string"
                },
                "location": {
                  "type": "object"
                },
                "workplaceType": {
                  "type": "string"
                },
                "departments": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "departmentsDetailed": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                },
                "offices": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "officesDetailed": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                },
                "metadata": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                },
                "publishedAt": {
                  "type": "string"
                },
                "updatedAt": {
                  "type": "string"
                },
                "language": {
                  "type": "string"
                },
                "applyUrl": {
                  "type": "string"
                },
                "absoluteUrl": {
                  "type": "string"
                },
                "sourceUrl": {
                  "type": "string"
                },
                "boardUrl": {
                  "type": "string"
                },
                "region": {
                  "type": "string"
                },
                "recordType": {
                  "type": "string"
                },
                "scrapedAt": {
                  "type": "string"
                }
              },
              "example": {
                "id": 8365363,
                "internalJobId": 3614972,
                "requisitionId": "ONE",
                "title": "Account Executive (Hotels)",
                "companySlug": "airbnb",
                "companyName": "Airbnb",
                "location": {
                  "name": "Barcelona, Spain",
                  "country": "Spain",
                  "city": "Barcelona"
                },
                "workplaceType": "hybrid",
                "departments": [
                  "Sales"
                ],
                "departmentsDetailed": [
                  {
                    "id": 57796,
                    "name": "Sales",
                    "parentId": 73691
                  }
                ],
                "offices": [
                  "Barcelona, Spain"
                ],
                "officesDetailed": [
                  {
                    "id": 155,
                    "name": "Barcelona, Spain",
                    "location": "Barcelona, Spain",
                    "parentId": 64284
                  }
                ],
                "metadata": [
                  {
                    "name": "Is this job part of ACC?",
                    "value": false,
                    "valueType": "yes_no"
                  },
                  {
                    "name": "Workplace Type",
                    "value": "Hybrid",
                    "valueType": "single_select"
                  }
                ],
                "publishedAt": "2026-11-10T04:49:33-05:00",
                "updatedAt": "2026-11-10T04:49:33-05:00",
                "language": "en",
                "applyUrl": "https://careers.airbnb.com/positions/8365363?gh_jid=8365363",
                "absoluteUrl": "https://careers.airbnb.com/positions/8365363?gh_jid=8365363",
                "sourceUrl": "https://boards.greenhouse.io/airbnb/jobs/8365363",
                "boardUrl": "https://job-boards.greenhouse.io/airbnb",
                "region": "us",
                "recordType": "job",
                "scrapedAt": "2026-11-10T15:35:11.336009+00:00"
              }
            },
            "Error": {
              "type": "object",
              "required": [
                "error",
                "errorDescription"
              ],
              "properties": {
                "error": {
                  "type": "string",
                  "enum": [
                    "invalid_input",
                    "request_failed",
                    "internal_error",
                    "timeout",
                    "busy",
                    "not_found",
                    "method_not_allowed",
                    "payload_too_large"
                  ]
                },
                "errorDescription": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.3",
    "imageDigest": "ab98af5283630d3e43c0f056394b1edaab664939feb72f86d1727a77edf4a34e",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.012065555555555555
    }
  }
}