{
  "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"
          }
        }
      }
    },
    "securitySchemes": {
      "apifyToken": {
        "type": "http",
        "scheme": "bearer",
        "description": "Your Apify API token (Apify Console, Settings, API and integrations)."
      }
    }
  },
  "servers": [
    {
      "url": "https://dataspryva--greenhouse-ats-job-board-lookup-by-company.apify.actor"
    }
  ],
  "security": [
    {
      "apifyToken": []
    }
  ]
}