Export public Greenhouse job boards by company board token or board URL.
Use this Greenhouse Jobs Scraper when you need current job titles, companies, locations, departments, application links, posting dates, requisition IDs, custom metadata, and optional full job description HTML from public Greenhouse career boards. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.
At a glance
- Company job-board export: Collect open roles from one or many public Greenhouse boards, such as
airbnb,discord, or fullboards.greenhouse.ioURLs. - Hiring-signal monitoring: Track new roles, updated postings, departments, locations, requisition IDs, and apply links across target accounts.
- Talent and market research: Compare hiring volume by company, function, city, country, remote status, or publishing date.
- Job description enrichment: Turn on full description HTML when you need keyword analysis, search indexing, classification, or downstream parsing.
- API-ready output: Send normalized job rows to spreadsheets, CRMs, warehouses, dashboards, alerts, or AI-agent workflows.
What can it do?
Greenhouse Job Board Scraper collects public jobs from Greenhouse-hosted career boards and saves one dataset row per job.
- Start from board tokens: Enter values such as
airbnb,okta, ordiscord. - Start from board URLs: Paste public Greenhouse URLs such as
https://boards.greenhouse.io/airbnb; the actor extracts the token. - Filter jobs: Narrow results by department or location with case-insensitive text filters.
- Control output size: Use
limitto cap saved jobs and keep test runs small. - Choose description depth: Keep
includeContentenabled for full HTML descriptions, or disable it for lighter exports. - Export clean data: Download rows from Apify or use the Dataset API for automated workflows.
Common workflows
- Recruiting research: Monitor open roles at target companies and identify teams that are actively hiring.
- Talent intelligence: Build dashboards for hiring volume, department mix, location strategy, and remote-work signals.
- Lead generation: Find companies expanding a function, region, or team before sales outreach.
- Competitive tracking: Watch competitor job boards for new product, engineering, sales, security, or operations roles.
- Labor-market analysis: Compare public job supply across companies, departments, cities, and dates.
- Data pipelines: Load Greenhouse job rows into Google Sheets, BigQuery, Snowflake, a CRM, or an internal warehouse.
Job-board workflow
Use LinkedIn Jobs Scraper for marketplace job postings by keyword and location.
Use Workday Jobs Scraper, Lever Jobs Scraper, and this actor for company ATS boards.
Join outputs by company, title, location, and job URL to build recruiting research, hiring-signal, and labor-market datasets.
Example input
{
"boardTokens": ["airbnb", "discord"],
"includeContent": true,
"limit": 100
}
Example input with board URLs
{
"boardUrls": [
{ "url": "https://boards.greenhouse.io/airbnb" },
{ "url": "https://boards.greenhouse.io/okta" }
],
"includeContent": false,
"limit": 50
}
Example input with filters
{
"boardTokens": ["discord"],
"department": "Engineering",
"location": "San Francisco",
"includeContent": true,
"limit": 25
}
Example output
{
"boardToken": "airbnb",
"companyName": "Airbnb",
"jobId": 7995153,
"title": "Acquisition Manager",
"location": "Berlin, Germany",
"departments": [],
"department": null,
"offices": [],
"absoluteUrl": "https://careers.airbnb.com/positions/7995153?gh_jid=7995153",
"updatedAt": "2026-06-10T08:50:56-04:00",
"firstPublished": "2026-06-10T08:50:56-04:00",
"requisitionId": "ONE",
"internalJobId": 3468206,
"applicationDeadline": null,
"language": "en",
"metadata": {
"Workplace Type": "Hybrid"
},
"scrapedAt": "2026-06-15T20:40:14.391Z"
}
How to run it
- Open the actor on Apify.
- Add one or more Greenhouse board tokens or board URLs.
- Keep a small
limitfor the first test. - Choose whether to include full job descriptions.
- Start the run.
- Download the dataset or use the API.
Tips for best results
- Use board tokens for repeat runs: Tokens such as
airbnbare stable and easy to schedule. - Use board URLs while exploring: Paste the public board URL when copying from a careers page.
- Start with a low limit: Try
limit: 25orlimit: 50, inspect the output, then increase it. - Filter after one broad run: Run once without filters to see exact department and location names.
- Keep descriptions only when useful: Disable
includeContentif you only need titles, URLs, locations, and timestamps. - Deduplicate by job ID: Use
jobIdorabsoluteUrlwhen combining scheduled runs.
Limits and caveats
- Public boards only: The actor collects public jobs from public Greenhouse boards.
- No recruiter dashboards: It does not access private recruiter pages, applicant data, or internal hiring systems.
- No applications: It does not apply to jobs or submit forms.
- Custom careers pages vary: Some companies use custom pages that are not backed by a public Greenhouse board token.
- Metadata differs by company: Greenhouse custom metadata fields are company-specific.
Integrations
You can connect the dataset to downstream tools:
- Send CSV exports to Google Sheets for recruiting or sales review.
- Load JSON rows into BigQuery, Snowflake, or a data lake.
- Use Make or Zapier to trigger hiring-signal alerts.
- Add webhooks after scheduled runs to notify a Slack channel.
- Feed job descriptions into classification, keyword extraction, or enrichment pipelines.
API usage
You can run the actor from the Apify API, Apify Client, or command line.
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/greenhouse-jobs-scraper').call({
boardTokens: ['airbnb'],
includeContent: true,
limit: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/greenhouse-jobs-scraper').call(run_input={
'boardTokens': ['airbnb'],
'includeContent': True,
'limit': 25,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~greenhouse-jobs-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"boardTokens":["airbnb"],"includeContent":true,"limit":25}'
MCP and AI agents
Use this actor from MCP-compatible tools through Apify MCP Server.
MCP URL:
https://mcp.apify.com/?tools=fetch_cat/greenhouse-jobs-scraper
Claude Code setup:
claude mcp add apify-greenhouse-jobs "https://mcp.apify.com/?tools=fetch_cat/greenhouse-jobs-scraper"
Claude Desktop JSON config:
{
"mcpServers": {
"apify-greenhouse-jobs": {
"url": "https://mcp.apify.com/?tools=fetch_cat/greenhouse-jobs-scraper"
}
}
}
Example prompts:
- "Run the Greenhouse Jobs Scraper for Airbnb and summarize engineering roles."
- "Get the latest Discord Greenhouse jobs and group them by department."
- "Find jobs from these Greenhouse boards that mention data engineering."
Support
If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.
Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.