Greenhouse Job Groups — All Locations per Role avatar

Greenhouse Job Groups — All Locations per Role

Pricing

$1.00 / 1,000 delivered job groups

Go to Apify Store
Greenhouse Job Groups — All Locations per Role

Greenhouse Job Groups — All Locations per Role

Read public Greenhouse boards and group postings by the underlying job ID. Preserve every location, title and application link, with explicit completeness reports.

Pricing

$1.00 / 1,000 delivered job groups

Rating

0.0

(0)

Developer

Nathaniel Standridge

Nathaniel Standridge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Security

Limited permissions

Share

Greenhouse Job Groups

Get one result per underlying Greenhouse job, with every public posting, location, title and application link preserved inside it. Use it to populate a curated job feed or compare hiring activity across a watchlist of employers.

Greenhouse distinguishes a job from a job post: one job can have several posts for different locations, languages or titles. This Actor groups only on the source internal_job_id, within a board. Jobs that happen to share a title stay separate. Prospect posts, whose internal job ID is null, remain separate individual results.

Input

{
"boards": ["stripe", "anthropic", "figma"],
"maxGroups": 2000
}

Use the board token from a public Greenhouse URL. For https://job-boards.greenhouse.io/stripe, use stripe. Up to 10 boards are accepted; duplicates are checked once. Other ATS providers, custom career domains and URLs are not accepted. There is no company directory or keyword discovery.

Defaults: up to 1,000 groups per run, 5,000 source posts per board, a 15-second request timeout, and a 120-second work budget. Set the platform timeout at least 120 seconds higher than the work budget for bounded storage calls and shutdown. Limits are explicit in the output summary.

Results

Each dataset row contains:

  • A stable groupId, boardToken, internalJobId and groupingBasis.
  • primaryTitle, all distinct titles, all supplied locations, and requisitionIds. The primary title is the title of the smallest posting ID.
  • postingCount and a postings array preserving every posting ID, title, location, language, requisition string, source update time and application URL.
  • kind (job or prospect) and observedAt (this run's observation time).

The OUTPUT key-value record reports each board's source posts, groups, duplicate rows, failures, skipped work and delivered results. Always read it before treating the dataset as a complete board export. A valid empty board is successful with no result rows. Failed boards and status summaries are not placed in the paid dataset.

Example: a job with three location posts produces one group containing all three posts. Two jobs with the same title but different internal IDs produce two groups. Null internal IDs are never combined. Locations are source labels; a label may itself list multiple places, and this Actor does not guess how to split it.

Abbreviated example of one group (synthetic data):

{
"groupId": "greenhouse:example:job:42",
"kind": "job",
"internalJobId": "42",
"primaryTitle": "Software Engineer",
"locations": ["London", "New York"],
"postingCount": 2,
"postings": [
{"postingId": "100", "title": "Software Engineer", "location": "London", "url": "https://example.com/jobs/100"},
{"postingId": "101", "title": "Software Engineer", "location": "New York", "url": "https://example.com/jobs/101"}
]
}

Reliability and limits

A source list must match Greenhouse's declared total and pass field validation. An oversized or malformed board produces no groups and a precise status code. Source responses are capped at 8 MiB. Each complete group must fit a 4 MiB delivery batch; the frozen plan is capped at 8 MiB. Reduce board count or maxGroups if the plan is too large. The Actor performs at most three attempts for transient failures; it does not follow redirects, use proxies, or work around access restrictions.

The result plan is frozen before delivery. If the same run resumes, it reuses that plan and reads existing dataset group IDs before writing remaining rows. Separate runs are new snapshots and can produce and charge for the same jobs again. Do not run multiple processes against the same default dataset. If a dataset write has an uncertain outcome, the run stops; it does not blindly repeat that write. Writes contain at most 50 complete groups. A partly confirmed batch needs reconciliation before resuming; it is not automatically resubmitted.

Only the published job list is read. Descriptions, applicant records and private Greenhouse APIs are not accessed. No AI service, browser or external paid data provider is required. The operator's deployment token is never included in source.

Grouped jobs are not hires, headcount or vacancies: one job can have multiple openings. Source update times are not first publication dates. This version is a current snapshot; it does not infer closures, track changes across runs, verify that a role remains actively recruited, or merge across employers/ATS providers.

Pricing

$1.00 per 1,000 delivered groups, including prospect groups ($0.001 per row), with no separate start fee. Failed boards, empty results and the summary have no result fee. Each delivered dataset row is one billable group, including all of its location and posting variants.

Use Apify's maximum charge setting to cap result spend. The Actor checks the remaining affordable row count before each write and reports undelivered groups.

Source contract

Independent tool; not affiliated with Greenhouse. Source availability and fields can change. For a defect report, include the run ID, board token and sanitized OUTPUT summary; never include credentials or applicant data.