ATS Job Postings: Career Page Jobs API for 12 ATS avatar

ATS Job Postings: Career Page Jobs API for 12 ATS

Pricing

from $30.00 / 1,000 company checkeds

Go to Apify Store
ATS Job Postings: Career Page Jobs API for 12 ATS

ATS Job Postings: Career Page Jobs API for 12 ATS

Every open job of the companies you name, by company name, website or careers page, on Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee, Personio and 4 more, plus a hiring summary per company. Priced per company checked, not per job. Can return only new jobs.

Pricing

from $30.00 / 1,000 company checkeds

Rating

0.0

(0)

Developer

Enis Bodlli

Enis Bodlli

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Security

Limited permissions

Share

Give it company names, websites or careers pages and get every open job those companies list, in one clean format, plus one hiring summary per company. The Actor finds each company's job board itself on Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee, Personio, Teamtailor, BambooHR, Breezy HR and Rippling, and reads it live. You pay per company checked, not per job: a company with 800 open jobs costs the same as one with 8.

  • Name, website or link. stripe, stripe.com or https://boards.greenhouse.io/stripe all work. The Actor looks for a board link on the website and its careers pages, then tries the name on each system, and says in the result how it found the board.
  • A summary row per company: open jobs, jobs posted in the last 7 and 30 days, remote and hybrid counts, top departments and locations, seniority mix, median pay, and with monitoring, how many jobs closed since the last check. Use it as a hiring signal for sales, recruiting or research.
  • Every job as a row: title, department, location, remote status, employment type, salary range, publish date, description and apply link, mapped to the same fields whatever the system.
  • Monitor companies cheaply. With Only jobs that are new since the last run, a later check of the same company costs a fraction of the first and returns only the new postings.
  • Or search without a list. Leave Companies empty and add a job title to search the built-in directory of 1,302 job boards.

It reads the public endpoints each job system offers for showing jobs on a company's own site. No login, no browser and no proxies, so runs are fast and stable.

What you can do with it

  • Hiring signals for sales and investing. Run your account list as company names or domains with Rows to return set to Company summaries only, and see who is hiring, how fast, and for which teams.
  • Monitor companies for new openings. Turn on Only jobs that are new since the last run, add a schedule, and each run returns just the postings that appeared since the previous one.
  • Find who is hiring for a role. Search the directory for account executive or
    machine learning engineer
    and see which companies have openings.
  • Build a job board or a newsletter from a list of employers you choose.
  • Feed an AI agent or a spreadsheet with structured, current job data.

How to use it

Check the companies you name

  1. Add one entry per company under Companies. Any of these work:
    • its name: stripe, huggingface, bunq
    • its website: stripe.com
    • a job board or careers page URL: https://jobs.lever.co/palantir, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, https://tado.jobs.personio.de
  2. Choose Rows to return: both (default), jobs only, or company summaries only.
  3. Optionally narrow the jobs: title and location keywords, remote only, employment type, seniority, posted within the last N days, or only jobs that state a salary. The summary row counts the jobs that pass the filters.
  4. Run it and export the results as JSON, CSV or Excel, or read them through the API.

A name is tried on Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, Teamtailor, BambooHR, Breezy HR and Rippling. A board with open jobs on Greenhouse, Lever or Ashby is taken at once; from the eight smaller systems, where names are often held by small unrelated firms, the board with the most open jobs is taken. A board that states a different company name is passed over. Two companies can share a name on different systems, so use the website or the URL when you need to be certain. Workday needs the URL or the website.

Search the directory by job title

  1. Clear Companies, or keep your companies and turn on Search every company in the directory.
  2. Add one or more Title keywords, for example data engineer, and any other filter.
  3. Set Maximum jobs per company (5 gives a spread of employers) and Maximum jobs in total.
  4. Run it. A common title fills up from the largest boards first.

Pricing

Companies you name are charged once per company checked, whatever the number of jobs. Platform usage is included, so there is nothing else to pay.

Apify plan tierCompany checkedRepeat check with "only new"Directory search, per job
Free, Starter (Bronze)$0.04$0.002$0.0025
Scale (Silver)$0.035$0.0018$0.0022
Business (Gold) and above$0.03$0.0015$0.0019

