{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse Jobs Scraper: job boards with salary ranges",
    "description": "Get every open job from Greenhouse job boards (boards.greenhouse.io, job-boards.greenhouse.io, EU boards and embedded boards) as clean JSON with pay-transparency salary ranges, locations, department, remote flag and apply link. Filters, new-job monitoring, pay per job.",
    "version": "1.0",
    "x-build-id": "UZWRjYgSUMzpUELhT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/endurable_aqueduct~greenhouse-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-endurable_aqueduct-greenhouse-jobs-scraper",
        "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/endurable_aqueduct~greenhouse-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-endurable_aqueduct-greenhouse-jobs-scraper",
        "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/endurable_aqueduct~greenhouse-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-endurable_aqueduct-greenhouse-jobs-scraper",
        "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",
        "required": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Greenhouse boards",
            "minItems": 1,
            "maxItems": 5000,
            "type": "array",
            "description": "One board per line. Paste the company's Greenhouse board URL, for example `https://boards.greenhouse.io/airbnb` or `https://job-boards.eu.greenhouse.io/proton`, a link to any of its jobs, the shorthand `greenhouse:airbnb`, the company's own careers page with an embedded Greenhouse board, or just the board name (`airbnb`).",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep only jobs whose title (or title and description, see 'Match keywords in') contains at least one of these terms. Case- and accent-insensitive whole-word match; multi-word phrases are allowed; add * for a prefix match (engineer* matches engineering). Leave empty for all jobs.",
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Match keywords in",
            "enum": [
              "title",
              "title_and_description"
            ],
            "type": "string",
            "description": "Where 'Keywords' must appear: the job title only (precise, default) or the title or the description (broader).",
            "default": "title"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these terms (same matching rules as 'Keywords'), e.g. senior, intern, manager.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep jobs in any of these places. Each value is matched against the job's location text and country: a city ('Berlin'), a region ('Bavaria'), a country name ('Germany') or a two-letter ISO country code ('DE', 'US', 'GB'/'UK'). Use 'Remote' to also match remote jobs. Some ATSs only publish a city, so add city names for best coverage.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only fully remote jobs (workplace_type = remote or is_remote = true). Hybrid jobs are excluded.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs published in the last N days (0 = no limit). Uses the publication date, or the last-updated date when the ATS has no publication date; jobs with neither (Pinpoint) are excluded while this filter is on."
          },
          "departments": {
            "title": "Departments / teams",
            "type": "array",
            "description": "Keep jobs whose department or team contains any of these terms, e.g. Engineering, Sales. Workday's public API has no department field, so Workday jobs are excluded while this filter is on.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only these normalized employment types. Jobs whose ATS does not publish a type (Greenhouse without custom fields, Teamtailor) are excluded while this filter is on.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "temporary",
                "internship",
                "apprenticeship",
                "volunteer"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract / freelance",
                "Temporary / fixed-term",
                "Internship",
                "Apprenticeship / trainee",
                "Volunteer"
              ]
            }
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of matching jobs saved per company, newest first where the ATS publishes dates (0 = no limit). Each saved job is one billable result.",
            "default": 1000
          },
          "maxTotalJobs": {
            "title": "Max jobs in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop the whole run after this many jobs are saved (0 = no limit). Useful to cap cost; the run also stops automatically at your 'Maximum cost per run'.",
            "default": 0
          },
          "includeDescription": {
            "title": "Include description text",
            "type": "boolean",
            "description": "Add the full job description as clean plain text (description_text). Turn off for smaller, faster results; SmartRecruiters then also skips one request per job.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Include description HTML",
            "type": "boolean",
            "description": "Also add the original description HTML (description_html), e.g. to render the posting.",
            "default": false
          },
          "language": {
            "title": "Personio language",
            "pattern": "^$|^[a-zA-Z]{2}([-_][a-zA-Z]{2})?$",
            "type": "string",
            "description": "Optional ISO 639-1 language code (e.g. en, de) requested from Personio feeds. When a job has no translation, the company's default language is used. Other ATSs return the language the company published."
          },
          "onlyNewJobs": {
            "title": "Only new jobs (monitoring mode)",
            "type": "boolean",
            "description": "Return only jobs that earlier runs with the same 'State key' have not returned yet - ideal for scheduled daily runs (you only pay for new jobs). The list of returned jobs is kept for 120 days in a named key-value store 'ats-jobs-scraper-state' in your account.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Name of the job list used by 'Only new jobs'. Use a different key per saved task or schedule so they don't share state.",
            "default": "default"
          },
          "detectAtsFromCareersPage": {
            "title": "Detect ATS on company careers pages",
            "type": "boolean",
            "description": "For URLs that are not an ATS board (e.g. https://acme.com/careers), download that one page and look for an embedded or linked job board.",
            "default": true
          },
          "probeCompanyNames": {
            "title": "Resolve bare company names",
            "type": "boolean",
            "description": "For entries that are just a name (e.g. openai), probe every supported ATS for a board with that identifier and use the first one with open jobs.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Companies in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many companies are processed at the same time.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 180,
            "type": "integer",
            "description": "Timeout for a single HTTP request. Failed requests are retried with exponential backoff.",
            "default": 30
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries for timeouts, network errors, HTTP 429 and 5xx responses (respecting Retry-After).",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed: all sources are public APIs/feeds. Only enable a proxy if your own network or a vendor rate-limits you.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}