AI/ML Jobs Feed + Careers Page Scrape avatar

AI/ML Jobs Feed + Careers Page Scrape

Pricing

from $1.25 / 1,000 job results

Go to Apify Store
AI/ML Jobs Feed + Careers Page Scrape

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

Hardened Metapod

Maintained by Community

Actor 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/ or https://jobs.ashbyhq.com/ramp and 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_SUMMARY record 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

FieldDescription
companies (required)List of slugs (stripe), ats:slug (lever:spotify), ATS URLs, or careers-page URLs
atsFor plain slugs: auto (default, probes all ATSs) or a specific ATS
includeDescriptionAdds descriptionText + descriptionHtml (default true)
titleKeywords / excludeTitleKeywordsCase-insensitive title filters
locationKeywordsMatch against location, all locations, country, "remote"
remoteOnly, postedWithinDaysRemote and recency filters
maxJobsPerCompany, maxJobsCaps (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):

  1. Junk removal – drops rows with no title or URL, "general application / talent pool" placeholders, expired postings, and anything older than maxAgeDays (default 60).
  2. 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 with roleKeywords / excludeRoleKeywords.
  3. 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.
  4. 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 in allLocations (mergeLocations).
  5. New since last run – returned jobs are remembered for 120 days in the key-value store ats-jobs-state (key per stateKey) 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.
  6. Normalized fields – seniority (intern, junior, mid, senior, staff, principal, lead, manager, director, vp, executive), remoteType (remote, hybrid, onsite, unknown) and salaryNormalized (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.