Greenhouse Jobs Scraper – Job Board API with Salaries avatar

Greenhouse Jobs Scraper – Job Board API with Salaries

Pricing

from $1.20 / 1,000 job listeds

Go to Apify Store
Greenhouse Jobs Scraper – Job Board API with Salaries

Greenhouse Jobs Scraper – Job Board API with Salaries

Scrape open jobs from any Greenhouse job board: title, location, department, remote/hybrid, salary range, description, application questions and apply link. Paste board slugs, Greenhouse links or careers pages. Only-new-jobs mode for alerts. $1.70 per 1,000 jobs; failed boards free.

Pricing

from $1.20 / 1,000 job listeds

Rating

0.0

(0)

Developer

Chris Elder

Chris Elder

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Greenhouse Jobs Scraper: Job Board API with Salaries

Pull every open job from any company that hires through Greenhouse, as clean rows with location, department, remote flag, apply link and the published salary range. $1.70 per 1,000 jobs, failed boards free.

▶ Try it with one click · 📄 Real example output · 💲 Pricing · 🔌 API & integrations · ❓ FAQ · 🛟 Support

What does Greenhouse Jobs Scraper do?

  • 🏢 Any Greenhouse company, many at once: give board slugs (gitlab), Greenhouse links (job-boards.greenhouse.io/figma, boards.greenhouse.io/embed/job_board?for=stripe) or a careers page URL and it finds the board for you
  • 💰 Salary ranges: reads the pay transparency range the employer publishes (min, max, currency, period), with a fallback that picks up ranges written in the job text
  • 🌍 Remote and hybrid flags: workplaceType is set to remote or hybrid when the location or title says so
  • 🔎 Filters that cost nothing: keywords, exclude words, locations, departments, remote only and posted within N days. You pay only for jobs you keep
  • 🔔 New job alerts: Only new jobs remembers what you have already received, so a daily schedule returns just the fresh postings (already-seen jobs are free)
  • 📝 Full descriptions and application questions on request (plain text and HTML; question labels, types and options)
  • 📦 Export to JSON, CSV, Excel, Google Sheets or straight into your app through the API

It uses the official public Greenhouse Job Board API, the same feed that powers each company's own careers page. No login, no proxies, no browser.

Use cases

  • Job boards and aggregators: keep a niche board (remote, climate, AI, fintech) filled with fresh roles from hundreds of companies
  • Recruiters and talent teams: watch target companies and get only the new openings each morning
  • Job seekers: one sheet of every matching role across your dream companies, with salaries side by side
  • Market and salary research: compare published pay ranges by role, location and company
  • Sales intelligence: hiring signals (a company opening 20 data roles is buying data tools)
  • AI agents: give an assistant live, structured job data through MCP

How to use it

  1. Click Try for free and keep the prefilled input (GitLab and Figma, 10 jobs each).
  2. Replace the companies with your own list: one slug, Greenhouse link or careers page per line.
  3. Add filters if you want (keywords, locations, remote only, posted within days).
  4. Tick Include salary for pay transparency ranges, and Include description for full text.
  5. Click Start, then download the results or connect them to your tools.

Not sure of the slug? It is the last part of the company's Greenhouse link, e.g. job-boards.greenhouse.io/figma. Or just paste the careers page and let the Actor find it.

Input example

{
"companies": ["gitlab", "figma", "https://job-boards.greenhouse.io/stripe"],
"keywords": ["engineer", "data"],
"excludeKeywords": ["intern"],
"locations": ["United Kingdom", "Remote"],
"postedWithinDays": 30,
"includeSalary": true,
"includeDescription": false,
"onlyNewJobs": false
}

Output example (from a real public run)

A row from the public example run (20 jobs from GitLab and Figma, 26 Oct 2026):

{
"company": "GitLab",
"board": "gitlab",
"jobId": "8638232002",
"title": "AI Transformation Owner, CRO",
"location": "Remote, United States",
"offices": [],
"departments": ["Enablement"],
"workplaceType": "remote",
"employmentType": null,
"firstPublished": "2026-07-22T13:38:40-04:00",
"updatedAt": "2026-10-15T15:24:46-04:00",
"applicationDeadline": null,
"applyUrl": "https://job-boards.greenhouse.io/gitlab/jobs/8638232002",
"requisitionId": "6682",
"language": "en",
"salary": {
"min": 139200,
"max": 235200,
"currency": "USD",
"period": "year",
"source": "description",
"label": null
},
"metadata": { "Quota Coverage Type": "n/a" },
"scrapedAt": "2026-10-26T01:46:21.110Z"
}

