Ashby + Greenhouse + Lever Job Scraper — Startup ATS API
Pricing
from $1.00 / 1,000 job posting scrapeds
Ashby + Greenhouse + Lever Job Scraper — Startup ATS API
Extract every job posting from Ashby, Greenhouse or Lever career pages — validated against 335 real startup boards, most running Ashby. Clean normalized JSON, no login, no proxies, pay only for jobs returned.
Pricing
from $1.00 / 1,000 job posting scrapeds
Rating
0.0
(0)
Developer
Quietloop Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Extract all job postings from any company's career page powered by Ashby — the fastest-growing applicant tracking system (ATS) among venture-backed startups — plus Greenhouse and Lever.
Just provide company slugs and get clean, normalized JSON with job titles, locations, apply URLs and (optionally) full descriptions. Perfect for job boards, lead generation, recruiting intelligence, labor market research and job alert tools.
Why Ashby-first?
Most multi-ATS scrapers on Apify Store treat Ashby as an afterthought behind Greenhouse and Lever. This one doesn't, because the data says otherwise: when we scanned 1,127 active YC-backed companies for their career-page ATS, 199 ran on Ashby — nearly as many as Greenhouse and Lever combined (72 + 35 = 107). If you're tracking startup hiring, Ashby coverage isn't optional anymore.
- ✅ No login, no API keys, no proxies — it reads the official public job board APIs that power the companies' own career pages, so results are stable and reliable. No brittle HTML parsing, no anti-bot walls.
- ✅ One normalized schema across 3 ATS platforms — Ashby, Greenhouse and Lever results all come out in the same format, ready to merge into your database.
- ✅ ATS auto-detection — don't know which ATS a company uses? Pass just the slug and the Actor figures it out.
- ✅ Fast and cheap — plain HTTP JSON requests, no headless browser. Hundreds of jobs are scraped in seconds.
- ✅ Filter before you pay — apply a regex title filter (e.g.
engineer|developer) so you only store (and get charged for) the jobs you actually need. - ✅ Battle-tested at scale — the same fetch logic runs daily in production, powering a live AI/ML job board across 335 real company boards and 12,000+ collected postings (see Validation below).
Input
{"companies": [{ "ats": "ashby", "slug": "linear" },{ "ats": "greenhouse", "slug": "stripe" },{ "ats": "lever", "slug": "plaid" },"ashby/notion","openai"],"includeDescription": false,"titleFilter": "engineer|developer"}
Each entry in companies can be:
| Format | Example | Behavior |
|---|---|---|
| Object | { "ats": "ashby", "slug": "linear" } | Scrapes the given board directly |
ats/slug string | "ashby/notion" | Same as above, shorthand |
| Bare slug string | "openai" | Auto-detects the ATS (tries Greenhouse → Lever → Ashby) |
The slug is the company identifier in the career page URL:
- Ashby:
https://jobs.ashbyhq.com/<slug> - Greenhouse:
https://boards.greenhouse.io/<slug>orhttps://job-boards.greenhouse.io/<slug> - Lever:
https://jobs.lever.co/<slug>
Options
| Field | Type | Default | Description |
|---|---|---|---|
includeDescription | boolean | false | Include the full job description text in each item |
titleFilter | string (regex) | — | Case-insensitive regex; only matching job titles are saved and charged |
Output
One dataset item per job posting, in the same schema regardless of ATS:
{"ats": "ashby","company": "linear","id": "as-linear-d3bc1ced-3ce4-4086-a050-555055dbb1ff","title": "Senior / Staff Fullstack Engineer","location": "Europe","url": "https://jobs.ashbyhq.com/linear/d3bc1ced-3ce4-4086-a050-555055dbb1ff","updatedAt": "2021-04-27T20:13:45.158+00:00","description": null}
idis globally unique and stable across runs (as-/gh-/lv-prefix + slug + ATS job ID) — ideal for deduplication and change detection.descriptioncontains the full job description whenincludeDescriptionistrue, otherwisenull.
Export the dataset as JSON, CSV, Excel or feed it into your pipeline via the Apify API.
Pricing
This Actor uses pay-per-event pricing: you pay a small fixed fee per scraped job posting (job-scraped event) plus the Actor start event. Use titleFilter to keep costs down by only saving relevant jobs. No subscriptions, no rental fee — you pay exactly for what you get.
Validation
The scraping logic in this Actor is the same code that powers a live job board in production:
- 335 real company boards scraped successfully (Ashby, Greenhouse and Lever combined) across a YC-portfolio company sample, yielding 12,273 normalized job postings in a single run.
- Runs daily in production with automated failure alerting.
- Of the newly-discovered boards in that sample, Ashby accounted for 199 out of 306 (65%) — the majority ATS among modern YC-backed startups.
Use cases
- Job board / job aggregator — keep thousands of tech company openings fresh on a schedule
- Recruiting & sourcing intelligence — track who is hiring for which roles and where
- Sales lead generation — hiring signals are buying signals (e.g. companies hiring "Data Engineer" may need your data tooling)
- Labor market research — monitor demand for skills, remote-work share, hiring velocity
- Job alerts — run daily, diff by
id, and notify on new matching postings
FAQ
Is this legal? The Actor only reads public, unauthenticated job board APIs that the companies themselves expose to publish their openings. No personal data is collected.
What happens if a slug is wrong? That company is reported in the log and in the RUN_SUMMARY key-value store record; the run continues with the remaining companies.
Do I need proxies? No. These are official public endpoints designed to be fetched by career page widgets — no blocking, no CAPTCHAs.
Why does this cover only Ashby, Greenhouse and Lever? These three cover the large majority of venture-backed startup career pages. Open an issue on the Actor page if you need another ATS (Workable, SmartRecruiters, Recruitee, ...) — the normalized schema is designed to extend to more platforms.