# Greenhouse Jobs Scraper ($0.9 per 1000 results) (`igolaizola/greenhouse-jobs-scraper`) Actor

$0.9/1K 💸 Scrape public Greenhouse job board URLs and download structured job listings with titles, locations, departments, offices, publication dates, descriptions, and job links for recruiting intelligence.

- **URL**: https://apify.com/igolaizola/greenhouse-jobs-scraper.md
- **Developed by:** [Iñigo Garcia Olaizola](https://apify.com/igolaizola) (community)
- **Categories:** Jobs, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 60.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 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 Jobs Scraper — Board URLs, Descriptions & Hiring Data

> Need company board URLs first? Use [Greenhouse Companies](https://apify.com/igolaizola/greenhouse-companies?fpr=ig) to discover Greenhouse company profiles and board URLs you can feed into this actor.

### 🤖 What does Greenhouse Jobs Scraper do?

Greenhouse Jobs Scraper extracts structured job listings from public Greenhouse job boards. Use it to download current openings, full job descriptions, departments, offices, locations, publication dates, and source job URLs for recruiting research, market intelligence, job aggregation, and lead generation.

It can collect jobs from one or many Greenhouse board URLs in a single run, including common shorthand formats such as `stripe` or `greenhouse.io/stripe`. If you leave `urls` empty, the actor uses a researched directory of Greenhouse company board URLs.

**Great for:** recruiting teams, talent intelligence, job board monitoring, competitor hiring research, sales signals, and HR data pipelines.

> SEO keywords: **Greenhouse scraper**, **Greenhouse jobs scraper**, **scrape Greenhouse jobs**, **download Greenhouse job listings**, **Greenhouse job board data**, **Apify actor**.

### 💡 Why scrape Greenhouse job boards?

- 📈 **Track hiring activity** — monitor openings from target companies and see how roles change over time.
- 🎯 **Build recruiting datasets** — collect titles, locations, departments, offices, descriptions, and job links in one clean dataset.
- 🔎 **Research competitor growth** — compare hiring focus by team, region, seniority, or job description language.
- 🧩 **Feed dashboards and workflows** — export results as JSON, CSV, Excel, XML, or Parquet from Apify datasets.
- ⚡ **Save manual work** — paste company job board URLs and get structured records ready for analysis.

### 🚀 Quick Start

1. **Add the actor** — Open **Greenhouse Jobs Scraper** in Apify Store.
2. **Paste board URLs** — Set `urls` to one or more public Greenhouse job boards.
3. **Set a limit** — Use `maxItems` to control the total number of jobs saved across all boards.
4. **Run the actor** — Click **Run** or trigger it from the Apify API / SDK.
5. **Download results** — Open the **Dataset** tab and export JSON, CSV, Excel, XML, or Parquet.

### 💳 Pricing

Apify's **Free plan** includes monthly credits that are useful for small tests. For ongoing hiring monitors, larger target lists, or scheduled runs, consider **Personal** or **Business** plans for more usage capacity.

### 📝 Input Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `urls` | Array[String] | No | Public Greenhouse board URLs. Leave empty to use the researched company board list. Full URLs like `https://boards.greenhouse.io/stripe` work best. Shorthand values such as `stripe`, `boards.greenhouse.io/stripe`, and `greenhouse.io/stripe` are also accepted. |
| `maxItems` | Integer | Yes | Maximum number of jobs to save across all provided boards. Use `0` for unlimited. Default `50`. |

**Single company board**

```json
{
  "urls": [
    "https://boards.greenhouse.io/stripe"
  ],
  "maxItems": 50
}
````

**Multiple boards with shorthand URLs**

```json
{
  "urls": [
    "stripe",
    "greenhouse.io/airbnb",
    "boards.greenhouse.io/datadog"
  ],
  "maxItems": 150
}
```

### 📊 Output / Results

Each dataset item is one Greenhouse job listing. Common fields include:

- **id** *(number)* — Greenhouse job ID.
- **internalJobId** *(number)* — Internal Greenhouse job identifier when available.
- **boardToken** *(string)* — Normalized Greenhouse board identifier.
- **boardUrl** *(string)* — Canonical board URL used as the listing source.
- **companyName** *(string)* — Company name from the job board.
- **title** *(string)* — Job title.
- **jobUrl** *(string)* — Public job application or listing URL.
- **location** *(string)* — Primary job location.
- **requisitionId** *(string)* — Requisition or opening ID when provided.
- **language** *(string)* — Listing language code when available.
- **firstPublishedAt** *(string)* — First publication timestamp.
- **updatedAt** *(string)* — Last update timestamp.
- **applicationDeadline** *(string)* — Application deadline when provided.
- **descriptionHtml** *(string)* — Full job description with original formatting when provided.
- **descriptionText** *(string)* — Clean plain-text job description.
- **departmentNames** *(array)* — Department names attached to the job.
- **officeNames** *(array)* — Office or region labels attached to the job.
- **metadata** *(object)* — Extra public metadata exposed by the board.
- **dataCompliance** *(array)* — Compliance notices provided with the listing.

**Example output**

```json
{
  "id": 7964697,
  "internalJobId": 3336216,
  "boardToken": "stripe",
  "boardUrl": "https://boards.greenhouse.io/stripe",
  "companyName": "Stripe",
  "title": "Account Executive, AI Sales",
  "jobUrl": "https://stripe.com/jobs/search?gh_jid=7964697",
  "location": "San Francisco, CA",
  "requisitionId": "REQ-2026-1024",
  "language": "en",
  "firstPublishedAt": "2026-06-02T11:35:23-04:00",
  "updatedAt": "2026-06-05T15:44:04-04:00",
  "descriptionText": "Who we are About Stripe Stripe is a financial infrastructure platform for businesses...",
  "departmentNames": [
    "1650 AI GTM Strategy & Solutions"
  ],
  "officeNames": [
    "US"
  ],
  "dataCompliance": [
    {
      "type": "gdpr"
    }
  ]
}
```

### 🧭 Tips / Common Recipes

- **Use full URLs when possible:** `https://boards.greenhouse.io/stripe` is the clearest format.
- **Paste shorthand when convenient:** values like `stripe` or `greenhouse.io/stripe` are accepted and normalized.
- **Track several companies:** add multiple values to `urls`; results include `boardUrl` so you can separate sources later.
- **Control dataset size:** `maxItems` applies across the entire run, not separately per board.
- **Schedule monitoring:** run daily or weekly to compare hiring activity over time.

### ⚙️ Best Practices

- Start with a small `maxItems` value to confirm that the board URLs are correct.
- Use public Greenhouse board pages, not private admin links or application-only pages.
- Keep a stable list of board URLs when building recurring hiring monitors.
- Some companies may customize job URLs or omit optional fields such as requisition IDs, deadlines, metadata, or compliance notices.

### ⚖️ Legal & Ethical Considerations

- Respect Greenhouse, company career site, and Apify Terms of Service.
- Collect only public job listing data that you have a legitimate reason to use.
- Handle any personal or sensitive information responsibly and follow applicable privacy laws such as GDPR or CCPA.
- Avoid excessive run frequency that could burden public job boards.
- This Actor is an independent tool and is **not** affiliated with, endorsed by, or sponsored by Greenhouse Software, Inc. All trademarks are the property of their respective owners.

### ❓ FAQ

**Can I search Greenhouse by keyword across all companies?**

No. This actor collects jobs from the Greenhouse board URLs you provide. For broad market searches, provide a list of company boards you want to monitor.

**What URL formats can I use?**

Use full URLs like `https://boards.greenhouse.io/stripe` when possible. The actor also accepts `stripe`, `boards.greenhouse.io/stripe`, `greenhouse.io/stripe`, and compatible public Greenhouse board links.

**Does the actor include full job descriptions?**

Yes. Saved jobs include `descriptionHtml` and `descriptionText` when Greenhouse provides description content.

**Can I scrape several companies in one run?**

Yes. Add multiple values to `urls`. The actor saves jobs in URL order until it reaches `maxItems`.

### 🛟 Support

Need a custom field, a scheduled monitoring setup, or a larger Greenhouse board list workflow?
Open an issue or contact the developer at https://igolaizola.com/#contact or https://t.me/igolaizola

# Actor input Schema

## `urls` (type: `array`):

Optional public Greenhouse job board URLs. If left empty, the actor uses a researched list of company board URLs.

## `maxItems` (type: `integer`):

Maximum number of jobs to return. Use 0 for unlimited.

## Actor input object example

```json
{
  "maxItems": 50
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("igolaizola/greenhouse-jobs-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("igolaizola/greenhouse-jobs-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 '{}' |
apify call igolaizola/greenhouse-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Greenhouse Jobs Scraper ($0.9 per 1000 results)",
        "description": "$0.9/1K 💸 Scrape public Greenhouse job board URLs and download structured job listings with titles, locations, departments, offices, publication dates, descriptions, and job links for recruiting intelligence.",
        "version": "0.0",
        "x-build-id": "0hhxveF20PtOJK77G"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/igolaizola~greenhouse-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-igolaizola-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/igolaizola~greenhouse-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-igolaizola-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/igolaizola~greenhouse-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-igolaizola-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": [
                    "maxItems"
                ],
                "properties": {
                    "urls": {
                        "title": "Greenhouse board URLs (ex.: https://boards.greenhouse.io/stripe)",
                        "type": "array",
                        "description": "Optional public Greenhouse job board URLs. If left empty, the actor uses a researched list of company board URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of jobs to return. Use 0 for unlimited.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
