Greenhouse Jobs API: Every Job with Description & Salary avatar

Greenhouse Jobs API: Every Job with Description & Salary

Pricing

from $1.50 / 1,000 jobs

Go to Apify Store
Greenhouse Jobs API: Every Job with Description & Salary

Greenhouse Jobs API: Every Job with Description & Salary

Greenhouse jobs API: every open job on any Greenhouse board with full description, departments, offices and published pay ranges (salary min/max). Bulk board URLs or slugs; keyword, department, location and date filters. No login.

Pricing

from $1.50 / 1,000 jobs

Rating

0.0

(0)

Developer

Ailu Studio

Ailu Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Greenhouse Jobs API: every open job from any Greenhouse board, with full description and published pay ranges

Many companies (Airbnb, Stripe, Discord, Figma, Dropbox and more) host their careers page on Greenhouse at boards.greenhouse.io/<slug> or job-boards.greenhouse.io/<slug>. This Actor reads the public Greenhouse Job Board API and returns every open job as a clean row: title, departments, offices, locations, workplace type, first-published date, the full description (text or HTML) and the employer's published pay ranges (salary min/max/currency, one row per job, all ranges kept). Paste any number of board URLs or slugs, filter by keyword, department, location and posting age. It reads the boards you name live (one request per board, so results are as fresh as the careers page), returns Greenhouse's own pay-transparency ranges as numbers, needs no API key, and costs $1.50 per 1,000 jobs versus $2.00 on the free plan for the most-used Greenhouse Actor in the Store.

Use cases

  • Job aggregation: feed Greenhouse postings from hundreds of companies into a job board, newsletter or internal search.
  • Salary benchmarking: collect published pay ranges by title, location and company (pay-transparency data, not estimates).
  • Hiring signals for sales and investors: which departments and locations a target account is staffing up.
  • Candidate alerts: run daily with postedWithinDays: 1 and a keyword list.
  • AI matching: descriptions arrive as plain text, ready for embedding or classification.

Input

FieldDefaultMeaning
boards["airbnb", "stripe"]Greenhouse board URLs (boards.greenhouse.io/<slug>, job-boards.greenhouse.io/<slug>, embed URL with ?for=<slug>, a job URL) or bare slugs.
keywords–Keep jobs whose title or description contains any of these words.
locations–Keep jobs whose location contains any of these strings; "remote" also matches remote workplace type.
departments–Keep jobs whose department name contains any of these strings.
postedWithinDays0Only jobs first published in the last N days (0 = off).
includeSalaryRangestrueRequest pay-transparency ranges; costs no extra requests.
descriptionFormattexttext, html, both or none.
maxItems200Cap on returned jobs for the whole run.
{ "boards": ["https://job-boards.greenhouse.io/stripe", "airbnb", "discord"], "departments": ["Engineering"], "locations": ["Remote", "New York"], "postedWithinDays": 7, "maxItems": 500 }

Output

FieldTypeMeaning
id, sourceIdstringgreenhouse:<slug>:<jobId> and the Greenhouse job ID.
company, companySlugstringCompany name from the board and the board slug.
titlestringJob title.
department, team, departments, officesstring, string, string[], string[]Greenhouse departments and offices.
locations, isRemote, workplaceTypestring[], boolean, stringLocation text; remote/hybrid/onsite when the board publishes a Workplace Type field.
employmentTypestringEmployment type custom field when present.
salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryRawnumber, number, string, string, stringPublished pay range(s); null when the employer publishes none.
payRangesobject[]Every range with its title (e.g. one per country).
requisitionId, internalJobId, applicationDeadline, languagestringExtra posting metadata.
postedAt, updatedAtISO 8601First publication and last update (UTC).
url, applyUrlstringPublic posting and application page. The Actor never applies.
descriptionText, descriptionHtmlstringFull description in the requested format(s).
fetchedAtISO 8601Run time.
{
"id": "greenhouse:airbnb:8231416", "sourceId": "8231416", "source": "greenhouse", "companySlug": "airbnb", "company": "Airbnb",
"title": "Associate Principal, Procurement Innovation Supplier Programs", "department": "Financial Planning and Analysis", "team": null,
"locations": ["United States"], "isRemote": true, "workplaceType": "remote", "employmentType": null,
"postedAt": "2026-09-24T22:17:39.000Z", "updatedAt": "2026-09-30T00:00:54.000Z",
"url": "https://careers.airbnb.com/positions/8231416?gh_jid=8231416", "applyUrl": "https://careers.airbnb.com/positions/8231416?gh_jid=8231416",
"departments": ["Financial Planning and Analysis"], "offices": ["United States"], "requisitionId": "ONE", "internalJobId": "3562002",
"applicationDeadline": null, "language": "en",
"payRanges": [{ "title": "Pay Range", "min": 102000, "max": 120000, "currency": "USD", "interval": "year" }],
"salaryMin": 102000, "salaryMax": 120000, "salaryCurrency": "USD", "salaryInterval": "year", "salaryRaw": "USD 102,000–120,000 (Pay Range)",
"descriptionText": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, …", "descriptionHtml": null,
"fetchedAt": "2026-11-04T11:31:16.267Z"
}

How it works and limits

  • One request per board: GET boards-api.greenhouse.io/v1/boards/<slug>/jobs?content=true&pay_transparency=true returns every published job with its description and pay ranges. Requests are spaced 300 ms apart and retried on 429/5xx.
  • Pay ranges appear only when the employer fills Greenhouse's pay-transparency fields (on the Airbnb board 176 of 210 jobs had them on 2026-11-04; on Stripe none). Salaries written only inside the description text are not parsed.
  • When a job has ranges in several currencies, the flat salary fields use the first range; payRanges keeps them all. salaryInterval comes from the range title ("Annual", "Hourly"), otherwise it is inferred from the amount.
  • Boards are read in the order given; once maxItems is reached the remaining boards are skipped and listed in the run summary (OUTPUT record).
  • Only public, published boards. Companies that use Greenhouse behind their own careers site still work when you pass the Greenhouse slug (find it in the "Apply" link: ?for=<slug> or greenhouse.io/<slug>).
  • Not covered: internal job boards, application forms, candidate data.

Pricing

Pay per result: $1.50 per 1,000 rows (job event). Platform usage is billed separately by Apify. Removed/free rows are not charged.

Not affiliated with Greenhouse Software, Inc. or the employers. Uses the public Greenhouse Job Board API only. Data licence/terms: https://developers.greenhouse.io/job-board.html. Job content belongs to the employers who published it.

FAQ

Where do I find a company's slug? Open its careers page and click a job: the URL or the "Apply" link contains greenhouse.io/<slug> or ?for=<slug>. Paste that URL as is.

Why is salary empty for some jobs? The employer did not publish a pay range in Greenhouse. Only employer-published ranges are returned, never estimates.

Can I get only new jobs every day? Set postedWithinDays: 1 and schedule a daily run, or use the Job Change Tracker Actor for new/updated/removed detection.

Does it handle big boards? Yes. A 750-job board is a single request; raise maxItems to export everything.