ATS Job Feed Scraper
Pricing
from $2.00 / 1,000 jobs
ATS Job Feed Scraper
Aggregate live jobs from company career pages on Greenhouse, Lever, Ashby & SmartRecruiters. Proxyless, fast, one clean record per job.
Pricing
from $2.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Magpie
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
ATS Job Feed Scraper — live jobs from any company's career page
Pull live job listings straight from company career pages — the ones powered by Greenhouse, Lever, Ashby, and SmartRecruiters. Give it a company (Stripe, Airbnb, Spotify, Ramp…) and get back every open role as one clean, structured record: title, department, location, remote flag, employment type, full description, and a direct apply URL.
No login. No proxies. No fragile HTML scraping — this reads each company's official ATS feed, so the data is complete and stays fresh.
Benchmark — 8 companies: ✅ 1,186 jobs in one run · 🧩 100% field completeness (title, URL, location, description, published date) · ⚡ ~0.2–1 s per board · 🧼 clean plain-text + original HTML descriptions
Perfect for job boards & aggregators, recruiting & sourcing tools, talent-market research, competitive hiring intelligence, and "who's hiring" newsletters.
✨ Why this scraper
- Straight from the source. Reads each company's official ATS API (Greenhouse, Lever, Ashby, SmartRecruiters) — not a rendered page. Complete listings, no missed jobs.
- One unified record shape across every ATS. You don't care whether a company uses Greenhouse or Lever — the output columns are identical.
- Auto-detect. Don't know which ATS a company uses? Pass the bare company slug and it finds the right one for you.
- Clean descriptions. Both the original
descriptionHtmland a tidy plain-textdescriptionText— ready for search indexing, embeddings, or display. - Fast & proxyless. Public JSON endpoints, fetched in parallel. No proxy cost, no captcha, no rate-limit pain.
- Fair billing. You're billed per job returned. Boards that don't exist or return nothing are never billed — guaranteed in code.
📥 Input
| Field | Type | Description |
|---|---|---|
companies | string[] | One entry per board. provider:slug (e.g. greenhouse:stripe, lever:spotify, ashby:ramp, smartrecruiters:Visa) for an exact match, or a bare slug (e.g. ramp) to auto-detect. |
autoDetect | boolean | For bare slugs, try every ATS and keep whichever returns jobs (default true). |
searchQuery | string | Keep only jobs whose title contains this text (case-insensitive). |
location | string | Keep only jobs whose location contains this text. |
remoteOnly | boolean | Keep only jobs flagged remote by the ATS. |
department | string | Keep only jobs whose department contains this text. |
maxItems | integer | Stop after N jobs across all boards. 0 = unlimited. |
concurrency | integer | Boards fetched in parallel, 1–10 (default 5). |
Where do I find a company's slug?
It's the company token in its careers URL:
| ATS | Board URL | Slug |
|---|---|---|
| Greenhouse | boards.greenhouse.io/stripe | stripe |
| Lever | jobs.lever.co/spotify | spotify |
| Ashby | jobs.ashbyhq.com/ramp | ramp |
| SmartRecruiters | jobs.smartrecruiters.com/Visa | Visa |
Example input
{"companies": ["greenhouse:airbnb", "lever:spotify", "ashby:ramp", "gitlab"],"searchQuery": "engineer","remoteOnly": true,"maxItems": 500}
📤 Output
One record per live job:
{"source": "ashby","companyToken": "ramp","jobId": "0ed80a29-6cca-42d7-b7e0-066d4fa7b37f","title": "Staff Software Engineer | iOS","company": "Ramp","department": "Engineering","team": "Software Engineering","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "San Francisco, CA", "Remote (US)"],"remote": true,"employmentType": "FullTime","url": "https://jobs.ashbyhq.com/ramp/0ed80a29-6cca-42d7-b7e0-066d4fa7b37f","applyUrl": "https://jobs.ashbyhq.com/ramp/0ed80a29-6cca-42d7-b7e0-066d4fa7b37f/application","descriptionHtml": "<h1>About Ramp</h1>...","descriptionText": "About Ramp\n\nRamp is building...","publishedAt": "2026-06-26T01:57:53.065Z","updatedAt": null,"scrapedAt": "2026-07-12T10:23:00.158Z"}
Export as JSON, CSV, Excel, or pull via the Apify API. Schedule runs to keep a live mirror of any set of companies' openings.
❓ FAQ
Which ATS platforms are supported? Greenhouse, Lever, Ashby, and SmartRecruiters — four of the most widely used applicant-tracking systems. Thousands of companies publish through them.
How do I scrape many companies at once?
Add each to companies. They're fetched in parallel (see concurrency).
A company isn't returning jobs — why?
Either the slug is wrong (check the board URL), or the company uses an ATS this
actor doesn't cover yet. With autoDetect on, a bare slug is tried against every
supported ATS automatically.
Do I need proxies? No. These are public JSON feeds. It runs proxyless — nothing to configure, no proxy cost.
Are descriptions included? Yes for Greenhouse, Lever, and Ashby (both HTML and plain text). SmartRecruiters' list feed returns metadata without the body.
Is this legal? It reads publicly published job listings from companies' own career feeds — no login, no personal data. Review your own use case and local rules as usual.
🔧 Integrations
Works with everything on Apify: Google Sheets, Zapier, Make, n8n, Airbyte, webhooks, or the Apify API. Schedule daily runs to keep your job database in sync.
🏷️ Keywords
ats scraper, greenhouse jobs api, lever jobs scraper, ashby jobs, smartrecruiters scraper, job listings api, careers page scraper, hiring data, job board aggregator, recruiting data, jobs feed, company jobs scraper