AI/ML Jobs Feed + Careers Page Scrape
Pricing
from $1.25 / 1,000 job results
AI/ML Jobs Feed + Careers Page Scrape
Get every open job from any company's careers board in one clean, unified format. Paste company names or careers-page URLs; the Actor detects the ATS (Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters) and returns titles, locations, remote flag, salary, dates and full descriptions.
Pricing
from $1.25 / 1,000 job results
Rating
0.0
(0)
Developer
Hardened Metapod
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
ATS Jobs Scraper – Greenhouse, Lever, Ashby, Workable, Recruitee & SmartRecruiters
Get every open job from any company's careers board in one clean, unified format – without writing a scraper per ATS. Paste company slugs, ATS board links, or even a company's own careers page; the Actor detects which applicant-tracking system the company uses and pulls the postings from that ATS's official public job-board API.
Why this Actor
- 6 ATSs, one schema – Greenhouse, Lever (incl. EU), Ashby, Workable, Recruitee, SmartRecruiters. Same fields for every job, so you can mix 500 companies in one run.
- Auto-detect – give it
stripe,https://www.figma.com/careers/orhttps://jobs.ashbyhq.com/rampand it figures out the rest. - Pay only for matching jobs – title, location, remote and date filters run before charging.
- Salary – structured pay ranges where the ATS publishes them (Ashby, Lever, Greenhouse pay transparency, Recruitee) plus best-effort extraction from pay-transparency text in descriptions.
- Fast & reliable – plain HTTPS JSON APIs, no browser, no proxies, retries with back-off. ~1,000 jobs in a few seconds.
- AI/ML daily new jobs mode – a clean, de-duplicated daily feed of new AI/ML roles posted directly by employers (30 curated AI companies built in). No agency reposts, no junk rows, no repeats from yesterday.
- Clear failure report – a
RUN_SUMMARYrecord in the key-value store lists every input with status (ok,not_found,error) and counts.
Use cases
- Job aggregators and niche job boards (remote, AI, climate, crypto…)
- Recruiting & sales intelligence: who is hiring for what, where, and how fast
- Hiring-signal alerts for target accounts (schedule daily runs +
postedWithinDays: 1) - Labor-market and compensation research
Input
| Field | Description |
|---|---|
companies (required) | List of slugs (stripe), ats:slug (lever:spotify), ATS URLs, or careers-page URLs |
ats | For plain slugs: auto (default, probes all ATSs) or a specific ATS |
includeDescription | Adds descriptionText + descriptionHtml (default true) |
titleKeywords / excludeTitleKeywords | Case-insensitive title filters |
locationKeywords | Match against location, all locations, country, "remote" |
remoteOnly, postedWithinDays | Remote and recency filters |
maxJobsPerCompany, maxJobs | Caps (0 = unlimited) |
{"companies": ["stripe", "https://jobs.lever.co/spotify", "ashby:ramp", "https://www.notion.so/careers"],"titleKeywords": ["engineer"],"locationKeywords": ["remote", "new york"],"includeDescription": true}
Output (one item per job)
{"ats": "ashby", "companySlug": "notion", "company": "Notion","jobId": "1fc309c8-da20-4ff2-84c7-8b863ece2b0a","title": "Software Engineer, AI Connections (Developer Platform)","department": "Engineering", "team": "Engineering","location": "San Francisco, California","allLocations": ["San Francisco, California", "New York, New York"],"country": "United States", "isRemote": true, "workplaceType": "hybrid","employmentType": "FullTime","salary": { "min": 211400, "max": 290600, "currency": "USD", "period": "1 YEAR", "text": "$211.4K – $290.6K • Offers Equity" },"postedAt": "2026-08-24T14:44:49.699Z", "updatedAt": null,"url": "https://jobs.ashbyhq.com/notion/1fc309c8-...", "applyUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-.../application","descriptionText": "…", "descriptionHtml": "…","companyInput": "https://www.notion.so/careers", "scrapedAt": "2026-10-28T23:21:08.658Z"}
Fields the source ATS doesn't publish are null (e.g. Greenhouse has no employment type).
AI/ML daily new jobs mode (mode: "aiMlDaily")
Built for recruiters, AI job boards and talent-intel teams who are tired of paying for job dumps full of junk rows and agency reposts. Schedule it daily and you get only what is new.
{ "mode": "aiMlDaily" }
That's a complete input: with companies empty, it uses a built-in list of 30 AI/ML employers (Anthropic, OpenAI, Databricks, xAI, Scale AI, Cohere, Perplexity, ElevenLabs, Together AI, Harvey, Sierra, Cursor, Zoox and more), each verified to return jobs. Add your own companies to replace the list.
What the mode does, in order (all before charging, so you only pay for rows you keep):
- Junk removal – drops rows with no title or URL, "general application / talent pool" placeholders, expired postings, and anything older than
maxAgeDays(default 60). - AI/ML role filter – a title taxonomy (
roleCategory:ml-engineering,research,llm-genai,data-science,domain-ml,ai-general). Non-technical roles that carry "AI" in the title (recruiter, sales, marketing, legal, policy…) are excluded. Override withroleKeywords/excludeRoleKeywords. - Employers only – drops staffing/recruiting agencies by a known-agency list, agency-style company names ("… Staffing", "… Recruitment") and agency phrases in the description ("on behalf of our client", "C2C"). Add names with
extraAgencyNames. - De-duplication – reposts are matched on a normalized title + company + location hash (
dedupeKey; "Sr. ML Engineer" = "Senior Machine Learning Engineer"). The same role posted in several cities becomes one row with all cities inallLocations(mergeLocations). - New since last run – returned jobs are remembered for 120 days in the key-value store
ats-jobs-state(key perstateKey) and skipped next time.postedAfter(YYYY-MM-DD) adds a hard date floor. A job is only remembered once it is actually saved, so a run stopped by your cost cap doesn't lose jobs. - Normalized fields –
seniority(intern, junior, mid, senior, staff, principal, lead, manager, director, vp, executive),remoteType(remote, hybrid, onsite, unknown) andsalaryNormalized(minAnnual,maxAnnual,currency,sourcePeriod; hourly ×2080, monthly ×12).
RUN_SUMMARY.aiMlDaily shows how many rows were dropped and why. Live test (2026-10-29, default list, postedAfter 2026-10-15): 5,500+ postings scanned in 8.5 s, 70 new AI/ML jobs kept; a second run on the same state returned 0 repeats.
Pricing
Price: $1.25 per 1,000 jobs (about 0.1¢ per job) on the Free plan, with lower prices on paid Apify plans (SILVER $1.10/1k, GOLD $0.95/1k). No monthly rental, and platform usage is included.
AI/ML daily mode is priced separately: a flat fee per run (aiml-run) plus a fee per new job saved (aiml-job): $0.05 per run + $10 per 1,000 new jobs (about $0.75 for a typical day of ~70 new jobs) — see the Pricing tab.
Pay-per-result: in generic mode you are charged per job saved to the dataset (see the Pricing tab). Filtered-out jobs, failed companies and retries are free. In AI/ML daily mode, dropped junk, agency, duplicate and already-seen jobs are free too, so a daily run usually costs cents. Set Max cost per run to cap spend – the Actor stops cleanly when it's reached.
Tips & limits
- If a slug isn't found, pass the careers-page URL or
ats:slug. The board slug is the part after the ATS domain, e.g.boards.greenhouse.io/<slug>. - Careers pages that block bots or render the ATS link only via JavaScript can't be auto-detected – use the ATS board URL instead.
- Workday, iCIMS, Taleo and other ATSs without an official public job-board API are not supported.
- Only public job postings are collected – no candidate or employee personal data.
FAQ
Is this legal? The Actor reads job postings that companies publish through their ATS's public job-board APIs, which exist precisely so job listings can be syndicated. You are responsible for how you use the data. How fresh is it? Live – each run reads the boards at that moment.