ATS Job Scraper - Paste a Domain, Get Open Roles avatar

ATS Job Scraper - Paste a Domain, Get Open Roles

Pricing

from $1.00 / 1,000 job delivereds

Go to Apify Store
ATS Job Scraper - Paste a Domain, Get Open Roles

ATS Job Scraper - Paste a Domain, Get Open Roles

Paste company domains like stripe.com; the ATS board is found and verified automatically across Greenhouse, Ashby, Lever and SmartRecruiters. Returns open roles with locations, departments, salary ranges where published, how long each role has been open, and a ghost-job score. No API key, no login.

Pricing

from $1.00 / 1,000 job delivereds

Rating

0.0

(0)

Developer

DONGMIN KIM

DONGMIN KIM

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

ATS Job Scraper — Company Domain In, Open Roles Out

Paste company domainsstripe.com, notion.so — and get their open roles: titles, locations, departments, salary ranges where the ATS publishes them, and how long each role has been open.

You do not have to know which ATS a company uses or look up its board slug. The actor works that out and verifies it, across Greenhouse, Ashby, Lever and SmartRecruiters. Measured on ten well-known companies it resolved 10/10 in about 0.4 seconds each. Board URLs still work if you already have them.

No API key, no login, no browser rendering. These four platforms serve their job boards as public JSON — it is how their own careers pages are built.

What makes this one different

Most job scrapers give you a snapshot of what is posted. This one also gives you ageDays — how long the role has actually been open — and a ghost score that compares each role against its own board's median.

The score combines how far past its board median a role has run with whether it has been closed and reposted. Reposts are only visible to something that was watching, and this actor reads a board once, so its scores top out at 65 — every row carries ghostScoreMax saying so. If you want the rest of the scale, the lifecycle monitor accumulates the history that unlocks it.

That single field surfaces things a snapshot cannot. From a live run:

Days openCompanyRole
1,253RampSoftware Engineer, Frontend
1,241StripeBackend Engineer/API, Payments and Risk
790StripeBackend Engineer, Core Technology

A role open for three and a half years at a company that hires constantly is telling you something — whether you are a candidate deciding where to spend an afternoon, a recruiter sizing a market, or an analyst tracking hiring health.

Input

{
"boardUrls": [
"stripe.com", // domain — ATS discovered automatically
"notion.so",
"https://jobs.ashbyhq.com/ramp", // board URL — used directly
"greenhouse:databricks" // explicit pair
],
"titleContains": ["engineer", "designer"],
"locationContains": ["Seoul", "Remote"],
"openLongerThanDays": 180,
"maxJobsPerBoard": 1000
}

Filters run before billing — filtered jobs are free, and so is the discovery step.

Every option

The same wording you see in the Apify console, with the JSON key for API and MCP callers.

OptionWhat it doesDefault
Companies to scrapeboardUrls (required)Paste plain company domains — stripe.com, notion.so — and the ATS board is found and verified automatically. Careers URLs work too: boards.greenhouse.io/<company>, jobs.ashbyhq.com/<company>, jobs.lever.co/<company>, jobs.smartrecruiters.com/<Company>.
Max jobs per boardmaxJobsPerBoardCost control. A large employer can have 800+ open roles.1000
Title contains any oftitleContainsCase-insensitive. Filtered jobs are not billed.
Location contains any oflocationContainsCase-insensitive, e.g. Seoul, London, Remote.
Remote onlyremoteOnlyKeep roles flagged remote by the ATS, or whose location mentions remote.false
Posted within (days)postedWithinDaysOnly roles first published within this window. 0 disables.0
Open longer than (days)openLongerThanDaysThe opposite filter — only long-running roles. Set to 180 to look for stale or ghost postings. 0 disables.0
Include ghost scoreincludeGhostScoreScore each role against its own board's median age and flag the outliers. Free.true
ConcurrencyconcurrencyBoards fetched in parallel. ATS endpoints are generous, so the default is conservative rather than necessary.5
ProxyproxyConfigurationLeave the default. ATS endpoints are public and rarely throttle, so runs almost always stay on cheap datacenter proxies.{"useApifyProxy":true}

Output

{
"ats": "greenhouse",
"boardSlug": "stripe",
"jobId": "8077887",
"title": "Backend Engineer/API, Payments and Risk",
"url": "https://boards.greenhouse.io/stripe/jobs/8077887",
"location": "Dublin, Ireland",
"department": "Engineering",
"companyName": "Stripe",
"firstPublishedAt": "2023-03-16T09:12:00-04:00",
"ageDays": 1241,
"ghostScore": 65,
"ghostScoreMax": 65,
"ghostScoreBasis": "age-only",
"ghostReasons": ["open 1241 days (board median 49)", "older than a year"],
"boardMedianAgeDays": 49,
"scrapedAt": "2026-08-13T09:22:14.001Z"
}

Every field

You are billed per role delivered, so here is everything a row can contain.

