Multi-ATS Jobs Scraper & New Jobs Monitor avatar

Multi-ATS Jobs Scraper & New Jobs Monitor

Pricing

from $1.50 / 1,000 job returneds

Go to Apify Store
Multi-ATS Jobs Scraper & New Jobs Monitor

Multi-ATS Jobs Scraper & New Jobs Monitor

Scrape every open job from company career pages on Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Personio and Workday - from a URL, domain or just a company name. Normalized output with salary, remote flag and seniority, plus new-jobs-only monitoring.

Pricing

from $1.50 / 1,000 job returneds

Rating

0.0

(0)

Developer

Mathews Motta

Mathews Motta

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Categories

Share

Multi-ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee & Personio

Scrape every open job from company career pages on Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Personio and Workday. Pass a careers URL, an ATS board URL, a domain or a company name and get one normalized record per job.

What does it do

Give the actor a list of companies. It finds the public job board behind each careers site, reads every open posting and writes them to a dataset in one consistent schema. It uses plain HTTP requests, so there is no browser and no proxy, and runs are fast and cheap.

  • Eight ATS platforms in one actor, with the same output for all of them.
  • Flexible input: ATS URL, careers page, domain or company name. Pages are scanned for embedded boards.
  • Normalized fields: remote, seniority (inferred from the title), department, published salary and postedAt.
  • Only new jobs: remembers seen postings per monitor name, so scheduled runs return just the fresh ones.
  • Filters: keywords, exclusions, locations, remote only, departments, posted within N days, per-company cap.

Who is it for

  • Job boards and niche job sites that need a steady feed from specific employers.
  • Recruiters and agencies tracking openings at target companies.
  • Job-alert bots that post new matches to Slack, Telegram or email.
  • Market and salary research across titles, levels and published pay.
  • Lead generation: a company that is hiring has budget and a reason to buy.
  • AI agents and RAG: structured job data with descriptions.

How much does it cost

You pay per job returned: $1.50 per 1,000 jobs, plus a small actor-start fee set by Apify. Filtered-out jobs and already-seen jobs are free, and so are failed companies. The max-cost-per-run limit you set is respected: when it is reached, the run stops cleanly. The first run of a monitor charges for every matching job, since it records them as the baseline.

Input

FieldTypeDescription
companiesstring[]Required. ATS URLs, careers URLs, domains or company names (max 1,000).
keywordsstring[]Keep jobs whose title or description contains any of these.
excludeKeywordsstring[]Drop jobs whose title, department or team contains any of these.
locationsstring[]Keep jobs whose location contains any of these (substring).
remoteOnlybooleanKeep only jobs explicitly remote. Default false.
postedWithinDaysintegerKeep jobs published in the last N days. 0 disables it.
departmentsstring[]Keep jobs whose department or team matches.
onlyNewJobsbooleanOutput only jobs not seen under the same monitor name.
monitorNamestringName of the seen-jobs memory. Default default.
includeDescriptionbooleanAdd plain-text descriptionText. Default true.
includeDescriptionHtmlbooleanAlso add descriptionHtml. Default false.
maxJobsPerCompanyintegerCap per company after filters. 0 means unlimited.

Example input:

{
"companies": [
"https://boards.greenhouse.io/stripe",
"https://jobs.ashbyhq.com/notion",
"https://jobs.lever.co/spotify"
],
"maxJobsPerCompany": 10
}

Output

One dataset item per job:

FieldTypeDescription
idstringStable: ${source}:${sourceJobId}.
source, sourceJobIdstringATS name (greenhouse, lever, ...) and the ATS job ID.
title, company, companySlugstringAs published; companySlug is the board token.
url, applyUrlstringPublic posting link and application link.
locationsstring[]Locations as listed.
remoteboolean or nullnull when unknown.
department, team, employmentTypestringWhen the ATS provides them.
senioritystringInferred: intern, junior, mid, senior, lead, manager, director, executive.
salaryMin, salaryMax, salaryCurrency, salaryPeriodnumber, stringPay range when published (Greenhouse, Lever, Ashby, Recruitee).
tagsstring[]Labels from the ATS, when any.
descriptionText, descriptionHtmlstringPlain text (HTML stripped) and optional original HTML.
postedAt, updatedAt, scrapedAtstringISO 8601 timestamps.

Sample item (one real record, description shortened):

{
"id": "ashby:1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"source": "ashby",
"sourceJobId": "1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"title": "Software Engineer, AI Connections (Developer Platform)",
"company": "Notion",
"companySlug": "notion",
"url": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"applyUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a/application",
"locations": ["San Francisco, California", "New York, New York"],
"remote": false,
"department": "Engineering",
"team": "Engineering",
"employmentType": "Full-time",
"seniority": null,
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": null,
"salaryPeriod": null,
"tags": [],
"descriptionText": "Who We Are\nNotion is the collaborative AI workspace where teams and agents think together. We're building one place where your knowledge, projects, me...",
"descriptionHtml": null,
"postedAt": "2026-08-24T14:44:49.699Z",
"updatedAt": null,
"scrapedAt": "2026-10-23T00:23:54.713Z"
}

Monitoring new jobs

  1. Enable Only new jobs and set a Monitor name such as fintech-engineering.
  2. The first run outputs every matching job and stores their IDs as the baseline.
  3. Add a schedule in Apify Schedules (for example, daily) with the same input. Later runs output only postings that were not seen before. Already-seen jobs are neither output nor charged.

Use one monitor name per company list or filter, so their state stays independent.

Integrations

  • API: start runs and read results through the Apify API, for example the run-sync-get-dataset-items endpoint.
  • Webhooks: trigger a workflow when a run succeeds.
  • Zapier, Make, n8n: connect the Apify app to send new jobs to your tools.
  • Google Sheets and exports: push runs to a sheet with the Apify integrations, or download JSON, CSV or Excel from the Console.

FAQ

Is it legal to scrape these job boards? The actor reads only public postings through the public job-board endpoints each ATS provides for its career pages. It does not log in or collect candidate data. You remain responsible for how you use the data, so check the rules that apply to you.

Which companies are supported, and how do I find the ATS URL? Any company that posts on one of the eight platforms. Open the careers page and check where the "Apply" links go, for example boards.greenhouse.io or jobs.lever.co. Paste that URL. If you are unsure, paste the careers page or domain and the actor will look for an embedded board.

What are the limits? Up to 1,000 companies per run. Use maxJobsPerCompany for very large employers. For Workday, descriptions are fetched for the first 500 matching jobs per company.

What if a company is not found? The run continues. The company is listed in the SUMMARY record with the reason, and nothing is charged for it. Name lookups are best effort, so a URL is always more reliable.

How fresh is the data? Each run reads the live board, so freshness equals your schedule. Workday only shows relative dates in lists, so its postedAt is approximate.