Greenhouse Job Listings API - Title, Location, Salary avatar

Greenhouse Job Listings API - Title, Location, Salary

Pricing

from $0.90 / 1,000 job listings

Go to Apify Store
Greenhouse Job Listings API - Title, Location, Salary

Greenhouse Job Listings API - Title, Location, Salary

Every open job from any Greenhouse job board as clean data: title, location, department, posting date and apply link, plus function, seniority and remote flags. Pass board tokens like stripe or gitlab. Keyword and location filters before billing. 3 jobs free per run.

Pricing

from $0.90 / 1,000 job listings

Rating

0.0

(0)

Developer

omar khandji

omar khandji

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

10 minutes ago

Last modified

Share

Greenhouse Job Listings API — Every Open Job From Any Greenhouse Board

Pass up to 100 Greenhouse board tokens in one run, get every open role as clean rows. First 3 jobs free on every run, then $1.50 per 1,000.

Why this one

Most job scrapers ask you to buy a token, run a proxy, or fight an anti-bot wall. This Actor reads the Greenhouse board endpoint directly — the same one the careers page itself calls. Three consequences:

  1. Nothing to buy. No token, no cookie, no API key, nothing that expires.
  2. It does not break. No HTML parsing, so a Greenhouse redesign changes nothing.
  3. It stays cheap. There is no upstream scraper to pay for, which is why the first 3 jobs of every run are free.

What a run costs

$1.50 per 1,000 job listings — $0.0015 each, and only for listings actually delivered to you. There is no per-run fee: a run that finds nothing costs $0.

Ask for many companies at once

Measured on this Actor at ~35 open roles per company:

Companies in one runJobs returnedYou payPer job
135$0.05$0.0014
10350$0.52$0.0015
501,750$2.62$0.0015

Batching does not change the price per job — it changes your wall clock. Fifty companies asked together take one run instead of fifty, and the free allowance below is the only thing that makes a small run cheaper per row.

Up to 100 companies per run; 15 per HTTP request, so a Standby/MCP call answers inside Apify's five-minute ceiling. Split a larger list across requests.

Free tier — 3 job listings on every run

The first 3 job listings of every run are free. Not a trial, not a first-run coupon: it applies to every run you ever make, so you can wire this Actor into a pipeline and evaluate it on your own target boards before a cent is billed.

Beyond the free 3 you pay $0.0015 per job listing — $1.50 per 1,000 — and only for listings actually delivered to you.

What you pass

FieldWhat it does
greenhouseBoardsBoard tokens — the <token> in boards.greenhouse.io/<token>
keywordsKeep only roles whose title matches, whole words only
excludeKeywordsDrop roles whose title matches
locationsKeep only roles in these locations
remoteOnlyKeep only remote roles
postedAfterKeep only roles posted on or after this date
maxTotalChargeUsdHard ceiling on what one run can cost you

Filters run before billing, so you are never charged for a row you filtered out.

What you get per job

title, location, department, posted_at, source_url (a canonical apply link), handle, ats, plus the normalised function, seniority and is_remote fields the whole Vigia jobs family shares.

Duplicate roles are removed by apply link before billing: two handles belonging to the same group cannot make you pay twice for one role.

Call it as a live API

This Actor runs in Standby: the container is already up, so an HTTP request answers in seconds — no cold start.

GET https://<standby-url>/?greenhouseBoards=stripe,gitlab

Or POST the same JSON you would use as run input.

For AI agents (MCP)

The same endpoint speaks the Model Context Protocol at /mcp. Agents get one tool, greenhouse_jobs, that returns a company's open roles in a single call — usable from Claude, Cursor and any MCP client.

Honest failure modes

A board that is missing, private or renamed is reported, never raised: one bad handle in a list of twenty does not cost you the other nineteen. Each entry in boards tells you what that handle returned, and you are billed only for jobs actually delivered.

The rest of the family

Frequently asked questions

Do I need a Greenhouse account or API key? No. The board endpoint this Actor reads is the public one your own careers page uses.

What does it cost to try? Nothing. Every run gives you the first 3 jobs free, and a run that returns fewer than that costs $0.

How do I get jobs from a company website instead of a board handle? Use the Careers Page Scraper — it detects the ATS for you.

How to use it in 3 steps

  1. Click Try for free and add company handles in greenhouseBoards — the <token> in boards.greenhouse.io/<token> or job-boards.greenhouse.io/<token>.
  2. Optional: narrow the list with keywords, locations, remote only or posted after. Filters run before billing, so you only pay for jobs you keep.
  3. Click Start and download the jobs as JSON, CSV or Excel, or read them from the API.

Use cases

  • Job boards and aggregators — pull every open role from Greenhouse companies, with a direct apply link.
  • Recruiting and sourcing — watch target companies and react the day a role opens.
  • Sales intelligence — a company hiring 10 engineers is a buying signal; use it as a lead trigger.
  • Market and salary research — who is hiring for which function, where, and how fast.
  • Job alerts — schedule daily and send new roles to Slack, email or a sheet.

Use it from code (API)

Every Apify Actor is an API. Start a run and read the results with one call.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/greenhouse-jobs-api").call(run_input={"greenhouseBoards": ["stripe", "gitlab"], "keywords": ["engineer"], "remoteOnly": false})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('om_kh/greenhouse-jobs-api').call({
"greenhouseBoards": [
"stripe",
"gitlab"
],
"keywords": [
"engineer"
],
"remoteOnly": false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

One HTTP call (cURL) — runs the Actor and returns the dataset in the same response:

curl -X POST "https://api.apify.com/v2/acts/om_kh~greenhouse-jobs-api/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"greenhouseBoards": ["stripe", "gitlab"], "keywords": ["engineer"], "remoteOnly": false}'

Integrations: n8n, Make, Zapier, Google Sheets

  • n8n — the official Apify node, operation Run Actor and get dataset, Actor om_kh/greenhouse-jobs-api.
  • Make — Apify › Run an Actor, then Apify › Get Dataset Items.
  • Zapier — Apify › Run Actor; map the dataset items into your next step.
  • Google Sheets, webhooks, Slack — add an integration from the Integrations tab of this Actor.
  • Schedules — run it every hour or day from Schedules in Apify Console.

More Actors from the same author

Support

Found a bug or have a feature request? Use the Issues tab on this Actor's Apify Store page, or message the author (om_kh) directly through Apify — every report gets a reply.