# Greenhouse Hiring Intelligence Scraper (`coregent/greenhouse-hiring-intelligence-scraper`) Actor

Scrape public Greenhouse job boards via the Greenhouse Job Board API and turn them into clean, flat, CSV-ready job + hiring-intelligence rows - no login, cookies, or browser required.

- **URL**: https://apify.com/coregent/greenhouse-hiring-intelligence-scraper.md
- **Developed by:** [Delowar Munna](https://apify.com/coregent) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 job-results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Greenhouse Hiring Intelligence Scraper

![Greenhouse Hiring Intelligence Scraper](https://raw.githubusercontent.com/coregentdevspace/greenhouse-hiring-intelligence-scraper-assets/main/thumbnail-greenhouse-hiring-intelligence-scraper.png)

Scrape **public Greenhouse job boards** straight from the **Greenhouse Job Board API** and turn them into clean, flat, CSV-ready rows — plus lightweight **hiring-intelligence** fields (remote/hybrid flags, seniority, department group, role family, salary text, hiring-signal score + reason tags). Built for **lead-gen and sales teams, recruiters, staffing agencies, market researchers, and data analysts**.

**No login, no cookies, no Harvest API keys, no browser.** The actor uses Greenhouse's public Job Board API over HTTP, so it stays fast and cost-predictable. You pay one flat event per unique job row that passes your filters.

### ✨ Why this scraper

- **Greenhouse-specific, hiring-intelligence focused** — not a generic job scraper. Every row carries derived signals that make the data useful for sales triggers, recruiting, and market research.
- **Public API, one request per board** — Greenhouse returns every published job (with descriptions, departments, offices, and company name) in a single JSON response. No pagination, no per-job page visits.
- **34 flat fields** — job identity, company, role metadata, location/remote, compensation, description, dates, and hiring signals. No nested objects — drops straight into Sheets/Excel/CRMs.
- **Pay-Per-Event** — one flat `job-result` event per saved unique job. Duplicates and filtered rows are never charged.
- **No login / cookies / sessions / paid APIs** — just board tokens or URLs.
- **Transparent hiring-signal score** — rule-based (no AI), explained below.

---

### 🚀 Quick start — sample inputs

#### Example 1 — a couple of boards by token

```json
{
    "boards": ["airbnb", "stripe"],
    "maxResults": 500,
    "includeDescription": true,
    "descriptionFormat": "text",
    "deduplicate": true,
    "proxyConfiguration": { "useApifyProxy": false }
}
````

#### Example 2 — filtered, remote senior roles across boards

```json
{
    "boards": ["airbnb", "https://boards.greenhouse.io/stripe"],
    "maxResults": 1000,
    "includeDescription": true,
    "descriptionFormat": "text",
    "keywordFilter": ["data", "software", "sales"],
    "excludeKeywords": ["internship"],
    "departmentFilter": [],
    "locationFilter": ["remote", "United States"],
    "remoteOnly": false,
    "seniorityFilter": ["senior", "lead", "manager"],
    "updatedAfter": "2026-01-01",
    "requireUpdatedDate": false,
    "deduplicate": true,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

***

### 🧾 Inputs

| Field                | Type          | Default                     | Description                                                                                                                    |
| -------------------- | ------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `boards`             | array<string> | `["airbnb"]`                | Board tokens (`airbnb`), board URLs (`https://boards.greenhouse.io/airbnb`), or Job Board API URLs. **At least one required.** |
| `maxResults`         | integer       | `1000`                      | Max saved unique jobs across the run (1–50000).                                                                                |
| `includeDescription` | boolean       | `true`                      | Request full descriptions (`content=true`). Improves derived fields and the signal score.                                      |
| `descriptionFormat`  | string        | `text`                      | `text`, `html`, or `both`.                                                                                                     |
| `keywordFilter`      | array<string> | `[]`                        | Keep jobs matching any term (title/department/location/company/description).                                                   |
| `excludeKeywords`    | array<string> | `[]`                        | Remove jobs matching any term. **Exclusion wins over inclusion.**                                                              |
| `departmentFilter`   | array<string> | `[]`                        | Keep jobs whose department or department group matches.                                                                        |
| `locationFilter`     | array<string> | `[]`                        | Keep jobs whose location/city/country/workplace type matches.                                                                  |
| `remoteOnly`         | boolean       | `false`                     | Keep only remote/hybrid jobs.                                                                                                  |
| `seniorityFilter`    | array<string> | `[]`                        | Keep only matching seniority classes (`intern`…`executive`, `unknown`).                                                        |
| `updatedAfter`       | string        | `""`                        | Keep jobs updated/published on or after this ISO date (`YYYY-MM-DD`).                                                          |
| `requireUpdatedDate` | boolean       | `false`                     | With `updatedAfter`, drop jobs that have no source timestamp.                                                                  |
| `deduplicate`        | boolean       | `true`                      | Remove duplicate jobs across boards/inputs.                                                                                    |
| `proxyConfiguration` | object        | `{ "useApifyProxy": true }` | No proxy / Apify Datacenter / custom URLs. **Apify Residential is rejected at startup.**                                       |

> No input accepts cookies, login credentials, authorization headers, user API keys, session tokens, or Greenhouse Harvest API credentials.

***

### 📤 Output

One flat, CSV-friendly row per job. A row is valid with at least `job_id`, `job_url`, or `title` + `company_board_token`.

#### Job & hiring-intelligence — table view

![Job & hiring-intelligence table view](https://raw.githubusercontent.com/coregentdevspace/greenhouse-hiring-intelligence-scraper-assets/main/greenhouse-hiring-intelligence-scraper-output-job-n-hiring-intelligence-table-view.png)

#### Sample output row

```json
{
    "job_id": "7881559",
    "job_url": "https://careers.airbnb.com/positions/7881559?gh_jid=7881559",
    "apply_url": "https://careers.airbnb.com/positions/7881559?gh_jid=7881559",
    "company_board_token": "airbnb",
    "company_name": "Airbnb",
    "title": "Associate Principal, SF&A - Host Products",
    "department": "Financial Planning and Analysis",
    "department_group": "Finance",
    "role_family": "finance",
    "location": "United States",
    "locations_raw": "United States",
    "country": "United States",
    "city": null,
    "workplace_type": "remote",
    "is_remote": true,
    "seniority": "lead",
    "employment_type": "unknown",
    "salary_text": "$157,000—$172,000",
    "salary_min": 157000,
    "salary_max": 172000,
    "salary_currency": "USD",
    "description_text": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home... The Associate Principal, Strategic Finance & Analytics, Host Product role will be responsible for partnering closely with Product, Supply, and Analytics leaders across Airbnb's host ecosystem... Pay Range $157,000—$172,000 USD",
    "description_html": null,
    "published_at": "2026-05-05T14:12:13.000Z",
    "updated_at": "2026-05-05T14:12:13.000Z",
    "requisition_id": "ONE",
    "questions_count": 0,
    "has_application_questions": false,
    "hiring_signal_score": 100,
    "hiring_signal_label": "high",
    "reason_tags": "recent_job; remote_or_hybrid; senior_role; salary_visible; high_description_quality",
    "source_type": "greenhouse_job_board_api",
    "source_input": "airbnb",
    "scraped_at": "2026-06-02T07:39:29.325Z"
}
```

#### Output fields (34)

`job_id`, `job_url`, `apply_url`, `company_board_token`, `company_name`, `title`, `department`, `department_group`, `role_family`, `location`, `locations_raw`, `country`, `city`, `workplace_type`, `is_remote`, `seniority`, `employment_type`, `salary_text`, `salary_min`, `salary_max`, `salary_currency`, `description_text`, `description_html`, `published_at`, `updated_at`, `requisition_id`, `questions_count`, `has_application_questions`, `hiring_signal_score`, `hiring_signal_label`, `reason_tags`, `source_type`, `source_input`, `scraped_at`.

> **Application questions:** the Greenhouse Job Board jobs endpoint does not return application questions, so `questions_count` is `0` and `has_application_questions` is `false` in this version (the actor never makes extra per-job requests).

A **run summary** is stored in the default key-value store under key `RUN_SUMMARY` (inputs, normalized boards, raw vs saved counts, duplicates removed, filtered out, charged events, failed boards, runtime).

***

### 🧮 Hiring-signal score (transparent, no AI)

Each row gets a `hiring_signal_score` from 0–100, built only from visible/derived fields:

| Points | Condition                                                  |
| ------ | ---------------------------------------------------------- |
| +20    | Job title present                                          |
| +15    | Department present                                         |
| +15    | Location present                                           |
| +10    | Description ≥ 500 characters                               |
| +10    | Remote or hybrid                                           |
| +10    | Senior+ seniority (senior/lead/manager/director/executive) |
| +10    | Visible salary/compensation text                           |
| +10    | Updated/published within the last 45 days                  |

**Labels:** `0–39` → `low`, `40–69` → `medium`, `70–100` → `high`.

**Reason tags** (semicolon-separated) include any of: `recent_job`, `remote_or_hybrid`, `senior_role`, `salary_visible`, `engineering_hiring`, `sales_hiring`, `multi_location`, `high_description_quality`, `application_questions_present`.

***

### 💸 Pricing — Pay-Per-Event

| Event        | When it fires                                                                                    |
| ------------ | ------------------------------------------------------------------------------------------------ |
| `job-result` | Once per valid unique job row that passed all filters and was successfully saved to the dataset. |

Duplicates, filtered-out rows, and failed board fetches are **never** charged. The actor also respects the per-run spending limit you set on Apify — it stops saving once that limit is reached.

#### 🚦 Proxy policy

The Greenhouse Job Board API is public and typically works with **no proxy**. **Apify Datacenter** proxy and **no proxy** both work reliably at this actor's conservative concurrency.

**Apify Residential proxy is not supported.** The actor fails at startup if `apifyProxyGroups` includes `RESIDENTIAL`. Reason: in pay-per-event actors, residential bandwidth (~$/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's **Custom proxy URLs** field — that traffic goes through your provider, not Apify, and is unaffected:

```
http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777
```

***

### ⚙️ How it works

1. Each board input is normalized to a Greenhouse board token, then to `https://boards-api.greenhouse.io/v1/boards/{token}/jobs?content=true`.
2. One HTTP request per board returns all published jobs as JSON (no pagination, no browser).
3. Each job is mapped to a flat row; descriptions are decoded from HTML to text; department group, role family, workplace type, seniority, employment type, salary, country/city are derived with deterministic rules.
4. Filters (keyword/exclude/department/location/remote/seniority/updated-after) and deduplication are applied.
5. Surviving unique rows are scored, saved, and charged. Failed boards are recorded; the run still returns partial results.

***

### 📌 Notes & limits

- Public, published jobs only. No login, private, or closed listings; no candidate/application data.
- Salary fields are best-effort extraction from visible description text.
- This actor is built to extend cleanly into Lever, Ashby, and Workday-public variants.

# Actor input Schema

## `boards` (type: `array`):

Greenhouse boards to scrape. Each item can be a board token (e.g. "airbnb"), a board URL (e.g. "https://boards.greenhouse.io/airbnb" or "https://job-boards.greenhouse.io/airbnb"), or a Job Board API URL. At least one is required.

## `maxResults` (type: `integer`):

Maximum number of saved unique jobs across the whole run (not per board). Range 1-50000.

## `includeDescription` (type: `boolean`):

Request full job descriptions from the Greenhouse API (content=true). Descriptions also improve derived fields (workplace type, seniority, salary text) and the hiring-signal score. Turning this off makes runs lighter but returns fewer fields.

## `descriptionFormat` (type: `string`):

How to output the job description when included.

## `keywordFilter` (type: `array`):

Keep only jobs where any of these terms appears in the title, department, location, company name, or description (case-insensitive). Leave empty to keep all.

## `excludeKeywords` (type: `array`):

Remove jobs where any of these terms appears in the title, department, location, company name, or description. Exclusion always wins over inclusion.

## `departmentFilter` (type: `array`):

Keep only jobs whose department or department group contains any of these terms (case-insensitive). Leave empty to keep all.

## `locationFilter` (type: `array`):

Keep only jobs whose location, city, country, or workplace type contains any of these terms (e.g. "remote", "United States", "Sydney"). Leave empty to keep all.

## `remoteOnly` (type: `boolean`):

Return only jobs classified as remote or hybrid.

## `seniorityFilter` (type: `array`):

Keep only jobs whose derived seniority is in this set. Leave empty to keep all.

## `updatedAfter` (type: `string`):

Keep only jobs updated/published on or after this ISO date (YYYY-MM-DD), where a source timestamp exists. Leave empty to disable.

## `requireUpdatedDate` (type: `boolean`):

When filtering by "Updated after", exclude jobs that have no source update/publish timestamp. Has no effect unless "Updated after" is set.

## `deduplicate` (type: `boolean`):

Remove duplicate jobs across boards and inputs (by job ID, canonical URL, then title + company + location). Duplicates are never charged.

## `proxyConfiguration` (type: `object`):

Proxy configuration. The Greenhouse Job Board API usually works with no proxy. Apify Datacenter and custom proxy URLs are supported. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).

## Actor input object example

```json
{
  "boards": [
    "airbnb",
    "stripe"
  ],
  "maxResults": 1000,
  "includeDescription": true,
  "descriptionFormat": "text",
  "keywordFilter": [],
  "excludeKeywords": [],
  "departmentFilter": [],
  "locationFilter": [],
  "remoteOnly": false,
  "seniorityFilter": [],
  "updatedAfter": "",
  "requireUpdatedDate": false,
  "deduplicate": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Flat 34-field table view of every job row pushed to the dataset, including job identity, company, role metadata, location/remote, compensation, description, dates, and derived hiring-signal fields.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "boards": [
        "airbnb",
        "stripe"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("coregent/greenhouse-hiring-intelligence-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "boards": [
        "airbnb",
        "stripe",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("coregent/greenhouse-hiring-intelligence-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "boards": [
    "airbnb",
    "stripe"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call coregent/greenhouse-hiring-intelligence-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=coregent/greenhouse-hiring-intelligence-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Greenhouse Hiring Intelligence Scraper",
        "description": "Scrape public Greenhouse job boards via the Greenhouse Job Board API and turn them into clean, flat, CSV-ready job + hiring-intelligence rows - no login, cookies, or browser required.",
        "version": "1.0",
        "x-build-id": "lZq3NObcn4RKlBDOk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/coregent~greenhouse-hiring-intelligence-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-coregent-greenhouse-hiring-intelligence-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/coregent~greenhouse-hiring-intelligence-scraper/runs": {
            "post": {
                "operationId": "runs-sync-coregent-greenhouse-hiring-intelligence-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/coregent~greenhouse-hiring-intelligence-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-coregent-greenhouse-hiring-intelligence-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",
                "properties": {
                    "boards": {
                        "title": "Greenhouse boards",
                        "type": "array",
                        "description": "Greenhouse boards to scrape. Each item can be a board token (e.g. \"airbnb\"), a board URL (e.g. \"https://boards.greenhouse.io/airbnb\" or \"https://job-boards.greenhouse.io/airbnb\"), or a Job Board API URL. At least one is required.",
                        "default": [
                            "airbnb"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of saved unique jobs across the whole run (not per board). Range 1-50000.",
                        "default": 1000
                    },
                    "includeDescription": {
                        "title": "Include job descriptions",
                        "type": "boolean",
                        "description": "Request full job descriptions from the Greenhouse API (content=true). Descriptions also improve derived fields (workplace type, seniority, salary text) and the hiring-signal score. Turning this off makes runs lighter but returns fewer fields.",
                        "default": true
                    },
                    "descriptionFormat": {
                        "title": "Description format",
                        "enum": [
                            "text",
                            "html",
                            "both"
                        ],
                        "type": "string",
                        "description": "How to output the job description when included.",
                        "default": "text"
                    },
                    "keywordFilter": {
                        "title": "Keyword filter (include)",
                        "type": "array",
                        "description": "Keep only jobs where any of these terms appears in the title, department, location, company name, or description (case-insensitive). Leave empty to keep all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludeKeywords": {
                        "title": "Exclude keywords",
                        "type": "array",
                        "description": "Remove jobs where any of these terms appears in the title, department, location, company name, or description. Exclusion always wins over inclusion.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "departmentFilter": {
                        "title": "Department filter",
                        "type": "array",
                        "description": "Keep only jobs whose department or department group contains any of these terms (case-insensitive). Leave empty to keep all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "locationFilter": {
                        "title": "Location filter",
                        "type": "array",
                        "description": "Keep only jobs whose location, city, country, or workplace type contains any of these terms (e.g. \"remote\", \"United States\", \"Sydney\"). Leave empty to keep all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "remoteOnly": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "Return only jobs classified as remote or hybrid.",
                        "default": false
                    },
                    "seniorityFilter": {
                        "title": "Seniority filter",
                        "type": "array",
                        "description": "Keep only jobs whose derived seniority is in this set. Leave empty to keep all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "intern",
                                "junior",
                                "mid",
                                "senior",
                                "lead",
                                "manager",
                                "director",
                                "executive",
                                "unknown"
                            ],
                            "enumTitles": [
                                "Intern",
                                "Junior",
                                "Mid",
                                "Senior",
                                "Lead",
                                "Manager",
                                "Director",
                                "Executive",
                                "Unknown"
                            ]
                        },
                        "default": []
                    },
                    "updatedAfter": {
                        "title": "Updated after",
                        "type": "string",
                        "description": "Keep only jobs updated/published on or after this ISO date (YYYY-MM-DD), where a source timestamp exists. Leave empty to disable.",
                        "default": ""
                    },
                    "requireUpdatedDate": {
                        "title": "Require update date",
                        "type": "boolean",
                        "description": "When filtering by \"Updated after\", exclude jobs that have no source update/publish timestamp. Has no effect unless \"Updated after\" is set.",
                        "default": false
                    },
                    "deduplicate": {
                        "title": "Deduplicate",
                        "type": "boolean",
                        "description": "Remove duplicate jobs across boards and inputs (by job ID, canonical URL, then title + company + location). Duplicates are never charged.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy configuration. The Greenhouse Job Board API usually works with no proxy. Apify Datacenter and custom proxy URLs are supported. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
