Greenhouse, Lever & Ashby Jobs Scraper: Live Job Search
Pricing
from $1.05 / 1,000 job returneds
Greenhouse, Lever & Ashby Jobs Scraper: Live Job Search
Greenhouse, Lever, Ashby job search, live on every run with no stale index. Search 11,003 company job boards by keyword, location, remote, salary, department and date, or pull every job from named companies. Salary, location and apply link. $0.0015 per job.
Pricing
from $1.05 / 1,000 job returneds
Rating
0.0
(0)
Developer
Christopher Moravec
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
a day ago
Last modified
Categories
Features
Share
Search jobs across 11,003 company job boards on Greenhouse, Lever and Ashby, or pull every open job from the companies you name. One clean row per job: title, company, department, location, remote, salary, posted date, apply link.
Live on every run, no stale index. The actor reads each company's own public job board at the moment you run it. There is no database in the middle, so a job closed this morning is gone and a job posted this morning is there. No login, no browser and no proxy: it uses the official public job-board APIs that power the companies' own careers pages.
Who it's for
- Job seekers and job boards: every remote software role, or every AI role posted this week, in one spreadsheet.
- Recruiters and sales teams: see who is hiring for what, right now. A company hiring its first security engineer is a lead.
- Analysts and investors: track hiring at a list of named companies over time.
Two ways to use it
Search every bundled board by leaving Companies empty and setting any filters. The 11,003 boards were found in the public Common Crawl URL index and each one checked against its API on 2026-11-04 (5,881 Greenhouse, 1,652 Lever, 3,470 Ashby). A full read covers about 329,000 open jobs.
{"keywords": ["software engineer", "backend engineer"],"remoteOnly": true,"postedWithinDays": 7,"maxItems": 500}
Companies reads only the boards you list. Enter a company name or slug (tried on all three ATSs) or a board URL. The filters still apply; leave them empty to get every job.
{"companies": ["stripe", "https://jobs.lever.co/spotify", "jobs.ashbyhq.com/ramp"],"maxItems": 5000}
Input
| Field | Meaning |
|---|---|
keywords | Any keyword in the job title (and in the description, with includeDescriptions). Case-insensitive, from the start of a word. Keywords of 3 letters or fewer must be a whole word, and in capitals they are an acronym: AI matches AI Engineer, not said. |
locations | Any of these in the location text: New York, London, Remote. US and UK also match their other spellings. A row reading only Austin, TX does not match a US filter unless the board also states the country. |
remoteOnly | Jobs the board states as remote. A job that does not say is left out. |
postedWithinDays | Posted in the last N days. A job with no date is left out. |
departments | Any of these in the department or team: Engineering, Sales. |
minSalary | Keeps jobs whose top of range reaches this number, in the posting's own currency, with no conversion. Jobs with no stated pay are left out, and so is hourly or monthly pay. |
companies | Names, slugs or board URLs (boards.greenhouse.io/x, job-boards.greenhouse.io/x, jobs.lever.co/x, jobs.ashbyhq.com/x). Empty = search every bundled board. |
includeDescriptions | Default false. Adds the full description as plain text and searches it with keywords. A full read takes about 4 times as long. |
maxItems | Default 500. The run stops as soon as it has this many. |
Output
One row per job, de-duplicated by ats + id. A field the board did not publish is null, never guessed.
{"ats": "ashby","company": "Ramp","companySlug": "ramp","title": "Security Engineer, Cloud","department": "Engineering","team": "Backend","location": "New York, NY (HQ)","locationsAll": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],"remote": true,"workplaceType": "hybrid","employmentType": "Full-time","salaryMin": 211400,"salaryMax": 290600,"salaryCurrency": "USD","salaryInterval": "year","postedAt": "2026-04-07T17:12:35.753Z","updatedAt": null,"jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245"}
| Field | Description |
|---|---|
ats | greenhouse, lever or ashby |
company | The name on the board (Greenhouse). Lever and Ashby publish no company name, so it is built from the slug: tutorintelligence becomes Tutorintelligence. |
companySlug | The board's slug on that ATS |
title | Job title |
department, team | As published. Greenhouse has departments, not teams. |
location, locationsAll | Main location, and every location listed |
remote | true, false, or null when the board does not say |
workplaceType | remote, hybrid, onsite, or null. A job can be hybrid and remote: true when the board offers both. |
employmentType | As published. Ashby's values are tidied to Full-time, Part-time, Internship, Contract, Temporary. |
salaryMin, salaryMax, salaryCurrency, salaryInterval | Only from the board's structured pay fields. Interval is year, month, week, day or hour. |
postedAt, updatedAt | ISO 8601 UTC |
jobUrl, applyUrl | The job page and the application page |
description | Plain text, only with includeDescriptions |
id | The job's id on that ATS |
The run's key-value store has an OUTPUT record: boards tried, ok, dead and failed per ATS, jobs read and returned, and any
company names no board was found for. The log prints the same on one line.
Pricing
Pay per result: $0.0015 per job ($1.50 per 1,000), plus $0.025 once for a run that read 5,000 or more boards, which covers reading them whether or not anything matched. A run that reaches Max jobs before 5,000 boards, a normal list of named companies, or a failed run does not pay that. Set Max jobs or a maximum charge on the run to cap the cost.
Limits
- Salary is
nullon most rows. In a sample of 23,703 jobs, 28% of Greenhouse, 19% of Lever and 30% of Ashby rows stated pay, and only those are returned with a number. Pay written only in the description text is not parsed. - Salary interval is often
nullon Greenhouse. Its pay fields carry no interval, so it is set only when the range's own label says so (Annual Salary, Hourly). Most Greenhouse ranges have a label like Zone 1 Pay Range and staynull. - Greenhouse ranges: several ranges in one currency are widened to one. If a job lists more than one currency, the first is used and the others are not converted or merged.
remoteon Greenhouse is only known when the employer uses a workplace field or says Remote or Hybrid in the location: about 20% of rows.remoteOnlyleaves the rest out.- Lever dates:
postedAtis the posting'screatedAt, which can be earlier than the day it went public. Lever and Ashby publish noupdatedAt. - The bundled list is a snapshot of which boards exist, not of their jobs. Companies move ATS and new ones appear, so a
company can be missing. Use
companiesto read any board on these three ATSs, listed or not. maxItemssamples. Boards are read in random order, so a run that stops early returns a different mix each time. To get every match, setmaxItemsabove what you expect.- Boards are employer-run, so a few are staffing or aggregator boards with thousands of listings.
FAQ
How fresh is the data? As fresh as the run. Every board is read when you run the actor.
How long does it take? Reading all 11,003 boards took about 5 minutes on 1 GB of memory, and about 19 minutes with descriptions. A run with a low Max jobs stops much sooner, and a short company list takes seconds.
Why did my company not show up? Check companiesNotFound in the OUTPUT record. A name is tried as a slug on all three
ATSs, but a slug is not always the company name. Paste the board URL instead.
What happens if a job board is down? A board that no longer exists is skipped and counted as dead. Rate limits and server errors are retried with backoff. If one ATS stays down, the run still returns the other two and reports it. If all of the ATSs are down, the run fails rather than returning an empty success.
Is this allowed? It reads the public job-board APIs these ATSs provide so that employers can publish their jobs. It uses no login and collects no data about individuals, only job postings.