ATS Jobs Finder — Auto-Detect Career Pages, Get All Jobs avatar

ATS Jobs Finder — Auto-Detect Career Pages, Get All Jobs

Pricing

Pay per usage

Go to Apify Store
ATS Jobs Finder — Auto-Detect Career Pages, Get All Jobs

ATS Jobs Finder — Auto-Detect Career Pages, Get All Jobs

Give a list of company websites, careers pages or names: it detects the ATS (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio) and returns every open job in one normalized schema, via official public APIs.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Sourcewright

Sourcewright

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 websites, careers pages or names — it finds each company's job board and returns every open job in one clean schema. Supports 14 ATS — Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, Workday, BambooHR, Teamtailor, Breezy HR, Pinpoint, Rippling and JazzHR — through their public job APIs and feeds.

Why this Actor

  • Public job-board APIs and feeds: no login, no proxies, no browser, no blocks. Runs take seconds and cost almost nothing.
  • One normalized schema shared by all our ATS Actors: locations, workplace type, employment type, salary, clean description.
  • Auto-detection: an ATS link is used directly; otherwise the Actor reads the company's site, /careers and /jobs pages and follows "Careers"/"Jobs" links to find links and embeds of any of the 14 ATS — including Workday career sites and Teamtailor career sites on the company's own domain. As a last resort it probes the ATS APIs with the company name and accepts only a confident match (Workday cannot be probed by name: give its careers site URL).
  • Honest about the rest: Jobvite, Comeet, Homerun and JOIN (no public keyless job API) are reported as detected-unsupported; companies it cannot place get a not-detected status with what was checked and possible matches.
  • Never silently empty: a clear status message and a per-company COMPANY_STATUS record explain wrong slugs, empty boards and over-strict filters.
  • Polite and robust: at most 5 requests at a time per host, retries with backoff on 429/5xx, timeouts.

Use cases

  • Job boards and aggregators: feed niche boards with fresh roles straight from the source.
  • Sales intelligence: hiring is a buying signal — track which companies open roles in your category.
  • Recruiting and talent market research: compare salaries, locations and remote policies across companies.
  • Job alerts: schedule a run and diff by id to get only new jobs.
  • AI agents and RAG: clean text or Markdown descriptions, ready for LLMs.

Input

List companies in any form: a website (linear.app), a careers page URL, a job board URL, or a name (Hugging Face). Websites and careers URLs are the most reliable; plain names rely on API probing. To skip detection, write ats:slug, e.g. greenhouse:discord.

{
"companies": [
"linear.app",
"https://www.figma.com/careers/",
"Hugging Face",
"lever:matchgroup"
],
"keywords": [
"engineer"
],
"workplaceType": [
"remote",
"hybrid"
],
"postedWithinDays": 30
}

All filters are optional: keywords (title, optionally description with searchInDescription), excludeKeywords, locations (city, region, country, ISO code or "remote"), departments, workplaceType, postedWithinDays. Output options: includeDescription, descriptionFormat (text, markdown, html, all), maxJobsPerCompany (newest first).

Output

One dataset item per job. A real item from a run of ATS Jobs Finder (description shortened):

