Career Site Jobs Scraper: Greenhouse, Lever, Ashby & Workday
Pricing
from $1.00 / 1,000 jobs
Career Site Jobs Scraper: Greenhouse, Lever, Ashby & Workday
Scrape live job listings from company career sites on Greenhouse, Lever, Ashby and Workday. Paste company names or career page URLs. Jobs are read from each company's own ATS at run time, not a cached index. Filter by title, location, department or posting date. Pay per job; filtered jobs are free.
Pricing
from $1.00 / 1,000 jobs
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
1
Monthly active users
a few seconds ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.
Name the companies, get the jobs they have open right now. This actor reads open roles straight from company career sites that run on Greenhouse, Lever, Ashby or Workday, and returns them in one schema: title, location, department, employment type, remote flag, posting date, apply link and description. Paste a company slug such as stripe or a careers page link, add title, date, location, department or remote filters, and only the jobs that pass are delivered and billed. No login and no API key.
Why choose this actor?
- Four applicant tracking systems in one run. In our test of the live code on 2 October, Stripe (Greenhouse, found from the word
stripe), Ramp (Ashby), Palantir (Lever) and NVIDIA (Workday) returned 20 engineering jobs in 25 seconds, all in the same fields. - Filtered jobs are never charged. Title keywords, posting window, location, department and remote filters run as each posting is read, before anything is written or billed. In that test, 114 postings that did not match were skipped for free.
- Live from the employer, not a stale index. Every run asks each company's own board at that moment, so a role closed this morning is gone and one posted an hour ago is there. Companies that are not found, empty boards and error rows cost nothing.
Part of The Mine Works Jobs and hiring family: Foundit Monster India Jobs, Hirist Jobs Scraper, India Jobs MCP, Naukri Jobs Scraper, Shine.com Jobs Scraper, Internshala Scraper.
Try it in one minute
Paste this into the JSON tab of the input page and press Start:
{"companies": ["stripe", "https://jobs.ashbyhq.com/ramp"],"titleKeywords": ["engineer"],"maxJobsPerCompany": 5}
You get up to 10 engineering roles from Stripe and Ramp in a few seconds, with location, department, remote flag, posting date and a link to apply. Clear the boards box if the Console form filled in an example Workday board for you, or keep it to add NVIDIA.
Give the companies in companies, one per line, in any of these forms:
- A slug, the company's name as it appears in its board address:
stripe,notion,palantir. The actor tries Greenhouse, then Lever, then Ashby, one request each, and uses the first board that exists. - A careers page link, which goes straight to its system:
https://boards.greenhouse.io/stripe,https://job-boards.greenhouse.io/<slug>,https://jobs.lever.co/palantir,https://jobs.ashbyhq.com/ramp, or a Workday link such ashttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite. A link to a single job reads that company's whole board. - Board specs in
boards, such as{"ats": "lever", "slug": "palantir"}, when you already know the system.
API callers who send their list as organizations, companyNames, startUrls or queries (from another job scraper) are understood too.
Apify's free plan includes $5 of credit every month, which covers about 2,200 jobs at today's Free plan price ($2.25 per 1,000 jobs, no start fee). From 14 October 2026 the same credit covers about 990 jobs ($5.00 per 1,000 plus a $0.005 start fee per run). See Pricing below.
Copy to your AI assistant
themineworks/ats-jobs on Apify. Reads open jobs live from company career sites on Greenhouse, Lever, Ashby and Workday and returns one row per job with title, location, department, employment type, remote flag, posting date, URL and description. Call ApifyClient("TOKEN").actor("themineworks/ats-jobs").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required in practice: companies (string[] of slugs such as "stripe" or career page URLs; Workday needs its full careers URL) or boards (list of {"ats": "greenhouse"|"lever"|"ashby"|"workday", "slug": ...}). Optional filters, applied before billing: titleKeywords (string[]), postedWithinDays (1 to 365), locationFilter (text), departmentFilter (text), remoteOnly (default false). Optional: maxJobsPerCompany (default 500, max 2000, counted after filters), includeDescription (default false; full text plus description_html, otherwise 500 characters). Rows with _type "summary", "error" or "info" are run reports and are never billed. Full spec: GET https://api.apify.com/v2/acts/themineworks~ats-jobs/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- One schema for four systems.
ats,company_slug,job_id,title,location,department,employment_type,remote,url,description,posted_atand more, whether the job came from Greenhouse, Lever, Ashby or Workday. - Five filters, all applied before billing: title keywords (any of several words or phrases, not case sensitive), posted within N days, location text, department text, and remote only.
- The cap counts matching jobs.
maxJobsPerCompany(up to 2,000) counts jobs after your filters, and paging stops once it is met. With filters on, a paged board is read up to 2,000 postings deep to find matches. - Full descriptions on request. Off by default (the text is cut to 500 characters); on, you get the full plain text and the raw HTML in
description_html. - Polite and resilient. Requests to the same system are spaced 500 ms apart, rate limits are retried after 5, 15 and 30 seconds, a system that fails 3 times in a row is skipped for the rest of the run, and the run ends cleanly before its timeout with a summary row.
How to use it
Basic: every open job at a few companies
{"companies": ["stripe", "https://jobs.lever.co/palantir"],"maxJobsPerCompany": 200}
Workday employers
{"companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"titleKeywords": ["software engineer"],"maxJobsPerCompany": 50}
Workday always needs its careers link: the wd5 number and the site name differ for every employer and cannot be guessed from the company name. Workday lists carry no department, description or employment type; turn on includeDescription for the last two, at one extra request per delivered job.
Sales signals: who is hiring for your buyer's role
{"companies": ["stripe", "notion", "https://jobs.ashbyhq.com/ramp"],"titleKeywords": ["security engineer", "head of security", "ciso"],"postedWithinDays": 14,"maxJobsPerCompany": 20}
A company that just opened security roles has budget and a problem to solve. Schedule it weekly with postedWithinDays: 7 to see only new openings.
Remote roles for a job board or newsletter
{"companies": ["stripe", "https://jobs.ashbyhq.com/ramp", "https://jobs.lever.co/palantir"],"remoteOnly": true,"includeDescription": true,"maxJobsPerCompany": 100}
remote is true when the system marks the job remote, a listed location says remote, or the title does.
Competitor hiring by team
{"companies": ["stripe"],"departmentFilter": "Engineering","locationFilter": "London","maxJobsPerCompany": 500}
Count rows by department and location each month to see which teams a competitor is growing and where. Workday boards publish no department, so with departmentFilter set they are skipped for free.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
companies | array of strings | none (form prefill: stripe, a Ramp Ashby link and a Palantir Lever link) | Company slugs or career page links. Duplicates are dropped. |
titleKeywords | array of strings | none (form prefill: engineer) | Keep jobs whose title contains at least one of these, not case sensitive. engineer also matches Engineering Manager. |
postedWithinDays | integer (1 to 365) | none | Keep jobs posted in the last N days. Jobs whose board gives no usable date are kept and marked posted_at_known: false. |
locationFilter | string | none | Keep jobs whose location contains this text, such as Remote, London or United States. |
departmentFilter | string | none | Keep jobs whose department or team contains this text, such as Engineering. Workday companies are skipped (free) when set. |
remoteOnly | boolean | false | Keep only jobs marked or described as remote. |
maxJobsPerCompany | integer (1 to 2,000) | 500 (form prefill: 20) | Most jobs delivered per company, counted after filters. Also the most you can be billed per company. |
includeDescription | boolean | false | Full description as plain text plus description_html. Off cuts the text to 500 characters. On Workday it adds one request per delivered job. |
boards | array of objects | [] (form prefill: the NVIDIA Workday board) | Board specs {"ats": "...", "slug": "..."} with ats one of greenhouse, lever, ashby or workday. For Workday the slug is the full careers URL. |
"Form prefill" values fill the Console form for you but are not defaults: an API call that leaves maxJobsPerCompany out gets 500.
The run uses 512 MB of memory and a 300 second timeout by default. For long company lists, raise the timeout in the run options; if a run gets close to it, it stops cleanly, keeps every job delivered and says ended_on_deadline: true in the summary.
What data do you get?
One row per job. Fields with no value are left out of the row rather than sent as null.
Where it came from: ats (greenhouse, lever, ashby or workday), company_slug (the board's slug, or the Workday tenant name), job_id (the system's own job ID; the requisition ID on Workday), url (the public job posting).
The job: title (stray spaces removed), location (as the board shows it), department (department or team; an empty string on Workday), employment_type (full-time, part-time, contract or intern, when the system exposes it), remote.
The text: description (plain text, cut to 500 characters unless includeDescription is on), description_html (only with includeDescription on).
Dates: posted_at (first published on Greenhouse, created on Lever, published on Ashby, posting day on Workday), posted_text (Workday only: the age phrase such as "Posted Today"), posted_at_known (false when the board gave no usable date), updated_at (when the system provides one), scraped_at.
A company that cannot be read gets one _type: "error" row with the reason; for a slug that exists nowhere, it lists what each of the three systems answered. Every run ends with a _type: "summary" row (companies attempted, succeeded, with no matching jobs, not found and failed; jobs delivered, filtered out and skipped as duplicates; jobs per system; whether the run stopped on its deadline or budget) and, when jobs were delivered, a _type: "info" row. None of these rows are billed.
Things to know
- Four systems only. A careers page on another system, or a custom page such as
stripe.com/jobs, is not read; pass the company's Greenhouse, Lever, Ashby or Workday slug or link instead. EU hosted boards (job-boards.eu.greenhouse.io,jobs.eu.lever.co) are not supported. - A slug must match the board.
stripeworks because Stripe's board isboards.greenhouse.io/stripe. A name with spaces, such asScale AI, usually does not: in a September run,scalewas not found on any of the three systems and returned one free error row. When unsure, paste the careers link. - Workday lists are thin. A job in several places shows as "6 Locations", which the location filter cannot see inside. Workday has no department, and its description and employment type come only with
includeDescriptionon. - The location filter reads the main location text. Extra locations that Lever and Ashby list separately count toward the remote flag, not the location filter.
- The same role can appear more than once. Some employers post one role several times with different job IDs (Stripe had two "Abuse Investigator" postings in Dublin on 2 October). Each is a separate posting, delivered and charged once.
- Jobs come in the board's own order, not newest first. Use
postedWithinDayswhen you want only recent roles.
Stable fields for automations
These 11 fields were present in every job row from the current build that we sampled (23 jobs from our 2 October test run and an Apify run the same day, across all four systems):
| Field | What it holds |
|---|---|
ats | greenhouse, lever, ashby or workday |
company_slug | Board slug or Workday tenant |
job_id | The system's job ID; the deduplication key with ats and company_slug |
title | Job title |
location | Location text as shown |
department | Department or team (empty on Workday) |
remote | true or false |
url | Public job posting link |
description | Plain text description (empty on Workday unless includeDescription is on) |
posted_at_known | Whether the board gave a usable posting date |
scraped_at | ISO timestamp when the row was captured |
We will not rename these fields. New fields may be added over time; existing ones keep their names.
Output examples
Real rows, with descriptions trimmed. The first three are from our 2 October test run of the live code.
Ashby (Ramp), found from its careers link:
{"ats": "ashby","company_slug": "ramp","job_id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","location": "New York, NY (HQ)","department": "Engineering","employment_type": "full-time","remote": true,"url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","description": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends…","posted_at": "2026-04-07T17:12:35.753+00:00","updated_at": "2026-04-07T17:12:35.753+00:00","scraped_at": "2026-10-02T15:30:16.347Z","posted_at_known": true}
Greenhouse (Stripe), found from the slug stripe:
{"ats": "greenhouse","company_slug": "stripe","job_id": "8172503","title": "Abuse Research Engineer","location": "Remote from the US","department": "8611 Security Analytics","remote": true,"url": "https://stripe.com/jobs/search?gh_jid=8172503","description": "Who we are\n\nAbout Stripe\n\nStripe is a financial infrastructure platform for businesses…","posted_at": "2026-09-09T10:52:09-04:00","updated_at": "2026-09-25T16:45:00-04:00","scraped_at": "2026-10-02T15:30:32.080Z","posted_at_known": true}
Workday (NVIDIA), with includeDescription off, so the description and employment type are empty:
{"ats": "workday","company_slug": "nvidia","job_id": "JR2022543","title": "Physical Design Engineer, Synthesis and Implementation","location": "US, MA, Westford","department": "","remote": false,"url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-MA-Westford/Physical-Design-Engineer--Synthesis-and-Implementation_JR2022543-1","description": "","posted_at": "2026-10-02","posted_text": "Posted Today","scraped_at": "2026-10-02T15:30:27.937Z","posted_at_known": true}
Lever (Palantir), from an Apify run on 10 September by an earlier build, which did not yet add posted_at_known:
{"ats": "lever","company_slug": "palantir","job_id": "ac978161-6f46-4f6b-ad9e-a258e642751c","title": "Administrative Business Partner","location": "London, United Kingdom","department": "Administrative","employment_type": "full-time","remote": false,"url": "https://jobs.lever.co/palantir/ac978161-6f46-4f6b-ad9e-a258e642751c","description": "A World-Changing Company\n \nPalantir builds the world’s leading software for data-driven decisions and operations…","posted_at": "2024-03-25T21:50:16.463Z","scraped_at": "2026-09-10T18:40:03.124Z"}
The summary row from the 2 October test run (never charged; charged_for is 0 only because local test runs are not billed):
{"_type": "summary","companies_attempted": 4,"companies_succeeded": 4,"companies_no_matching_jobs": 0,"companies_not_found": 0,"companies_failed": 0,"unsupported_urls": 0,"jobs_scraped": 20,"jobs_filtered_out": 114,"jobs_duplicate_skipped": 0,"jobs_incomplete_skipped": 0,"charged_for": 0,"by_ats": { "greenhouse": 5, "lever": 5, "ashby": 5, "workday": 5 },"transport_guards": {},"ended_on_deadline": false,"stopped_on_budget": false,"scraped_at": "2026-10-02T15:30:32.110Z"}
An error row for a slug that is on none of the three systems (10 September, free):
{"_type": "error","company": "scale","reason": "not found on Greenhouse/Lever/Ashby","details": ["greenhouse: HTTP_404", "lever: HTTP_404", "ashby: HTTP_404"]}
Pricing
Pay per event: you pay for each job delivered to your dataset. A price change is already scheduled, so both the current and the new prices are shown.
Today (since 30 August 2026), no start fee:
| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
job-scraped, per job | $0.00225 | $0.0015 | $0.0012 | $0.001 |
job-scraped, per 1,000 jobs | $2.25 | $1.50 | $1.20 | $1.00 |
From 14 October 2026 at 21:00 UTC (15 October, 02:30 IST):
| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
job-scraped, per job | $0.005 | $0.0042 | $0.0036 | $0.003 |
job-scraped, per 1,000 jobs | $5.00 | $4.20 | $3.60 | $3.00 |
apify-actor-start, per run | $0.005 per GB of run memory, minimum one event | same | same | same |
The start fee, exactly. From 14 October, Apify's apify-actor-start event is charged once when a run starts, at $0.005 for each GB of memory the run uses, with a minimum of one event. This actor runs on 512 MB by default, so a default run will pay the minimum, $0.005. Until then there is no start fee.
Worked examples on the Free plan: 20 jobs each from 10 companies (200 jobs) cost $0.45 today, and $1.00 plus $0.005 from 14 October. On Gold, 1,000 jobs cost $1.00 today and $3.00 plus $0.005 from 14 October. Because filters run before billing, a run that reads 500 postings and keeps the 12 that match costs 12 jobs.
Never charged: jobs removed by your filters, duplicate postings of the same job in one run, companies that are not found, boards with no open jobs, unsupported links, failed requests, and the error, summary and info rows.
The Pricing tab on this page always shows the rate for your own plan and the date of any scheduled change; if it and these tables ever differ, the Pricing tab is right.
FAQ
Which companies can I read?
Any company whose careers page runs on Greenhouse, Lever, Ashby or Workday, which covers a large share of tech companies and many large employers. Open the company's careers page and click a job: if the address is on greenhouse.io, lever.co, ashbyhq.com or myworkdayjobs.com, this actor can read it.
How do I find a company's slug?
Open a job on its careers page. On boards.greenhouse.io, jobs.lever.co or jobs.ashbyhq.com, the word right after the domain is the slug. Or paste the address as it is.
What happens if a company is not found? A plain slug costs at most 3 quick lookups (Greenhouse, Lever, Ashby), is never charged, and gives one error row showing what each system answered. The rest of the run continues.
Is this live data or a cached database? Live. Every run asks each company's board at run time. The trade off is that you name the companies; it does not search every employer in the world.
Can I get only jobs posted in the last 7 days?
Yes, set postedWithinDays to 7. Jobs whose board gives no usable date (Workday shows "Posted 30+ Days Ago" for older roles) are kept and marked posted_at_known: false, so you can drop them yourself.
Do I need an account, cookies or an API key? No. You need only an Apify account. The actor reads the public job feeds these systems serve to any visitor of a careers page, with no login.
Does it use a proxy? No. These are public job feeds meant to be read, so requests go out directly from Apify, spaced out per system and backed off on rate limits.
Can I run it on a schedule?
Yes. Save your input as a task, then in Apify Console open Schedules, choose Create new and pick a time or a cron expression such as 0 6 * * 1 (Mondays at 6am). A weekly run with postedWithinDays: 7 returns only the roles opened that week. Remove repeats downstream by ats, company_slug and job_id.
How do I export the data?
From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. Drop rows that have a _type field to keep jobs only.
Can I use it from Claude, ChatGPT or another AI assistant?
- Connector URL:
https://mcp.apify.com/?tools=themineworks/ats-jobs. - Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http ats-jobs "https://mcp.apify.com/?tools=themineworks/ats-jobs".
Is it legal to scrape public job postings? The actor reads only public job feeds that Greenhouse, Lever, Ashby and Workday serve to anyone who opens a careers page, and it does not log in or get past any wall. A posting can name a recruiter or hiring manager, which is personal data, so you are responsible for how you store and use it under laws such as GDPR and CCPA. Greenhouse, Lever, Ashby and Workday are trademarks of their owners; this actor is independent of them. This is general information, not legal advice.
Integrations
- Google Sheets: export a run to a sheet, or append each scheduled run's new jobs.
- Make, Zapier and n8n: use the Apify app or node to start a run and post new roles to Slack, a CRM or an ATS.
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and client libraries: start runs and read datasets from Python, JavaScript or any HTTP client. The "Copy to your AI assistant" block above has the exact call.
- MCP clients: Claude, ChatGPT, Cursor, VS Code and other MCP clients can call the actor through
https://mcp.apify.com.
More from The Mine Works
Jobs and hiring
- Foundit Monster India Jobs
- Hirist Jobs Scraper
- India Jobs MCP
- Naukri Jobs Scraper
- Shine.com Jobs Scraper
- Internshala Scraper
- Indeed Jobs Scraper
- Instahyre Jobs Scraper
- CutShort Jobs Scraper
- Apna Jobs Scraper
- LinkedIn Jobs Scraper
- Recruiting & Jobs MCP
Social media and video
Leads and business directories
Marketing, SEO and reviews
Real estate
Science, health and government data
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools
Support
A board that should work but does not, or a field you need? Open an issue on the Issues tab of this page with the company link and we will reply there. To ask for another applicant tracking system or data source, email dmineworks@gmail.com.
Career Site Jobs Scraper reads open roles live from Greenhouse, Lever, Ashby and Workday career sites into one clean schema, and charges only for the jobs that pass your filters.

