ATS Jobs Scraper
Pricing
from $0.70 / 1,000 job-details
ATS Jobs Scraper
Scrape jobs from any company careers page. It recognises Greenhouse, Lever, Ashby, Workday, Oracle HCM, SuccessFactors, Taleo, Mercury xRM and SmartRecruiters from the URL. Get title, location, department, dates and the full advert. Export to CSV, JSON or Excel.
Pricing
from $0.70 / 1,000 job-details
Rating
0.0
(0)
Developer
BonCross API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
What is ATS Jobs Scraper?
You have a list of companies and you want their open jobs. Some run Greenhouse, some Workday, one has a careers site with its own branding and no clue what's underneath. ATS Jobs Scraper takes the careers page URL for each, works out which of nine recruitment platforms is behind it, and returns the jobs in one shape whichever platform they came from.
So you paste the page you'd send a candidate to, and you never have to know which system an employer uses.
Why it earns its place:
- Nine platforms, one row shape. Greenhouse, Lever, Ashby, Workday, Oracle HCM, SAP SuccessFactors, Oracle Taleo, Mercury xRM and SmartRecruiters. A pipeline written for one reads them all.
- It reads whole boards. 16 careers pages across all nine platforms, taken in full with every advert, returned 6,110 rows in about 9 minutes with none missing.
- It handles long lists. 110 careers pages at 20 jobs each returned 1,875 rows in 116 seconds, about 970 rows a minute.
- The advert text has been checked at the source. In our release run, 18 of 18 checkable adverts matched the employers' own pages.
- A page it can't read doesn't sink the run. You get a row saying the page wasn't recognised, and the other companies carry on.
BonCross Verified means we tested this actor against the live site before release and kept the record:
- 42 of 42 live checks on its inputs and filters passed on 7 October 2026
- 16 boards run the same day across nine hiring platforms: 167 jobs, 1 error row
- 18 of 18 checkable adverts matched their own pages
- Charges matched the rows: 1 start, 16 boards, 167 jobs
Which careers pages work?
Paste the careers page as you find it. These are recognised from the URL:
| Platform | A careers page looks like |
|---|---|
| Greenhouse | job-boards.greenhouse.io/company |
| Lever | jobs.lever.co/company |
| Ashby | jobs.ashbyhq.com/company |
| Workday | company.wd3.myworkdayjobs.com/en-US/Careers |
| Oracle HCM | company.fa.em5.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001/jobs |
| SAP SuccessFactors | company.jobs2web.com/search/ |
| Oracle Taleo | company.taleo.net/careersection/external/jobsearch.ftl |
| Mercury xRM | careers.company.com/jobs/vacancy/find/results/ or careers.company.com/jobs/rss |
| SmartRecruiters | careers.smartrecruiters.com/Company or jobs.smartrecruiters.com/Company |
An employer's own branded careers site (for example jobs.tfl.gov.uk/search/) is recognised from the page itself where it runs on SAP SuccessFactors, or where it links its adverts to SmartRecruiters, Greenhouse, Ashby or Lever.
If all your companies are on one platform, the single-platform actors have a simpler form: Greenhouse, Lever, Ashby and Workday.
What data can you extract from a careers page?
| Field | Field |
|---|---|
| 💼 Job title | 🏢 Employer |
| 📍 Location | Department or team |
| 📄 Full advert text | Advert HTML, optional |
| Contract type | Remote flag |
| 📅 Posted date | 🔗 Advert link |
| 💷 Salary from and to | Salary currency and period |
| Job id | Which platform it came from |
| Employer board name | The careers page it came from |
| When the row was collected | Last edited date, where published |
| Posting date as the site wrote it | Every location a job is open in |
| 🏠 On-site, hybrid or remote, where published |
How to scrape a careers page
- Create a free Apify account and open ATS Jobs Scraper.
- Paste one careers page URL per company.
- Narrow by title, location or work type if you don't want the whole board.
- Press Start.
- Download the jobs as Excel, CSV or JSON, with an
atscolumn telling you which platform each came from.
⬇️ Input
All you have to supply is the URLs. For a long list, use Start URLs to load them from a file or a Google Sheet.
"Max jobs per careers page" caps each employer and "Max jobs for the whole run" caps the run. Both default to 0, which reads each board in full.
One company
{"careersUrls": ["https://job-boards.greenhouse.io/stripe"],"maxItemsPerBoard": 200}
Several companies, engineering roles only
{"careersUrls": ["https://job-boards.greenhouse.io/stripe","https://jobs.lever.co/palantir","https://jobs.ashbyhq.com/ramp"],"titleIncludes": ["engineer", "developer"],"maxItems": 500}
Hybrid or remote jobs only
{"careersUrls": ["https://jobs.lever.co/palantir"],"workplaceTypes": ["Hybrid", "Remote"],"includeUnknownWorkplace": false}
Remote jobs from the last seven days, adverts included
{"careersUrls": ["https://jobs.ashbyhq.com/ramp"],"onlyRemote": true,"maxDaysOld": 7,"fetchDetails": true}
A scheduled run that reports only jobs it hasn't reported before
{"careersUrls": ["https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"],"onlyNew": true,"dedupStoreName": "ats-seen","locationIncludes": ["London"]}
How the filters behave on different platforms
Platforms don't all offer the same things, so three inputs need a word.
Keyword uses the platform's own job search on Workday, Oracle HCM, Taleo and SuccessFactors search pages. On Greenhouse it matches the title and advert the way the board's search does. On Lever, Ashby, Mercury xRM and SmartRecruiters it matches job titles. If the link you paste already has a search word in it, that word is kept and your keyword then matches titles only.
Work type keeps jobs whose workplaceType is On-site, Hybrid or Remote. It's applied before any advert is fetched, except on Workday, which states the arrangement on the advert: there each advert is fetched, and billed as a fetched advert, before its job is kept or dropped. A job with no stated arrangement is kept unless you turn off "Keep jobs with no stated work type". If its location or title says remote, it counts as Remote.
A pre-filtered link keeps its filters. Filter a Workday, Greenhouse, Lever or Ashby board on its own page (department, office, location, team, category and so on), copy the link, and those filters apply here the way the board applies them.
The others are simpler:
- "Title must contain" and "Title must not contain" keep or drop a job by words in its title, ignoring case.
- "Location must contain" keeps a job only if its location has one of your words, such as "London". Jobs on a platform that publishes no location are dropped by it.
- "Remote jobs only" keeps jobs the employer marked as remote. A job that says nothing about remote working is dropped, not assumed.
- "Posted within (days)" keeps jobs posted in the last N days. 0 keeps everything.
- "Fetch full job adverts" is on by default. Greenhouse, Lever and Ashby return the advert with the listing. On the other six platforms each job is opened to get it.
- "Include advert text" (on) and "Include advert HTML" (off) choose the advert as plain text, as original HTML, or both. HTML makes rows a lot larger.
For developers
- Keys:
careersUrls,startUrls,maxItemsPerBoard,maxItems,keyword,titleIncludes,titleExcludes,locationIncludes,onlyRemote,workplaceTypes,includeUnknownWorkplace,maxDaysOld,fetchDetails,includeDescription,includeDescriptionHtml,oracleLocationId,onlyNew,dedupStoreName,maxConcurrency,delayMs. onlyNewwith adedupStoreNameskips jobs an earlier run with the same store name returned. Leave the store name empty and nothing is remembered. The store is updated every minute while the run delivers jobs.oracleLocationIdrestricts an Oracle HCM board to one place by Oracle's own location id (London is300000007171591). Empty means the whole board.maxConcurrency(default 8) is how many requests run at once across the run. The default is the fastest level we measured clean. Lower it only if a run reports refusals or errors.delayMs(default 0) is an optional pause before each request.- Several careers pages are read at once and adverts on a page are fetched side by side. Very large Workday boards are read at a steady pace the site accepts. Greenhouse boards are read one at a time, about 2 seconds each on average and up to 18 seconds for the largest.
- Workday boards with more than 2,000 jobs are read group by group (by job family or country, whichever the board offers).
- Rows are saved as they're collected. A run that hits its timeout keeps what it delivered, and a run the platform restarts carries on without delivering or charging any job twice.
⬆️ Output
One row per job, in the same shape for all nine platforms. The Overview view shows title, employer, location, department, posting date, platform and advert link.
{"id": "8172510","url": "https://stripe.com/jobs/search?gh_jid=8172510","title": "Abuse Investigator","company": "Stripe","location": "Seattle, San Francisco, New York City","department": "8611 Security Analytics","employmentType": null,"isRemote": null,"postedAt": "2026-09-09T14:50:29.000Z","updatedAt": "2026-09-25T20:45:00.000Z","postedText": null,"closingAt": null,"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"description": "Who we are\n\nAbout Stripe\n\nStripe is a financial infrastructure platform…","ats": "greenhouse","tenant": "stripe","scrapedAt": "2026-09-26T17:08:44.892Z","careersUrl": "https://job-boards.greenhouse.io/stripe"}
What the less obvious columns mean:
descriptionis the advert as plain text.descriptionHtmlis the board's original HTML and is present only when you ask for it.workplaceTypeisOn-site,HybridorRemotewhere the platform publishes it (Ashby, Lever, SmartRecruiters, Workday adverts and Greenhouse boards that publish it) and absent otherwise.isRemoteis true or false only where the platform says so, and null otherwise. A hybrid job isn't remote unless one of its locations is.postedAtis when the advert was first published, and it's what "Posted within (days)" filters on.updatedAtis when the employer last edited it, where the platform reports that. The two are often months apart: a job edited this week can be one first posted in February.postedTextkeeps the original wording where a platform gives the date in words ("Posted 3 Days Ago").postedAtis null where the platform gives no date, or only a floor such as "Posted 30+ Days Ago".locationsappears where a platform names more than one location for a job, primary first. "Location must contain" matches against all of them.closingAtis kept in the shape for all platforms and is empty on all nine today.detailNoteappears on the rare row whose advert page held no advert, and says so.
How many boards and jobs fit in a run?
It reads a whole careers page unless you cap it. In one run that took five jobs from each of eight careers pages (37 jobs, 23 seconds), the boards behind them held 654 jobs at Stripe, 313 at Palantir, 173 at Freshfields, 147 at Ramp, 64 at Oracle, 57 at Reed Smith and 31 at TfL.
Speed on Apify at default settings, 1 and 2 October 2026:
| Run | Result |
|---|---|
| One careers page, 20 jobs | 20 rows in 1 to 5 seconds (once 13, a slow start) |
| 10 careers pages on all nine platforms, 25 jobs each with adverts | 226 rows in 8 to 11 seconds. Twice 30 to 65 seconds, when one employer's site was that slow to answer a single advert |
| A 1,526-job Workday board, listing only | 1,503 rows in 9 seconds |
| A 1,526-job Workday board with every advert | 1,510 rows in about 6 minutes |
| 16 careers pages in full on all nine platforms, every advert | 6,110 rows in about 9 minutes, none missing |
| 110 careers pages on nine platforms, 20 jobs each with adverts | 1,875 rows in 116 seconds (about 970 rows a minute) |
| Two 2,000+ job Workday boards, 600 adverts each | 1,200 rows in 81 seconds, none refused |
Adding employers adds little time. At the bulk rate, one run inside the default one-hour timeout handles roughly 3,000 careers pages at 20 jobs each. An input of only Greenhouse boards fits about 1,700 boards an hour.
The job id, link, title, employer, posting date, advert text and platform were on every row of the eight-page run. Location and department depend on the platform, and salary appears only where the employer chose to publish it.
How much does it cost to scrape careers pages?
| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
actor-start, per run | $0.001 | $0.001 | $0.001 | $0.001 |
board-scanned, per careers board read | $0.0002 | $0.0002 | $0.0002 | $0.0002 |
job-detail, per job with the full advert | $0.001 | $0.0009 | $0.0008 | $0.0007 |
job-listed, per job without the full advert | $0.0005 | $0.00045 | $0.0004 | $0.00035 |
url-checked, per page that answered with no supported job board | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
Enterprise plans pay the Business price.
$1.00 per 1,000 jobs with the full advert on the Free plan and $0.70 on Business, whichever of the nine platforms they come from. Jobs without the advert are $0.50 per 1,000 on the Free plan, $0.35 on Business. None of these platforms needs a proxy, so there are no proxy charges, and platform usage is included.
- 500 jobs with full adverts from one careers page: $0.001 + $0.0002 + 500 × $0.001 = $0.5012 ($0.3512 on Business).
- Those 500 jobs without the advert: $0.001 + $0.0002 + 500 × $0.0005 = $0.2512 ($0.1762 on Business).
How a job is billed, once each:
job-detailwhen the row has the full advert. On Greenhouse, Lever and Ashby that's whenever advert text or HTML is included (text is on by default). On the other six it's when the job's advert was opened. An opened advert is billed even if "Posted within (days)" then drops the row.job-listedfor a job delivered without its full advert.board-scannedonce per careers board read, andurl-checkedfor a page that answered but has no supported job board. A URL that never answers is free.
The $5 of credits Apify's Free plan gives you each month covers about 4,900 jobs with full adverts, at 100 jobs a careers page.
Limitations
- Nine platforms, no more. A careers page built by hand, or on a platform not in the table above, returns a row saying it wasn't recognised.
- SmartRecruiters boards are per company id. Some large employers post under several, one per legal entity. Paste the SmartRecruiters page for each one you want. An employer's own branded site is read as the first of its boards that it links to.
- Location and department are only as good as the employer's listing. Mercury xRM and Taleo boards often publish no location beside the job list. The advert's text often names one.
- Some platforms show an advert only in the visitor's browser. Where the advert isn't available, the row keeps its listing fields and has a
detailNote. - Salary is a minority. It appears only where the employer published one.
- Relative dates. Some platforms give "Posted 3 Days Ago", so the date is derived and the wording kept beside it. "Posted 30+ Days Ago" is a floor, not a date, and leaves
postedAtempty. A few boards publish no posting date at all. - Keyword reach varies. It matches title and advert text on Workday, Oracle HCM, Taleo, Greenhouse and SuccessFactors (on a board's search page), and job titles on Lever, Ashby, Mercury xRM and SmartRecruiters. SmartRecruiters' own search isn't used: in a check it missed jobs with the word in their title and returned jobs with the word nowhere in title or advert.
- Work type is known only where it's stated: Lever, Ashby, SmartRecruiters, Workday adverts that have it, Oracle HCM where set, and Greenhouse boards with a work-type field.
- Very large Workday boards. Above 2,000 jobs a board is read group by group, and a job the board files under no group could be missed.
- No applications. You can't submit one through this actor.
FAQ
How do I know which platform a company uses?
You don't have to. Paste the careers page and the actor works it out. The ats column in the results tells you afterwards.
What happens if one of my URLs isn't a supported careers page?
That URL gets a row saying it wasn't recognised and is billed url-checked ($0.0005). Your other URLs are unaffected.
How do I track new jobs across a list of companies?
Turn on "Only jobs not seen before", give the store a name, and schedule the run in Apify Console. Each run returns what has appeared since the last.
Why do most rows have no salary?
Most employers don't publish one. In practice it's Ashby and Lever boards, and Greenhouse boards with a pay-transparency block, that do. Where a salary is advertised you get numbers with currency and period.
Why do some jobs have no location?
Some boards, mostly on Mercury xRM and Taleo, leave the location out of their job list.
Can I get listings without the adverts to save money?
Turn "Fetch full job adverts" off, and on Greenhouse, Lever and Ashby also turn "Include advert text" off. Rows then bill at the job-listed rate, half the price.
Do I need a proxy or an account anywhere?
No proxy is needed for any of the nine platforms and no account is used. You configure nothing.
Is scraping careers pages legal?
Employers publish these adverts so people will find them, and the actor reads them without logging in to anything. Gathering published job adverts is generally lawful in the UK and EU. How you use the data is your responsibility.
Connecting it to a board, a CRM or an agent
A company watchlist is the usual build: your list of careers pages in a Google Sheet loaded through Start URLs, a daily schedule with only-new on, and a webhook or the Slack integration announcing the day's openings. Zapier, Make and Airbyte connect the same dataset to a CRM or a warehouse.
For code, Apify's run-sync-get-dataset-items endpoint runs the actor and returns the rows in one call. apify-client is published for Python and JavaScript, and the actor's API tab has the reference with your token filled in.
An AI agent can use it through the Apify MCP server (https://mcp.apify.com): hand it a company's careers URL and it reads the open roles as structured data, whatever the platform.
More from BonCross
- Ashby Jobs Scraper: Every open job on an Ashby careers board.
- Greenhouse Jobs Scraper: Every open job from a Greenhouse careers board.
- Lever Jobs Scraper: A Lever careers board for every open job.
- Workday Jobs Scraper: Every open job from a Workday careers board.
- CharityJob Scraper: UK charity and non-profit jobs from CharityJob.
- Glassdoor Job Scraper: Glassdoor job listings for a role and location.
Your feedback
If a careers page you expected to work came back unrecognised, send us the URL on the Issues tab in Apify Console. Those reports tell us which platforms and branded sites to look at next, and we read every one.