ATS Hiring Signal Radar avatar

ATS Hiring Signal Radar

Pricing

from $20.00 / 1,000 company scanneds

Go to Apify Store
ATS Hiring Signal Radar

ATS Hiring Signal Radar

Turn public ATS job changes into company-level hiring intent signals. Monitor Greenhouse, Lever, Ashby to detect first hires, team buildouts, geo expansion, and function-specific buying signals.

Pricing

from $20.00 / 1,000 company scanneds

Rating

0.0

(0)

Developer

Juyeop Park

Juyeop Park

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

0

Monthly active users

15 days ago

Last modified

Share

Monitor target accounts on public Greenhouse, Lever, and Ashby boards, then turn job-posting changes into explainable hiring-intent signals for SDR, RevOps, and founder-led sales workflows.

This Actor helps prioritize when to investigate an account and what hiring evidence to reference. Hiring activity is a sales-research signal, not proof that a company will buy.

Quickstart: monitor 3 target accounts

Start with three public ATS boards and a hard company cap. A small run typically completes in under five minutes, but ATS availability can affect run time.

{
"companies": [
{
"name": "Stripe",
"domain": "stripe.com",
"boardUrl": "https://boards.greenhouse.io/stripe",
"tags": ["target-account", "fintech"]
},
{
"name": "Spotify",
"domain": "spotify.com",
"boardUrl": "https://jobs.lever.co/spotify",
"tags": ["target-account", "media"]
},
{
"name": "Linear",
"domain": "linear.app",
"boardUrl": "https://jobs.ashbyhq.com/linear",
"tags": ["target-account", "dev-tools"]
}
],
"changesOnly": false,
"triggerPack": "all",
"minConfidence": 0.3,
"maxCompaniesPerRun": 3,
"emitSignalsOnFirstScan": false,
"snapshotNamespace": "starter-pack-sales-accounts"
}

What to expect

  1. First run = baseline. The Actor records current jobs. With emitSignalsOnFirstScan: false, each successfully processed company is labeled as a baseline rather than a new signal.
  2. Later runs = deltas. Reuse the same snapshotNamespace, set changesOnly: true, and run daily or weekly. Dataset rows appear only for companies whose jobs changed; RUN_SUMMARY is still written for the run.
  3. Route completed runs. An Apify ACTOR.RUN.SUCCEEDED webhook can notify Make, Zapier, or your own endpoint, which can fetch the Dataset and RUN_SUMMARY before posting selected fields to Slack or a CRM.

Optional immediate demo vs. normal monitoring

The quickstart above is the recommended monitoring path: emitSignalsOnFirstScan stays false, so the first run is a clean baseline.

To inspect populated signal fields immediately, run one company once with emitSignalsOnFirstScan: true and a separate demo namespace:

{
"companies": [
{
"name": "Stripe",
"domain": "stripe.com",
"boardUrl": "https://boards.greenhouse.io/stripe",
"tags": ["target-account", "fintech"]
}
],
"changesOnly": false,
"triggerPack": "all",
"minConfidence": 0.3,
"maxCompaniesPerRun": 1,
"emitSignalsOnFirstScan": true,
"snapshotNamespace": "starter-pack-immediate-demo"
}

Demo mode compares all current roles with an empty snapshot, so it can populate intentEvent, whyNow, and recommendedAngle while isFirstScan is still true. It is not a measured hiring delta or purchase-intent proof. Use the normal false path and a stable production namespace for scheduled monitoring.

Cost guardrail

At the current event prices, three successfully processed companies create up to $0.06 in company-scanned events. Actor-start events are separate and depend on selected memory (the current 4 GB default is about $0.0002 per run). These are estimates; check the current Pricing tab before scheduling larger account lists.

Why This Actor?

Raw job scrapers return listings. This Actor adds monitoring context.

Raw job dataThis Actor
"Acme has 23 open roles""Acme added RevOps roles; evaluate a CRM or pipeline-tooling outreach hypothesis"
Job listing dumpNamed hiring-intent event with confidence and evidence
One-time snapshotNamespaced snapshots for scheduled change detection
Manual row filteringsignalScore, whyNow, and recommendedAngle fields for account research

No login or proxy is required for the three supported public ATS APIs. External provider availability and API behavior can still change.

Who Is It For

Primary buyer: B2B SDR, RevOps, or founder-led sales operators.

Use this Actor when your job is to monitor a defined target-account list and prepare an evidence-backed outreach hypothesis after public ATS changes. It is not positioned as a general-purpose recruiter job scraper.

Supported ATS Platforms

PlatformMethodAuth RequiredProxy NeededRegion
GreenhouseOfficial Job Board APINoNoGlobal
LeverOfficial Postings APINoNoUS + EU
AshbyOfficial Public APINoNoGlobal

Only these three providers are supported in the current release. Workday, Rippling, BambooHR, and JazzHR are not currently supported.

Key Features

10 Intent Triggers Across 3 Packs

Pre-built detection patterns that convert raw job deltas into named, explainable events:

