{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse Job Board API | Jobs, Companies & New Postings",
    "description": "Live jobs from any Greenhouse job board, no API key needed. Scrape full postings with salaries and timestamps, discover 4,400+ companies hiring on Greenhouse, and track new or changed roles. Pay per row delivered: no start fee, no minimum, filters run before billing.",
    "version": "0.0",
    "x-build-id": "siWMtA4dyI7XfRBIB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/johnvc~greenhouse-job-board-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-johnvc-greenhouse-job-board-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/johnvc~greenhouse-job-board-api/runs": {
      "post": {
        "operationId": "runs-sync-johnvc-greenhouse-job-board-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/johnvc~greenhouse-job-board-api/run-sync": {
      "post": {
        "operationId": "run-sync-johnvc-greenhouse-job-board-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 (tokens or URLs)",
            "type": "array",
            "description": "Greenhouse board tokens or URLs, mixed freely: a bare token (stripe), a board URL (https://boards.greenhouse.io/stripe or https://job-boards.greenhouse.io/stripe), an embed URL (...?for=stripe), or a single job URL (.../stripe/jobs/1234567). Leave empty together with startUrls to sweep companies from the bundled directory instead.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Alternative to the companies field for URL-shaped input; both lists are merged. Accepts the same board, embed, and single-job URL forms.",
            "items": {
              "type": "object"
            }
          },
          "outputMode": {
            "title": "What to return",
            "enum": [
              "jobs",
              "urlsOnly",
              "companiesOnly"
            ],
            "type": "string",
            "description": "jobs returns full job records. urlsOnly returns the job index without descriptions, the cheapest way to list everything. companiesOnly returns one row per company from the discovery directory with a live job count.",
            "default": "jobs"
          },
          "discoveryQuery": {
            "title": "Discovery query",
            "type": "string",
            "description": "Case-insensitive text matched against company names and board tokens in the bundled directory. Scopes companiesOnly runs and empty-input sweeps. Leave empty to take the largest boards first.",
            "default": ""
          },
          "verifyCompanies": {
            "title": "Verify companies live",
            "type": "boolean",
            "description": "companiesOnly mode: probe each candidate board against the live API before returning it, adding a current job count. Dead boards are skipped and never billed. Turn off to list the directory snapshot without network checks.",
            "default": true
          },
          "titleKeywords": {
            "title": "Job title keywords",
            "type": "array",
            "description": "Keep only jobs whose title contains any of these words, for example engineer, sales, designer. Filters run before billing, so filtered jobs cost nothing.",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Department contains",
            "type": "array",
            "description": "Keep only jobs whose department name contains any of these values, for example Engineering, Marketing.",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location contains",
            "type": "array",
            "description": "Keep only jobs whose location or office name contains any of these values, for example Remote, London, New York.",
            "items": {
              "type": "string"
            }
          },
          "updatedAfter": {
            "title": "Updated after (change detection)",
            "type": "string",
            "description": "Keep only jobs the employer updated on or after this cutoff. Accepts a relative window (24h, 7d, 2w) or an ISO date or datetime (2026-08-01 or 2026-08-01T12:00:00Z). Uses the board's own updated_at timestamp, so a daily schedule with 25h returns only what changed. No state to manage.",
            "default": ""
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Keep only jobs first published on or after this cutoff. Same formats as updatedAfter. Use this for genuinely-new-roles feeds.",
            "default": ""
          },
          "includeDescriptionMarkdown": {
            "title": "Description as Markdown (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionMarkdown to each job row: the posting converted to clean Markdown, compact and ready for AI agents and LLM pipelines. Billed per job row that carries it. Uncheck for cheaper metadata-only rows.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Description as HTML (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionHtml to each job row: the original posting markup, entity-decoded. Billed per job row that carries it.",
            "default": false
          },
          "includeDescriptionText": {
            "title": "Description as plain text (paid add-on)",
            "type": "boolean",
            "description": "Add descriptionText to each job row: the posting flattened to plain prose. Billed per job row that carries it.",
            "default": false
          },
          "includeQuestions": {
            "title": "Application form questions (paid add-on)",
            "type": "boolean",
            "description": "Fetch each job's application form questions, plus compliance, demographic, and location question sets, via one extra request per job. Slower on large runs. Billed per job row that carries question data.",
            "default": false
          },
          "report": {
            "title": "Whole-run report (paid add-on)",
            "enum": [
              "none",
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "Also write a human-readable digest of every scraped job, grouped by company, to the key-value store under the REPORT key. One flat charge per report. Capped at 5000 rows.",
            "default": "none"
          },
          "maxCompanies": {
            "title": "Max companies",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Cap on companies processed in a discovery sweep or companiesOnly run. Keeps empty-input runs small and predictable.",
            "default": 25
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on job rows per board after filtering. 0 means no per-company cap.",
            "default": 0
          },
          "maxJobs": {
            "title": "Max jobs for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard ceiling on rows across the entire run, all companies combined. The main cost control. 0 means unlimited.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel per-job requests, used when fetching application questions or hydrating oversized boards.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. The public board API answers direct connections, so leave this off unless your network requires a proxy.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}