ATS Jobs Scraper — Greenhouse, Lever, Ashby, SmartRecruiters
Pricing
from $4.00 / 1,000 job scrapeds
ATS Jobs Scraper — Greenhouse, Lever, Ashby, SmartRecruiters
Pull every open role from a company's real applicant tracking system in one unified schema. No proxies, no blocks, no HTML parsing.
Pricing
from $4.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Quarry
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
ATS Jobs Scraper — Greenhouse, Lever, Ashby & SmartRecruiters in one schema
Pull every open role straight from a company's real applicant tracking system — the same system its careers page runs on. One input, one output schema, four ATS platforms.
No proxies. No blocks. No HTML parsing. These are public product APIs, so the data is complete and the actor doesn't break when a website gets redesigned.
Sample output
{"id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","provider": "ashby","board": "ramp","company": "Ramp","title": "Security Engineer, Cloud","location": "New York, NY (HQ)","remote": true,"department": "Engineering","employmentType": "FullTime","postedAt": "2026-04-07T17:12:35.753+00:00","updatedAt": null,"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams…"}
Every row has the same 13 fields regardless of which ATS it came from. Write your pipeline once.
What you can do with it
- Hiring-intent leads — companies opening roles in a function are companies with budget. Filter by keyword and department to find them the week they start hiring.
- Job boards and aggregators — build a niche board from the source, with full descriptions and apply links, instead of re-scraping someone else's board.
- Competitive and market research — track headcount plans, new office locations, and which teams a competitor is growing.
- Recruiting — monitor target companies for openings that match your candidates.
Input
| Field | What it does |
|---|---|
boards | Required. "greenhouse:stripe", "lever:leverdemo", "ashby:ramp", "smartrecruiters:SGS". Pass a bare slug like "stripe" and every provider is tried. |
keywords | Keep only roles matching any term, in title, department or description. |
locations | Keep only roles whose location contains any of these. |
remoteOnly | Keep only roles the ATS flags as remote. |
postedAfter | ISO date. Keep only roles posted or updated since. |
includeDescription | Full description as clean plain text. On by default. Free on Greenhouse, Lever and Ashby; on SmartRecruiters it costs one extra request per role, because SmartRecruiters' listing endpoint carries no description at all — a 4,000-role board takes a couple of extra minutes. Turn it off if you only want the metadata. |
maxJobs | Stop after N rows. 0 = no limit. |
concurrency | Boards fetched in parallel, 1–10. Default 5. |
Minimal run:
{ "boards": ["greenhouse:stripe"] }
Hiring-intent lead run:
{"boards": ["greenhouse:stripe", "ashby:ramp", "lever:leverdemo"],"keywords": ["sales", "account executive"],"postedAfter": "2026-07-01"}
Finding a company's board slug
Open the company's careers page and look at the URL:
| Careers URL | Use |
|---|---|
boards.greenhouse.io/stripe | greenhouse:stripe |
jobs.lever.co/leverdemo | lever:leverdemo |
jobs.ashbyhq.com/ramp | ashby:ramp |
jobs.smartrecruiters.com/SGS | smartrecruiters:SGS |
Don't know which one they use? Pass the bare slug — every provider is tried and only the one that answers returns rows.
Scale
One large board returns hundreds of roles in under a second: Stripe 548, Lever demo 388, Ramp 126, SGS 4,219. Pass a list of companies and a single run returns tens of thousands of rows.
Reliability
Every run reports what happened per board, in a RUN_STATS record:
ok— board returned rowsempty— board is healthy but has no open roles right nowdrift— the payload had records but the parser produced nonenot_found— that provider has no such board (expected when you pass a bare slug)transport/rate_limited— the provider did not answer
That third one matters. Most scrapers return an empty dataset whether the site changed or the company simply isn't hiring, and you can't tell which. This one tells you.
No board answered means the run fails. A typo'd slug used to finish green with zero rows forever; now it raises with the reason. One bad board among several still succeeds — that is resilience, not breakage — and a real company with no open roles is still a successful, empty run.
When a run legitimately matches nothing, the dataset gets one unbilled receipt row rather than being left empty:
{ "type": "no_changes", "boardsChecked": 1, "boardsAttempted": 1, "jobsSeen": 4257, "checkedAt": "2026-08-05T12:16:28.133Z" }
Job rows never carry a type field, so your pipeline can branch on it.
Pricing
Pay per job returned. You're charged for rows you actually receive — empty boards and failed lookups cost nothing.
Limits
- Public job postings only. No salary data unless the ATS publishes it, and no applicant or private data.
remoteis only set when the provider exposes it. Roughly a third of rows carry it; the rest arenullrather than a guess.updatedAtis only published by Greenhouse. Every other provider returnsnull;postedAtis populated everywhere.- SmartRecruiters descriptions come from the per-posting detail record. Where a company left those sections blank in its ATS — some do — the field is
nullbecause there is nothing to return. - Workable is not currently supported — its public listing endpoint stopped returning jobs (verified 2026-08-02).