Career Site Jobs Scraper
Pricing
$1.50 / 1,000 job results
Career Site Jobs Scraper
Scrape open jobs straight from company career sites on Lever, Ashby, SmartRecruiters, Workday and Workable: title, company, location, remote flag, salary, department, posted date, full description and apply link. Filters and only-new mode for daily feeds.
Career Site Jobs Scraper collects every open job straight from company career sites that run on Lever, Ashby, SmartRecruiters, Workday and Workable. Give it the careers URLs of the companies you care about and it returns one clean row per job: title, company, location, remote flag, workplace type, employment type, department, salary range (when the company publishes one), posted date, full description and the direct apply link.
People find this actor when they search for a Lever jobs API, Ashby jobs scraper, Workday jobs scraper, SmartRecruiters API, Workable jobs export, career page scraper or a company job listings API. It reads the same public job-board feeds that power each company's own careers page, so the data is first-hand: no job-board middlemen, no reposts, no expired ads.
- Five applicant tracking systems (ATS) in one actor, with one output format.
- Mix companies from different ATS in a single run.
- Filters for title, location, department, remote and posting date.
- "Only new jobs" mode for daily or hourly schedules.
- No login, no cookies, no browser: fast and cheap.
This actor is independent and is not affiliated with, endorsed by or connected to Lever, Ashby, SmartRecruiters, Workday or Workable. It only reads job postings that companies publish openly on their public career sites. Greenhouse boards are covered by our separate Greenhouse Jobs Scraper.
What data you get
Every job is one dataset row with the same fields, whatever the source ATS. Field names follow the ones common job-posting APIs use (title, organization, date_posted, url, description_text, source), so you can switch over without changing your pipeline.
| Field | Type | Description |
|---|---|---|
id | text | The job's ID on its career site (Lever/Ashby UUID, SmartRecruiters posting ID, Workday job ID, Workable shortcode). |
title | text | Job title as the company wrote it. |
organization | text | Company name from the career site. On Workday this is the hiring legal entity, e.g. Salesforce UK Limited. |
organization_url | text | The company's job board URL. |
url | text | Public job page. |
apply_url | text | Direct application link. |
date_posted | timestamp | When the job was published (ISO 8601, UTC). |
location | text | Primary location as written on the board. |
locations | text[] | All locations listed for the job. |
countries | text[] | Country names (ISO codes such as GB are converted to United Kingdom). |
remote_derived | boolean | true when the board marks the job remote, or the location says remote. |
workplace_type | text | Remote, Hybrid, On Site and similar, when the board publishes it. |
employment_type | text[] | Full-time, Part-time, Contract, Internship and so on. |
departments | text[] | Department and team names. |
salary | object or null | {min, max, currency, unit, text} when the company publishes pay; null otherwise. |
description_text | text | Full job description as plain text. |
description_html | text | Full job description as HTML. |
source | text | lever, ashby, smartrecruiters, workday or workable. |
source_type | text | Always ats. |
source_domain | text | Domain of the career site, e.g. jobs.lever.co or nvidia.wd5.myworkdayjobs.com. |
company_slug | text | The company's board name on that ATS, e.g. palantir or nvidia/NVIDIAExternalCareerSite. |
scrapedAt | timestamp | When the row was collected. |
What each ATS publishes differs a little. In our test runs (over 2,000 jobs) the core fields (title, company, URLs, date, location, country, employment type, description) were filled on every row. Salary appears when the employer publishes it, which is common on Ashby and Lever boards for US roles. Workday boards don't publish departments, workplace type or pay in their public feed, so those fields are empty for Workday jobs.
How to use it
- Open the company's careers page and copy its job board URL. You can recognise the ATS from the address:
- Lever:
https://jobs.lever.co/<company> - Ashby:
https://jobs.ashbyhq.com/<company> - SmartRecruiters:
https://careers.smartrecruiters.com/<company>orhttps://jobs.smartrecruiters.com/<company> - Workday:
https://<company>.wd5.myworkdayjobs.com/<site>(thewdnumber varies) - Workable:
https://apply.workable.com/<company>
- Lever:
- Paste one or more URLs into Career sites. You can also write
lever:spotify,ashby:notion,smartrecruiters:BoschGrouporworkable:huggingface, or just a bare name likespotifyand the actor looks it up on Lever, Ashby, SmartRecruiters and Workable. - Optionally narrow the jobs with Title contains, Title excludes, Location contains, Department contains, Remote jobs only or Posted within (days).
- Set Max jobs (total) and, if you like, Max jobs per company.
- Click Start. Results appear in the Output tab as a table and can be downloaded as JSON, CSV, Excel, XML or HTML, or read through the API.
Input examples
Several companies on different ATS, software roles only (the Soft:* prefix style used by other job APIs works too):
{"companies": ["https://jobs.lever.co/spotify","https://jobs.ashbyhq.com/ramp","https://apply.workable.com/huggingface"],"titleSearch": ["Soft:*"]}
London jobs from three companies, using the full "City, Region, Country" location form (it also matches boards that just write "London"):
{"companies": ["lever:palantir", "ashby:notion", "https://careers.smartrecruiters.com/BoschGroup"],"locationSearch": ["London, England, United Kingdom"],"maxItemsPerCompany": 40}
A large Workday career site, only jobs posted in the last 7 days:
{"companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"postedWithinDays": 7,"maxItems": 200}
Remote jobs only, without descriptions (fastest and smallest output):
{"companies": ["https://jobs.lever.co/palantir", "https://jobs.ashbyhq.com/ramp", "https://apply.workable.com/huggingface"],"remoteOnly": true,"includeDescription": false}
Engineering department only, for a daily feed that returns just new jobs:
{"companies": ["https://jobs.lever.co/spotify", "https://jobs.ashbyhq.com/notion"],"departmentSearch": ["engineering"],"onlyNew": true}
Output example
Real rows from a test run (descriptions shortened here):
[{"id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","organization": "Ramp","organization_url": "https://jobs.ashbyhq.com/ramp","url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","apply_url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","date_posted": "2026-04-07T17:12:35.753Z","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],"countries": ["United States"],"remote_derived": false,"workplace_type": "Hybrid","employment_type": ["Full-time"],"departments": ["Engineering", "Backend"],"salary": { "min": 211400, "max": 290600, "currency": "USD", "unit": "YEAR", "text": "$211.4K – $290.6K • Offers Equity" },"description_text": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams...","description_html": "<h1><strong>About Ramp</strong></h1>...","source": "ashby","source_type": "ats","source_domain": "jobs.ashbyhq.com","company_slug": "ramp","scrapedAt": "2026-11-09T23:09:01.000Z"},{"id": "f480ab0507ff101501f6e1217d790000","title": "Senior Network Solution Engineer (Weekend Coverage)","organization": "NVIDIA USA","organization_url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite","url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Network-Solution-Engineer--Weekend-Coverage-_JR2020101","apply_url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Network-Solution-Engineer--Weekend-Coverage-_JR2020101/apply","date_posted": "2026-11-05T00:00:00.000Z","location": "US, CA, Santa Clara","locations": ["US, CA, Santa Clara", "US, MA, Westford", "US, TX, Austin", "US, NC, Durham", "US, WA, Redmond", "US, NY, New York"],"countries": ["United States"],"remote_derived": false,"workplace_type": null,"employment_type": ["Full-time"],"departments": [],"salary": null,"description_text": "The NVIDIA Experience (NVEX) Solutions Engineering team is looking for a senior Computer or Software Engineer...","source": "workday","source_type": "ats","source_domain": "nvidia.wd5.myworkdayjobs.com","company_slug": "nvidia/NVIDIAExternalCareerSite"},{"id": "ab7e3425-81d5-4705-a7b5-cd60c8a45cdb","title": "Backend Software Engineer - Application Development","organization": "Palantir Technologies","url": "https://jobs.lever.co/palantir/ab7e3425-81d5-4705-a7b5-cd60c8a45cdb","apply_url": "https://jobs.lever.co/palantir/ab7e3425-81d5-4705-a7b5-cd60c8a45cdb/apply","date_posted": "2024-03-11T21:04:42.166Z","location": "New York, NY","countries": ["United States"],"remote_derived": false,"workplace_type": "Hybrid","employment_type": ["Full-time"],"departments": ["Dev"],"source": "lever"}]
Use cases
- Job boards and niche job sites: fill your board with first-hand postings from the companies in your niche, with real apply links and fresh dates.
- Recruiting and sourcing: watch target companies for new openings in the roles you place, and react the day they are posted.
- Sales intelligence: hiring is a buying signal. A company opening five data-engineering roles is likely buying data tools; feed new postings into your CRM.
- Market and salary research: compare published pay ranges by role, seniority and city across companies.
- Competitor tracking: see which teams your competitors are growing, where they are opening offices and which skills they need.
- Job seekers and career tools: build alerts for remote roles or specific titles across a list of dream companies.
- AI and data projects: collect clean job descriptions for skills extraction, classification or embeddings.
Run it on a schedule and get only new jobs
- Save your input as a task in Apify Console (the Save as a new task button).
- Turn on Only new jobs (
"onlyNew": true). The actor remembers the IDs of jobs it has already returned, for 180 days, in a key-value store namedcareer-site-jobs-seenin your account. Later runs skip them, so each run returns only jobs posted (or reopened) since the last one. - Open Schedules, create a schedule (for example daily at 07:00 or every 6 hours) and attach the task.
- Add an integration (webhook, Slack, Google Sheets, email via Zapier or Make) to receive the new jobs automatically.
To start over and get every job again, run once with Only new jobs off, or delete the career-site-jobs-seen store.
Integrations
API (one call, returns the jobs):
POST https://api.apify.com/v2/acts/daedal_quintuplet~career-site-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKENContent-Type: application/json{"companies": ["https://jobs.lever.co/spotify", "ashby:notion"], "titleSearch": ["engineer"]}
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("daedal_quintuplet/career-site-jobs-scraper").call(run_input={"companies": ["https://jobs.lever.co/spotify", "ashby:notion"], "titleSearch": ["engineer"]})for job in client.dataset(run["defaultDatasetId"]).iterate_items():if job.get("error"):continueprint(job["source"], "|", job["organization"], "|", job["title"], "|", job["location"], "|", job["url"])
JavaScript / Node.js (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('daedal_quintuplet/career-site-jobs-scraper').call({companies: ['https://jobs.lever.co/spotify', 'ashby:notion'],titleSearch: ['engineer'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.filter((job) => !job.error).forEach((job) => console.log(job.organization, '|', job.title, '|', job.url));
No-code tools:
- n8n: use the Apify node, choose Run actor, enter
daedal_quintuplet/career-site-jobs-scraperand your input JSON, then read the dataset items. - Make: use the Apify app's Run an Actor module, then Get Dataset Items.
- Zapier: use the Apify integration's Run Actor action, or trigger a Zap when a scheduled run finishes.
- Google Sheets, Slack, webhooks: connect them from the actor's Integrations tab in Apify Console.
AI agents (MCP): the actor is available through Apify's MCP server (https://mcp.apify.com). Add daedal_quintuplet/career-site-jobs-scraper as a tool and Claude, Cursor or any MCP client can pull jobs on request. Every input field has a plain description and an example so the agent can fill it in.
Pricing
Pay per result: $1.50 per 1,000 jobs ($0.0015 per job). Error rows are free. A company with 300 open jobs costs $0.45. Platform usage is included in the price.
Limits and error items
- Supported career sites: Lever, Ashby, SmartRecruiters, Workday and Workable public job boards. Other career sites (iCIMS, Taleo, SuccessFactors, custom pages) are not supported; Greenhouse has its own actor.
- Speed: Lever and Ashby return a whole board in one request, so hundreds of jobs take seconds. SmartRecruiters, Workday and Workable need one extra request per job for the description; a 2,000-job Workday site with a location filter takes about 3 minutes. Turn off Include full description for faster SmartRecruiters and Workable runs.
- Workday title filters are passed to Workday's own keyword search (one search per term) and then checked again on the title, so big Workday sites stay fast. Department filters drop Workday jobs, because Workday boards don't publish departments.
- Location matching is a case-insensitive "contains" match on the job's locations and countries. A "City, Region, Country" term also matches the city alone.
- Error items: instead of failing the run, the actor adds a row with
"error": trueand amessagewhen an input isn't a supported career site, a board isn't found, a board has no open jobs, or no job matches your filters. Error rows are never charged. Filter them out witherror != true. - Restarts: if Apify moves the run to another server mid-run, it resumes where it stopped without repeating jobs or charges.
- Only jobs the company publishes publicly are returned; internal-only postings are not visible.
FAQ
Which companies can I scrape? Any company whose careers page is hosted on Lever, Ashby, SmartRecruiters, Workday or Workable. Thousands of companies use these systems, from startups (Ashby, Lever, Workable) to large enterprises (Workday, SmartRecruiters).
How do I find a company's job board URL?
Open the company's careers page and click any job. The address bar shows the ATS domain (jobs.lever.co, jobs.ashbyhq.com, myworkdayjobs.com, smartrecruiters.com, apply.workable.com). Paste the board part of that URL.
Is this a database of all jobs? No. It reads live data from the career sites you list, at the moment you run it. You choose the companies; the data is always current.
Why is salary empty for some jobs? The actor returns pay only when the employer publishes it. Many US postings include a range (often required by state pay-transparency laws); many others don't.
Does it return the full description?
Yes, as plain text (description_text) and HTML (description_html). Turn off Include full description if you only need titles and links.
Can I mix companies from different ATS in one run?
Yes. Every row has the same fields, and source tells you where it came from.
How fresh is the data? Live: each run reads the career sites directly, so a job posted a minute ago is included and closed jobs disappear.
Is it legal to scrape job postings? The actor only reads job postings that companies publish openly for anyone to see, without logging in. Job listings are business information, not personal data. Check the rules that apply to your use case and jurisdiction.
Related actors
- Greenhouse Jobs Scraper: every open job from Greenhouse job boards, with salary ranges.
- Google Jobs Scraper (US & UK): job listings from Google's job search, with apply links from many sites.
- Seek AU Job Scraper: job listings from Seek Australia.
- Seek NZ Job Scraper: job listings from Seek New Zealand.
- Google Trends Scraper (timeseries + regions + related): interest over time, by region, and related topics and queries.
- Google Images Scraper: image results with source pages and sizes.