ATS Hiring Signal Radar
Pricing
from $20.00 / 1,000 company scanneds
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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Monitor public ATS career pages and turn job posting changes into company-level hiring intent signals — so you know who is hiring, what they're building, and why it matters to you.
Why This Actor?
Job scrapers give you rows. This actor gives you answers.
| Job Scraper | This Actor |
|---|---|
| "Acme has 23 open roles" | "Acme is building a RevOps team for the first time — they likely need CRM and pipeline tooling" |
| Raw job listing dump | Actionable intent event with confidence score |
| Runs once, gives a snapshot | Tracks changes over time, alerts on what's new |
| You filter 500 rows manually | You get 5 high-signal accounts ready to act on |
Zero proxies. Zero login. Zero maintenance. All data comes from official public ATS APIs — no anti-bot issues, no cookie management, no breakage.
Who Is It For
- SDRs / Sales Teams — Find accounts showing buying intent before your competitors do
- Recruiters / Talent Intelligence — Track which companies are ramping specific teams
- Investors / Analysts — Monitor portfolio company growth and hiring velocity
- Market Researchers — Detect industry trends from hiring patterns at scale
Supported ATS Platforms
| Platform | Method | Auth Required | Proxy Needed | Region |
|---|---|---|---|---|
| Greenhouse | Official Job Board API | No | No | Global |
| Lever | Official Postings API | No | No | US + EU |
| Ashby | Official Public API | No | No | Global |
V2 roadmap: Workday, Rippling, BambooHR, JazzHR.
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
| Trigger | Fires When | Recommended Angle |
|---|---|---|
first_revops_buildout | First Sales Ops / CRM / Salesforce role appears | CRM, pipeline visibility, forecasting |
sales_team_expansion | 3+ new sales roles posted | Sales enablement, lead gen, outreach tools |
marketing_ramp | 2+ new marketing roles posted | Marketing automation, ABM, analytics |
Engineering Pack — Dev, Security, Data, AI signals
| Trigger | Fires When | Recommended Angle |
|---|---|---|
ai_platform_buildout | First ML/AI/LLM role appears | MLOps, GPU infra, vector DBs, LLM tooling |
first_security_hire | First security role with no prior security team | SIEM, compliance, identity management |
engineering_surge | 5+ new engineering roles posted | Dev tools, CI/CD, cloud infra, observability |
data_team_buildout | 2+ new data roles posted | Data warehousing, ETL, BI platforms |
Expansion Pack — Geo, Leadership, New Functions
| Trigger | Fires When | Recommended Angle |
|---|---|---|
geo_expansion | Jobs posted in previously unseen locations | Localization, compliance, local partnerships |
leadership_hiring | 2+ director/VP/C-level roles posted | Org restructuring, strategic planning |
new_function_launch | Entirely new function (e.g. legal, finance) appears | Function-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
On the first scan of a new company, the actor captures a baseline snapshot without emitting signals (to avoid false positives). Signals start firing from the second run onward. You can override this with emitSignalsOnFirstScan: true.
Input
Full Input Reference
| Field | Type | Default | Description |
|---|---|---|---|
companies | array | required | List of companies to monitor. Each needs name and ideally boardUrl. |
changesOnly | boolean | false | Only output companies with changes since last run. Ideal for scheduled alerts. |
triggerPack | string | "all" | Which triggers to run: all, gtm, engineering, or expansion. |
minConfidence | number | 0.3 | Only report signals above this confidence (0.0 - 1.0). |
maxCompaniesPerRun | integer | 100 | Cap companies per run to control cost. Max 1000. |
emitSignalsOnFirstScan | boolean | false | Emit signals even on the first scan (normally suppressed for baseline). |
snapshotNamespace | string | auto | Custom namespace for snapshot storage. Useful for separate monitoring contexts. |
Company Object
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Company name |
domain | string | No | Company domain (e.g. stripe.com). Used for auto-detection. |
boardUrl | string | No | Direct ATS board URL. Recommended for reliable detection. |
tags | string[] | No | Custom tags for filtering (e.g. "competitor", "prospect", "portfolio") |
Input Example
{"companies": [{"name": "Stripe","domain": "stripe.com","boardUrl": "https://boards.greenhouse.io/stripe","tags": ["fintech", "competitor"]},{"name": "Figma","boardUrl": "https://jobs.lever.co/figma","tags": ["design-tools", "prospect"]},{"name": "Linear","boardUrl": "https://jobs.ashbyhq.com/linear","tags": ["dev-tools"]}],"changesOnly": true,"triggerPack": "all","minConfidence": 0.3,"maxCompaniesPerRun": 100,"emitSignalsOnFirstScan": false}
Output
Each company produces one record in the dataset with the following fields:
Output Fields Reference
| Field | Type | Description |
|---|---|---|
company | string | Company name |
domain | string | Company domain |
tags | string[] | User-provided tags |
provider | string | ATS provider (greenhouse, lever, ashby) |
slug | string | ATS board slug |
boardUrl | string | Full ATS board URL |
intentEvent | string | Primary trigger ID (e.g. first_revops_buildout) or no_signal |
intentLabel | string | Human-readable trigger label |
signalScore | number | 0-100 composite signal score |
signalStrength | string | high, medium, low, or none |
confidence | number | Confidence of the primary signal (0.0 - 1.0) |
whyNow | string[] | Evidence array explaining why this signal fired |
recommendedAngle | string | Suggested outreach angle or use case |
allSignals | object[] | All detected signals (not just primary) |
newRoles | number | New roles since last scan |
removedRoles | number | Removed roles since last scan |
netChange | number | Net headcount change |
totalOpenRoles | number | Current total open roles |
previousOpenRoles | number | Total open roles at last scan |
isFirstScan | boolean | Whether this is the first scan for this company |
functionDistribution | object | Role count by function (engineering, sales, data...) |
newJobDetails | object[] | Detailed new job info (only in changesOnly mode) |
scannedAt | string | ISO timestamp of this scan |
snapshotAge | string | ISO timestamp of previous snapshot |
Output Example
{"company": "Acme Corp","domain": "acme.com","tags": ["prospect", "series-b"],"provider": "greenhouse","slug": "acmecorp","boardUrl": "https://boards.greenhouse.io/acmecorp","intentEvent": "first_revops_buildout","intentLabel": "First RevOps / Sales Ops Buildout","signalScore": 72,"signalStrength": "high","confidence": 0.86,"whyNow": ["Sales Ops Manager posted","Salesforce Admin posted","BI Analyst posted"],"recommendedAngle": "CRM, pipeline visibility, forecasting, territory planning","allSignals": [{"triggerId": "first_revops_buildout","label": "First RevOps / Sales Ops Buildout","pack": "gtm","confidence": 0.86,"evidence": ["Sales Ops Manager posted", "Salesforce Admin posted", "BI Analyst posted"],"recommendedAngle": "CRM, pipeline visibility, forecasting, territory planning"}],"newRoles": 5,"removedRoles": 1,"netChange": 4,"totalOpenRoles": 23,"previousOpenRoles": 19,"isFirstScan": false,"functionDistribution": {"engineering": 8,"sales": 5,"revops": 3,"marketing": 4,"other": 3},"scannedAt": "2026-03-23T12:00:00.000Z","snapshotAge": "2026-03-22T12:00:00.000Z"}
The run summary is stored separately in the Key-Value Store under the key RUN_SUMMARY:
{"totalCompanies": 50,"processed": 48,"skipped": 1,"signalsDetected": 12,"errors": 1,"triggerPack": "all","changesOnly": true,"completedAt": "2026-03-23T12:05:00.000Z"}
Scheduling for Monitoring
This actor is built for recurring scheduled runs:
- Set up a schedule — daily or weekly in Apify Console
- Enable
changesOnly: true— only companies with new activity appear in output - Connect webhooks — pipe results to Slack, email, HubSpot, or Salesforce via Make/Zapier
- Tune
minConfidence— raise to 0.5+ if you want fewer, higher-quality alerts
Pricing
This actor uses pay-per-event (PPE) pricing with a single event: company-scanned.
You are charged once per company successfully processed. Companies that are skipped or fail are never charged.
| Scenario | Charge |
|---|---|
| Company scanned, results returned | 1 event |
| ATS board not found (skipped) | 0 |
changesOnly mode, no changes (skipped) | 0 |
| Suspicious data drop (skipped for confirmation) | 0 |
| Error during processing | 0 |
Cost Examples ($0.02 per company-scanned)
| Companies | Frequency | Events/Month | Est. Cost |
|---|---|---|---|
| 50 | Daily | ~1,500 | ~$30/mo |
| 100 | Daily | ~3,000 | ~$60/mo |
| 200 | Daily | ~6,000 | ~$120/mo |
| 200 | Weekly | ~800 | ~$16/mo |
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