# Greenhouse Jobs Search API - 500+ Companies (`knutty_cadet/greenhouse-jobs-search-api`) Actor

Search 25K+ Greenhouse jobs across 500+ companies without board slugs or URLs. Get structured job and hiring data for recruiting, lead generation, job boards, research, and automation.

- **URL**: https://apify.com/knutty\_cadet/greenhouse-jobs-search-api.md
- **Developed by:** [Anh Nguyen](https://apify.com/knutty_cadet) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Search API — Search 500+ Companies at Once

Search 25K+ Greenhouse job listings across 500+ company career boards with a single Actor run.

No Greenhouse slug list.
No career-page URL discovery.
No need to run one scraper per company.

Enter a job keyword, optionally narrow by company, and receive structured job records ready for JSON, CSV, API, schedules, or automation workflows.

### Example

**Input**

```json
{
  "keyword": "data",
  "maxResults": 25,
  "includeDescription": false
}
```

**Output** (one Dataset row)

```json
{
  "jobId": "greenhouse:zuora:7733795",
  "title": "Applied Data Scientist",
  "company": "Zuora",
  "location": "Chennai, Tamil Nadu, India",
  "city": null,
  "country": null,
  "jobUrl": "https://boards.greenhouse.io/zuora/jobs/7733795?gh_jid=7733795",
  "status": "open",
  "source": "greenhouse",
  "sourceUpdatedAt": "2026-08-12T07:58:20.000Z",
  "companyLastOkAt": "2026-08-15T04:01:49.000Z"
}
```

### Why use this?

- Search Greenhouse jobs across hundreds of companies at once
- No company slug or career-page URL required
- 25K+ indexed jobs across 500+ company career boards
- Structured, normalized job records
- Optional full job descriptions
- Pay only for delivered job records

A normal company-specific Greenhouse job scraper starts with a company slug or board URL, then returns that board’s jobs. This Actor starts with your search criteria and returns matching jobs across the indexed company set.

Test cheaply: **25 results ≈ $0.05** at $0.002 per delivered job.

### Who it’s for

#### Recruiting & staffing

Find matching roles across hundreds of companies without maintaining a list of individual Greenhouse boards.

#### Lead generation

Find companies actively hiring for engineering, sales, security, data, product, operations, or other functions. Use the raw hiring/job data as an input to your own outreach or scoring process.

#### Job boards & aggregators

Pull targeted structured job subsets instead of discovering and crawling individual company career pages one by one.

#### Automation & developers

Run through the Apify API, schedules, webhooks, and standard integrations. Export JSON or CSV.

#### Market research

Search current hiring activity by title or company using the indexed Greenhouse Jobs dataset.

### Input

| Field | Description |
| --- | --- |
| Job keyword | Search job titles across the indexed company set. Examples: `software engineer`, `data scientist`, `account executive`. |
| Company | Optional. Leave empty to search across all indexed companies. |
| Maximum results | Cap unique delivered job records (1–100). Default: 25. |
| Include full job description | Adds the source description to each record. Default: off for faster, cheaper first runs. |

### Output fields

| Field | Meaning |
| --- | --- |
| `title` | Job title |
| `company` | Company display name |
| `location` | Source location text when available |
| `jobUrl` | Application / job URL |
| `companyLastOkAt` | Source freshness: last successful refresh of that company board |
| `sourceUpdatedAt` | Source job-record update timestamp (not a posting date) |
| `description` | Present only when `includeDescription` is true |

### Pricing

Pay only for job records delivered to the Dataset.

- 10 jobs = $0.02
- 25 jobs = $0.05
- 100 jobs = $0.20
- 1,000 jobs = $2.00

Price: **$0.002 per delivered job result**.

You are not charged for filtered-out jobs or zero-result searches.

### Examples

#### Search data jobs

```json
{
  "keyword": "data",
  "maxResults": 25,
  "includeDescription": false
}
```

#### Search software engineering jobs

```json
{
  "keyword": "software engineer",
  "maxResults": 25,
  "includeDescription": false
}
```

#### Search sales jobs

```json
{
  "keyword": "sales",
  "maxResults": 25,
  "includeDescription": false
}
```

#### Search jobs at a specific company

```json
{
  "keyword": "data",
  "company": "Zuora",
  "maxResults": 25,
  "includeDescription": false
}
```

### FAQ

#### Do I need a Greenhouse company slug?

No. The main workflow searches the existing indexed company set directly.

#### Is this a Greenhouse scraper?

It provides Greenhouse-backed job data, but the workflow is designed for cross-company Greenhouse Jobs Search instead of requiring a separate company slug or URL for every run. Think of it as a Greenhouse job scraper alternative for buyers who want search first, not board discovery first.

#### How much data is covered?

More than 500 company career boards and more than 25,000 indexed jobs at the current product stage.

#### Does this cover every Greenhouse company?

No.

#### Can I search without choosing a company?

Yes. That is the primary use case.

#### Can I include full job descriptions?

Yes, using `includeDescription`.

#### Do I pay for jobs that are filtered out?

No. Pay-per-event billing applies to delivered result records.

#### Is this real-time?

No. Results include `companyLastOkAt`, the timestamp of the last successful refresh for that company board.

#### Does this support Lever, Ashby, Workday, etc.?

No. V1 focuses on Greenhouse-backed career boards.

#### Can I search “new jobs in the last 7 days”?

Not in V1.0.0.

# Actor input Schema

## `keyword` (type: `string`):

Search job titles across the indexed company set. Example: software engineer, data scientist, account executive.

## `company` (type: `string`):

Optional. Leave empty to search across all indexed companies.

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

Number of unique job records to deliver. Try 25 results for about $0.05.

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

Include the source job description in each returned record. Leave off for a faster, cheaper first run.

## Actor input object example

```json
{
  "keyword": "data",
  "maxResults": 25,
  "includeDescription": false
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `summary` (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("knutty_cadet/greenhouse-jobs-search-api").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("knutty_cadet/greenhouse-jobs-search-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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 knutty_cadet/greenhouse-jobs-search-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,knutty_cadet/greenhouse-jobs-search-api"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/IFnnbDWHtjnPiof2O/builds/71rGio2sIMhGhZxBh/openapi.json
