# Greenhouse Jobs Export and Filter (`danielmichalek/greenhouse-jobs-exporter`) Actor

Export public jobs from supplied Greenhouse company boards. Filter titles and locations, then download source-linked JSON and CSV. Ready to check your company boards?

- **URL**: https://apify.com/danielmichalek/greenhouse-jobs-exporter.md
- **Developed by:** [Daniel Michałek](https://apify.com/danielmichalek) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 exported jobs

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Greenhouse Jobs Export and Filter

Export public positions from company boards you specify, using Greenhouse's documented Job Board API. This is a read-only source tool, not a candidate-profile collector or application bot. The author is not affiliated with Greenhouse or the sampled employers.

### What it does

Checks one to five public board tokens and exports up to200 matching jobs as structured records and CSV. Filters use literal, case-insensitive title/department and location/office text. Matching within a filter group is OR; keyword and location groups are combined with AND. Results retain source URLs, available source update timestamps, department and office names. No AI, browser, login or proxy is used.

### Input

Provide boards, for example \["wikimedia"]. These are tokens from an employer's public Greenhouse board, not arbitrary URLs. maxItems defaults to20, with a hard maximum200. Optional keywords and locations each accept up to eight strings of100 characters. Clear a filter to include all published values. The prefilled Wikimedia board is a live public example, not our customer or partner.

### Output

The default dataset contains one record per exported job. JOBS_CSV contains UTF-8 CSV with a byte-order mark and escaped spreadsheet formulas. REPORT contains a readable summary. EXPORT_SUMMARY records source totals, matching counts, output counts, removed duplicates and incomplete-source or output-limit flags. jobUrl is the job's published link; sourceUrl identifies the official board endpoint. updatedAt is an update timestamp, not the original posting date. Unknown dates and locations remain null. IDs are scoped by board, so an identical numeric ID on another board is retained.

### Pricing and cost control

The local proposed price is0.002USD per exported job; it has not been configured or published yet. Check the actual Store pricing before relying on a price. One custom job-exported event follows each successfully stored record. No-match and empty-board checks emit no job events. Duplicates and records excluded by filters or limits are not billed. Existing platform usage can still apply. Maximum output200, at most five source requests,20-second request timeout,3MB response limit and no automatic source retries. No paid AI, proxy or external service is required.

### Limitations and fair use

Only the supplied public boards are checked. The tool does not discover all employers, retrieve applicant data, submit applications, promise leads, or verify hiring status beyond the source response. Source accessibility and schemas may change. Any requested-board failure, unexpected redirect, invalid source JSON or contradictory record stops before billable dataset output. A successful no-match report does not mean there are no jobs elsewhere. Descriptions, salary details and automated remote-work classification are intentionally not included. Use public job data in accordance with the publisher's rights and applicable terms.

### Example

Use boards=\["wikimedia"] and maxItems=3 for a bounded real-source test. examples/input.json contains this input. A real SDK smoke test and output receipt are required before any cloud/publication claim. No successful job application or customer revenue is implied.

### Integrations

Read the dataset through Apify's standard dataset API or use the CSV file in spreadsheets. The same structured output can feed existing recruitment workflows; no new integration account or scheduler is created by this package.

# Actor input Schema

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

One to five public Greenhouse board tokens, for example wikimedia. Not URLs. Only the specified boards are checked.

## `keywords` (type: `array`):

Optional case-insensitive literal text filters. Any keyword may match. No regular expressions.

## `locations` (type: `array`):

Optional literal filters on published location/office text. This does not independently verify remote work or geographic eligibility.

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

One to 200 jobs across all boards. The report states when source records or matching output were limited.

## Actor input object example

```json
{
  "boards": [
    "wikimedia"
  ],
  "keywords": [],
  "locations": [],
  "maxItems": 20
}
```

# Actor output Schema

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

No description

## `csv` (type: `string`):

No description

## `report` (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 = {
    "boards": [
        "wikimedia"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("danielmichalek/greenhouse-jobs-exporter").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": ["wikimedia"] }

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

```

## MCP server setup

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

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/FjITOqglTDFenJ0r3/builds/TqTGFsrhlvxUbTb3B/openapi.json