With Include salary on, salary.source is pay_transparency when the employer publishes a range on the job. With Include description on, rows also carry descriptionText and descriptionHtml. A board that cannot be read gives one free row with error and errorCode so you can see what went wrong. A run summary (boards read, jobs listed, jobs filtered, errors) is saved as RUN_SUMMARY in the key-value store.

How much does it cost to scrape Greenhouse jobs?

Pay per result. You pay only for jobs delivered to your dataset.

EventPrice
Job listed$0.0017 ($1.70 per 1,000)
Job listed, Silver plan$0.0014 ($1.40 per 1,000)
Job listed, Gold plan and above$0.0012 ($1.20 per 1,000)
Run start$0.0005 per GB of memory (default 512 MB = $0.0005)
Failed boards, filtered-out jobs, already-seen jobsFree

Worked examples (Free and Bronze plans):

  • 100 jobs from a few companies: 100 x $0.0017 + $0.0005 = $0.1705
  • 1,000 jobs across 20 companies: $1.7005
  • Daily alert with Only new jobs, about 20 new jobs a day: 600 jobs + 30 starts = about $1.04 a month
  • Apify's free $5 monthly credit covers roughly 2,900 jobs a month

Set Max cost per run in the run options and the Actor stops cleanly when it is reached.

Integrations (API, AI agents, Make, Zapier)

API: run and get the jobs in one call:

curl -X POST "https://api.apify.com/v2/acts/chris_elder~greenhouse-jobs-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"companies":["gitlab","figma"],"remoteOnly":true,"includeSalary":true}'
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("chris_elder/greenhouse-jobs-scraper").call(run_input={
"companies": ["gitlab", "figma", "stripe"],
"keywords": ["data"],
"includeSalary": True,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job.get("company"), job.get("title"), job.get("location"), job.get("salary"))

AI agents (MCP): add https://mcp.apify.com/?tools=chris_elder/greenhouse-jobs-scraper to Claude, Cursor, VS Code or any MCP client, and your agent can look up open roles at any Greenhouse company.

Make, Zapier, n8n: use the Apify app's Run Actor action with chris_elder/greenhouse-jobs-scraper, then send rows to Google Sheets, Airtable, Slack or your ATS. A schedule plus Only new jobs gives you a daily new-jobs feed; webhooks fire when a run finishes.

Limits and good to know

  • Works for companies whose jobs are hosted on Greenhouse (US job board host). Companies on Workday, Lever, Ashby or other systems are not covered here; see Multi-ATS Jobs API for Workday, Lever, Ashby, SmartRecruiters, Recruitee and Workable.
  • Salary is only as good as what the employer publishes. Many companies publish ranges for US roles only; others publish none.
  • employmentType comes from the employer's own custom fields and is often empty.
  • Careers pages that load jobs with JavaScript may hide the board link. The Actor then tries the company's domain as a slug and only accepts it if the board name matches. If that fails, give the slug directly.
  • Only new jobs keeps up to 20,000 job IDs per alert name.

This Actor reads the public Greenhouse Job Board API, which Greenhouse provides so that anyone can display a company's open jobs. It collects job advertisements only: titles, locations, departments, descriptions, salary ranges and application question labels. It does not collect candidate data, recruiter contact details or any other personal data, and it never submits applications. You are responsible for how you use the data; if you republish job ads, link back to the employer's apply URL (provided in every row).

FAQ

How do I find a company's Greenhouse slug? Open one of its jobs. The link looks like job-boards.greenhouse.io/<slug>/jobs/123. Or paste the company's careers page and the Actor will look for the board.

Can I get only remote jobs? Yes. Tick Remote only, or add Remote to Locations to keep remote plus other places you list.

How do I get alerts for new jobs? Tick Only new jobs, give the alert a Monitor name, and schedule the Actor daily. The first run returns everything; later runs return only new postings. Already-seen jobs are free.

Why is salary empty for some jobs? The employer did not publish a range for that job. Tick Include salary to read the official pay transparency field as well as the job text.

Is there a limit on how many companies I can add? No hard limit. Big runs with hundreds of companies are fine; use Max jobs total or Max cost per run to cap spend.

What happens if a slug is wrong? You get one free row with error: "...(not charged)" and the run carries on with the other companies.

Support, reliability and feature requests

  • Failed boards are free. You pay only for jobs delivered.
  • Tested on real boards before every release (GitLab, Figma, Stripe, Airbnb and more, plus wrong slugs and JavaScript careers pages).
  • Issues answered within 2 business days. Open an issue on the Issues tab with your input.
  • Feature requests welcome: open an issue titled "Feature request: ...".
  • Built by GPT Shop Ltd with AI-assisted development; every release is reviewed and tested before it ships.

More tools from GPT Shop Ltd