Career Page Jobs Scraper: Workable, SmartRecruiters, Personio
Pricing
$2.00 / 1,000 job scrapeds
Career Page Jobs Scraper: Workable, SmartRecruiters, Personio
Scrape job postings from any company careers page. Works with Workable, SmartRecruiters, Personio, Recruitee, Teamtailor, BambooHR, Greenhouse, Lever, Ashby, Workday, Breezy and Pinpoint (auto-detected). Normalized jobs with location, remote, salary, description, apply URL.
Pricing
$2.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
PulseData
Maintained by CommunityActor stats
0
Bookmarked
20
Total users
4
Monthly active users
an hour ago
Last modified
Categories
Features
Share
Career Page Jobs Scraper reads the public job boards of 12 applicant tracking systems (ATS) and returns every open position as one normalized record with title, locations, remote flag, department, salary where available, posting date, description and apply link. Paste career page or job board URLs and the actor detects the ATS. It costs $2 per 1,000 jobs, with descriptions included.
Supported ATS (auto-detected): Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Personio, Recruitee, Teamtailor, BambooHR, Breezy HR, Pinpoint.
Works with Workable, SmartRecruiters, Personio, Recruitee, Teamtailor and BambooHR
There is no separate PulseData actor for these six systems. Each example is a real board:
| ATS | Example board |
|---|---|
| Workable | https://apply.workable.com/huggingface/ |
| SmartRecruiters | https://careers.smartrecruiters.com/BoschGroup |
| Personio | https://360t.jobs.personio.de (.de and .com boards) |
| Recruitee | https://bunq.recruitee.com |
| Teamtailor | https://oatly.teamtailor.com |
| BambooHR | https://gitkraken.bamboohr.com/careers |
Features
- Scrape jobs from any company careers page. Paste
https://example.com/careersand the actor scans the page HTML for an embedded or linked board. - Scrape Greenhouse, Lever, Ashby and Workday jobs with one input list, including EU-hosted Greenhouse and Lever boards and any
myworkdayjobs.comcareer site. - Scrape Workable, SmartRecruiters, Personio, Recruitee, Teamtailor, BambooHR, Breezy and Pinpoint jobs with the same input and output.
- One schema for every ATS, so you can mix hundreds of companies and export jobs to CSV, JSON or Excel.
- Filter jobs by keyword, location, remote and posting date before they are saved and charged.
- Monitor new job postings of a company. With
onlyNewJobsa scheduled run returns and charges only jobs it has not delivered before.
Use cases
- Job boards and aggregators: pull fresh postings from a list of companies on a schedule and keep your own board in sync.
- Sales and lead generation: a company hiring a "Salesforce Administrator" or "Head of SEO" is often buying tooling for that team. Put those titles in
keywords. - Talent intelligence: hiring volume by department, location, remote policy and published salary ranges over time.
Input
{"startUrls": [{ "url": "https://boards.greenhouse.io/stripe" },{ "url": "https://jobs.lever.co/spotify" },{ "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite" }],"keywords": ["engineer", "data"],"locations": ["Remote", "Berlin", "United States"],"remoteOnly": false,"postedWithinDays": 30,"includeDescription": true,"maxJobsPerCompany": 200}
| Field | Type | Default | What it does |
|---|---|---|---|
startUrls | array | (required) | Career pages or ATS job board URLs. |
keywords | array | [] | Keep only jobs whose title contains one of these words (case-insensitive). |
locations | array | [] | Keep only jobs whose location, secondary locations or country contain one of these strings. |
remoteOnly | boolean | false | Keep only jobs flagged as remote by the ATS or whose location mentions remote. |
postedWithinDays | integer | 0 | Keep only jobs posted or updated in the last N days. 0 means no limit. Jobs without any date are kept. |
includeDescription | boolean | true | Return the description as HTML and plain text. For Workday, SmartRecruiters, BambooHR, Workable and Breezy this costs one extra request per job. |
maxJobsPerCompany | integer | 0 | Cap on jobs per career page, counting only jobs that pass the filters. Once reached, no further job details are fetched. 0 means no limit. |
onlyNewJobs | boolean | false | Monitor mode: output and charge only jobs not delivered on an earlier run. |
monitorStoreName | string | empty | Key-value store that remembers delivered jobs. Empty means a name derived from the career pages and filters. |
proxyConfiguration | object | { "useApifyProxy": false } | Optional Apify Proxy. |
Other supported URL shapes:
| ATS | Example |
|---|---|
| Greenhouse | https://boards.greenhouse.io/stripe, https://job-boards.greenhouse.io/company, EU: https://job-boards.eu.greenhouse.io/company |
| Lever | https://jobs.lever.co/spotify, https://jobs.eu.lever.co/company |
| Ashby | https://jobs.ashbyhq.com/ramp |
| Workday | https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite |
| SmartRecruiters | also https://jobs.smartrecruiters.com/BoschGroup |
| Breezy HR | https://company.breezy.hr |
| Pinpoint | https://company.pinpointhq.com |
| Company site | https://example.com/careers (server-rendered pages only; see the FAQ). |
Get new jobs from career pages every day (monitor mode)
Turn on onlyNewJobs to get only the jobs a company posted since your last run:
{"startUrls": [{ "url": "https://boards.greenhouse.io/stripe" }],"maxJobsPerCompany": 0,"onlyNewJobs": true}
Delivered job IDs are kept in a named key-value store, and later runs skip them. A ready task is on the example page Get new jobs from a Greenhouse board every day. For alerts:
For alerts, save the input as a task with an Apify schedule and an integration (email, Slack, Google Sheets, Make, Zapier or a webhook) that fires on each succeeded run.
Details:
maxJobsPerCompanycounts new jobs only. Leave it at0on the first run so that run remembers every open job.- Jobs seen before are dropped before their detail request, and are neither output nor charged.
- Without
monitorStoreNameeach combination of career pages and filters keeps its own history. Set a name to share history between inputs, or a new one to start over. - A job cut off by
maxJobsPerCompany, the run timeout or the run's maximum cost is not remembered and comes on the next run. Schedule one run per store, since two parallel runs can deliver the same new job.
Output
One dataset item per job:
{"title": "Security Engineer, Cloud","company": "ramp","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "Remote (Canada)"],"country": "USA","remote": true,"workplaceType": "Hybrid","department": "Engineering","team": "Backend","employmentType": "FullTime","seniority": null,"salary": "$211.4K–$290.6K","postedAt": "2026-04-07T17:12:35.753Z","updatedAt": null,"url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","descriptionHtml": "<h1><strong>About Ramp</strong></h1><p>…</p>","descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams…","ats": "ashby","atsJobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","sourceUrl": "https://jobs.ashbyhq.com/ramp","scrapedAt": "2026-08-19T12:41:29.000Z"}
Which fields are filled depends on what each ATS publishes. seniority comes from SmartRecruiters, Personio and Recruitee. salary comes from the ATS where it has a pay field (Lever, Ashby, Teamtailor, BambooHR, Recruitee, Breezy, Pinpoint); otherwise the actor looks for a pay range in the first part of the description text.
If a URL fails (unknown board, no ATS found on a careers page), the dataset gets one row with sourceUrl and error (for example NO_SUPPORTED_ATS_DETECTED). These rows are not charged.
Pricing
Pay per event: you pay for each job saved to the dataset.
job-scraped: $0.002 per job ($2 per 1,000 jobs). There is no separate start fee.
Worked example: 50 company career pages with an average of 120 open jobs each is 6,000 jobs. That is 6,000 x $0.002 = $12.00. Jobs removed by filters are not charged, so filtering to engineering roles only (say 1,500 jobs) brings the same run down to $3.00.
In monitor mode only new jobs are charged: a daily run over the same 50 career pages that finds 40 new jobs costs 40 x $0.002 = $0.08, and a run with nothing new costs nothing in result events.
FAQ
What can it not do?
It does not render JavaScript, so a careers page that builds its board entirely in the browser may return NO_SUPPORTED_ATS_DETECTED; paste the board URL instead. It does not support systems outside the 12 listed (for example iCIMS, Taleo or SuccessFactors), and it does not log in or read internal job postings.
Do I need proxies?
Normally no. The actor retries on HTTP 429 and 5xx with backoff. Turn on proxyConfiguration only if very large lists hit rate limits.
How accurate is postedAt?
It is the date the ATS publishes. With includeDescription off, Workday dates are estimated from labels like "Posted 3 Days Ago" and missing for "30+ days" jobs.
Use it from Claude, ChatGPT or Cursor (Apify MCP server)
Add the Apify MCP server to your MCP client with this URL, which loads only this actor as a tool:
https://mcp.apify.com?tools=pulsedata/career-page-jobs-scraper
Then ask, for example, "list every remote job posted in the last 7 days on these career pages", and the assistant fills the input, runs the actor and reads the jobs back as JSON. Billing is the same as a normal run.
Paying from an AI agent without an Apify account (x402 and Skyfire)
An agent can buy a prepaid, spend-capped Apify token at Apify AGI, paid in USDC through x402 or from a Skyfire wallet, and use it for both the API and the MCP server. This actor runs with limited permissions, so it works with these tokens. The smallest token is $1, tokens expire 14 days after purchase, and Apify marks agentic payments as experimental.
Example pages
Example runs of this actor:
- Scrape jobs from Workable career pages
- Scrape jobs from SmartRecruiters career pages
- Scrape jobs from Personio career pages
- Scrape jobs from Teamtailor career pages
- Scrape jobs from Recruitee career pages
- Scrape jobs from BambooHR career pages
- Find remote jobs across company career pages
- Get jobs posted in the last 7 days
- Get new jobs from a Greenhouse board every day
The single-ATS versions have their own example runs:
- Export all Stripe job openings (Greenhouse)
- Export all Spotify job openings (Lever)
- Export all OpenAI job openings (Ashby)
- Export NVIDIA job openings from Workday (Workday)
- Find remote jobs on Greenhouse job boards
- Get jobs posted on Lever in the last 7 days
Related actors
- Greenhouse Jobs Scraper: accepts bare board tokens such as
stripe. - Lever Jobs Scraper: accepts bare company names.
- Ashby Jobs Scraper: accepts bare board names.
- Workday Jobs Scraper: for
myworkdayjobs.comcareer sites. - Website Tech Stack Detector: add the tech stack of hiring companies for lead scoring.
- LinkedIn Ad Library Scraper: see whether a hiring company also runs ads on LinkedIn.
- Google Ads Transparency Center Scraper: pair hiring signals with Google ad activity.