FieldWhat it is
atsWhich platform the board runs on: greenhouse, ashby, lever or smartrecruiters.
boardSlugThe company's slug on that platform. ats + boardSlug identifies the board.
companyDomainThe domain you passed, when the board was discovered from it. Absent when you passed a board URL directly, because that is the only case where we do not know it.
companyNameCompany name as the board publishes it.
jobIdThe platform's id for the role, as a string.
titleRole title.
urlPublic application URL.
locationLocation string as published. Boards vary from "Remote" to a full city/region/country.
departmentDepartment or team. On Greenhouse this comes from a separate departments lookup — see below.
teamA finer-grained team, where the platform has one separate from department.
employmentTypeFull-time, contract, intern, and so on.
workplaceTypeRemote / hybrid / on-site, where the platform publishes it as its own field.
isRemoteBoolean remote flag, where the platform publishes one.
isListedfalse for a role that is delisted but not deleted — Ashby is the only platform that distinguishes the two.
salaryRangemin, max, currency, interval — only when the board actually publishes pay.
requisitionIdThe company's internal requisition number, where the board exposes it.
firstPublishedAtWhen the role was first posted. Everything about ageing rests on this.
updatedAtLast edit to the posting, where the board publishes it.
ageDaysDays open, computed from firstPublishedAt.
scrapedAtWhen this run read the board.
ghostScore0–ghostScoreMax. Only with Include ghost score on.
ghostScoreMaxThe highest score reachable in this run — 65 here, because republish history needs a watcher over time and this actor takes one snapshot. Read the score against this, not against 100.
ghostScoreBasisWhat the score could see: age-only here. The lifecycle monitor reaches age-and-republish-history.
ghostReasonsPlain-language reasons, e.g. "open 1241 days (board median 49)".
boardMedianAgeDaysThe board's own median age, which is what the score is relative to. A 200-day role is unremarkable on a board whose median is 180.

Varies by platform

Every board gives an id, a title and a first-published date, which is what the ageing and ghost scoring rest on. The rest depends on which ATS the company runs. Measured over one run across two boards:

FieldGreenhouseAshby
department200/200136/136
updatedAt, requisitionId200/2000/136
team, employmentType, isRemote, isListed0/200136/136
salaryRange0/2000/136

Nothing is invented to fill a gap: a field the board does not publish is simply absent from the row. salaryRange is empty above because neither of those two boards posts one — Lever boards frequently do, and Lever is also where workplaceType comes from.

Who this is for

  • Recruiters and talent researchers — which competitors are hiring, where, for what, and how fast they fill it.
  • B2B sellers — a company hiring for a role is buying the tools around it.
  • Market researchers — open roles by function, level and city, straight from the source rather than an aggregator.
  • Candidates and job-board operators — skip the postings that have been open for two years.

Common uses

  • Job market research — how long roles stay open by function, level and city.
  • Recruiting intelligence — which competitors are hiring, where, and how fast they fill.
  • Lead generation — companies hiring for a role are buying the tools around it.
  • Candidate triage — skip the postings that have been open for two years.
  • Investor signals — headcount direction from careers pages, before it reaches filings.

Pricing

Pay per job delivered. Filtered jobs and failed boards cost nothing.

Starting a run costs $0.00002 — the platform's $0.00001 minimum, charged once per GB of memory, and these Actors run on 2 GB. That is two cents per thousand runs, and it is the only charge not tied to a row you received.

Other Actors in this family

Same engines, same billing, no account or API key on any of them.

YouTube & video

Search demand

E-commerce

Hiring

FAQ

Does it need an API key? No. All four platforms serve public JSON.

How does it find the board from a domain? It guesses the slug from the domain and validates it against the ATS board API — a board either returns jobs or it does not, so the answer is verified rather than inferred. If that misses, it reads the company careers page for an ATS link and validates that instead. Rows discovered this way carry a companyDomain field.

Which ATS are supported? Greenhouse, Ashby, Lever and SmartRecruiters — verified live.

Where does ageDays come from? The ATS publishes a first-published date on every role. It is not estimated.

Can I track when a role closes? Not from a single run — no ATS publishes that. Use the Job Lifecycle Monitor, which watches boards on a schedule and reports closures, reposts and silent edits.

Can I run it on a schedule? Yes, via Apify Schedules, webhooks, or the API. Also available over MCP for AI agents.

Is it legal to scrape job boards? This one has an unusually clean answer. Greenhouse, Ashby, Lever and SmartRecruiters each publish a documented, public, no-authentication job board API, and they publish it so that job listings get syndicated. There is no login, nothing bypassed, and no rate limit worked around. Each company's own terms are a separate contract question. Not legal advice.

Will I get blocked or rate-limited? These are official JSON endpoints built for syndication, not pages defended against scraping — which is why this Actor runs on cheap datacenter proxies and rarely needs anything else. That is also the practical reason to prefer ATS boards over aggregator sites.

How much does 1,000 roles cost? $1.00, plus $0.00002 for the run. Roles your filters remove and boards that fail are never billed.

Can I export the results to Excel or Google Sheets? Yes. Every run's dataset downloads as CSV, Excel, JSON, XML or RSS from the Storage tab, or straight from the API if you want a live link a spreadsheet can pull.

Can I connect it to Zapier, Make or n8n? Yes — Apify publishes integrations for all three, plus webhooks that fire when a run finishes. A common setup is a schedule here and a webhook into your own database or Slack.

Do I need to write code? No. Fill the form in the console and press Start. If you do want code, the Apify client libraries for Python and JavaScript call this the same way, and it is available over MCP so an AI agent can call it directly.