ATS Hiring Signals — cross-ATS jobs + new-role deltas avatar

ATS Hiring Signals — cross-ATS jobs + new-role deltas

Pricing

Pay per usage

Go to Apify Store
ATS Hiring Signals — cross-ATS jobs + new-role deltas

ATS Hiring Signals — cross-ATS jobs + new-role deltas

Track hiring across company career sites (Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee). Get normalized job postings, only-new deltas with first-seen dates, and per-company hiring rollups (buying signals). Non-personal data.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

tkmvictim

tkmvictim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

ATS Hiring Signals — cross-ATS jobs + new-role delta & company rollups

Track hiring across company career sites and sell the derived signal, not a raw wrapper.

Why this and not a plain job scraper: anyone can hit a single ATS's public JSON for free. The product is the layer on top — a normalized cross-ATS schema, only-new deltas with firstSeenAt dates, and per-company hiring rollups ("who just started hiring for what") that buyers (recruiters, B2B sales tracking hiring spikes as buying signals) cannot self-serve.

Supported ATS (Tier-1, public JSON, no auth, non-personal)

Greenhouse · Lever · Ashby · SmartRecruiters · Recruitee. (Workday / iCIMS are intentionally out — anti-bot heavy, would break the passive/self-healing model. Add as a separate isolated actor later.)

Input

{
"companies": [
{ "ats": "greenhouse", "slug": "stripe" },
{ "ats": "ashby", "slug": "ramp" },
{ "ats": "lever", "slug": "matchgroup" }
],
"mode": "full",
"emitCompanyRollup": true,
"filters": { "titleKeywords": [], "departments": [], "remoteOnly": false },
"maxJobsPerCompany": 0
}
  • mode full — every active job (+ closed). mode delta — only newly-opened / newly-closed roles (uses the stored per-company snapshot). Run on a daily Schedule in delta mode to generate recurring buying-signal consumption.

Output (dataset)

  • Job records: { jobId, company, companySlug, ats, title, department, team, location{raw,remote}, employmentType, applyUrl, sourceUrl, postedAt, firstSeenAt, lastSeenAt, status }statusnew | active | closed.
  • Company rollups (_type: "company_rollup"): { company, ats, activeJobs, newJobs, closedJobs, newDepartments, newRoles[], isBaseline }.

Pricing (pay-per-event — configure in Console)

EventSuggested priceRole
job-listed$0.002 / jobcommodity full-mode records (acquisition)
new-job-delta$0.01 / new rolethe product — pre-computed only-new feed
company-hiring-rollup$0.05 / companyhighest-margin buying-signal intelligence

Don't compete on $/1,000 raw jobs (incumbents win on volume). Charge for the signal.

Non-personal job & firmographic data. Sell derived data (first-seen, velocity, rollups), not verbatim bulk redistribution — Greenhouse's terms restrict reselling raw bulk. Never extract recruiter names/emails from descriptions (keeps it out of PII/GDPR territory). Public endpoints only; no login/cookies.

Self-healing notes

Tolerant key-based parsing per ATS; a company that 404s is skipped, not fatal. Baseline runs (no prior snapshot) mark everything active, never new, to avoid a false "all-new" explosion. State lives in the KV store keyed per company.