Scrape career page jobs from any ATS: give a company name, website or job board link and get every open job, read live from Greenhouse, Lever, Ashby, Workday and 18 more boards. 1 company = up to 1,000 jobs for $0.045 (about $0.0005 per job at 100 jobs). New-job alerts to Slack. MCP-ready, no login.
Changes to ATS Jobs API (formerly Live Career Page Jobs API), newest first.
Unreleased
Price: a company (company-lookup) is now $0.045 ($0.0428 on Starter, $0.0405 on Scale, $0.036 on Business), was $0.01. Extra job blocks, repeat monitor checks and description blocks keep their prices.
robots.txt is now read on every job board host, not only on Workday and Eightfold, once per host per hour. A board or job page it does not allow is not read and not charged (unsupported_job_board, or a warning for job pages). A board whose robots.txt cannot be read is not read either, and its source_error is free. Workable lookups stop at Workable's first rate-limit answer instead of retrying.
Recruitee boards are read from Recruitee's public XML offer feed only, ahead of the company token Recruitee announced for its Careers Site API from 10 February 2027. A Recruitee board that asks for a token is a free unsupported_job_board row.
softgarden links are now unsupported_job_board, free: softgarden's legal notice does not allow reuse without its prior approval.
README: job data from Teamtailor and Workable must not be used to train AI models, as their robots.txt asks.
The input form groups the filters in four sections instead of one: Role and skills, Location, Salary and posted date, and Visa sponsorship. Each field text is at most 400 characters; the details are in the README's Input section. No field was renamed, so saved inputs and tasks work as before.
The output schema is titled "ATS jobs", like the dataset.
Only new jobs: Skip reposted jobs (skipReposts) leaves out a new job with the title and location of a job you received that closed in the last 30 days. It gets no row, is not counted as new and is not in the alert, and it does not come back later, as new, updated or closed. The status (skippedRepostsCount), the summary row (skippedReposts) and the status message say how many were left out. Off by default.
Tech Jobs Search: Only new jobs (onlyNewJobs, monitorName) returns only matching jobs you have not received from the same search before, and Alert webhook URL (alertWebhookUrl, alertMaxJobs, alertOnFirstCheck) sends the same free message to Slack, Discord, Teams, Make, Zapier or n8n on days with new jobs. Still one matching-job per job row, so a day without new jobs costs only the start event.
New input Description format (descriptionFormat): get each description as plain text (default, as before), safe HTML or Markdown. Emails, phone numbers and profile links are removed in every format, with the same length limit. Also in the live HTTP API and the MCP tools.
New inputs: Exclude companies (excludeCompanies) leaves out companies by name, website or job board link, also from the ready-made lists, and they are not read or charged; Skills (skills) keeps jobs whose tools name one of the given skills, with the new output field matchedSkills.
Tech Jobs Search: two new filters, Description includes (words the job description must name) and Only jobs that sponsor visas. With either one, each matching job comes with its description and what it says about visa sponsorship.
Rows of companies from the ready-made lists end with companyIndustry, companyCountry and companySizeBand, from Wikidata (null when not known and for other companies). Tech Jobs Search gets Industries and Company sizes filters once enough list companies are tagged; companies left out by them are not searched and cost nothing.
New ready-made list startups (Startups): 250 venture-backed startups on Greenhouse, Lever and Ashby, none of them in the other four lists. Each said in its own job ads that it is venture-backed and had 10 to 200 open jobs on 2026-09-26. Each company is one company lookup, like the other lists.
New fields latitude, longitude and timeZone for jobs in a city we know (from GeoNames), and new inputs near and radiusKm to keep jobs within a distance of one city, in ATS Jobs API, Live Jobs HTTP API and Tech Jobs Search. A city we do not know fails the input before any job board is read, with close matches.
New job fields ukVisaSponsor and ukSponsorRoutes, and the filter Only UK visa sponsors (ukVisaSponsorOnly), from the UK Home Office register of licensed sponsors for workers.
New remoteRegions field and filter: where a remote job may be done from (worldwide, americas, us, canada, latam, emea, europe, uk, apac or a country code), read from the location and title. Also in Tech Jobs Search.
Runs at 256 MB no longer run out of memory on long lists or big job boards. Apify's Node image sets a 30,000 MB JavaScript memory limit, which kept the Actor from setting one that fits the run.
Only new jobs: on a later check, a company whose board was read still gets rows only for new, updated and closed jobs, and any other company, such as one that is not_found, now gets a status row only when its status changed since the previous check. Before, the same status row came on every check. Every status stays in the COMPANIES record and in the status message.
The monthly price in the scheduling tip of a Console run now also counts companies that are not found or whose board fails, since each later check charges them too.
The status message no longer lists a duplicate entry as not checked, and on a first check it says a board has no open jobs instead of "No changes".
When a Department or Location value with a comma matches no job, the warning says the value was read as one value and to put one per line.
In the live HTTP API, department also takes values separated by commas (department=engineering,sales). A location keeps its comma, so "New York, NY" is one place.
Plain names ignore more legal forms, such as SE, SAS, A/S, Oyj, S.p.A., LLP and PBC. "Novo Nordisk A/S" is now looked up instead of rejected.
Plain names find the right company more often: we dropped small boards that share a famous name, read a company's main career site before campus or intern sites, and use the bigger board when a name lists two. Still one charge per company. When a company has several career sites, warning says which one was read.
A job board that limits requests no longer makes a plain name take minutes.
Ready-made lists rebuilt: 179 AI companies (now with Anthropic, ElevenLabs, Cursor and Lovable), 311 tech companies, 79 remote-first companies and 65 tech companies hiring in Europe. Each had at least 10 open jobs, and tech-companies repeats no company of the other two. Lists are refreshed monthly.
Rows from a list show the company's name in companyName when its job board gives none.
Summary rows have three new fields. leadershipRoles lists up to 5 open director, VP and C-level roles, and with Only new jobs also the ones that closed since the previous check. firstHireRoles lists up to 5 roles that are a first or founding hire. functionCountsLast30Days counts the jobs posted in the last 30 days per job function.
Only new jobs: summary rows name the job functions (newFunctions) and countries (newCountries) that have open jobs now and had none at the previous check. A monitor saved before this version fills them from its second check after the update.
Include job description now also works with one summary row per company, so summary rows get topTools, toolCoverage and visaSponsorshipShare. Descriptions stay free on most boards and cost $0.01 per started 200 jobs on JazzHR, Paylocity, Freshteam, JOIN, Workday, Eightfold, Polymer and HiringThing career portals.
Links to 21 more job board vendors, such as Dayforce, Paycor, UKG, CareerPlug, Hireology, isolved, Avature, NEOGOV, Deel and Factorial, now return unsupported_job_board (free), and error says why. Before, such a link was read as a company website and could cost $0.01.
A job board link with encoded characters in the board name, such as %20 for a space, is now read correctly.
The README has a short section for each of Greenhouse, Lever, Ashby, Workday and Eightfold, with the link to paste and what you get.
New README section "Spot likely ghost jobs". It shows how to list jobs posted more than 90 days ago and reposted jobs with the fields you already get.
The README shows step by step how to get new jobs in Slack every morning, in a Google Sheet, or by email only on days with new jobs, and three things to know before the first alert.
Only new jobs: new and closed job rows have alertText, one plain line for an alert, in the dataset and the live HTTP API. New dataset view Alerts (view=alerts).
Alert webhook: alertWebhookUrl, alertMaxJobs and alertOnFirstCheck. One free message to Slack, Discord, Teams, Make, Zapier or n8n after an Only new jobs check with new or closed jobs; none on quiet days or first checks.
New filter Description includes (descriptionIncludes): keep jobs whose description names one of your words, such as Snowflake, Rust or C++. Whole words, any case, and a tool also matches its other names, so Postgres finds PostgreSQL. It turns on Include job description, with its price on JazzHR, Paylocity, Freshteam, JOIN, Workday, Eightfold, Polymer and HiringThing career portals. Also in the live HTTP API.
Well-known employers that list their jobs only on their own career site (27 names, such as Google, Apple, Amazon, Meta and Tesla, and their main domains) are now free unsupported_job_board entries with the reason. A link to a job board we read still works.
firstHireRoles lists fewer wrong roles. A job no longer counts when its text only asks for past experience of building a team, describes the candidate, or tells company history.
Ready-made list remote-first rebuilt: 90 companies (was 79), with more company names from Remote In Tech (ISC License). Each had at least 10 open jobs, at least 4 in 5 of them remote, on 2026-09-25.
A run started in Apify Console without a ready-made list now suggests a bigger list to try next, with its size and about what it costs.
The live HTTP API moved to a new Actor, Live Jobs HTTP API, with the same fields, filters and event prices. This Actor no longer runs in Standby mode, so a normal run charges only the events.
Two more job boards, 22 in all: ClearCompany (formerly HRMDirect) and GoHire. Paste a board link such as medcor.hrmdirect.com/employment/job-openings.php or jobs.gohire.io/dexerto-de5jlhjo. Each company costs $0.01, as on the other boards. Descriptions cost $0.01 per started 200 jobs on both. Before, links to these boards were free unsupported_job_board entries. Also in the live HTTP API.
Five more job boards, 20 in all: PageUp, Polymer, HireHive, HiringThing and Trakstar Hire (Recruiterbox). Paste a board link such as careers.pageuppeople.com/865/cw/en-us/listing, jobs.polymer.co/magnendo, focus-ireland.hirehive.com, vault-manufacturing.hiringthing.com or stax.hire.trakstar.com. Each company costs $0.01, as on the other boards. Descriptions are free on PageUp, HireHive and Trakstar Hire, and cost $0.01 per started 200 jobs on Polymer and on HiringThing career portals that list the jobs of several locations. Before, links to these boards were free unsupported_job_board entries. Also in the live HTTP API.
The README's first lines now say that you get every open job at the companies you name, read when you run it, including older jobs that are still open, and that 1,000 jobs cost about $0.10 when your companies have about 100 open jobs each. A short recipe near the top, "Get new jobs every morning", shows the daily Slack alert, and a new FAQ, "How is this different from a job search database?", says what the Actor does and does not do.
Fewer Workable errors on long lists of Workable companies.
2026-09-24: build 0.0.8
Department and Location with several values, one per line in the form, now keep the jobs that match any of them. Before, such a filter kept no jobs.
In the live HTTP API, every list parameter can be repeated (location=London&location=Berlin).
Plain company names are looked up in a directory of about 28,000 company job boards first, then on Greenhouse, Lever and Ashby. New matchedBy value directory.
Ready-made company lists (companyLists): AI companies, tech companies, remote-first companies and European tech companies. Each company costs $0.01, as usual.
Only new jobs: later checks write no row for companies without changes, and the status message starts with what changed. New summary field jobsOpenOver90Days.
The Jobs view starts with the job title. New Main fields view with the key columns.
Pinpoint and Comeet links return unsupported_job_board (free), because their terms do not allow this use.
Pricing: plan discounts on companies ($0.0095 on Starter, $0.009 on Scale, $0.008 on Business; $0.01 on the free plan). Clearer price names: Company, Extra job block, Repeat monitor check, Description block. No other price changed.
2026-09-24: first public version (build 0.0.7)
Pricing
A company still costs $0.01 when we contact its job board, including up to 1,000 jobs. Each further 1,000 jobs of the same company now costs $0.01 (event extra-1000-jobs).
With Only new jobs, the first check of a company costs $0.01. A later check costs $0.002 per started 1,000 open jobs on the board, so $0.002 for 300 jobs and $0.006 for 2,400.
Job descriptions on JazzHR, Paylocity, Freshteam, JOIN, Workday and Eightfold cost $0.01 per started 200 jobs described (event job-details), and only jobs you get are described. On the other boards they stay free.
A company website we read that links no job board at all costs $0.01. A website we cannot open, or whose job board we do not read, is free.
Boards
Workday and Eightfold, where the employer's robots.txt allows it. Employers that opt out, and blocklisted employers, are free unsupported_job_board.
Greenhouse boards hosted in the EU are not supported yet (free).
Input
Companies also takes company websites and domains, such as stripe.com. We look for the job board the site links to.
New filters: Title includes and Title excludes (whole words).
Rows to return: one row per job, one summary row per company, or both. A summary row has open jobs, jobs posted in the last 7 and 30 days, remote share, top departments, locations and countries, seniority and salary medians.
More plain company names are found, such as "Tesla, Inc.".
Input errors are shown before the run starts, with a clear message. This covers an empty list, more than 500 companies, a date the Actor cannot read (such as "yesterday" or "7d"), a bad monitor name and a cap below 1.
New filters: Workplace, Job type, Seniority, Job functions, Languages, Location excludes, Only jobs with a salary, Minimum yearly salary, Posted before, Max years of experience and Only jobs that sponsor visas. Jobs whose value is unknown are left out, and the warning says how many.
Department and Location take several values, one per line. Location keeps the jobs in a country by its name or code, and matches other text by whole words.
startUrls and urls are read as other names for Companies, so input written for other Actors works.
Output
One dataset row per job, plus one status row for each company without jobs. Each row has rowType job, status or company. The COMPANIES record has one status per company, with its counts and charges.
New job fields: country, country code, city, region, job type, yearly salary, and every pay range (salaryRanges) on Greenhouse and Ashby. Seniority has more levels.
New company fields: companyName and matchedBy, with a warning when a plain name may belong to another company.
Dataset field descriptions for AI agents, and named collections for the COMPANIES and STATS records.
New job fields: jobKey, language, jobFunction, companyDomain, and on Greenhouse requisitionId and applicationDeadline. With descriptions: tools, pay written in the description when the board gives none (salarySource), years of experience, education, visa sponsorship and security clearance.
New summary fields: functionCounts, and with descriptions topTools, toolCoverage, visaSponsorshipShare and medianExperienceYearsMin.
Only new jobs
Each monitor name, exactly as typed, and each set of filters has its own memory.
A board in another region (such as Lever EU) has its own memory.
Rows have firstSeenAt. Closed rows also have postedAt, closedAt and daysOpen, and new rows reposted. Also return updated jobs (includeUpdatedJobs) returns jobs whose title, location, salary or job type changed. Summary rows count updatedJobs, repostedJobs and medianDaysOpen.
The memory is now kept in a store named after this Actor, live-career-page-jobs-api-monitor-<monitor name>, instead of jobs-monitor-<monitor name>. A monitor saved before this version starts over with a full first check.
Live API
GET /openapi.json describes every parameter and field. GET / without companies returns a short help. Other paths and methods are answered free.
Fixes and limits
A job that lists pay in several currencies shows the range in its country's currency as the main salary, when there is one.
GTM systems roles now have the job function sales, and support engineering roles customer success.
A board is never charged twice after the run moves to another server.
A store the Actor cannot open no longer fails the run.
Pay is read right for yen, peso and forint ranges on Greenhouse, Ashby pay tiers and Paylocity pay periods.
Board fixes for Freshteam page layouts, every Recruitee location, Personio levels, Workable hybrid jobs and sub-departments, and Homerun hybrid jobs in Dutch.
Lever is read at the pace its robots.txt asks for.