Plus Apify's run start: $0.00005 per GB of memory, at least one ($0.00005 at the default 512 MB).

  • Not charged: a company whose board was not found, a board that failed to answer, and a second entry for a board already in the run. Each still gets a summary row that says why.
  • 20 companies, all their jobs and summaries: 20 x $0.04 = $0.80, whether they list 10 jobs or 10,000.
  • Daily monitoring of the same 20 companies with Only jobs that are new since the last run: the first run $0.80, then 20 x $0.002 = $0.04 a day.
  • A directory search for data engineer with Maximum jobs in total at 200: 200 x $0.0025 = $0.50.

You can set a maximum charge per run. The Actor stops when it is reached; companies it did not reach are checked by a later run.

Input

FieldWhat it does
CompaniesCompany names, websites, careers pages or job board URLs. Leave empty to search the directory.
Search every company in the directoryAlso search the directory's 1,302 job boards, after the companies above.
Job board system for plain namesWhich system to use for entries that are a name. Default: auto-detect on the 11 systems that have names.
Title keywordsKeep jobs whose title contains any of these. Not case sensitive.
Location keywordsKeep jobs whose location contains any of these. Not case sensitive.
Remote jobs onlyKeep only jobs marked as remote.
Exclude title keywordsDrop jobs whose title contains any of these.
Department keywordsKeep jobs whose department or team contains any of these.
Employment typesKeep full-time, part-time, contract, temporary or internship jobs. Jobs whose type the job system does not state are kept.
Seniority levelsKeep jobs whose title states one of the chosen ranks, such as senior, staff or director.
Posted within daysKeep jobs published in the last N days.
Only jobs with a salaryKeep jobs that state pay.
Rows to returnBoth (default), jobs only, or company summaries only.
Include job descriptionAdd the description as plain text and HTML. Default: on.
Only jobs that are new since the last runReturn only postings that appeared since the previous run.
Monitor nameA name for this search's memory of seen jobs, so two searches on the same company do not share it.
Maximum jobs per companyStop after this many jobs for each company. 0 means no limit.
Maximum jobs in totalStop the run after this many jobs. 0 means no limit for named companies and 1,000 for a directory search.

Search the directory for remote data engineering jobs posted in the last week, at most 5 per company:

{
"titleKeywords": ["data engineer"],
"remoteOnly": true,
"postedWithinDays": 7,
"includeDescription": false,
"maxJobsPerCompany": 5,
"maxResults": 200
}

Hiring summaries for an account list, no job rows:

{
"companies": ["stripe.com", "huggingface", "bunq", "https://jobs.lever.co/palantir"],
"outputMode": "companies"
}

Monitor three companies for new engineering jobs in London or remote:

{
"companies": ["stripe.com", "https://jobs.ashbyhq.com/openai", "palantir"],
"titleKeywords": ["engineer"],
"locationKeywords": ["london", "remote"],
"onlyNewSinceLastRun": true
}

Output

Two kinds of rows, told apart by recordType. The Companies view of the dataset shows the summary rows, the Overview view the jobs.

One summary row per company you name (recordType: "company"), here a board found from the name alone, read on 2 November 2026:

{
"recordType": "company",
"input": "bunq",
"status": "ok",
"message": null,
"company": "bunq",
"companyName": "bunq",
"ats": "recruitee",
"boardUrl": "https://bunq.recruitee.com/",
"detectedVia": "name",
"checkType": "first",
"openJobs": 26,
"matchingJobs": 26,
"jobsReturned": 5,
"closedJobs": null,
"remoteJobs": 0,
"hybridJobs": 26,
"jobsWithSalary": 1,
"postedLast7Days": 7,
"postedLast30Days": 18,
"newestPostedAt": "2026-10-30T16:32:58.000Z",
"topDepartments": [{ "name": "Support & Operations", "count": 10 }, { "name": "Growth", "count": 4 }],
"topLocations": [{ "name": "Amsterdam, Noord-Holland, Netherlands", "count": 18 }],
"seniorityCounts": [{ "name": "director", "count": 3 }, { "name": "lead", "count": 3 }],
"employmentTypeCounts": [{ "name": "full_time", "count": 24 }, { "name": "temporary", "count": 2 }],
"salaryCurrency": "EUR",
"medianSalaryMin": 108000,
"medianSalaryMax": 119700,
"notes": [],
"checkedAt": "2026-11-02T15:54:57.243Z"
}

