ATS Jobs Aggregator: Greenhouse, Lever, Ashby + 3 more
Pricing
from $2.00 / 1,000 job postings
ATS Jobs Aggregator: Greenhouse, Lever, Ashby + 3 more
Returns every open job from company career pages hosted on Greenhouse, Lever, Ashby, Recruitee, Personio or Workable as one clean, normalized dataset. Give it career-page URLs, get title, location, department, salary, dates and description per job. No browser, no login.
Pricing
from $2.00 / 1,000 job postings
Rating
0.0
(0)
Developer
Akshay Irudayaraj
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
ATS Jobs Aggregator
Pull every open job from company career pages hosted on Greenhouse, Lever, Ashby, Recruitee, Personio or Workable into one normalized dataset. Paste the career-page URLs, run, and get a clean table of jobs with title, location, department, employment type, salary (when the ATS exposes it), publish date and the full description.
It talks only to the public job-board APIs those ATS vendors publish for embedding career pages, so it is fast, cheap and does not break when a company restyles its careers site. No browser, no proxies, no login.
What you get
One dataset row per job:
{"ats": "greenhouse","board": "stripe","companyName": "Stripe","jobId": "8172487","title": "Abuse Investigator","url": "https://stripe.com/jobs/search?gh_jid=8172487","applyUrl": "https://stripe.com/jobs/search?gh_jid=8172487","location": "Dublin","locations": ["Dublin"],"remote": null,"workplaceType": null,"department": "8611 Security Analytics","team": null,"employmentType": null,"publishedAt": "2026-09-03T13:30:34-04:00","updatedAt": "2026-10-22T09:16:14-04:00","salary": null,"descriptionText": "Who we are ...","descriptionHtml": "<div>...</div>","scrapedAt": "2026-10-22T19:04:11.512345+00:00"}
Fields that an ATS does not expose are null rather than missing, so the columns are the same for every board.
Input
| Field | Type | Notes |
|---|---|---|
boards | array of strings | Career-page URLs or ats:slug. Recognised: boards.greenhouse.io/<slug>, job-boards.greenhouse.io/<slug>, jobs.lever.co/<slug>, jobs.ashbyhq.com/<slug>, <slug>.recruitee.com, <slug>.jobs.personio.de, apply.workable.com/<slug>. A bare slug such as stripe is probed against every ATS. |
keywords | array of strings | Keep jobs whose title contains any keyword (case-insensitive). |
locationFilter | string | Keep jobs whose location contains this text. |
remoteOnly | boolean | Keep remote jobs only. |
postedAfter | YYYY-MM-DD | Drop jobs published before this date. |
includeDescription | boolean | Include HTML and plain-text description (default on). |
maxJobsPerBoard | integer | Cap per board after filters (default 500, 0 = unlimited). |
maxJobs | integer | Cap for the whole run (0 = unlimited). |
Example:
{"boards": ["https://boards.greenhouse.io/stripe", "https://jobs.lever.co/palantir", "ashby:openai"],"keywords": ["engineer", "developer"],"remoteOnly": true,"maxJobs": 200}
Boards that cannot be read (wrong slug, board switched off) are listed in the ERRORS record of the run's key-value store and the run continues with the other boards. The run fails only if every board failed.
Pricing
Pay per event: $0.002 per job saved to the dataset ($2 per 1,000 jobs), plus Apify's standard Actor start fee. You pay only for jobs that match your filters and were written to the dataset. Boards that fail cost nothing. Set Maximum total charge on the run to cap spend; the Actor stops cleanly when it is reached.
Rough examples: three mid-size boards (~300 jobs) ≈ $0.60. A watch-list of 50 company boards checked daily with postedAfter set to yesterday usually costs a few cents per run.
Use cases
- Recruiting / sourcing: watch competitors' career pages and get new roles the morning they appear (schedule the Actor, set
postedAfter). - Job boards and aggregators: feed a niche job board without maintaining six scrapers.
- Sales intelligence: hiring is a buying signal; filter titles by
keywordssuch asSDR,Salesforce,Kubernetes. - Market research: salary bands (Ashby, Lever, Recruitee publish them), remote-vs-onsite mix, department growth.
- AI agents: array input, flat output and PPE pricing make this a drop-in tool via the Apify MCP server.
How it works
For each board the Actor calls the vendor's public job-board endpoint (boards-api.greenhouse.io, api.lever.co/v0/postings, api.ashbyhq.com/posting-api, <slug>.recruitee.com/api/offers, <slug>.jobs.personio.de/xml, www.workable.com/api/accounts). These are the same endpoints the vendors document for embedding a company's jobs on its own website. Requests are rate-limited to one per second per host with retries and back-off.
Not supported on purpose: SmartRecruiters (its API host disallows crawlers in robots.txt), Workday and custom career sites (they require a browser). Jobs are company data, not personal data; no applicant or recruiter information is collected.
FAQ
A company's career page is on its own domain, how do I find the slug? Open a job and look at the apply link: boards.greenhouse.io/<slug>/jobs/..., jobs.lever.co/<slug>/..., jobs.ashbyhq.com/<slug>/..., <slug>.recruitee.com, <slug>.jobs.personio.de, apply.workable.com/<slug>/. Or just pass the bare slug and let the Actor probe.
Why is publishedAt missing for some boards? Workable and Greenhouse expose it; Personio exposes createdAt; Ashby, Lever and Recruitee expose it for most but not all jobs.
Can I run it on a schedule? Yes. Combine a daily schedule with postedAfter and a webhook or the Apify integrations (Slack, Google Sheets, Make, Zapier, n8n).
Something looks wrong. Open an issue on the Actor's Issues tab with the board URL; I usually answer within a day.