Career Page Jobs Scraper: Auto-Detects the Job Board (ATS) avatar

Career Page Jobs Scraper: Auto-Detects the Job Board (ATS)

Pricing

from $1.60 / 1,000 job listings

Go to Apify Store
Career Page Jobs Scraper: Auto-Detects the Job Board (ATS)

Career Page Jobs Scraper: Auto-Detects the Job Board (ATS)

Give company websites or careers pages and get every open job. It finds which job board each company uses (Greenhouse, Lever, Ashby, Workable, Recruitee, Personio, Breezy, Teamtailor, Gem, Pinpoint) and returns one row per job, with an only-new-jobs mode. USD 2 per 1,000 jobs.

Pricing

from $1.60 / 1,000 job listings

Rating

0.0

(0)

Developer

JT Palms

JT Palms

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 minutes ago

Last modified

Share

Career Page Jobs Scraper: open jobs from any company website

Give it company websites, careers pages or plain domains (stripe.com, https://www.notion.com/careers) and get back every open job. It finds which job board (ATS) each company uses, then reads that board's public feed and returns one clean row per job: title, department, locations, remote flag, employment type, pay range when published, dates, job and apply links and the description as plain text. Each row also says which job board was found (ats) and how (detectedFrom).

Supported job boards: Greenhouse, Lever, Ashby, Workable, Recruitee, Personio, Breezy HR, Teamtailor, Gem and Pinpoint.

USD 2 per 1,000 jobs. Companies whose job board cannot be found are reported free, with a list of what was checked.

What people use it for

  • Hiring signals for your account list. Your CRM has company domains, not job board names. Paste the domains, get every open role, and filter by department or keyword to spot companies that are growing a team you sell to.
  • Lead enrichment. The SUMMARY record tells you, per company, which job board it uses and how many jobs are open. That is useful for segmenting accounts or for selling to HR teams.
  • Job boards and newsletters. Turn a list of companies (climate startups, remote-first companies, your portfolio) into a job feed without looking up each company's job board by hand.
  • Job alerts. Schedule it with Only new jobs turned on and receive only postings that appeared since the last run.

Sample output

A real job row (description trimmed):

{
"source": "ashby",
"ats": "Ashby",
"detectedFrom": "https://notion.com/careers: links to jobs.ashbyhq.com/notion",
"company": "notion",
"companyName": null,
"jobId": "06e1d3a8-2706-4ed9-9fe6-8b69607de18e",
"title": "Security Engineer, Detection and Response",
"department": "Security",
"team": "Security",
"location": "San Francisco, California",
"locations": ["San Francisco, California", "New York, New York"],
"workplaceType": "hybrid",
"isRemote": false,
"employmentType": "full_time",
"compensation": null,
"postedAt": "2026-09-28T16:20:26.330Z",
"updatedAt": null,
"jobUrl": "https://jobs.ashbyhq.com/notion/06e1d3a8-2706-4ed9-9fe6-8b69607de18e",
"applyUrl": "https://jobs.ashbyhq.com/notion/06e1d3a8-2706-4ed9-9fe6-8b69607de18e/application",
"descriptionText": "WHO WE ARE\n\nNotion is the collaborative AI workspace where teams and agents think together ...",
"scrapedAt": "2026-09-29T03:20:19.921Z"
}

A real row for a company that could not be read (free; error and checked trimmed):

{
"source": "career-page",
"company": "avidbots.com",
"input": "avidbots.com",
"error": "No supported job board found on avidbots.com. The company uses BambooHR, which is not supported: BambooHR does not allow it (its terms of service forbid robots and other automated means that monitor or copy content). Checked 9 place(s); see \"checked\". ...",
"checked": [
"https://avidbots.com/careers links to avidbots.bamboohr.com (BambooHR, not supported)",
"https://avidbots.com/ (HTTP 200, no job board found)",
"https://avidbots.com/jobs (HTTP 404)",
"https://careers.avidbots.com/ (ENOTFOUND)"
],
"scrapedAt": "2026-09-29T03:20:19.921Z"
}

Real runs: notion.com was found on Ashby (130 jobs), stripe.com on Greenhouse (704 jobs), https://theblueground.com/careers on Workable, blenderbox.com on Breezy HR, ottonova.de on Personio and bunq.com on Recruitee, in 1 to 11 seconds per company.

How it finds the job board

For each company, fastest first. Every board it finds is confirmed by loading it before it is used.

  1. The input is already a job board URL (https://jobs.lever.co/spotify, https://blenderbox.breezy.hr): used as is.
  2. The company's pages. It loads the page you gave (or the home page, /careers and /jobs for a bare domain) and looks for links, iframes, embed scripts and API calls of a supported job board, and for redirects to one.
  3. Careers links. It follows careers-looking links on the same site ("Careers", "Join us", "Jobs") and tries careers. and jobs. subdomains. A site that redirects to a new domain is followed there.
  4. The company name as a board name (optional, on by default). It tries the name from the domain on every supported job board, and keeps a board only when it clearly belongs to the company: the same company name, job links on the company's domain, or job descriptions that name it.

detectedFrom tells you which step found the board and the evidence, for example https://notion.com/careers: links to jobs.ashbyhq.com/notion or board name guess "stripe" on Greenhouse (company name "Stripe" matches).

How to use it

  1. Add companies to Companies, one per line. Any of these work:
    • a domain: stripe.com
    • a careers page: https://www.notion.com/careers
    • a job board URL: https://jobs.lever.co/spotify
    • a company name: Coursera (found by the name guess only)
  2. Optionally narrow the results:
    • Title keywords: engineer, AI, /product (manager|owner)/
    • Locations: London, New York, Remote
    • Remote jobs only
    • Departments: Engineering, Sales
    • Posted within (days): 7
    • Max jobs per company: newest first
  3. Click Start, then export as CSV, JSON or Excel, or read the dataset through the Apify API.

Job alerts on a schedule

  1. Turn on Only new jobs and set your filters.
  2. Save the input as a task and add a schedule (daily or weekly).
  3. Connect the results to email, Slack, Google Sheets or a webhook in the task's Integrations tab.

Input

FieldWhat it does
companiesDomains, careers page URLs, job board URLs or company names. Required.
keywordsKeep jobs whose title matches any keyword. Words match at their start (engineer finds "Engineering"); keywords of 3 letters or fewer must be a whole word. /regex/ is supported.
locationsKeep jobs whose location contains any of these texts.
remoteOnlyKeep only jobs that can be done remotely.
departmentsKeep jobs whose department (or team, function or parent department, where the job board has them) contains any of these texts.
postedWithinDaysKeep jobs first published in the last N days. 0 = any date.
maxJobsPerCompanyNewest jobs first, at most this many per company. 0 = no limit.
onlyNewJobsOutput only jobs not delivered by an earlier run (see FAQ).
includeDescriptionAdd the description as plain text, up to 5,000 characters. Default on.
guessBoardNamesStep 4 above. Turn it off to use only boards the company's own pages point to. Default on.
maxConcurrencyCompanies processed in parallel. Default 5.

Output fields

Job rows have the same fields as the single job board scrapers (Greenhouse, Lever, Ashby, Workable, Recruitee, Personio and Breezy HR); Teamtailor, Gem and Pinpoint rows use the same format, plus:

FieldNotes
source, atsThe job board, as a key (greenhouse) and as a name (Greenhouse).
detectedFromHow the board was found (see above).
company, companyNameThe board name on that job board, and the company's display name when the board has one.
jobId, title, department, teamAs the job board has them.
location, locations, workplaceType, isRemoteLocation as shown, every location, and remote, hybrid, onsite or null.
employmentTypefull_time, part_time, contract, temporary, internship or null.
compensationmin, max, currency, interval, summary when the company publishes pay.
postedAt, updatedAtISO 8601 in UTC.
jobUrl, applyUrl, descriptionTextJob page, application link, plain-text description (up to 5,000 characters).
error, checkedOnly on rows for companies that could not be read: why, and every page and board that was checked. These rows are free.

A SUMMARY record in the run's key-value store lists every company with its job board, how it was found, its number of open jobs, matches, new jobs and errors.

Pricing

WhatPrice
Job listing in the resultsUSD 0.002 (USD 2 per 1,000)
Company whose job board cannot be found, or an invalid inputFree

Example: 200 company domains with 15 open jobs each is 3,000 jobs, USD 6. Detection itself is not charged. If you already know a company's job board, the single job board scrapers cost USD 1.50 per 1,000 jobs.

Set a maximum cost per run in the run options and the actor stops cleanly when it gets there; everything saved so far stays in the dataset.

Limits

  • Supported job boards: Greenhouse, Lever, Ashby, Workable, Recruitee, Personio, Breezy HR, Teamtailor, Gem and Pinpoint.
  • Not supported on purpose: SmartRecruiters and BambooHR. Their terms forbid automated access, so the actor never contacts them. A company that uses one gets a free error row that says so.
  • Other systems (Workday, iCIMS, Taleo, SuccessFactors, Teamtailor and in-house job pages) are not read. Neither are sites that load their jobs with JavaScript from their own servers without linking to a supported job board.
  • At most 9 pages are loaded per company, each up to 3 MB.
  • A board found by the name guess can, rarely, belong to a different company with the same name. detectedFrom shows the evidence; turn off guessBoardNames if you need only boards the company's own pages point to.

FAQ

What does it read? The public pages you give it (a few per company) and then only the public job feeds of the supported job boards: the Greenhouse, Lever and Ashby job board APIs, Workable's jobs widget feed, Recruitee's Careers Site API, Personio's XML feed and Breezy HR's careers site feed. It collects no personal data and never logs in or submits anything. If you republish jobs, link to jobUrl or applyUrl so candidates apply with the company.

Can it be pointed at internal addresses? No. Before any request, and again at every redirect, it refuses loopback, private, link-local and other internal addresses (for example localhost, 10.x.x.x, 192.168.x.x or 169.254.169.254), including names that resolve to them.

Why was my company not found? Open the error row's checked list: it shows every page and board that was tried. The usual reasons are an unsupported job board, or a careers page that loads jobs with JavaScript. If you know the company's job board URL, put that in Companies instead.

How does Only new jobs work? The actor keeps, per company and job board, the IDs of the jobs it has already delivered, in a key-value store named career-page-jobs-monitor in your own Apify account. Each run outputs only matching jobs whose ID is not in that list, then adds them. A company that moves to another job board starts a fresh history. Jobs left out only by Max jobs per company are marked as seen; jobs cut off by your cost limit stay new for the next run. To start over, delete the store in Storage.

Something missing or wrong? Open an issue with the company and what you expected.