# Greenhouse Job Board Scraper — Extract Jobs & Salaries (`vnx0/greenhouse-jobs-scraper`) Actor

Extract job listings, descriptions, salaries, and hiring data from any company's career page. Scrape thousands of job boards with no authentication needed.

- **URL**: https://apify.com/vnx0/greenhouse-jobs-scraper.md
- **Developed by:** [Vnx0](https://apify.com/vnx0) (community)
- **Categories:** Lead generation, Jobs, Integrations
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 job scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Job Board Scraper — Extract Jobs, Salaries & Hiring Data

Extract job openings, salaries, descriptions, and hiring data from any company's career board. This Apify actor scrapes job titles, locations, departments, compensation, metadata, and application URLs from the Greenhouse applicant tracking system (ATS) used by over 8,000 companies including Stripe, Coinbase, Airbnb, Uber, and Robinhood. The only Greenhouse job board scraper you need for recruitment analytics, competitive intelligence, and job aggregation.

### Overview

Greenhouse is one of the most popular ATS platforms, powering careers pages for thousands of companies worldwide. This actor provides a fast, reliable API alternative to manually browsing career pages, extracting all publicly available hiring data in structured JSON format. Perfect for recruitment analytics, competitive intelligence, job aggregation, and market research.

### ✨ Features

| Feature | Description |
|---|---|
| 🔍 **Multi-board scraping** | Extract jobs from any company's Greenhouse career board |
| 🏢 **8,000+ companies** | Works with Stripe, Coinbase, Airbnb, Uber, Robinhood, and thousands more |
| 🚀 **No authentication needed** | Scrape public job boards instantly — no API keys or login required |
| 📄 **Full job descriptions** | Get complete HTML and plain-text versions of every job listing |
| 📍 **Structured locations** | Parsed location data with city, state, and country where available |
| 🏷️ **Smart metadata extraction** | Automatically extracts employment type, experience level, remote status, and more |
| 🔗 **Direct apply links** | Get direct application URLs for every job |
| 🎯 **Department & location filters** | Only scrape jobs matching specific departments or locations |
| 🌐 **Custom domain support** | Handles companies using their own career domains (e.g., careers.company.com) |
| 📊 **Paginated results** | Automatically handles pagination for boards with hundreds of open roles |
| 📋 **Structured JSON output** | Clean, consistent dataset schema ready for analysis |
| ⚡ **High performance** | Extracts data efficiently with automatic retries and rate limiting |

### Use Cases

- **Scrape competitor job openings** — Track what roles your competitors are hiring for
- **Job aggregation platforms** — Build job boards by aggregating listings from multiple companies
- **Recruitment market research** — Analyze hiring trends across industries, locations, and departments
- **Salary data collection** — Extract compensation information when companies include it
- **Department growth tracking** — Monitor which teams are expanding at target companies
- **Remote job discovery** — Filter for remote positions across thousands of companies
- **Talent pipeline building** — Identify companies hiring for specific skill sets

### How It Works

1. **Enter board URLs or company names** — Provide career board URLs or just type company names
2. **Actor fetches all jobs** — Extracts all job listings with automatic pagination
3. **Results in structured JSON** — Get clean, structured data in the Apify dataset, ready for export to CSV, JSON, Excel, or your database

### Input

| Field | Type | Description | Required | Default |
|-------|------|-------------|----------|---------|
| `startUrls` | array | List of career board URLs to scrape | No | `[]` |
| `companyNames` | array | Company names to scrape jobs from | No | `[]` |
| `maxJobsPerBoard` | integer | Maximum jobs to extract per board (0 = unlimited) | No | `0` |
| `includeFullDescription` | boolean | Include full HTML job descriptions | No | `true` |
| `filterDepartments` | array | Only include jobs from these departments | No | `[]` |
| `filterLocations` | array | Only include jobs matching these locations | No | `[]` |
| `proxyConfiguration` | object | Apify proxy configuration | No | `{"useApifyProxy": true}` |

**Note:** Provide at least one of `startUrls` or `companyNames`.

#### Supported URL Formats

- `https://boards.greenhouse.io/{company}`
- `https://boards.greenhouse.io/{company}/jobs`
- Custom career domains (e.g., `https://careers.company.com`)

### Output

Each job listing includes:

| Field | Type | Description |
|-------|------|-------------|
| `id` | integer | Internal job listing ID |
| `title` | string | Job title |
| `company` | string | Company name |
| `url` | string | Direct link to job listing |
| `applicationUrl` | string | Direct application link |
| `location` | object | Primary job location |
| `departments` | array | Departments (e.g., ["Engineering", "Product"]) |
| `offices` | array | Office locations |
| `description` | string | Full job description (HTML) |
| `descriptionText` | string | Plain text description |
| `requisitionId` | string | Company requisition ID |
| `internalJobId` | string | Company's internal job reference ID |
| `employmentType` | string | Full-time, Part-time, Contract, etc. |
| `experienceLevel` | string | Entry, Mid, Senior, Lead, etc. |
| `remote` | boolean | Whether position is remote |
| `metadata` | object | All custom company metadata fields |
| `updatedAt` | string | Last updated timestamp (ISO 8601) |
| `scrapedAt` | string | When job was scraped (ISO 8601) |

### Sample Output

```json
{
  "id": 7532733,
  "title": "Account Executive, AI Sales",
  "company": "Stripe",
  "url": "https://stripe.com/jobs/search?gh_jid=7532733",
  "applicationUrl": "https://stripe.com/jobs/search?gh_jid=7532733",
  "location": {
    "name": "San Francisco, CA"
  },
  "departments": ["1175 Enterprise - Account Executives (NA)"],
  "offices": [
    {
      "name": "US",
      "location": null
    }
  ],
  "description": "<h2>Who we are</h2><h3>About Stripe</h3><p>Stripe is a financial infrastructure platform for businesses...</p>",
  "descriptionText": "Who we are About Stripe Stripe is a financial infrastructure platform for businesses. Millions of companies - from the world's largest enterprises to the most ambitious startups - use Stripe to accept payments...",
  "requisitionId": "See Opening ID",
  "internalJobId": "3336216",
  "employmentType": null,
  "experienceLevel": null,
  "remote": null,
  "metadata": {},
  "updatedAt": "2026-04-16T11:05:52-04:00",
  "scrapedAt": "2026-04-19T13:55:14.100852+00:00"
}
````

### Cost & Usage

This actor uses event-based pricing:

- **$0.002 per job** ($2 per 1,000 jobs)
- Typical board has 20-200 jobs
- Example: Scraping 10 companies with 50 jobs each = 500 jobs = $1.00

Apify free tier includes $5 of free usage monthly, enough for ~2,500 jobs.

### Tips

- **Use company names for quick scraping** — Just enter `stripe` instead of the full URL
- **Check the dataset tab** — Results appear in real-time as jobs are scraped
- **Filter before scraping** — Use department/location filters to reduce costs
- **Combine with other scrapers** — Use alongside LinkedIn or Indeed scrapers for comprehensive coverage
- **Monitor regularly** — Set up scheduled runs to track new job postings
- **Export to your tools** — Connect results to your ATS, CRM, or analytics platform via Apify integrations

### Example Use Cases

#### Track Competitor Hiring

```json
{
  "companyNames": ["stripe", "square", "adyen", "checkout"],
  "filterDepartments": ["Engineering", "Product"]
}
```

#### Find Remote Engineering Jobs

```json
{
  "companyNames": ["gitlab", "zapier", "automattic", "doist"],
  "filterLocations": ["Remote"]
}
```

#### Build a Job Board

```json
{
  "startUrls": [
    "https://boards.greenhouse.io/stripe",
    "https://boards.greenhouse.io/coinbase",
    "https://boards.greenhouse.io/airbnb"
  ],
  "maxJobsPerBoard": 100
}
```

### Limitations

- Only works with companies using Greenhouse ATS
- Some companies may have private boards (not publicly accessible)
- Custom metadata fields vary by company
- Salary information only included if company publishes it

### Support

For issues or questions, please contact us through the Apify platform.

### Privacy & Compliance

This actor only extracts publicly available data from Greenhouse job boards. No authentication or private data access is used. Always comply with applicable laws and terms of service when using scraped data.

# Actor input Schema

## `startUrls` (type: `array`):

List of Greenhouse job board URLs to scrape. Example: https://boards.greenhouse.io/stripe

## `companyNames` (type: `array`):

Company names to auto-construct board URLs. Converts 'Stripe' to 'https://boards.greenhouse.io/stripe'.

## `maxJobsPerBoard` (type: `integer`):

Maximum number of jobs to extract from each board. Set to 0 for unlimited.

## `includeFullDescription` (type: `boolean`):

Fetch the full HTML description for each job listing. Disable to scrape faster with less data.

## `filterDepartments` (type: `array`):

Only scrape jobs from these departments. Case-insensitive partial match.

## `filterLocations` (type: `array`):

Only scrape jobs matching these locations. Case-insensitive partial match.

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

Use Apify proxies to avoid rate limits.

## Actor input object example

```json
{
  "startUrls": [
    "https://boards.greenhouse.io/stripe"
  ],
  "companyNames": [],
  "maxJobsPerBoard": 0,
  "includeFullDescription": true,
  "filterDepartments": [],
  "filterLocations": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

All scraped job listings in structured JSON format. Each item contains job title, description, location, department, metadata, and application URL.

## `runStats` (type: `string`):

Summary statistics from this run: boards processed, jobs found, jobs pushed, errors encountered.

# 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 = {
    "startUrls": [
        "https://boards.greenhouse.io/stripe"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vnx0/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 = { "startUrls": ["https://boards.greenhouse.io/stripe"] }

# Run the Actor and wait for it to finish
run = client.actor("vnx0/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 '{
  "startUrls": [
    "https://boards.greenhouse.io/stripe"
  ]
}' |
apify call vnx0/greenhouse-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Greenhouse Job Board Scraper — Extract Jobs & Salaries",
        "description": "Extract job listings, descriptions, salaries, and hiring data from any company's career page. Scrape thousands of job boards with no authentication needed.",
        "version": "1.0",
        "x-build-id": "y4YyYuUTSvubMsc5S"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/vnx0~greenhouse-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-vnx0-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/vnx0~greenhouse-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-vnx0-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/vnx0~greenhouse-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-vnx0-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",
                "properties": {
                    "startUrls": {
                        "title": "Board URLs",
                        "type": "array",
                        "description": "List of Greenhouse job board URLs to scrape. Example: https://boards.greenhouse.io/stripe",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "companyNames": {
                        "title": "Company names (auto-detect)",
                        "type": "array",
                        "description": "Company names to auto-construct board URLs. Converts 'Stripe' to 'https://boards.greenhouse.io/stripe'.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxJobsPerBoard": {
                        "title": "Max jobs per board",
                        "minimum": 0,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of jobs to extract from each board. Set to 0 for unlimited.",
                        "default": 0
                    },
                    "includeFullDescription": {
                        "title": "Include full job description",
                        "type": "boolean",
                        "description": "Fetch the full HTML description for each job listing. Disable to scrape faster with less data.",
                        "default": true
                    },
                    "filterDepartments": {
                        "title": "Filter by departments",
                        "type": "array",
                        "description": "Only scrape jobs from these departments. Case-insensitive partial match.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "filterLocations": {
                        "title": "Filter by locations",
                        "type": "array",
                        "description": "Only scrape jobs matching these locations. Case-insensitive partial match.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Use Apify proxies to avoid rate limits.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
