Greenhouse, Lever & Ashby Jobs Scraper: Salaries, One Format
Pricing
$0.01 / 1,000 jobs
Greenhouse, Lever & Ashby Jobs Scraper: Salaries, One Format
Every open job from company career sites on Greenhouse, Lever and Ashby in one consistent format: title, department, locations, remote flag, salary range, posted date, description and apply link. Paste board links or company names. No proxy. Trial: 0.01 USD per 1,000 jobs until 30 Nov 2026.
Pricing
$0.01 / 1,000 jobs
Rating
0.0
(0)
Developer
Cozybit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Greenhouse, Lever & Ashby Jobs Scraper: every open job, one format, with salaries
Get every open job from the company career sites that run on Greenhouse, Lever or Ashby, straight from each company's own job board:
- Three job systems, one format: every job has the same fields (title, company, department, locations, remote flag, salary, posted date, description, apply link), whichever system the company uses. Mix all three in one run and export one clean table.
- Salaries where the employer publishes them: minimum, maximum, currency and pay period as numbers, plus the employer's own salary text. In our tests 5 of 9 company boards published salary ranges.
- Simple input: paste career-page links, job links,
system:companycodes, or just company names. The actor finds the board. - Filters: title or department keywords, locations, remote only, posted within the last N days, and a maximum per company.
- Fast and live: each board comes from the company's public job board in one request, read fresh on every run. Three companies take about 6 seconds.
- No proxy, no login, no browser: nothing to configure, and nothing that gets blocked.
Typical uses: recruiting and sourcing, hiring signals for sales and lead generation, salary research, job boards and newsletters that list jobs from chosen employers.
Input
| Field | What it does | Default |
|---|---|---|
| Company boards or names | Up to 500 entries: board or job links (job-boards.greenhouse.io/airbnb, boards.greenhouse.io/..., jobs.lever.co/spotify, jobs.eu.lever.co/..., jobs.ashbyhq.com/ramp), codes such as greenhouse:airbnb, lever:spotify, ashby:ramp, or company names such as Airbnb | three example boards |
| Title or department keywords | Keep jobs whose title or department contains any of the words, for example engineer, sales | all jobs |
| Locations | Keep jobs with a location containing any of the entries, for example London, United States, Remote | all locations |
| Remote jobs only | Keep only jobs the employer marks as remote | off |
| Posted within days | Keep jobs published in the last N days (1-365) | all dates |
| Include descriptions | Return the full job description as plain text; turn off for smaller exports | on |
| Maximum jobs per board | Newest jobs first, up to this many per company | all jobs |
Company names are matched to board addresses (Scale AI tries scaleai and scale-ai on all three systems). A name can also match a different company with the same name on another system, so check the company and board fields, or paste the board link for an exact match.
Example: remote engineering jobs posted in the last 14 days at three companies:
{"boards": ["https://job-boards.greenhouse.io/airbnb", "lever:spotify", "ashby:ramp"],"keywords": ["engineer"],"remoteOnly": true,"postedWithinDays": 14}
Output
One row per job. A real example (description shortened):
{"system": "ashby","board": "https://jobs.ashbyhq.com/ramp","company": "Ramp","job_id": "aa433e44-f095-484b-a46a-a330583d84b0","title": "GTM Senior Business Systems Analyst, Marketing & Pre-Sales","department": "Engineering","team": "Growth Engineering","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "San Francisco, CA", "Miami, FL"],"workplace_type": "hybrid","is_remote": true,"employment_type": "FullTime","salary_min": 134400,"salary_max": 209000,"salary_currency": "USD","salary_period": "year","salary_text": "$134.4K – $209K • Offers Equity","posted_at": "2026-10-23T17:17:16.626Z","updated_at": null,"description": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams...","job_url": "https://jobs.ashbyhq.com/ramp/aa433e44-f095-484b-a46a-a330583d84b0","apply_url": "https://jobs.ashbyhq.com/ramp/aa433e44-f095-484b-a46a-a330583d84b0/application","scraped_at": "2026-11-02T20:11:12.812Z"}
- Fields a job system does not publish are
null: Lever and Ashby have noupdated_at, Greenhouse has noteamoremployment_type. - Salary:
salary_minandsalary_maxare numbers insalary_currency.salary_periodisyear,month,week,dayorhourwhen the employer states it; Greenhouse employers often label a range only "Pay Range", so the period staysnullthere andsalary_textkeeps the employer's wording. When an employer publishes several ranges (for example per country), the first is in the number fields and all are insalary_text. - Remote:
workplace_typeis the employer'sremote,hybridoronsitelabel.is_remoteis the employer's remote flag; Ashby employers sometimes mark hybrid jobs as remote-eligible too. descriptionis plain text with paragraphs kept.
A run summary (RUN_SUMMARY in the run's key-value store) lists every board with its result: ok, not_found or error, and how many jobs it had, matched and returned. The run's status message names boards that were not found, for example Jobs: 60 from 3 of 4 boards. Not found: lever:acme.
Use it from code
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("cozybit/greenhouse-lever-ashby-jobs-scraper").call(run_input={"boards": ["greenhouse:airbnb", "lever:spotify", "ashby:ramp"],"keywords": ["engineer"],})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["company"], job["title"], job["salary_min"], job["salary_max"], job["apply_url"])
HTTP API (runs the actor and returns the jobs in one call):
curl -X POST "https://api.apify.com/v2/acts/cozybit~greenhouse-lever-ashby-jobs-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer <YOUR_API_TOKEN>" -H "Content-Type: application/json" \-d '{"boards": ["greenhouse:airbnb"], "includeDescription": false}'
To watch employers for new openings, schedule the actor daily with postedWithinDays: 1.
Pricing
Trial price until 30 November 2026: 0.01 USD per 1,000 jobs (the lowest price Apify allows). From 1 December 2026 the price is 1.00 USD per 1,000 jobs. Apify notifies all users before a price change.
You pay only for jobs delivered to your dataset; platform usage is included. Boards that are not found, errors, and jobs removed by your filters are free.
| Event | Price |
|---|---|
| Job | 1.00 USD per 1,000 (0.001 USD each) |
Worked examples (from 1 December):
- All 210 open jobs at one large company: 0.21 USD.
- Engineering jobs at 50 startups, about 1,500 jobs: 1.50 USD.
- A daily check of 100 companies for jobs posted in the last day, about 300 jobs a day: about 9 USD a month.
To cap spending, set a maximum cost per run in the run options; the actor stops cleanly when it is reached.
Free Apify plan
On the free Apify plan a run returns at most 100 jobs. When the limit is reached the run finishes successfully with the status message "Free Apify plan limit reached"; everything collected so far is in the dataset. Any paid Apify plan removes the limit.
Reliability
In 6 test runs on the Apify platform (9 companies across the three systems, filters, company-name lookup, and a made-up company), all 16 requests for real boards returned their jobs on the first try, with no retries. The made-up company was reported as not found, and the run still delivered the other boards. A typical run of three companies took 4 to 11 seconds; three large boards with 1,846 open jobs between them were read in 4 seconds.
The actor reads the same public job-board feeds that companies use to show jobs on their own websites, so it does not depend on page layouts. When a request fails briefly, it is retried twice.
Limits
- Only Greenhouse, Lever and Ashby boards. Companies on other job systems (Workday, SmartRecruiters and others) are not covered.
- You choose the companies: the actor has no built-in list of employers and no search across all companies.
- Only jobs the company lists publicly on its board; internal or unlisted jobs are not included.
- Salaries, departments and remote labels are only as complete as the employer publishes them.
- An entry that is not a supported link, code or company name stops the run before anything is collected, so check the error message and fix the entry.
Support
Report problems and feature requests on the actor's Issues tab, ideally with the run link.