{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse Jobs Scraper & API",
    "description": "Search 5,300+ Greenhouse job boards at once, or scrape any board by URL, token or company name. Live jobs with structured pay-transparency salary ranges, ISO countries, workplace, seniority, function, new/closed detection and hiring profiles. $1 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "bxkpe6rofHAJleJgH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/codeclouds~greenhouse-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-codeclouds-greenhouse-jobs-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/codeclouds~greenhouse-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-codeclouds-greenhouse-jobs-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/codeclouds~greenhouse-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-codeclouds-greenhouse-jobs-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "companies": {
            "title": "Companies or Greenhouse boards",
            "type": "array",
            "description": "One per line: a Greenhouse board URL (https://job-boards.greenhouse.io/discord), a board token (discord), a company website (figma.com) or a company name (Figma). Board URLs and tokens are exact; names and websites are resolved via the careers page or a board-token guess, and the profile tells you how a board was found. Leave empty to search all 5,300+ known Greenhouse boards at once (search mode, jobs only): combine with keywords, countries, functions or salary filters.",
            "default": [
              "https://job-boards.greenhouse.io/discord"
            ],
            "items": {
              "type": "string"
            }
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "jobs_and_profiles",
              "jobs_only",
              "profiles_only"
            ],
            "type": "string",
            "description": "Jobs and profiles (default), jobs only (no $0.01 profile charge), or profiles only (hiring signals without job records; ideal for monitoring many employers cheaply).",
            "default": "jobs_and_profiles"
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Only return jobs whose title or description contains any of these words (case-insensitive), e.g. python, data engineer. Greenhouse has no server-side search, so the full board is still read. In search mode (empty companies) keywords match the job title. Leave empty for all jobs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude title keywords",
            "type": "array",
            "description": "Skip jobs whose title contains any of these words (case-insensitive), e.g. intern, contract, manager.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Only return jobs whose Greenhouse department contains any of these words, e.g. engineering, sales. Department names are company-specific; use 'functions' for a normalized cross-company filter.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Only return jobs in these countries, as ISO-2 codes or names (e.g. US, NL, Germany). Matched against the parsed country, the location and the Greenhouse offices. Leave empty for all countries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "workplaceTypes": {
            "title": "Workplace types",
            "type": "array",
            "description": "Only return remote, hybrid or onsite jobs (from Greenhouse's workplace metadata or the location text). Jobs with an unknown workplace type are excluded when this filter is active. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "Onsite"
              ]
            },
            "default": []
          },
          "functions": {
            "title": "Job functions",
            "type": "array",
            "description": "Only return jobs in these normalized functions (inferred from title and department). Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "engineering",
                "data_ai",
                "product",
                "design",
                "sales",
                "marketing",
                "customer_success",
                "operations",
                "finance",
                "people_hr",
                "legal_compliance",
                "other"
              ],
              "enumTitles": [
                "Engineering",
                "Data & AI",
                "Product",
                "Design",
                "Sales",
                "Marketing",
                "Customer success",
                "Operations",
                "Finance",
                "People & HR",
                "Legal & compliance",
                "Other"
              ]
            },
            "default": []
          },
          "seniorities": {
            "title": "Seniority levels",
            "type": "array",
            "description": "Only return jobs at these seniority levels (inferred from the job title). Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "staff_principal",
                "lead",
                "manager",
                "director",
                "vp",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior",
                "Mid-level",
                "Senior",
                "Staff / principal",
                "Lead",
                "Manager",
                "Director",
                "VP",
                "Executive"
              ]
            },
            "default": []
          },
          "languages": {
            "title": "Posting languages",
            "type": "array",
            "description": "Only return postings written in these languages, as ISO 639-1 codes from Greenhouse (e.g. en, de, nl, fr, ja). Leave empty for all languages.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyWithSalary": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Only return jobs with a published salary: Greenhouse's structured pay-transparency range, or a range found in the description text. In search mode only the structured range counts.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum salary (annual)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Only return jobs whose top of the salary range, converted to an annual amount (hourly x 2080, monthly x 12), is at least this number. Jobs without a salary are excluded when set. 0 means no limit. Combine with salaryCurrency to compare like with like. In search mode only the structured range counts.",
            "default": 0
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "type": "string",
            "description": "ISO currency code (USD, EUR, GBP, CAD) used with minSalary / onlyWithSalary: jobs paid in another currency are then excluded. Leave empty to accept every currency.",
            "default": ""
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Only return jobs first published in the last N days (Greenhouse's first_published date). 0 means no limit.",
            "default": 0
          },
          "onlyNew": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Return only postings that were not present in the previous run of this Actor for the same board. On the first run every job is the baseline and is returned. In search mode: only jobs that this search (same filters) has not delivered before. Schedule this Actor for a meaningful new/closed signal; a one-off call returns all matching jobs.",
            "default": false
          },
          "collapseMultiLocation": {
            "title": "One record per job (merge locations)",
            "type": "boolean",
            "description": "Greenhouse lists one job in several locations as separate postings (about 1 in 9 postings in a live test of 44 boards). When on, you get one record per job with the other locations in 'alsoPostedIn' and all countries in 'countries': fewer duplicates and lower cost. The company profile still counts every posting.",
            "default": false
          },
          "includeDescription": {
            "title": "Include full descriptions",
            "type": "boolean",
            "description": "Add the full job description (up to 20,000 characters) to every job record. No extra cost: Greenhouse returns descriptions in the same request. Off by default to keep the dataset compact.",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html"
            ],
            "type": "string",
            "description": "Plain text (default; best for search, LLMs and spreadsheets) or the original HTML (keeps headings and lists, for job boards that render it). Only used when includeDescription is on.",
            "default": "text"
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of job records delivered per board after filtering. The full board is still read for the company profile and change detection. In search mode it caps how many results one company can take.",
            "default": 200
          },
          "maxBoards": {
            "title": "Max boards per run",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Safety cap on the number of companies/boards processed in one run. Extra inputs are skipped and reported in the run log, which keeps large pasted lists and accidental cost predictable. Not used in search mode.",
            "default": 50
          },
          "maxSearchResults": {
            "title": "Max search results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Search mode only (empty companies): total job records delivered across all boards, newest first. Each record is one job-result charge.",
            "default": 100
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}