Job Board & ATS Finder by Company (Greenhouse, Lever, Ashby) avatar

Job Board & ATS Finder by Company (Greenhouse, Lever, Ashby)

Pricing

from $5.00 / 1,000 job board founds

Go to Apify Store
Job Board & ATS Finder by Company (Greenhouse, Lever, Ashby)

Job Board & ATS Finder by Company (Greenhouse, Lever, Ashby)

Turn company names or websites into their public job board: ATS (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio), slug, URL, open jobs, confidence. Watch mode: scheduled runs return only companies that switched ATS, started hiring or closed their board.

Pricing

from $5.00 / 1,000 job board founds

Rating

0.0

(0)

Developer

Vellum Kasane

Vellum Kasane

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

8 hours ago

Last modified

Categories

Security

Limited permissions

Share

Job Board & ATS Finder by Company (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio)

Find which ATS a company uses and where its public job board lives. Give it company names or websites ("Notion", "blueground.com") and get one record per company: the ATS vendor (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee or Personio), the board slug, board URL and API URL, the number of open jobs, sample titles and a confidence level. Every answer is verified against the vendor's public job-board API, so found: true means a live board you can pull jobs from right away. Turn on watch mode and a scheduled run returns only the companies that switched ATS, started hiring or closed their board.

InputCompany names, domains or careers-page URLs, mixed freely. Optional hints per company: website, slug, ATS
OutputATS vendor, board slug, board and API URL, open jobs, confidence, evidence, other live boards, unsupported ATS seen on the site (Workday, iCIMS, ...)
Price$0.005 per company with a board, $0.001 per company without one (or unchanged in watch mode), $0.01 per run
Speed8 companies in about 10 seconds. Workable lookups are paced (about 1.5 per second) to stay under its rate limit, so long lists run at about 2-3 s per company: 100 companies in about 5 minutes. No browser, no proxy
{
"query": "Notion",
"found": true,
"ats": "ashby",
"slug": "notion",
"board_url": "https://jobs.ashbyhq.com/notion",
"api_url": "https://api.ashbyhq.com/posting-api/job-board/notion",
"open_jobs": 128,
"confidence": "medium",
"evidence": ["api-probe:ashby:notion"],
"sample_titles": ["Account Executive, Mid-Market", "Software Engineer, Infrastructure", "Product Designer"],
"other_boards": [{ "ats": "workable", "slug": "notion", "open_jobs": 0, "confidence": "medium" }],
"other_ats": [],
"feed_input": { "ats": "ashby", "slug": "notion" },
"watch_change": null
}

Jump to the task you have:

  1. Find which ATS a company uses and its job board slug
  2. Map a CRM list of domains to job boards in bulk
  3. Get alerted when target accounts switch ATS, start hiring or close their board
  4. Turn the boards into a job feed (new / closed jobs)
  5. Find out which accounts use Workday, iCIMS, Taleo or SuccessFactors
  6. What this Actor cannot do

1. Find which ATS a company uses and its job board slug

Paste names or websites into Companies and click Start:

{
"companies": [
"PostHog",
"https://stripe.com",
"blueground.com",
{ "name": "GitLab", "website": "about.gitlab.com" }
]
}

For every company the Actor:

  1. reads up to 5 pages of the company's own website when you gave one (home, /careers, /jobs, plus careers links found on the home page), respecting robots.txt, and extracts links to the seven vendors' hosted boards;
  2. derives board-slug guesses from the name and domain (Hugging Face -> huggingface, hugging-face, hugging; about.gitlab.com -> gitlab) and asks each vendor's public job-board API whether the board exists;
  3. keeps the boards the vendors confirm, grades the confidence, and picks the best one (boards with open jobs first, then confidence, then size).

Read ats, slug and confidence. high means the company's own site links to the board or the vendor's board name matches the company; low means a live board on a guessed slug and nothing else, so check sample_titles before you rely on it. SUMMARY.json in the key-value store lists every company with its result and number of probes.

2. Map a CRM list of domains to job boards in bulk

Export the domain column from your CRM and paste it as strings. A domain beats a name: the careers page is read first, which finds boards with slugs unrelated to the name and settles namesakes.

{ "companies": ["linear.app", "posthog.com", "channable.com", "bunq.com"], "maxCompanies": 500 }
  • Already know the vendor? Set atsList (e.g. ["greenhouse", "lever"]) to cut the probes.
  • Long or unusual company names: raise maxSlugGuesses to 6-8.
  • Known slug for some rows: pass { "name": "GitLab", "slugs": ["gitlab-inc"], "ats": "greenhouse" }.
  • Cost example: 200 companies of which 150 resolve = 150 x $0.005 + 50 x $0.001 + $0.01 = about $0.81.

