ATS Hiring Intent - Buying Signals (Greenhouse + 4 ATSes)
Pricing
from $8.00 / 1,000 enriched job fetcheds
ATS Hiring Intent - Buying Signals (Greenhouse + 4 ATSes)
Aggregates jobs across Greenhouse, Lever, Ashby, SmartRecruiters, and Workday with auto ATS detection from a domain. Gemini classifier emits per-company buying signals (expanding-sales, evaluating-CRM, platform-build-out). Monitor mode tracks 100s of companies weekly via KV deltas.
Pricing
from $8.00 / 1,000 enriched job fetcheds
Rating
5.0
(1)
Developer
Omar Eldeeb
Actor stats
2
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
What does ATS Hiring Intent do?
ATS Hiring Intent aggregates open job postings across five major applicant tracking systems — Greenhouse, Lever, Ashby, SmartRecruiters, and Workday — into one normalized feed and turns the raw job data into per-company buying signals ready for a sales / RevOps pipeline.
Give it a list of company domains. It auto-detects each company's ATS, pulls every open role, normalizes function and seniority across platforms, and (in signals mode) runs each role through Gemini 2.5 Flash to extract intent tags (expanding-sales, evaluating-CRM, series-B-build, platform-build-out, …) and infer the specific vendors / tech stack the company is buying or building on. One composite CompanySignal per refresh tells your reps which prospects just lit up — Stripe is expanding-sales (8/8 AE roles posted, AI-customer focus, vendor hypothesis: OpenAI, Anthropic, NVIDIA).
Zero anti-bot. Zero proxies needed by default. No login. Every data source is an official public ATS endpoint. Replaces $99-$15K/seat tools (Apollo, ZoomInfo, Bombora, Cognism) on the hiring-signal job-to-be-done.
Why use ATS Hiring Intent?
- B2B sales / SDRs — find every prospect actively hiring for a role that signals they're buying your product. Hiring 5 DevOps + 2 Platform Engineers = evaluating IaC + observability tooling. Hiring a VP Sales + 3 AEs = expanding GTM motion. Apollo only counts headcount; this actor explains what they're buying.
- RevOps & GTM intelligence — score your ICP list weekly, build prospect lists from buying-intent tags, replace your stale $1-5K/mo intent-data line item.
- Recruiters & talent intelligence — track hiring velocity at competitors, see which functions/seniorities they're loading up on.
- VC / corporate development — detect Series A → C ramp signals, exec hires, geographic expansion. Headcount-delta tracking with KV-checkpointed monitoring.
- Founders doing competitive intel — type a competitor's domain, see every open role, every detected vendor, every team they're scaling.
- AI / data teams — a clean 30+ field unified ATS schema across 5 platforms with deterministic taxonomy normalization. Drop straight into a vector store or BI tool.
How to use
- Pick a mode:
discover— given domains, detect which ATS each one uses (cheap onboarding pass).jobs— fetch normalized jobs only, no AI.signals— jobs + Gemini intent tags + per-company composite signal (the value tier).monitor— same assignalsbut only emits deltas vs. the previous run. Best with a daily/weekly schedule.
- Provide either
companyDomains(list of domains — auto-detected) oratsTargets(direct ATS slugs likegreenhouse:stripe,lever:palantir,ashby:linear,smartrecruiters:visa,workday:nvidia.wd5/NVIDIAExternalCareerSite). - Optionally filter by
keywordFilter,functionFilter(engineering / sales / …),seniorityFilter,locationFilter,remoteOnly,postedWithinDays. - Run. Results land in the default dataset with a
typefield discriminator:job,company_signal,ats_discovery, orchange_event. - Export as JSON, CSV, or Excel from the Apify Console — or pull via API / webhook.
- Want weekly intent updates? Set mode to
monitorand schedule the actor. Subsequent runs only emit new/changed/closed roles + the latest composite signal.
Free trial: the first 10 chargeable events of each run are on the house — enough to validate output shape and signal quality on a single small run before committing budget.
Input examples
1. Discover which ATS your top 5 prospects use.
{"mode": "discover","companyDomains": ["stripe.com", "linear.app", "notion.so", "vercel.com", "anthropic.com"]}
2. Pull every open engineering role at 3 companies, no AI.
{"mode": "jobs","companyDomains": ["stripe.com", "anthropic.com", "linear.app"],"functionFilter": ["engineering"],"seniorityFilter": ["senior", "lead", "principal"],"maxJobsPerCompany": 100}
3. Generate weekly buying signals across a 50-company prospect list.
{"mode": "signals","companyDomains": ["stripe.com", "notion.so", "linear.app", "vercel.com", "anthropic.com"],"maxJobsPerCompany": 50,"intentBatchSize": 20,"postedWithinDays": 30}
4. Monitor 200 companies — emit deltas only on the second-and-subsequent run. (Schedule daily.)
{"mode": "monitor","companyDomains": ["acme.com", "..."],"maxJobsPerCompany": 100,"remoteOnly": false}
5. Skip auto-detection — pass direct ATS targets.
{"mode": "signals","atsTargets": ["greenhouse:stripe","lever:palantir","ashby:linear","smartrecruiters:visa","workday:nvidia.wd5/NVIDIAExternalCareerSite"]}
Output
Each row has a type discriminator. Sample enriched job record:
{"type": "job","sourceId": "d3bc1ced-3ce4-4086-a050-555055dbb1ff","company": "Linear","domain": "linear.app","atsPlatform": "ashby","atsSlug": "Linear","title": "Senior / Staff Fullstack Engineer","function": "engineering","seniority": "senior","department": "Product","team": "Engineering","location": "Europe","isRemote": true,"employmentType": "FullTime","postedDate": "2026-04-21T20:13:45.158+00:00","applyUrl": "https://jobs.ashbyhq.com/linear/d3bc1ced-3ce4-4086-a050-555055dbb1ff/application","intentTags": ["platform-build-out", "going-international"],"vendorSignals": ["TypeScript", "React", "GraphQL", "PostgreSQL", "Redis", "Kubernetes"],"intentSummary": "This role indicates a focus on expanding the core product platform and international growth.","enrichmentLevel": "enriched"}
Sample company_signal record:
{"type": "company_signal","company": "Stripe","atsPlatform": "greenhouse","atsSlug": "stripe","signal": "expanding-sales","confidence": 1.0,"evidence": "8/8 open roles match this signal. Examples: Account Executive AI Sales, Account Executive AI Startups, Account Executive Commercial.","vendorHypothesis": ["Stripe", "OpenAI", "Anthropic", "NVIDIA", "Shopify"],"openRolesCount": 8,"newRolesLast30d": 8,"topFunctions": [{ "function": "sales", "count": 8 }],"secondarySignals": [{ "signal": "series-B-build", "confidence": 0.66, "evidence": "3/8 roles tagged." }]}
Data fields (selected)
| Field | Type | Notes |
|---|---|---|
type | enum | job | company_signal | ats_discovery | change_event |
company | string | Display name pulled from board metadata when available |
atsPlatform | enum | greenhouse | lever | ashby | smartrecruiters | workday |
function | enum | Normalized: engineering, sales, marketing, product, data, design, operations, support, finance, hr, legal, other |
seniority | enum | intern | junior | mid | senior | lead | principal | director | vp | cxo | unknown |
intentTags | array | 22-tag fixed taxonomy — see input schema for the full list |
vendorSignals | array | Specific vendor / tech names mentioned in the JD |
intentSummary | string | One-line plain-English takeaway from Gemini |
salaryMin / salaryMax / salaryCurrency | numbers + ISO code | When the ATS exposes pay bands (Greenhouse + Ashby do) |
applyUrl | string | Direct link to the application page |
signal (on company_signal) | enum | The dominant intent tag, or general-hiring / shrinking / stable |
vendorHypothesis | array | Top 8 vendors aggregated across the company's open roles |
changeType (on change_event) | enum | role-opened | role-closed | role-updated | salary-changed |
How much does it cost?
| Event | Price | Fires when |
|---|---|---|
apify-actor-start | $0.0001 | Once per run (per GB of memory) |
basic-job-fetched | $0.0015 | A normalized job is emitted (modes: jobs) |
enriched-job-fetched | $0.008 | A Gemini-enriched job is emitted (modes: signals, monitor) |
company-signal-event | $0.05 | Composite buying signal per company (modes: signals, monitor) |
change-event | $0.02 | Role opened / closed / updated vs. previous run (modes: monitor, or any mode with incrementalMode) |
ats-discovered | $0.005 | Domain → ATS detection record (mode: discover) |
First 10 chargeable events of every run are free (built-in trial counter — see the run log).
Typical run costs
| Scenario | Volume | Cost |
|---|---|---|
| Discover ATS for 50 prospects | 50 discoveries | $0.25 |
| Pull 50 roles each from 10 companies | 500 basic jobs | ~$0.75 |
| Weekly signals run, 50 companies × 40 roles | 2,000 enriched + 50 signals | ~$18.50 |
| Daily monitor, 200 companies × 30 roles, ~3 deltas/co/day | 600 changes + 200 signals/day | ~$22/day |
Comparison: Apollo Pro $99/seat/mo (no signals), ZoomInfo + Bombora $3-5K/mo, Clay Growth $1.5-2.5K/mo, Cognism + intent ~$2K/mo. The 50-company weekly run above costs ~$80/mo — same job-to-be-done, ~5-25× cheaper than every comparable.
Tips & advanced options
monitormode is built for scheduling. Set up an Apify schedule (daily or weekly), feed in your prospect list, and only pay for deltas + the latest composite signal. The first run charges full freight (everything is "new"); subsequent runs are deltas-only.- Workday note — Workday tenants live at
tenant.wd{N}.myworkdayjobs.comwhere N is 1-12. Useworkday:tenant.wdN/SiteSegmentform. Find thewdNfrom any URL on their careers page. Some Workday tenants throttle aggressive scraping — switch toRESIDENTIALproxy if you see 403s. - Auto-detection covers ~25K-30K companies out of the box (all Greenhouse, Lever, Ashby, SmartRecruiters customers + most Workday F500). For non-detectable domains, pass a direct
atsTargetsentry and the actor skips resolution. - Filter aggressively to control budget.
functionFilter,seniorityFilter,locationFilter,remoteOnly,postedWithinDaysall run before Gemini enrichment, so you only pay enrichment cost on the roles that matter. intentBatchSize= 20 is the cost-vs-latency sweet spot. Larger batches cost less per job but increase end-to-end latency.- Vendor signals are tools/tech mentioned in JDs, not necessarily companies the prospect is buying. A role mentioning "Salesforce" usually means they use Salesforce — sometimes it means they sell to Salesforce customers. Cross-check with
intentSummaryfor context. - Cross-ATS dedup — if the same company is somehow listed twice (rare), dedup by
(atsPlatform, atsSlug)downstream.
Legal & ToS
- Every ATS endpoint used by this actor is publicly published and intended for third-party career-site / aggregator use. No login or API key required.
- Greenhouse Job Board API, Lever Postings API, Ashby Public Job Posting API, and SmartRecruiters Posting API are all explicitly documented as public — see developers.greenhouse.io/job-board, github.com/lever/postings-api, developers.ashbyhq.com/docs/public-job-posting-api, developers.smartrecruiters.com/docs/posting-api.
- Workday CXS endpoints serve the same data as the public-facing careers page; we paginate at default 20-per-page with gentle 150ms pacing.
- The actor is intended for sales intelligence, recruiting research, and market analysis. Do not use the data to discriminate, harass, or auto-apply at scale.
- Job descriptions are © the posting employer. We store and re-emit them verbatim for analysis. Do not republish full JDs as your own content.
FAQ & support
Q: Which ATSes are supported in v1? A: Greenhouse, Lever, Ashby, SmartRecruiters, Workday. BambooHR, Recruitee, Teamtailor, Personio in v1.1.
Q: What's the difference between signals and monitor?
A: signals runs the full pipeline every time. monitor does the same but auto-enables incremental mode — on subsequent runs you only see new / changed / closed roles, plus the refreshed company-signal record. Use monitor for scheduled subscriptions.
Q: Why didn't my domain auto-detect?
A: ~10-15% of companies use custom careers pages that don't link to a known ATS host. Pass an atsTargets entry directly. Also try the discover mode in isolation — it tells you what was found and what failed.
Q: Can I get LinkedIn / Indeed jobs? A: No. This actor only scrapes companies' own ATS career pages. LinkedIn aggregations are heavily anti-botted and not worth the proxy cost. The data here is fresher anyway — it's the source ATS, not a 2nd-hand index.
Q: Will the intent classifier hallucinate tags?
A: The classifier is constrained to a fixed 22-tag taxonomy and instructed to return ["unknown"] if uncertain. We've validated against ~100 real postings; false-positive rate is < 5%. If you see noise, lower the intentBatchSize to 5-8 (smaller context = sharper inference).
Q: How do I report bugs?
A: Open an issue on the actor's Apify page. Include the input JSON and the offending record's sourceId + applyUrl.
Built with TypeScript on the Apify SDK. Zero proxies, zero anti-bot, native fetch. No headless browser, no CAPTCHA.