Greenhouse Jobs Scraper avatar

Greenhouse Jobs Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Greenhouse Jobs Scraper

Greenhouse Jobs Scraper

Scrape every open job from any company's Greenhouse careers board. Give it a list of company board tokens (e.g. stripe, databricks, airbnb) and get one clean row per job: title, company, department, location, salary range, apply URL and full description.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Nicolas van Arkens

Nicolas van Arkens

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Greenhouse Jobs Scraper — export every open role from any Greenhouse careers board

Pull every open job from any company that hosts its careers page on Greenhouse — thousands of clean, structured rows in one run. Give the actor a list of company board tokens (the slug in boards.greenhouse.io/<token>, e.g. stripe, databricks, airbnb) and it returns one tidy row per job: title, company, department, location, disclosed salary range, apply URL and the full job description.

No login, no API key, no browser. Greenhouse publishes a public Job Board API, so this actor is fast and stable — it does not break when a page's layout changes.

What you get (one row per job)

FieldDescription
jobIdGreenhouse job id (stable, unique)
internalJobIdGreenhouse internal job id
titleJob title
companyCompany name
boardTokenThe board this job came from (e.g. stripe)
locationPrimary location text (e.g. "San Francisco, CA", "Remote")
officesAll office locations for the role
departmentPrimary department (e.g. "Engineering")
departmentsAll departments the role is filed under
salaryMin, salaryMaxDisclosed pay range (in dollars, not cents)
salaryCurrencyCurrency of the pay range (USD, EUR, CAD, …)
salaryPeriodyear or hour
payRangesEvery pay zone with its own label/min/max (e.g. "Zone 1", "Zone 2")
requisitionIdCompany requisition id
absoluteUrlDirect link to apply / view the job
firstPublishedWhen the job was first posted
updatedAtWhen the job was last updated
applicationDeadlineDeadline, when set
languagePosting language
descriptionTextFull job description as clean plain text
descriptionHtmlFull job description as HTML
metadataAny custom fields the company attaches to the posting
scrapedAtUTC timestamp of the scrape

Input

{
"boardTokens": ["stripe", "databricks", "airbnb", "figma"],
"searchTerms": ["engineer", "data", "product"],
"locationQuery": ["Remote", "New York"],
"updatedAfter": "2026-06-01",
"includeDescription": true,
"maxResults": 5000
}
  • boardTokens — the companies to scrape. Paste the bare token (stripe) or a full Greenhouse URL (https://boards.greenhouse.io/stripe, https://job-boards.greenhouse.io/stripe/jobs/123, or the …/embed/job_board?for=stripe link) — the token is extracted for you. One board can hold hundreds of jobs, so a handful of tokens returns thousands of rows. Jobs seen on more than one board are de-duplicated automatically.
  • searchTerms (optional) — keep only jobs whose title or department contains any of these words. Leave empty to keep every job.
  • locationQuery (optional) — keep only jobs whose location/office matches any of these (e.g. Remote, London, United States).
  • updatedAfter (optional) — keep only jobs updated on/after this date (YYYY-MM-DD). Great for repeat runs that pull only fresh roles.
  • includeDescription — include the full description (on by default). Turn off for a lighter listing-only dataset.
  • maxResults — cap the number of jobs for the run (billed per row).

Finding a board token

Open a company's "See all jobs" / careers page. If the URL is boards.greenhouse.io/<something> or job-boards.greenhouse.io/<something>, that <something> is the token. Many companies embed a Greenhouse board on their own careers site — view the "apply" link; if it points at greenhouse.io, the token is in that link.

Output sample

{
"jobId": 5364702004,
"title": "Staff Software Engineer, Payments",
"company": "Figma",
"boardToken": "figma",
"location": "San Francisco, CA",
"offices": ["San Francisco, CA", "New York, NY"],
"department": "Engineering",
"departments": ["Engineering"],
"salaryMin": 165000,
"salaryMax": 190000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"payRanges": [
{ "label": "Annual Base Salary Range:", "min": 165000, "max": 190000, "currency": "USD" }
],
"requisitionId": "REQ-1234",
"absoluteUrl": "https://boards.greenhouse.io/figma/jobs/5364702004",
"firstPublished": "2026-06-02T08:58:57-04:00",
"updatedAt": "2026-07-13T14:37:36-04:00",
"language": "en",
"descriptionText": "About the role\nFigma is looking for ...",
"scrapedAt": "2026-07-20T12:00:00+00:00"
}

Use cases

  • Recruiting & sourcing — build a live, structured feed of open roles at the companies you care about, refreshed on a schedule.
  • Job boards & aggregators — populate a niche job board from dozens of employers' Greenhouse boards without maintaining a scraper per company.
  • Market & compensation research — track hiring volume, department mix and disclosed salary ranges across a set of companies over time.
  • Sales & recruiting intelligence — spot which teams a company is scaling (e.g. a spike in "Sales" or "Data" roles) as a buying/hiring signal.

FAQ

Do I need a Greenhouse account or API key? No. The actor uses Greenhouse's public Job Board API. You only supply the company board tokens.

How many jobs can I get? Every open job on each board — one board can be hundreds of roles, so a handful of tokens easily returns thousands. Use maxResults to cap a run.

Why do some jobs have no salary? Salary appears only when the company opts into pay transparency on Greenhouse. Many US postings include it; others don't — those rows simply have empty salary fields (they are still returned).

Can I filter to just certain roles or locations? Yes — searchTerms filters by title or department, and locationQuery filters by location/office. Both are optional.

Does it break when a careers page changes design? No. It reads the structured Job Board API, not the HTML page, so it is stable.

How am I billed? Pay per result — you are charged once for each job row returned. Boards that don't exist or fail to load are skipped and never charged.