3. Get alerted when target accounts switch ATS, start hiring or close their board

Set Watch mode: state key (stateKey) and schedule the Actor (daily or weekly) with the same company list:

{ "companies": ["Notion", "linear.app", "blueground.com"], "stateKey": "my-target-accounts", "minJobChange": 10 }
  1. The first run is a baseline: every company is returned and billed as usual, each with watch_change: "new".
  2. Every later run returns only the companies whose board changed since the previous run, with watch_change and the board as it was before (previous):
watch_changeMeaningTypical use
board-foundNo supported board before, a live one now.The account started hiring or moved to a readable ATS.
ats-changedBest board moved to another vendor (e.g. Lever -> Ashby).ATS migration = a sales trigger for recruiting tools and agencies.
slug-changedSame vendor, different board slug or region.Update the slug you feed into ATS Jobs Feed.
board-lostThe board was missing on 2 runs in a row.Hiring freeze, acquisition, or a move to an unsupported ATS (see other_ats).
jobs-changedOnly with minJobChange > 0: open jobs moved by at least that many since the company was last returned.Hiring surge / freeze signal.

Unchanged companies are not written to the dataset and are billed as company-checked ($0.001): watching 200 accounts weekly costs about $0.21 per run when nothing changed, plus $0.004 for each company that did. The state lives in a named key-value store in your account, so it survives between runs; use a different state key per company list. Connect the dataset to Slack, e-mail or a webhook with an Apify integration to get the changes as alerts.

4. Turn the boards into a job feed (new / closed jobs)

Each record carries feed_input ({ "ats": "ashby", "slug": "notion" }), the exact entry the ATS Jobs Feed Actor takes in its companies input. Two ways to chain them:

  • Once, no copy-paste (ATS Jobs Feed 0.9+): start ATS Jobs Feed with "companiesDatasetId": "<this run's dataset ID>" and diff mode on, or connect it under Integrations with {{resource.defaultDatasetId}}. It reads every feed_input and skips the companies not found. Each scheduled run then returns every new, updated and closed job as Markdown.
  • Kept up to date: schedule this Actor in watch mode on the full account list, and ATS Jobs Feed in diff mode on the boards. Only board-found, ats-changed and slug-changed records need action: add or replace that company's entry in the feed list with the new feed_input. A company that moves vendor gets new job ids, so the feed reports one wave of closed + new jobs for it.

ATS Jobs Feed can also take company names directly, but it then re-resolves them every run and caps lookups at 100 per run. Resolving here once and passing { ats, slug } pairs is faster and works for thousands of boards.

5. Find out which accounts use Workday, iCIMS, Taleo or SuccessFactors

Keep probeWebsite: true and give websites. When a company's careers page links to a vendor without a public job-board API, the record is found: false and the vendor is listed in other_ats (Workday, iCIMS, Taleo, SuccessFactors, BambooHR, Teamtailor, Jobvite, Breezy, Rippling, JazzHR, JOIN, Welcome to the Jungle, Pinpoint, Dover, HiBob, Freshteam). Filter the dataset on other_ats to segment your list by ATS. These companies are billed as company-checked ($0.001).

What this Actor cannot do

Read this before your first run. None of these fail the run: a company that errors is reported with errors (or in SUMMARY.json) and the others continue.