GTM Pack — Sales, Marketing, RevOps signals

TriggerFires WhenRecommended Angle
first_revops_buildoutFirst Sales Ops / CRM / Salesforce role appearsCRM, pipeline visibility, forecasting
sales_team_expansion3+ new sales roles postedSales enablement, lead gen, outreach tools
marketing_ramp2+ new marketing roles postedMarketing automation, ABM, analytics

Engineering Pack — Dev, Security, Data, AI signals

TriggerFires WhenRecommended Angle
ai_platform_buildoutFirst ML/AI/LLM role appearsMLOps, GPU infra, vector DBs, LLM tooling
first_security_hireFirst security role with no prior security teamSIEM, compliance, identity management
engineering_surge5+ new engineering roles postedDev tools, CI/CD, cloud infra, observability
data_team_buildout2+ new data roles postedData warehousing, ETL, BI platforms

Expansion Pack — Geo, Leadership, New Functions

TriggerFires WhenRecommended Angle
geo_expansionJobs posted in previously unseen locationsLocalization, compliance, local partnerships
leadership_hiring2+ director/VP/C-level roles postedOrg restructuring, strategic planning
new_function_launchEntirely new function (e.g. legal, finance) appearsFunction-specific tooling, consulting

Snapshot Diffing

Automatically stores and compares job snapshots between runs:

  • New roles added since last scan
  • Roles removed (filled or closed)
  • Net headcount change
  • Function distribution shifts (engineering vs. sales vs. marketing...)

Signal Scoring

Each company receives a 0-100 signal score:

  • high (70+) — Strong hiring momentum with clear intent triggers
  • medium (40-69) — Notable changes worth monitoring
  • low (15-39) — Minor activity detected
  • none (0-14) — Stable or no meaningful changes

First Scan Behavior

For normal monitoring, keep emitSignalsOnFirstScan: false. The first scan stores a baseline without signals; later runs compare against that snapshot.

Setting emitSignalsOnFirstScan: true is an optional demonstration mode. It evaluates the current board against an empty snapshot and may populate signal fields immediately, but the row remains a first-scan baseline and is not a real period-over-period delta.

Input

Full Input Reference

FieldTypeDefaultDescription
companiesarrayrequiredList of companies to monitor. Each needs name and ideally boardUrl.
changesOnlybooleanfalseOnly output companies with changes since last run. Ideal for scheduled alerts.
triggerPackstring"all"Which triggers to run: all, gtm, engineering, or expansion.
minConfidencenumber0.3Only report signals above this confidence (0.0 - 1.0).
maxCompaniesPerRuninteger100Cap companies per run to control cost. Max 1000.
emitSignalsOnFirstScanbooleanfalseEmit signals even on the first scan (normally suppressed for baseline).
snapshotNamespacestringautoCustom namespace for snapshot storage. Useful for separate monitoring contexts.

Company Object

FieldTypeRequiredDescription
namestringYesCompany name
domainstringNoCompany domain (e.g. stripe.com). Used for auto-detection.
boardUrlstringNoDirect ATS board URL. Recommended for reliable detection.
tagsstring[]NoCustom tags for filtering (e.g. "competitor", "prospect", "portfolio")

Scheduled Monitoring Input

Use this input for the first baseline run. After it succeeds, keep the same snapshotNamespace and change only changesOnly to true for the scheduled Task.

{
"companies": [
{
"name": "Stripe",
"domain": "stripe.com",
"boardUrl": "https://boards.greenhouse.io/stripe",
"tags": ["target-account", "fintech"]
},
{
"name": "Spotify",
"domain": "spotify.com",
"boardUrl": "https://jobs.lever.co/spotify",
"tags": ["target-account", "media"]
},
{
"name": "Linear",
"domain": "linear.app",
"boardUrl": "https://jobs.ashbyhq.com/linear",
"tags": ["target-account", "dev-tools"]
}
],
"changesOnly": false,
"triggerPack": "all",
"minConfidence": 0.3,
"maxCompaniesPerRun": 3,
"emitSignalsOnFirstScan": false,
"snapshotNamespace": "starter-pack-sales-accounts"
}

Output

Each successfully processed company produces one Dataset record unless changesOnly: true filters an unchanged company. Skipped or failed companies do not produce a result row.

Output Fields Reference

FieldTypeDescription
companystringCompany name
domainstringCompany domain
tagsstring[]User-provided tags
providerstringATS provider (greenhouse, lever, ashby)
slugstringATS board slug
boardUrlstringFull ATS board URL
intentEventstringPrimary trigger ID (e.g. first_revops_buildout) or no_signal
intentLabelstringHuman-readable trigger label
signalScorenumber0-100 composite signal score
signalStrengthstringhigh, medium, low, or none
confidencenumberConfidence of the primary signal (0.0 - 1.0)
whyNowstring[]Evidence array explaining why this signal fired
recommendedAnglestringSuggested outreach angle or use case
allSignalsobject[]All detected signals (not just primary)
newRolesnumberNew roles since last scan
removedRolesnumberRemoved roles since last scan
netChangenumberNet headcount change
totalOpenRolesnumberCurrent total open roles
previousOpenRolesnumberTotal open roles at last scan
isFirstScanbooleanWhether this is the first scan for this company
functionDistributionobjectRole count by function (engineering, sales, data...)
newJobDetailsobject[]Detailed new job info (only in changesOnly mode)
scannedAtstringISO timestamp of this scan
snapshotAgestringISO timestamp of previous snapshot

