Greenhouse, Lever & Ashby Jobs Feed: $1/1K
Pricing
from $1.00 / 1,000 job returneds
Greenhouse, Lever & Ashby Jobs Feed: $1/1K
Paste careers page URLs, slugs or company names and get open jobs from Greenhouse, Lever and Ashby in one clean schema, with salary when published, remote flag and apply link. Monitor mode returns only new jobs; seen jobs are free. A bad URL never fails the run. $1 per 1,000 jobs.
Pricing
from $1.00 / 1,000 job returneds
Rating
0.0
(0)
Developer
moo_iscool
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Security
Limited permissionsShare
Greenhouse, Lever & Ashby Jobs Feed
Paste careers pages. Get every open job in one clean feed. This actor reads the public job boards that companies host on Greenhouse, Lever, and Ashby, and returns their open jobs in one normalized schema: title, location, remote flag, department, posted date, salary when the board publishes one, and the apply link. Export as JSON, CSV, or Excel, or send to Google Sheets or a webhook. No API key, no login, no browser.
- Who it's for: recruiters and talent teams watching a fixed set of employers, sales and research teams using hiring as a signal, job seekers tracking target companies, and developers who need Greenhouse, Lever, and Ashby jobs in the same fields.
- Any input format: a careers URL, a board slug, or a company name. A bad line becomes a free error row, and the rest of the run still finishes.
- Monitor mode: with only new jobs since last run, a daily schedule returns only jobs you haven't seen, and seen jobs are not charged.
- Price: $1.00 per 1,000 jobs, plus a small per-run start fee. Error rows are free.
Quick example
Input (this is the prefilled form):
{"companies": ["https://job-boards.greenhouse.io/stripe","jobs.lever.co/palantir","https://jobs.ashbyhq.com/ramp"],"keywords": ["engineer"],"maxJobsPerCompany": 25,"maxResults": 100}
Sample output rows (from a real run on 25 October 2026; a full record is shown further down):
| company | provider | title | location | salary |
|---|---|---|---|---|
| ramp | ashby | Software Engineer, Forward Deployed | New York, NY (HQ) | $168K – $285K • Offers Equity |
| Stripe | greenhouse | Staff Software Engineer, Payments Intelligence | Seattle, New York, San Francisco | – |
| palantir | lever | Forward Deployed Software Engineer, New Grad - Warp Speed | New York, NY | $135,000 - $145,000 |
Limits, up front
- Public Greenhouse, Lever, and Ashby boards only. Companies on Workday, iCIMS, SmartRecruiters, or a custom careers site are not covered; such a line comes back as a free error row.
- Live snapshot, not a database. Each run reads the boards at that moment. There is no historical archive of closed jobs.
- Salary only when published. Many Greenhouse boards publish no pay range; then
salaryis read from the posting text when possible, or left null. companyis the board's display name on Greenhouse and the lowercase board token (for exampleramp) on Lever and Ashby.
How to scrape Greenhouse jobs, plus Lever and Ashby job postings
The actor calls the official public JSON endpoints that the career pages themselves use (boards-api.greenhouse.io, api.lever.co, api.eu.lever.co, api.ashbyhq.com). A bad URL or an unknown name becomes a free error row, and the run succeeds even when every company fails.
Get only new jobs since last run
Only-new mode remembers jobs you have already collected, which is what you want on a daily schedule. Jobs you have already seen are not saved again and are not charged. See Tips below for how the memory works.
What data you get
Each open job is one dataset item with type set to job. A company that cannot be resolved or fetched is one free item with type set to error. Closed items appear only when you turn on both only new jobs and include closed jobs. A closed item has the id and the company, and the other fields are null because the board no longer returns them.
| Field | Meaning |
|---|---|
| type | job or error |
| jobId | Id from the source board |
| jobKey | provider:companyToken:jobId |
| provider | greenhouse, lever, or ashby |
| company | Board display name when the API sends one, otherwise the token |
| companyToken | Token used in the API URL |
| title | Job title |
| url | Public job page |
| applyUrl | Apply link. On Greenhouse this is the job page |
| location | Primary location |
| locations | Primary location plus offices or secondary locations |
| isRemote | True when the workplace type is remote, false for hybrid, on-site, in-office, and office, and when the workplace type is missing or unspecified the board's remote flag is used, then location text that contains "remote" |
| workplaceType | Workplace label when the board sends one |
| department | Department names |
| team | Team, when the board has one |
| employmentType | Lever commitment or Ashby employment type. Null for Greenhouse |
| postedAt | Greenhouse first published, with updated time as a fallback. Lever created time. Ashby published time |
| updatedAt | Greenhouse update time. Null for Lever and Ashby |
| salary | Pay range from the board when it publishes one, otherwise a range read from the description |
| requisitionId | Greenhouse requisition id, or null |
| description | Plain text. Null when descriptions are turned off, and on closed records |
| status | open, changed, or closed |
| source | API URL used for that company |
| scrapedAt | Time this run read the board |
| input | The company line, on error rows |
| error | NOT_FOUND, INVALID_INPUT, HTTP_ERROR, or TIMEOUT |
| errorMessage | Why that company line failed |
salary.source is ats when the number came from the board, and description when it was read from the posting text. Greenhouse requests pay transparency and converts pay_input_ranges from cents. Lever uses salaryRange. Ashby uses structured compensation when the board sends it, then the compensation summary, then the description. salary.text is the board's own line or the snippet that was parsed. min and max are numbers when they can be read. A dot used as a thousands separator, as in €60.000, is handled. Odd formats stay null rather than guessed.
The Jobs view lists postings. The Errors view lists company lines that failed.
How to use
- Add one company per line. A careers URL is the safest input. A slug or a company name works too.
- Add keywords, locations, or a posted-within window if you do not want the whole board. Use posted within hours for a window such as the last 24 hours.
- Set max results if you want a cap. The default is 1,000 jobs across all companies.
- Run the actor. Open the dataset for the jobs, and the key-value store key
SUMMARYfor per-company counts, the board that was chosen, and errors. - For a daily feed, turn on only new jobs since last run, keep the same state key, and schedule the task.
Remote only keeps a job when the workplace type is remote, drops hybrid, on-site, in-office, and office jobs, and when the workplace type is missing or unspecified uses the board's remote flag, then location text that contains "remote".
How to find a company
Paste the careers URL as it appears in the browser. These all work, including uppercase, a missing https://, a trailing slash, a job id in the path, and a query string.
Greenhouse:
https://boards.greenhouse.io/stripehttps://job-boards.greenhouse.io/stripehttps://job-boards.eu.greenhouse.io/stripehttps://boards.greenhouse.io/embed/job_board?for=stripegreenhouse:stripe
Lever:
https://jobs.lever.co/palantirhttps://jobs.eu.lever.co/aavelabsreads the EU API directlylever:spotify
Ashby:
https://jobs.ashbyhq.com/ramp- A job URL such as
https://jobs.ashbyhq.com/ramp/JOB_ID/applicationstill uses the board nameramp ashby:ramp
You can also pass a slug such as stripe, or a company name such as Ramp or Palantir Technologies. Auto mode builds a few slug variants, asks Greenhouse, Lever, and Ashby in parallel, and keeps the board with the most listed jobs. The run log and the resolvedFrom field on SUMMARY record the choice. Ramp resolves to Ashby, because that board lists far more jobs than the small Greenhouse board that uses the same slug.
If two lines resolve to the same provider and token, the board is fetched once.
Some companies put a custom domain in front of the board, such as careers.example.com. Search the page source for boards-api.greenhouse.io, api.lever.co, api.eu.lever.co, or api.ashbyhq.com. The token is the path segment on that request. You can paste the API URL itself.
Set Default provider when a bare slug should stay on one system. A full URL always stays on the system in that URL.
Jobs with isListed set to false on Ashby are skipped. They are not on the public board.
Input example
{"companies": ["https://job-boards.greenhouse.io/stripe","jobs.lever.co/palantir","https://jobs.ashbyhq.com/ramp"],"keywords": ["engineer"],"includeDescription": false,"maxJobsPerCompany": 25,"maxResults": 100,"onlyNew": false}
Output example
{"type": "job","jobId": "29a5da77-37f0-402a-92bc-072778e77ed8","jobKey": "ashby:ramp:29a5da77-37f0-402a-92bc-072778e77ed8","provider": "ashby","company": "ramp","companyToken": "ramp","title": "Software Engineer, Forward Deployed","url": "https://jobs.ashbyhq.com/ramp/29a5da77-37f0-402a-92bc-072778e77ed8","applyUrl": "https://jobs.ashbyhq.com/ramp/29a5da77-37f0-402a-92bc-072778e77ed8/application","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "San Francisco, CA"],"isRemote": false,"workplaceType": "Hybrid","department": "Engineering","team": "Engineering","employmentType": "FullTime","postedAt": "2026-10-22T19:20:16.077Z","updatedAt": null,"salary": {"min": 168000,"max": 285000,"currency": "USD","interval": "year","text": "$168K – $285K • Offers Equity","source": "ats"},"requisitionId": null,"description": null,"status": "open","source": "https://api.ashbyhq.com/posting-api/job-board/ramp?includeCompensation=true","scrapedAt": "2026-10-24T22:30:03.326Z"}
An unknown company looks like this. It is not charged.
{"type": "error","input": "not-a-real-company-zzzz","provider": null,"companyToken": null,"error": "NOT_FOUND","errorMessage": "No Greenhouse, Lever, or Ashby board listed jobs for \"not-a-real-company-zzzz\". Tried notarealcompanyzzzz, not-a-real-company-zzzz, not."}
How much does it cost?
$1.00 per 1,000 jobs ($0.001 per job) plus a small per-run start fee. Error rows and jobs you've already seen are never charged.
That is $0.001 per job pushed with the job event. A remembered job whose title, location, department, salary text, or update time changed is charged when you turn on include changed jobs, and its status is changed. Closed records are free. Companies that return nothing, and jobs dropped by filters, are not charged. If the run has a max charge set, pushing stops when that limit is reached and the log says so. The run still succeeds.
Tips
Schedule the task once a day with only new jobs since last run turned on. Keep the state key stable. Seen jobs live in the named key-value store ats-job-feed-state, under a key that starts with SEEN_. That store is kept indefinitely, including on the free plan. A different state key is a different saved search, so an engineering feed and a design feed do not share memory.
Each remembered job also stores a short hash of the title, location, department, salary text, and update time. Turn on include changed jobs to receive a row when that hash changes. Those rows are charged as jobs. The hash is updated on every run that sees the job, so a later run only reports a change that happened after the last check. The first run after this hash was added records the current text and does not mark every old job as changed.
Jobs are remembered only after they pass the filters and are actually pushed. A later run with wider keywords can still pick up a role the earlier filter hid. Entries that have not matched for 90 days are dropped, and the map is capped at 300,000 jobs.
Include closed jobs when you want a record that a previously returned role left the board. That flag does nothing unless only-new mode is on. A tight max jobs per company can leave older roles out of the window, so their last-seen time is not refreshed. They are not marked closed while they remain on the board, and they age out of memory after 90 days.
Descriptions are off unless you turn them on. Leave them off for a large board. The actor reads one company at a time per worker and drops the description text when you did not ask for it.
Posted within days and posted within hours can be set together. The stricter window wins. Greenhouse dates use first published, then updated time.
Export jobs to Google Sheets
Apify can send the dataset to Google Sheets, Slack, or a webhook from the task's integrations. The run stops at your max results.
The default timeout is 10 minutes. The default memory is 256 MB, and a run can use from 256 MB to 1024 MB. Raise the timeout if you add a long list of large boards.
FAQ
Is this legal, and where does the data come from?
The actor sends a normal GET request to the public JSON endpoints Greenhouse, Lever, and Ashby publish for career pages. The response is the same information a visitor sees on the job board. There is no login and no applicant data. Your use of the results, including who you contact, is yours to judge.
Why is a job missing?
The company may not use these three systems. Check the Errors view for NOT_FOUND or HTTP_ERROR. Keyword, location, department, remote, and posted-within filters drop roles that do not match. Ashby hides posts marked unlisted. Only-new mode hides jobs already stored for that state key. A role that moved to Workday or a custom site will not appear here.
How often is the data updated?
The actor shows the board as it is at the moment you run it. It does not refresh itself in the background. Companies update their own postings on their own schedule. Run it on the cadence you want. Daily is the usual choice with only-new mode.
Does it work with Workday or other ATS?
No. Only Greenhouse, Lever, and Ashby public boards are supported. Other systems return a free error row.
What am I charged for?
Each job row saved with the job event costs $0.001 ($1.00 per 1,000), plus a small start fee per run. Error rows, closed records, jobs dropped by your filters, and jobs already seen in only-new mode are free. Changed jobs are charged only when you turn on include changed jobs.
Support
Questions, or a board URL that should have worked: use the feedback tab on this actor's Apify Store page.