LimitWhat happensWhat to do
Other ATS vendors (Workday, iCIMS, Taleo, SuccessFactors, BambooHR, ...)found: false; the vendor is named in other_ats when the website reveals it. There is no public job-board API to verify thoseNone in this Actor. It only reports vendors it can verify
Board slug unrelated to the name (acme-corp-2019)The name-based guess misses it; found only through a link on the company's websiteGive the website, or pass the slug in slugs
NamesakesA live board on a guessed slug can belong to another company with the same nameCheck confidence, board_name and sample_titles; prefer high
Namesakes when the domain is not the name (Jump with jumpscientific.com)A board found only by guessing the short name is at most medium, because another company with that name may own itPass the slug, or give the careers-page URL as the website
Example board links on product pagesOnly pages whose path is a careers segment (/careers, /jobs, careers.example.com) are followed. A linked board of Lever / Ashby / Personio whose slug does not look like the company is medium, not highCheck sample_titles
Boards with a suffix (sumble-inc, valis-insights-1)Not guessedGive the website (the careers page usually links the board) or pass slugs
Careers pages rendered by JavaScriptNo browser is used, so the website step finds no link; the slug guesses still runGive the board URL as the website, or the slug
Custom careers domains on Recruitee or Personio (careers.example.com)Not recognised as a Recruitee / Personio linkThe slug guess from the name usually finds it; otherwise pass slugs and ats
Dormant accounts (an old Workable account with 0 jobs)A board with 0 open jobs counts as found only when the company's own site links to it; otherwise it goes to other_boards and the record is found: falseCheck other_boards
SmartRecruiters boards with zero postingsSmartRecruiters answers every company id with an empty list, so an empty board cannot be told from a wrong id and is reported as not foundCheck careers.smartrecruiters.com/<id> by hand
board_nameOnly Greenhouse, Workable and SmartRecruiters publish it; Lever and Ashby return nullUse sample_titles to confirm
robots.txt disallows the careers pageThe page is skipped and listed in pages_skipped_by_robots; API probes still run—
Rate limitsThe vendors do not publish limits. Workable answers HTTP 429 after about 50 lookups in 15 s from one IP and can then refuse the IP for several minutes (measured 2026-11-07). So Workable gets only the first slug guess (all guesses when the website mentions Workable or you set ats: "workable"), its lookups are spaced 650 ms apart, and 429 is retried after 2-4-8-16 s. A company still not found while a vendor kept failing gets incomplete: true: not charged, and watch mode keeps its previous stateRe-run the incomplete: true companies later; for Workable-heavy lists pass { "name": ..., "ats": "workable" }
Watch mode: two boards of similar sizeThe best-board pick can flip between runs and show as slug-changed / ats-changedCheck previous and other_boards
Watch mode: a board emptied for one runHeld, not reported; board-lost only on the second miss in a row—
Watch mode: changing atsList or maxSlugGuesses under the same keyCan look like changesUse a new stateKey
Budget cap (Max total charge per run or maxCompanies)The run stops cleanly before exceeding it. In watch mode the companies not checked keep their old state and are compared next runRaise the cap
Run aborted or migratedWatch mode saves the companies already processed, so the next run never reports (or bills) the same change twice—
No logins, no proxies, no personal dataOnly public job-board endpoints and public web pages are read. No candidate or employee data—

Input

All fields are on the Input tab; only companies is required.

FieldTypeDefaultNotes
companiesarrayrequiredStrings ("Acme", "acme.com", "https://acme.com/careers") and/or objects { name, website, slugs, ats }. Duplicates (same name + host) are checked once.
atsListarrayall sevenRestrict to some vendors, e.g. ["greenhouse", "lever"].
probeWebsitebooleantrueRead the company site for board links (only when a website is given).
maxSlugGuessesinteger4Slug variants tried per vendor. Raise to 6-8 for companies with long or unusual names.
includeSampleTitlesbooleantrueInclude up to 5 job titles per board, useful to confirm it is the right company when the slug is generic.
maxCompaniesinteger100Hard cap per run (also caps your cost).
stateKeystringemptyWatch mode: name of the key-value store that remembers each company's board. Empty = one-off lookup.
minJobChangeinteger0Watch mode: also return a company when its open-job count moved by at least this many. 0 = board changes only.

Output fields

FieldMeaning
foundtrue when a live board with open jobs was verified on a vendor API, or the company's site links to a (possibly empty) board.
ats, slug, regionBest board. region is eu for Lever EU boards (jobs.eu.lever.co).
board_url / api_urlThe vendor-hosted careers page and the public JSON endpoint that verified it.
board_nameCompany name as the vendor publishes it. Only Greenhouse, Workable and SmartRecruiters expose it; Lever and Ashby return null.
open_jobsListed jobs on the board at fetch time (Ashby: listed only; SmartRecruiters: totalFound).
confidencehigh: linked from the company's own site, or the vendor's board name matches the company name. medium: slug equals the normalised name or domain, or the site references the vendor. low: a live board on a guessed slug with nothing else. Boards with 0 open jobs are capped at medium.
evidencewebsite-link:<page>, api-probe:<ats>:<slug>, website-hint:<ats>.
other_boardsOther live boards for the company (a dormant Workable account, a second Greenhouse board, ...), same fields.
ats_hintsVendors referenced on the website without a resolvable slug (e.g. an embedded Greenhouse widget on a custom domain).
other_atsUnsupported vendors detected on the website: workday, icims, taleo, successfactors, bamboohr, teamtailor, jobvite, breezy, rippling, jazzhr, join, welcometothejungle, pinpoint, dover, hibob, freshteam.
watch_change / previousWatch mode only: why the company is in the output and the board as last returned (see above). null without a state key.
feed_input{ ats, slug[, region] } for the ATS Jobs Feed Actor.
pages_read / pages_skipped_by_robots / slugs_tried / probes / errorsWhat the Actor did for this company, for auditing. A company with errors may still be found.