(Lists are shortened here; the top lists hold up to five entries, the counts up to twenty.) A company that was not found has status: "not_found" and a message saying what was tried.

One row per job (recordType: "job"), every system mapped to the same fields:

{
"recordType": "job",
"company": "openai",
"companyName": null,
"ats": "ashby",
"jobId": "8fb1615c-34bf-47c4-a1d1-b7b2f836bbd3",
"title": "Technical Program Manager, Compute Infrastructure",
"seniority": null,
"department": "Technical Program Management",
"team": "Technical Program Management",
"location": "San Francisco",
"locations": [
"San Francisco"
],
"isRemote": null,
"workplaceType": null,
"employmentType": "full_time",
"employmentTypeText": "FullTime",
"salaryMin": 257000,
"salaryMax": 335000,
"salaryCurrency": "USD",
"salaryInterval": "year",
"salaryText": "$257K - $335K",
"salarySource": "ats",
"publishedAt": "2026-03-12T16:38:15.322Z",
"updatedAt": null,
"jobUrl": "https://jobs.ashbyhq.com/openai/8fb1615c-34bf-47c4-a1d1-b7b2f836bbd3",
"applyUrl": "https://jobs.ashbyhq.com/openai/8fb1615c-34bf-47c4-a1d1-b7b2f836bbd3/application",
"descriptionText": "ABOUT THE TEAM ...",
"descriptionHtml": "<h2>About the team</h2> ...",
"scrapedAt": "2026-10-04T10:13:30.354Z"
}

A field is null when the source does not provide it. What the four largest systems provide (the other eight fill title, location, URLs and publish date, and department, employment type, remote status and salary where they publish them):

FieldGreenhouseLeverAshbyWorkday
Company display nameyesnonono
Departmentyesyesyesno
Teamnoyesyesno
Workplace type (remote, hybrid, onsite)from the location text onlyyeswhen the company sets itwhen the company sets it, else from the location text
Employment typeonly when the title states ityesyesyes, with descriptions on
Salary rangeread from the description when written therewhen the company publishes it, else from the descriptionwhen the company publishes it, else from the descriptionread from the description when written there
Published dateyesyesyesexact with descriptions on; otherwise from "posted 3 days ago"
Updated dateyesnonono

Which companies are in the directory

The built-in directory holds 1,302 company job boards that had at least one open job when they were checked on 4 October 2026: 723 on Greenhouse, 200 on Lever, 374 on Ashby and 5 Workday careers sites (NVIDIA, Salesforce, Mastercard, Intel and Adobe). Together they listed about 68,600 open jobs that day. Most are technology companies, from startups to large employers. The list was built from openly licensed company lists, each board was confirmed on its job board system, and it is refreshed with new versions of the Actor.

  • The largest boards are asked first and Workday last, ten at a time, and the jobs come from the boards that answer first, so a common title fills up quickly. Once Maximum jobs in total is stored, boards still being read are called off and cost nothing.
  • With Include job description on, a Greenhouse board is listed without descriptions and the text is read only for the jobs kept. A Lever board too large to share memory with others (one in the directory) is read after the rest.
  • Companies you name are searched before the directory, and a board you named by its address is not read a second time.
  • A board that has closed since the check is skipped without an error.
  • Requests to each job board system are spaced to at most 4 a second, and to 1 a second on Lever, as Lever's robots.txt asks.
  • How long it takes, measured on 21 October 2026. On Apify at 512 MB, a search for software engineer (5 per company, descriptions on) that stopped at its charge limit after 10 jobs took 26 seconds and peaked at 155 MB of memory. On a home connection the same search for 50 jobs took 31 seconds. A title that no company uses goes through all 1,302 boards, which took 10 minutes at home, 4 of them on one Lever board with 4,600 retail jobs that answers slowly and is read last.

How "only new jobs" works

The Actor keeps the IDs of the jobs that were open on the previous run in a key-value store named ats-job-postings-state in your account. On the next run it returns only postings whose ID is not in that list. The first run returns everything. Delete that store to start over.

