Greenhouse Jobs API — Company Job Boards, Clean & Paginated avatar

Greenhouse Jobs API — Company Job Boards, Clean & Paginated

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Greenhouse Jobs API — Company Job Boards, Clean & Paginated

Greenhouse Jobs API — Company Job Boards, Clean & Paginated

Read any company's Greenhouse job board as clean rows — title, location, department, dates and URL. No key, no scraping.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

alaudin burki

alaudin burki

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Security

Limited permissions

Share

Greenhouse publishes a public job-board API for every company that recruits through it. This Actor reads one company's board by its token and writes one row per open posting, with a stable id, a company name and ISO timestamps. It calls the board's own JSON endpoint directly, so there is no HTML to parse and no key, login or cookie to supply.

A board token is the last part of the public board address: boards.greenhouse.io/vercel belongs to the token vercel. The Actor asks for postings with content=false, which means job description bodies are deliberately left out of the response and out of the dataset.

How to use

  1. Open the company's Greenhouse board and copy the token from its address.
  2. Paste the token into Board token and set Max rows if you want fewer than 500.
  3. Run the Actor, then open the dataset and export it as JSON, CSV or Excel.

Inputs

FieldPurposeDefault
boardThe company token from its Greenhouse board address, e.g. boards.greenhouse.io/vercel → vercel. Used in the request path, not as a query parameter.vercel (prefilled)
maxItemsHard cap on rows written to the dataset. The run stops as soon as the cap is reached.500
maxPagesRequest cap. Greenhouse returns a whole board in a single response, so the run makes one request and this setting has no practical effect here.5

maxItems is clamped to 20,000 per run. Both values must be at least 1. If board is left blank the default token vercel is used, so a run with no input at all still returns data.

Output dataset

FieldMeaning
titleThe job title as the company posted it.
companyThe company name Greenhouse reports for the board (company_name).
locationThe posting's location as Greenhouse writes it, e.g. Austin, TX or Remote.
departmentThe name of the first department listed on the posting. A role filed under several departments returns only the first one.
urlThe public application URL for the posting (absolute_url).
firstPublishedWhen the posting was first published on the board, as an ISO 8601 timestamp.
updatedAtWhen the posting was last changed upstream, as an ISO 8601 timestamp.

Every row also carries id (the Greenhouse job id prefixed with the source, e.g. greenhouse:4512345), source (greenhouse-jobs), firstSeenAt and scrapedAt. Rows are de-duplicated on the job id and sorted newest-updated first, then by title, with the id as the final tie-break, so two runs over an unchanged board produce the same order. A SUMMARY record in the run's key-value store reports the row count, request count, duplicate count, any page problems and whether the dataset was truncated.

Example input

{
"board": "vercel",
"maxItems": 500,
"maxPages": 5
}

Why this is different

  • Greenhouse Jobs API reads the board's own JSON endpoint and never parses the rendered career page.
  • Greenhouse Jobs API needs no key, account, cookie or login before its first run.
  • Greenhouse Jobs API asks for postings with content=false, so job description HTML is never downloaded or stored.
  • Greenhouse Jobs API de-duplicates on the Greenhouse job id, so the same posting cannot appear twice in one dataset.
  • Greenhouse Jobs API applies maxItems as a hard stop rather than a target, and reports when the cap stopped it.
  • Greenhouse Jobs API stamps every row with firstSeenAt and scrapedAt, so freshness can be checked without guessing.

Limitations

  • Only companies that recruit through Greenhouse are covered, and the token must match the board exactly. A wrong or private token fails the run on the first request rather than returning an empty dataset.
  • One department per row. The endpoint lists departments as an array; only the first entry is written, so postings filed under several departments are under-described.
  • No job description, pay range, employment type or team is returned, because the request excludes the description and the board endpoint does not publish the other fields.
  • firstPublished is omitted from a row when the board does not publish that value for the posting.
  • The endpoint returns the postings the company currently lists on its board. A withdrawn posting is not part of the response and cannot be recovered by re-running.
  • Timestamps are the source's own; the Actor converts them to ISO 8601 but does not correct a value the board reports incorrectly.

FAQ

Do I need a Greenhouse API key?

No. The public job-board endpoint is readable without authentication, and the Actor sends no key.

Where do I find the board token?

It is the path segment in the company's board address: boards.greenhouse.io/<token>. A company that hosts its board on its own domain still has a Greenhouse token behind it, usually visible in the page source or the apply link.

Why does the Actor make only one request when Max requests is set to 5?

The board endpoint returns every posting for the board in one response. The paging loop therefore stops after the first page, and maxItems is the setting that actually controls how much data comes back.

Does it return job descriptions?

No. Descriptions are excluded on purpose so rows stay small and the response stays fast. Fetch the posting url if you need the full text.

What happens if the board has no open postings?

The run succeeds with an empty dataset. A board that cannot be reached is treated differently and fails the run, so an empty dataset always means "the board answered with nothing", not "the request broke".

Pricing and limits

The price is shown on this Actor's Apify pricing panel, and charges follow the pricing model displayed there. The input caps in this README describe how much data the Actor requests; they are not a price. One run reads one board, so a large board is one request and up to maxItems rows. If the dataset is shorter than the board, raise maxItems and run again.