Pricing

Pay-per-event. You pay per company, never per request the Actor makes on your behalf:

EventPriceWhen
board-found$0.005 per companyThe company resolved to a live board (verified on the vendor API) with open jobs, or linked from its own site. In watch mode: only when the board changed.
company-checked$0.001 per companyNo board was found (the record is still written, with ats_hints and other_ats). In watch mode also: a company whose board did not change (no record).
Actor start$0.01 per runApify's standard start event.

Use Max total charge per run to hard-cap spend; the Actor stops gracefully before exceeding it.

Data sources

VendorEndpoint probedDocumentationNotes
GreenhouseGET https://boards-api.greenhouse.io/v1/boards/{slug}/jobs and /v1/boards/{slug}https://docs.greenhouse.io/job-board.html—
LeverGET https://api.lever.co/v0/postings/{slug}?mode=json (EU: api.eu.lever.co)https://github.com/lever/postings-api—
AshbyGET https://api.ashbyhq.com/posting-api/job-board/{slug}https://developers.ashbyhq.com/docs/public-job-posting-api—
WorkableGET https://apply.workable.com/api/v1/widget/accounts/{slug}https://workable.readme.io/reference/jobs-1—
SmartRecruitersGET https://api.smartrecruiters.com/v1/companies/{slug}/postings?limit=5https://developers.smartrecruiters.com/docs/endpoints—
RecruiteeGET https://{slug}.recruitee.com/api/offers/https://docs.recruitee.com/reference/offersCareers Site API, no key. 404 for unknown companies. Custom careers domains (careers.example.com) are not recognised as Recruitee links; the slug guess still finds them.
PersonioGET https://{slug}.jobs.personio.de/xml (or .jobs.personio.com)https://developer.personio.de/docs/retrieving-open-job-positionsPublic XML feed, no key. Unknown companies answer 404 (since 2026-10-15) or redirect to personio.com; both count as "no board" and redirects are not followed.

All endpoints are public and documented by the vendors; no API keys are needed or accepted.

Verified

Version 0.2 (2026-10-02): Recruitee and Personio added to the probes and the careers-page link patterns (shared code with ATS Jobs Feed 0.4). Local run with the prefill input plus { "name": "Channable", "website": "channable.com" } and { "name": "Personio", "website": "personio.com" } and "bunq" (11 companies): 11 found, 0 not found in about 10 seconds; Channable -> recruitee:channable (10 open jobs, high, link found on channable.com), bunq -> recruitee:bunq (14, high), Personio -> personio:personio (1, medium). The eight original companies resolved exactly as in 0.1. Unit tests: 12.

Local run on 2026-09-28 with apify run --purge (Apify CLI 1.10, SDK 3.7.2, Node 24), prefill input (8 companies): all 8 resolved in about 5 seconds - PostHog -> ashby (8 jobs), Linear -> ashby (30), https://stripe.com -> greenhouse (699, high), blueground.com -> workable (10, high), SmartRecruiters -> smartrecruiters (1), GitLab -> greenhouse (200, high), Spotify -> lever (80), Notion -> ashby (128). Dormant Workable accounts with 0 jobs existed for six of the eight names and were correctly ranked into other_boards. Unit tests: npm test (11 tests: website parsing, slug candidates, careers-page link extraction, robots.txt rules, confidence and ranking).

Changelog

  • 0.3.4 (2026-10-14): README: ATS Jobs Feed 0.9 reads this Actor's dataset directly (companiesDatasetId). No code change.
  • 0.3.2 (2026-10-12): README rewritten by task (find the ATS, bulk mapping, watch alerts, chaining into ATS Jobs Feed, unsupported vendors) with a limits table. Platform run wCBux8QiLe6Z4ead7 on the prefill input: 8 companies in 3.7 s, 7 found (Stripe 726 jobs and GitLab 221 high); SmartRecruiters itself is now found: false because its own board has 0 postings, the limit described above.
  • 0.3 (2026-10-11): watch mode (stateKey, minJobChange): scheduled runs return only companies whose board changed. Platform check: baseline run 3 companies / 3 board-found, second run 0 records / 3 company-checked.
  • 0.2 (2026-10-02): Recruitee and Personio.
  • 0.1 (2026-09-28): Greenhouse, Lever, Ashby, Workable, SmartRecruiters.

Support

Open an issue on the Actor's Issues tab. Issues are answered within one business day; fixes ship as new builds without changing the input schema.

Made by Vellum Labs. Part of the same family as ATS Jobs Feed (jobs from the boards this Actor finds) and HN Threads & Hiring.