Actual Baseline Output (public latest smoke)

The proposed three-company quickstart was run on public build 1.0.14 / v38fugaIfthTTrCTI on 2026-07-14. This selected-field Dataset row shows normal first-run semantics:

{
"company": "Linear",
"provider": "ashby",
"intentEvent": "no_signal",
"signalScore": 0,
"whyNow": [],
"recommendedAngle": "",
"newRoles": 24,
"totalOpenRoles": 24,
"isFirstScan": true
}

Actual Immediate-Demo Output (unchanged runtime, local validation)

A one-company validation run used emitSignalsOnFirstScan: true. The current Stripe board was evaluated against an empty snapshot and produced these selected fields:

{
"company": "Stripe",
"provider": "greenhouse",
"intentEvent": "sales_team_expansion",
"intentLabel": "Sales Team Expansion",
"signalScore": 84,
"signalStrength": "high",
"confidence": 0.95,
"whyNow": [
"Account Executive, AI Sales (Grower) posted",
"Account Executive, Commercial Grower (Japanese Fluency) posted",
"Account Executive, Commercial Hunter (Japanese Fluency) posted",
"Account Executive, Cross Border China posted",
"Account Executive - Enterprise, Grower posted"
],
"recommendedAngle": "Sales enablement, lead generation, outreach tooling",
"newRoles": 523,
"totalOpenRoles": 523,
"isFirstScan": true
}

These values are time-sensitive public job-board observations, not guaranteed future output. The demo row is still a baseline; it is not a later-run delta or proof of buying intent.

The following actual RUN_SUMMARY came from the public three-company baseline smoke and was stored separately in the Key-Value Store:

{
"totalCompanies": 3,
"processed": 3,
"skipped": 0,
"signalsDetected": 0,
"errors": 0,
"triggerPack": "all",
"changesOnly": false,
"completedAt": "2026-07-14T07:56:50.465Z"
}

Schedule Weekly Monitoring

Use one Apify Task so the input and snapshot context remain stable:

  1. Create a Task with the Starter Pack input and a unique, stable snapshotNamespace for this account list.
  2. Run the Task once with changesOnly: false. This baseline run records current roles. A normal first run does not imply that no hiring exists; it means no prior snapshot was available for comparison.
  3. Change only changesOnly to true. Keep the same company list and snapshotNamespace.
  4. Attach a daily or weekly Apify Schedule to that Task. A Schedule is time-based; it does not wait for a separate upstream workflow.
  5. Add an ACTOR.RUN.SUCCEEDED webhook to Make, Zapier, or your own endpoint. The receiver can fetch:
    • Dataset items for companies with detected changes;
    • RUN_SUMMARY for processed/skipped/signal/error counts;
    • intentEvent, signalScore, whyNow, and recommendedAngle for Slack or CRM formatting.
  6. Treat an empty Dataset as “no changed companies for this run,” not as a failed run. Check RUN_SUMMARY and the run status before deciding whether to notify a sales channel.

Use a separate snapshotNamespace for each distinct account list or monitoring workflow. Raising minConfidence to 0.5 can reduce lower-confidence signal rows, but does not guarantee sales relevance.

Pricing

This Actor uses pay-per-event (PPE) pricing with two existing events:

  • company-scanned: $0.02 for each company successfully processed;
  • apify-actor-start: $0.00005 per GB when the Actor starts (one event per GB, minimum one).

The company-scanned event is not charged for a company that is skipped or fails. The Actor-start charge remains separate.

Company outcomecompany-scanned events
Company scanned and a result returned1
ATS board not found or unsupported0
changesOnly mode with no changes0
Suspicious data drop awaiting confirmation0
Processing error0

Estimated company-scan cost at $0.02/event

CompaniesFrequencyEstimated events/monthEstimated company-scan cost
50Daily~1,500~$30/month
100Daily~3,000~$60/month
200Daily~6,000~$120/month
200Weekly~800~$16/month

These estimates assume every listed company is successfully processed on every run. Actor-start events and any current platform charges are separate; verify the Pricing tab before enabling a large schedule.

Changelog

v1.0.0

  • Initial release
  • Greenhouse, Lever (US + EU), Ashby support
  • 10 intent triggers across GTM, Engineering, Expansion packs
  • Snapshot diffing with signal scoring
  • First-scan baseline capture (false positive prevention)
  • Retry/timeout handling with exponential backoff
  • Namespaced snapshot storage for multi-context monitoring