Postings held back by Maximum jobs per company, by Maximum jobs in total, or by the maximum charge you set for a run, are not marked as seen, so a later run returns them. A directory search that stops at its maximum leaves the boards it did not reach for later runs, and their jobs count as new when they are first read; add Posted within days to keep a daily feed to recent postings.

Each board has its own record, saved as soon as its jobs are stored, so a run that is stopped halfway does not report the same jobs as new the next time. Runs started from different saved tasks keep separate memories; set Monitor name to keep several searches apart within one task or through the API. If a board that had postings suddenly returns none, the list is kept as it was.

Limits

  • Twelve job systems are supported. A company on another system (iCIMS, Taleo, SuccessFactors, Jobvite and others) or on its own careers software is reported as not found, free of charge.

  • Finding a board from a name is a guess (see How to use it). A board found by guessing that lists no jobs is not taken, and the message names it, so you can enter its URL if it is the right one.

  • The directory is 1,302 job boards, not the whole job market. A company that is not in it can still be searched: name it under Companies.

  • A directory search reads each board and then filters it, so a title that few companies use goes through every board before it stops. Maximum jobs in total and Maximum jobs per company keep a common title short.

  • Workday lists at most 2,000 postings per careers site. Its listing holds only title, location and a rough date; the description, all locations and the exact date need one extra request per job, so Workday runs take longer with Include job description on. A run with location keywords fetches those details for jobs listed as "2 Locations".

  • A careers page on the company's own domain works when its HTML references one of the supported boards. Pages that load the board only through JavaScript may not be detected; use the job board URL in that case.

  • Greenhouse does not publish salary, employment type or a remote flag through its job-board endpoint. Pay is read from the description when it is written there, which needs Include job description on.

  • No AI-written fields. Skills, benefits, visa sponsorship and requirement summaries are not returned; seniority, employment type and pay are read by fixed rules from what the posting states.

  • No company profile from LinkedIn or Crunchbase (size, industry, funding) and no hiring-manager name or email. The Actor returns what the company publishes on its own job board, and no personal data.

  • Seniority comes from words in the title (senior, staff, lead, director and so on). A title that states no rank has no seniority, and level numbers such as II or L4 are not interpreted, because they mean different ranks at different companies.

  • When the job system publishes no pay figures, the Actor reads a pay range from the description if one is written there, and sets salarySource to description. Bonuses, budgets and single figures are not read as pay.

  • No built-in Slack or email alert. Connect Apify's Slack integration or a webhook to the saved task: with Only jobs that are new since the last run on, each finished run holds only the new jobs.

  • Changing a filter does not bring back postings an earlier run already marked as seen. Use a new Monitor name for a new search.

FAQ

Can I search without a list of companies? Yes. Leave Companies empty, add a job title under Title keywords, and the Actor searches the 1,302 companies of its directory, largest first, until Maximum jobs in total is reached (1,000 when you leave it at 0). A directory search is charged per job returned, not per board read. Turn on Search every company in the directory to search your own companies first and the directory after them.

A company was "not found". Why? The name did not match a board with open jobs on any supported system, or the company uses a different system. It costs nothing. Open the company's careers page, click a job, and check the address: greenhouse.io, lever.co, ashbyhq.com, myworkdayjobs.com, smartrecruiters.com, workable.com, recruitee.com, personio, teamtailor.com, bamboohr.com, breezy.hr or rippling.com means it is supported, and you can paste that URL.

Why per company and not per job? Because the company is what you ask about. A board with thousands of postings costs the same as a small one, so large employers are not expensive to check, and monitoring is cheap after the first check.

Is this legal? The Actor reads public job postings: through the endpoints Greenhouse, Lever and Ashby offer for displaying jobs on other sites, and through the public endpoint a Workday careers site uses itself. It collects no personal data. You are responsible for how you use the results.

Something broke or a field is missing. Open an issue on the Issues tab with the company you ran. Fixes usually ship within two days.

What happens if a run is interrupted? Progress is saved after every batch of jobs. If Apify moves or restarts the run, it continues where it stopped, and no job is stored or charged twice. Every run also writes a RUN_SUMMARY record to its key-value store with the result for each company: saved, not found or failed, and why. You pay for the companies a run checked, whether or not it finished; a company that failed or was not reached costs nothing.

More Actors from this developer

Jobs:

Company registers:

Contacts and lists: