Greenhouse, Lever, Ashby & Workable Jobs Scraper API
Pricing
Pay per usage
Greenhouse, Lever, Ashby & Workable Jobs Scraper API
Job board scraper for Greenhouse, Lever, Ashby and Workable: get every open job from company careers pages, read from each system's public job board API. One row per job in the same fields for all four, with filters and a new-jobs-only mode.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Sampon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
22 days ago
Last modified
Categories
Security
Limited permissionsShare
Greenhouse, Lever, Ashby & Workable Jobs
Many companies host their careers page on Greenhouse, Lever, Ashby or Workable. Each of these systems publishes a public job board feed so the company can show its openings on its own website. This Actor reads those feeds and gives you every open job as one clean table, with the same columns no matter which system the company uses.
Typical uses: tracking who is hiring in your market, feeding a niche job board, watching a list of target companies for new roles, or sizing a team's growth by department.
What you put in
A list of companies, one per line. Any of these forms works:
| You enter | Example |
|---|---|
| The public board address | https://job-boards.greenhouse.io/gitlab, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/linear, https://apply.workable.com/huggingface/ |
| A short name with the system in front | greenhouse:gitlab, lever:spotify, lever-eu:companyname, ashby:linear, workable:huggingface |
| The company's own careers page | https://linear.app/careers |
When you give the company's own careers page, the Actor reads it once and looks for a link to, or an embed of, one of the four boards. That works for most pages that link to their board. Pages that build their job list with their own code may not show the board at all; in that case, open one job on the page, copy the board address from your browser, and use that instead.
{"sources": ["https://job-boards.greenhouse.io/gitlab", "lever:spotify", "https://linear.app/careers"],"keywords": ["engineer", "designer"],"locations": ["remote", "london"],"postedWithinDays": 30,"maxItemsPerBoard": 100}
Optional settings:
| Setting | What it does |
|---|---|
maxItemsPerBoard | Newest jobs first, up to this many per company. Default 50. |
keywords | Keeps jobs whose title contains one of the words. Case does not matter. |
locations | Keeps jobs whose location (any of them, for multi-location jobs) contains one of the words. |
departments | Keeps jobs whose department or team contains one of the words. |
remoteOnly | Keeps jobs the board marks as remote, or whose location says remote. |
postedWithinDays | Skips jobs first published longer ago than this. |
onlyNew | Returns only jobs that were not on the board at the previous run. See below. |
includeDescription | Adds the job description as plain text. On by default. |
maxDescriptionChars | Cuts long descriptions at a word break. Default 4000, 0 for no limit. |
includeGreenhousePay | Fetches the published pay range for Greenhouse jobs (one extra request per Greenhouse job). |
What you get
One row per job. The same fields come back for every system; anything a system does not publish is null.
{"source": "lever","board": "spotify","company": "spotify","jobId": "4852ad53-b028-4161-b53b-24c62759257f","title": "Staff Product Designer - Agentic Experiences","department": "Design and User Experience","team": "Experience","location": "London","locations": ["London", "Stockholm"],"country": "GB","remote": true,"workplaceType": "remote","employmentType": "Permanent","postedAt": "2026-10-09T17:54:45Z","updatedAt": null,"url": "https://jobs.lever.co/spotify/4852ad53-b028-4161-b53b-24c62759257f","applyUrl": "https://jobs.lever.co/spotify/4852ad53-b028-4161-b53b-24c62759257f/apply","salary": null,"salaryText": null,"description": "We design Spotify's consumer experience end to end, moment to moment, across every screen ...","isNew": null,"scrapedAt": "2026-10-10T08:03:50Z"}
Notes on the fields:
sourceis the system (greenhouse,lever,ashby,workable) andboardthe company's name on it.companyis the company name when the system publishes one (Greenhouse, Workable). Lever and Ashby feeds do not include it, so you get the board name instead.postedAtis the first publication time in UTC. Workable only publishes a date, so you getYYYY-MM-DDthere. Greenhouse also givesupdatedAt.salaryholdsmin,max,currencyandintervalwhen the company publishes a range: Ashby and Lever include it in the feed, Greenhouse only withincludeGreenhousePay, Workable does not publish it in its public feed.salaryTextkeeps the range as the company wrote it.isNewistrueon every row returned withonlyNewturned on, andnullotherwise.
The output describes jobs, not people. Recruiter or hiring-manager fields are never collected, custom fields are left out, and e-mail addresses, phone numbers and links to personal profiles (LinkedIn, X, GitHub and similar) inside descriptions are replaced with [email removed], [phone removed] and [profile link removed]. A name written in the running text of a description cannot be removed reliably and stays as written.
Watching companies for new jobs
Turn on onlyNew and schedule the Actor, for example daily. The first run returns everything and remembers which jobs each board had, in a key-value store called ats-job-board-jobs-seen in your Apify account. Every later run returns only jobs that were not on the board the previous time. Jobs held back by maxItemsPerBoard or by your filters are remembered too, so changing filters later does not flood you with old jobs.
Price
Free for now. You only pay Apify's usual platform usage, which is small because each company is one request to a feed: in our test on a local machine, the default three companies returned 131 jobs in about 3 seconds. A per-job price may be added later. If that happens, it will be shown on this page before it applies to you.
How it treats the sources
- It only uses the public, read-only job board feeds that each system documents for showing jobs on a careers page. No login, no private data, no application forms.
- It reads each host's robots.txt first and follows it, including any crawl delay.
- By default it reads two boards at a time and waits at least one second between requests to the same host. On HTTP 429 or a server error it backs off and tries again.
Limits
- Four systems are supported: Greenhouse, Lever, Ashby and Workable. SmartRecruiters is left out because its feed's robots.txt asks automated tools to stay away; Recruitee is left out because its documentation is contradictory about whether the feed is public.
- Jobs a company has marked as internal or unlisted are not in the public feeds and so are not in the output.
- A board name that does not exist returns nothing; the log says which ones could not be read.
- Greenhouse boards hosted in its EU region have not been tested.
This Actor is an independent tool. It is not made by, endorsed by, or affiliated with Greenhouse, Lever, Ashby, Workable or the companies whose job boards it reads.