Greenhouse Jobs Scraper - Job Listings, Salaries & New Jobs
Pricing
from $2.40 / 1,000 scraped jobs
Greenhouse Jobs Scraper - Job Listings, Salaries & New Jobs
Pulls every open job from a company's Greenhouse board through its public API: title, department, location, remote flag, salary when posted, apply URL, dates. Optional tracking returns only new and closed jobs. Up to 50 companies. $0.003 per job; empty boards are free. Input: {"company":"anthropic"}
Pricing
from $2.40 / 1,000 scraped jobs
Rating
0.0
(0)
Developer
Broke to Built
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Greenhouse Jobs Scraper — every open job on any Greenhouse careers board
Pull every open job from any company that hires through Greenhouse: title, department, team, location, remote flag, employment type, salary range, job URL, apply URL and publish date. One row per job, bulk companies in one run, keyword / location / department / remote / date filters. No API key, no login, no proxy. $0.003 per job.
Real output (run fwjeqbTNDbCCkXN7Q, 10 jobs)
Input: {"companies":["anthropic","https://job-boards.greenhouse.io/figma"],"keywords":["engineer"],"maxJobsPerCompany":5}
| company | title | location | salary | remote |
|---|---|---|---|---|
| anthropic | AI Operations Engineer, Partnerships | San Francisco, CA | USD 215,000–300,000 | no |
| anthropic | Applied AI Engineer | Tokyo, Japan | — | no |
| anthropic | Applied AI Engineer, Beneficial Deployments (Life Sciences) | London, UK | GBP 225,000–255,000 | no |
{"ok": true,"source": "greenhouse","company": "Anthropic","companySlug": "anthropic","jobId": "5391151008","title": "AI Operations Engineer, Partnerships","department": "Sales","team": null,"location": "San Francisco, CA","isRemote": false,"workplaceType": "On-Site","employmentType": null,"experienceLevel": null,"salaryMin": 215000,"salaryMax": 300000,"salaryCurrency": "USD","salaryInterval": null,"salaryText": "$215,000 — $300,000 USD","url": "https://job-boards.greenhouse.io/anthropic/jobs/5391151008","applyUrl": "https://job-boards.greenhouse.io/anthropic/jobs/5391151008","publishedAt": "2026-08-14T22:07:17.000Z","updatedAt": "2026-08-24T23:47:05.000Z"}
Run with no input at all ({}) returns the first 100 open jobs at anthropic — run NMAytzfi3jTucJL0B, 100 rows, 69 with a salary range.
What you can use it for
- Job hunting at scale — watch 50 target companies, filter to "engineer" + "Remote", schedule daily.
- Sales / lead generation — a company hiring 10 data engineers is buying data tools. Hiring is the strongest public buying signal there is; export the rows to your CRM.
- Recruiting & market research — salary bands by role and city, team growth, where competitors are opening offices.
- Job boards & aggregators — clean, normalised rows with stable IDs for de-duplication.
The row shape is identical across our Greenhouse, Lever, Ashby and SmartRecruiters scrapers, so datasets from all four concatenate with no mapping step.
Input
| field | what it does |
|---|---|
company | One company: the slug from boards.greenhouse.io/ |
companies | Up to 50 companies in one run. |
keywords | Keep jobs whose title contains ANY of these (case-insensitive). |
location | Keep jobs whose location contains this text. |
department | Keep jobs whose department or team contains this text. |
remoteOnly | Remote jobs only. |
postedWithinDays | Only jobs published in the last N days. |
maxJobsPerCompany | Cap per company after filters (default 100). |
includeDescription | Add the full job description as clean plain text. |
trackChanges | Remember each board between your runs and tag every row new, open or closed. |
changesOnly | With tracking, return only jobs that appeared or disappeared since your last run. |
Track new and closed jobs (hiring signals)
Turn on trackChanges and schedule the actor daily. It saves each board in your own Apify storage (a key-value store named ats-jobs-track-changes) and compares the next run against it:
changeStatus: "new": the job was posted since your last run.changeStatus: "closed": the job was on the board last time and is gone now (filled or pulled). The row keeps its title, team, location and URL from the last time it was seen.changeStatus: "open": still there, unchanged.
The first run saves the baseline, so nothing is called new until the second run. Add changesOnly to get only the new and closed rows: a board with no changes returns one free status row, so watching 50 companies a day costs only for what changed. Per-company counts (open, new, closed) are saved to the run's CHANGES_SUMMARY record. New and closed rows come first, so maxJobsPerCompany never drops a change in favour of an unchanged job. Each run saves the whole board, so if more jobs than maxJobsPerCompany changed, the extra changes are not reported again: raise the cap for boards that can move by more than that between runs. The run log and changesNotDelivered in CHANGES_SUMMARY say when this happens.
Tracking never costs you the job list. The Actor creates the ats-jobs-track-changes store itself on your first tracked run. If a run cannot open it (for example a store with that name already existed in your account, which an Actor under limited permissions cannot use: rename or delete yours), the run adds one free ok: false row with trackingUnavailable: true that says why. With changesOnly nothing else is returned and nothing is charged; with trackChanges alone you still get the board, untagged, like a normal run.
{"companies": ["anthropic", "figma", "airbnb"], "changesOnly": true}
Output fields
source, company, companySlug, jobId, title, department, team, location, isRemote, workplaceType, employmentType, experienceLevel, salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryText, url, applyUrl, publishedAt, updatedAt (+ descriptionText when requested; + changeStatus and lastCheckedAt with tracking). Download as JSON, CSV, Excel or via API.
Salary: Greenhouse has no structured pay field, so the salary range is read out of the job description (US pay-transparency ranges such as "$215,000 — $300,000 USD"). Rows without a stated range return null, never a guess.
Pricing
$0.003 per job row returned. A company with no open jobs, an unknown slug, a board whose jobs all miss your filters, or (with changesOnly) a board with no changes returns an explanatory row with ok: false and is not charged. Closed-job rows are charged like any other job row. 100 jobs = $0.30.
How it works
It reads Greenhouse's own public job-board API, the same feed that powers each company's careers page. No browser, no scraping of HTML, no proxies, so runs finish in seconds and do not break when a careers page is redesigned.
FAQ
How do I find a company's slug? Open their careers page. If the URL is boards.greenhouse.io/
Which companies use Greenhouse? Among others: Anthropic, Airbnb, Figma, Stripe, Discord.
Can I schedule it? Yes. Use an Apify schedule plus postedWithinDays: 1 to get only new jobs each day.
Is it legal? It reads data the company publishes publicly for job seekers. Use it in line with your local law and the board's terms.
Changelog
- 0.1 (2026-09-24) — first release. Bulk companies, filters, normalised salary fields.
Who uses it
- Recruiters and sourcers tracking which tech companies are hiring and for which roles
- Job-market analysts measuring hiring volume, remote share and stated salary ranges by department
- Sales and BDR teams using open roles as a buying signal for outreach
- Developers feeding fresh Greenhouse postings into job boards, alerts or a database
- Job seekers watching a shortlist of target employers without checking each careers page