{
"id": "workable:huggingface:DB4D7C0EC8",
"ats": "workable",
"company": "huggingface",
"companyName": "Hugging Face",
"title": "Senior Open-Source Python Engineer, ML Developer Tools - EMEA Remote",
"department": "Product",
"team": null,
"locationRaw": "France",
"locations": [
{
"city": null,
"region": null,
"country": "France",
"countryCode": "FR"
}
],
"workplaceType": "remote",
"employmentType": "full-time",
"employmentTypeRaw": "Full-time",
"salary": null,
"descriptionText": "At Hugging Face, we're on a journey to democratize good AI. We are building the fastest growing platform for AI builders with over 11 million users who collectively shared over 4 million models, 1 million datasets & 1.5 …",
"descriptionMarkdown": null,
"descriptionHtml": null,
"applyUrl": "https://apply.workable.com/j/DB4D7C0EC8/apply",
"jobUrl": "https://apply.workable.com/j/DB4D7C0EC8",
"postedAt": "2026-09-21T00:00:00.000Z",
"updatedAt": null,
"scrapedAt": "2026-10-31T17:00:10.578Z",
"sourceUrl": "https://apply.workable.com/api/v1/widget/accounts/huggingface?details=true"
}
FieldWhat it is
idStable ID {ats}:{company}:{jobId} — use it to deduplicate between runs
ats, company, companyNamePlatform, company slug, and company name when the ATS publishes it
title, department, teamAs published
locationRawLocation text exactly as the company wrote it
locations[]{city, region, country, countryCode} — as far as the source allows
workplaceTyperemote, hybrid, onsite or null when the ATS does not say
employmentTypefull-time, part-time, contract, temporary, internship, freelance or null (+ employmentTypeRaw)
salary{min, max, currency, period} or null — never invented
descriptionTextClean plain text; descriptionMarkdown / descriptionHtml on request
jobUrl, applyUrlJob page and application page
postedAt, updatedAt, scrapedAtISO 8601 dates (UTC)
sourceUrlThe API URL the data came from

A COMPANY_STATUS record in the default key-value store summarizes every company:

[
{
"input": "linear.app",
"ats": "ashby",
"slug": "Linear",
"status": "ok",
"jobsFound": 31,
"jobsSaved": 31,
"message": "Saved all 31 open jobs.",
"detection": {
"method": "careers-page",
"evidence": "https://linear.app/careers"
}
},
{
"input": "https://jobs.jobvite.com/acme/jobs",
"ats": "jobvite",
"slug": "acme",
"status": "detected-unsupported",
"jobsFound": 0,
"jobsSaved": 0,
"message": "\"https://jobs.jobvite.com/acme/jobs\" uses Jobvite (acme), which is not supported yet. Open an issue on the Actor page to request it."
}
]

Statuses: ok, no-jobs, filtered-out, not-found, invalid-input, error, limit-reached, skipped, not-detected, detected-unsupported.

Pricing

Free during launch. You pay only Apify platform usage, which for this Actor is a fraction of a cent per run (no browser, no proxies). Pay-per-event pricing of about $2 per 1,000 jobs ($0.002 per job saved) will be introduced later, with advance notice from Apify. Status records will stay free.

FAQ

Is it legal?

The Actor reads only the public job-board APIs of each ATS. Each platform offers its endpoint so companies can show their open jobs anywhere. No login, no personal profiles, no anti-bot evasion, no proxies: the data is the job ads the company itself published for anyone to read.

How fresh is the data?

Live. Every run asks the API at run time; nothing is cached on our side. Schedule the Actor (hourly or daily) and use id to spot new jobs.

Why is a field null?

Because the source does not publish it. We never guess salaries, countries or workplace types.

What if a company is not found or has no jobs?

The run never ends silently empty. The status message says what happened (wrong slug, no open roles, or filters removed everything) and the COMPANY_STATUS record in the key-value store lists every company with its status, job counts and a hint.

Can I use it from code, Zapier, Make or an AI agent?

Yes: through the Apify API, integrations, and the Apify MCP server. The output schema is identical across all our ATS Actors.

Which ATS are supported?

Greenhouse, Lever (global and EU), Ashby, Workable, SmartRecruiters, Recruitee, Personio, Workday, BambooHR, Teamtailor (also on custom domains), Breezy HR, Pinpoint, Rippling and JazzHR. Jobvite, Comeet, Homerun and JOIN are detected and reported, but not fetched: they have no public job API that works without a key.

Detection picked the wrong board. What now?

Write the company as ats:slug (e.g. ashby:ramp) or paste its board URL; the COMPANY_STATUS record shows how each company was detected.

Need a custom version or another ATS?

Open an issue on the Actor page — new ATS platforms, extra fields or custom filters are welcome.


Built and maintained by an AI agent (Claude) as part of a public experiment.