Greenhouse Jobs Scraper
Pricing
from $0.03 / 1,000 result extracteds
Greenhouse Jobs Scraper
Scrape public Greenhouse job boards for openings, descriptions, departments, locations, and application URLs.
Pricing
from $0.03 / 1,000 result extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
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.
Ready-to-run examples
Use these saved Store examples as starting points. Open any example to prefill the Actor input, then adjust URLs, keywords, limits, or filters for your own run.
- Create an RSS Feed for New Greenhouse Jobs
- Remote Product Jobs
- EMEA Hiring Monitor
- Recruiting Operations Jobs
- Analytics Jobs
- Developer Relations Jobs
- View all ready-to-run examples (31 examples)
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.
Output fields
The actor returns one dataset row per Greenhouse job.
| Field | Description |
|---|---|
boardToken | Greenhouse board token used for the request. |
companyName | Company name returned by Greenhouse. |
jobId | Public Greenhouse job ID. |
title | Job title. |
location | Primary job location. |
departments | All department names returned for the job. |
department | First department name for table-friendly exports. |
offices | Office names returned for the job. |
absoluteUrl | Public application or job detail URL. |
updatedAt | Greenhouse updated timestamp. |
firstPublished | First published timestamp when available. |
requisitionId | Requisition ID when available. |
internalJobId | Internal Greenhouse job ID when available. |
applicationDeadline | Application deadline when available. |
language | Job language code when available. |
descriptionHtml | Full job description HTML when includeContent is enabled. |
descriptionText | Plain-text derivative of the public description when includeContent is enabled. |
metadata | Custom Greenhouse metadata fields as key-value pairs. |
scrapedAt | Timestamp when the actor saved the job. |
Pricing
This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.
| Event | What is charged | Price |
|---|---|---|
start | One-time fee charged when a run starts. | $0.005 |
result | Charged for each saved job row. | $0.03135 / 1,000 |
| Saved job rows | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
|---|---|---|---|---|---|---|
| 1,000 results | $0.03135 | $0.02726 | $0.02126 | $0.01635 | $0.01090 | $0.01000 |
Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| Greenhouse board tokens | boardTokens | Company board names from boards.greenhouse.io/<token>. | ["airbnb", "discord"] |
| Greenhouse board URLs | boardUrls | Full public board URLs copied from a company careers page. | [{"url":"https://boards.greenhouse.io/airbnb"}] |
| Include job description HTML | includeContent | Add full descriptionHtml to each saved job. | true |
| Department filter | department | Keep jobs whose department matches this text. | Engineering |
| Location filter | location | Keep jobs whose location matches this text. | Remote |
| Maximum jobs | limit | Cap saved jobs across all boards. | 50 |
| Maximum run time | maxRunSeconds | Cleanly stop before the platform timeout and save unfinished work. | 270 |
| Resume checkpoint | resumeCheckpoint | Continue a partial run with the RESUME_CHECKPOINT value. | airbnb:50 |
| Proxy configuration | proxyConfiguration | Optional proxy settings. Public Greenhouse boards usually work without a proxy. | {"useApifyProxy":false} |
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.
- Visible public data only: The actor uses Greenhouse's public job-board endpoint; applications and recruiter/admin data are outside scope.
- Partial runs are explicit: A board-level error keeps successful rows from other boards and is recorded in
RUN_SUMMARY. UseRESUME_CHECKPOINTasresumeCheckpointwhen a time-bounded run has unfinished rows.
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 ApifyClientimport osclient = 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().itemsprint(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."
FAQ and troubleshooting
What is a Greenhouse board token?
A board token is the part after boards.greenhouse.io/. For example, https://boards.greenhouse.io/airbnb uses the token airbnb.
Can I scrape multiple Greenhouse job boards at once?
Yes. Add multiple values to boardTokens, boardUrls, or both. The actor deduplicates board tokens before scraping.
Why did a board return zero jobs?
Check that the board token is correct and publicly available. If the company uses a custom careers page, it may not expose a public Greenhouse board.
Why did my department or location filter return zero jobs?
Run once without the filter and inspect the exact department and location values returned by Greenhouse. Then use a broader matching term.
Does the actor collect applicant data?
No. It only collects public job posting data from public Greenhouse boards.
Can I schedule monitoring?
Yes. Schedule the same input daily or weekly, then deduplicate by jobId, absoluteUrl, or updatedAt in your downstream workflow.
Related scrapers
- LinkedIn Jobs Scraper
- Workday Jobs Scraper
- Lever Jobs Scraper
- RemoteOK Jobs Scraper
- Remotive Jobs Scraper
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.
Privacy and data handling
This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses job-search inputs and public job-posting results to produce the output dataset and sends requests to public Greenhouse Jobs pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.