Hiring-Signal & Job-Postings Intel - ATS, Surge, Tech Stack
Pricing
from $2.00 / 1,000 job-posting records
Hiring-Signal & Job-Postings Intel - ATS, Surge, Tech Stack
Live job-postings intel from public ATS endpoints (Greenhouse, Lever, Ashby, Workday & more). Normalized postings plus a hiring-signal engine: net-new roles, role-count deltas, dept expansion, surge flags, and JD tech-stack detection. For B2B sales, recruiting, and alt-data. Public data only.
Pricing
from $2.00 / 1,000 job-posting records
Rating
0.0
(0)
Developer
Seibs.co
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
Hiring-Signal & Job-Postings Intel
TL;DR for sales-intelligence, RevOps, recruiting, and alt-data teams: Pulls live job postings straight off companies' public ATS feeds (Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, Workday), normalizes them into one clean schema, and layers a hiring-signal engine on top - net-new roles, role-count deltas, department expansion, and a hiring-surge flag per company, plus tech-stack detection parsed from each job description. Job postings are the richest intent signal in B2B (a surge in "ServiceTitan administrator" reqs = a home-services firm scaling). Indeed killed its public API in 2023 and LinkedIn Jobs is auth-walled, so there is no unified public job-market API - this actor uses the open-but-unmarketed ATS endpoints instead. Logged-out, public-data only. Free Apify plan covers exploration runs on your $5 platform credit.
Run it in 30 seconds
# Via the Apify Python SDKfrom apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("seibs.co/hiring-signal-intel").call(run_input={"mode": "hiring_signals","companies": ["stripe", "ramp", "notion"],"include_tech_stack": True})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Or via curl:
curl -X POST "https://api.apify.com/v2/acts/seibs.co~hiring-signal-intel/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"mode": "hiring_signals", "companies": ["stripe", "ramp", "notion"], "include_tech_stack": true}'
Or click "Try for free" on this page if you prefer the no-code UI.
What you get
Each run produces:
- A clean dataset, filterable in the Apify console and downloadable as CSV or JSON
- An OUTPUT.html dashboard preview of your top records
- A sample-output preview at ./.actor/sample-output.json
Per-archetype custom artifacts shipped with this actor:
hiring.csv- every posting with company, role, department, seniority, remote flag, comp, tech stack, apply URLhiring-followup.html- per-company hiring-signal worksheet (which surge to route to which AE)
Live example output
Real, unmodified output from runs against live company boards (no login required to view):
- Hiring-surge showcase (
hiring_signalsover Stripe, Ramp, Mistral, Notion, GitLab - spanning Greenhouse, Lever, and Ashby): every company surging with net-new roles flagged against its trailing baseline. View the JSON - Clean job-postings feed (
company_jobs, same companies): normalized postings with department, seniority, remote flag, comp where exposed, and detected tech stack. View the JSON
What does Hiring-Signal Intel do?
It hits the public ATS JSON endpoints that companies expose for their own careers pages - the same feeds that power their public job boards - and normalizes every open role into one schema: company, title, department (+ a normalized function bucket), location, remote_flag, seniority, comp_min/max (where the ATS exposes pay-transparency ranges), posted_at, apply_url, and ats_source. Then it computes the hiring-signal layer: how many roles are net-new since the last run, which departments are expanding, and whether the company crossed a hiring-surge threshold. Finally it parses each job description for named software (Salesforce, ServiceTitan, Snowflake, Procore, ...) - the tech-stack buying signal B2B sellers key off.
Responsible use / data scope
This actor is a public-data tool. It reads only logged-out, publicly-served ATS endpoints (a company's own careers feed) - no accounts, no cookies, no paywalls, no login walls. It minimizes PII: records carry role / department / location, not personal data, and recruiter names are never stored. You are responsible for lawful use of the outputs (GDPR / CCPA apply to personal data even when public). We deliberately scope to public job postings and government/open sources rather than auth-walled platforms.
AI / RAG / Agent
A turn-key intent feed for sales-AI agents, RevOps copilots, and recruiting bots. Postings arrive pre-normalized with seniority, department_normalized, remote_flag, and tech_stack so an agent can filter on "Sales roles mentioning Salesforce at companies hiring 3+ net-new this week" without parsing raw HTML. Compatible with LangChain, LlamaIndex, Pinecone, Weaviate, Chroma, and any MCP-aware agent runtime (see the sibling mcp-hiring-signal-intel actor for direct tool-call wiring with agentic payments).
Features
- 7 public ATS connectors - Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, Workday. No auth, no anti-bot.
- Auto-resolve - pass a bare company slug and the actor tries each ATS in order until it finds the board. Or pass explicit
ats_boards, or a careers-page URL to sniff. - Normalized schema - one shape across all sources, with
seniorityanddepartment_normalizedinferred. - Hiring-signal engine - net-new roles, removed roles, role-count delta (absolute + %), department expansion, new departments, and a
hiring_surge_flagvs a trailing baseline persisted between runs. - Tech-stack detection - 45+ named software products parsed from each JD (CRM, ERP, data/cloud, vertical ops, languages).
- Comp extraction - pay-transparency ranges where the ATS exposes them (Lever
salaryRange, Ashbycompensation, Greenhouse pay metadata). - Monitor mode - run under an Apify Schedule and get only the change-delta (new / changed / removed) plus an optional Slack digest.
- Cost-control - per-run budget guard + demo-mode soft-fail so runs finish SUCCEEDED.
Use cases
- B2B sales intelligence - a hiring surge = budget + a team being built; route surging companies to the AE who owns them. This is the live-data engine behind the b2b-sales-triggers actor.
- Tech-stack targeting - find every company hiring for "Procore" / "Salesforce admin" / "Snowflake" and sell the adjacent / displacement product.
- Recruiting & staffing - a live req feed across a watchlist of target companies, deduped by
job_id. - Headcount / alt-data research - track open-role counts and department mix over time as a growth proxy.
- Vertical lead-gen - a posting is a buying signal for every vertical lead-finder in the portfolio.
Modes
| Mode | What it returns |
|---|---|
company_jobs | Every current open role for the given companies/boards. |
hiring_signals | Postings plus a per-company hiring-signal rollup (net-new roles, role-count delta, department expansion, surge flag) vs a trailing baseline. |
new_roles | Only the postings that are net-new since the last run (a clean delta feed), plus the rollup. |
Resolving companies (three ways)
companies- bare slugs, auto-resolved across ATS providers:["stripe", "ramp"]. The slug is the company id in its careers URL (e.g.stripeinboards.greenhouse.io/stripe).ats_boards- explicit when you know the ATS:[{"ats": "greenhouse", "slug": "stripe"}]. Workday needs{"ats": "workday", "host": "company.wd1.myworkdayjobs.com", "tenant": "company", "site": "External", "slug": "company"}.careers_urls- paste a company careers page; the actor sniffs the embedded ATS board:["https://www.example.com/careers"].
Input
See ./.actor/input_schema.json for the full form. Key fields:
{"mode": "hiring_signals","companies": ["stripe", "ramp", "notion"],"departments": ["Sales", "Engineering"],"keywords": ["salesforce", "revenue operations"],"include_tech_stack": true,"remote_only": false,"max_results_per_company": 200}
No API key or login is required - ATS endpoints are public.
Output
One hiring_signal record per company (in signal modes) followed by one posting record per open role.
{"record_type": "hiring_signal","company": "Ramp","ats_source": "greenhouse","current_open_roles": 71,"baseline_open_roles": 58,"net_new_role_count": 13,"role_count_delta_pct": 0.2241,"department_expansion": [{"department": "Sales", "from": 14, "to": 22, "delta": 8}],"hiring_surge_flag": true,"surge_reason": "13 net-new roles since last run (>= 3)"}
{"record_type": "posting","company": "Ramp","title": "Revenue Operations Manager","department_normalized": "Sales","seniority": "manager","location": "New York, NY","remote_flag": false,"comp_min": 145000,"comp_max": 185000,"comp_currency": "USD","tech_stack": ["Salesforce", "Looker", "Outreach"],"apply_url": "https://boards.greenhouse.io/ramp/jobs/7412931"}
Failed board lookups still emit a fetch_error record with a reason for completeness audit.
Pricing
Pay-per-event:
| Event | Price | When charged |
|---|---|---|
posting_record | $0.002 ($2/1k) | Per normalized open role returned (the public ATS base layer, priced at the competitive market band). |
tech_stack_signal | $0.007 | When include_tech_stack=true and >= 1 named tool is detected in a JD. |
hiring_surge_flag | $0.012 | Once per company that crosses the surge threshold vs its baseline (the premium B2B trigger). |
scheduled_delta_run | $0.050 | Once per scheduled monitor-mode run. |
A run that returns nothing costs nothing. A typical 3-company hiring_signals run (~50 roles each) with tech detection costs roughly $0.30 - $0.70 depending on how many roles each company has open and how many mention named software.
FAQ
Q: Is this legal? A: This actor reads only logged-out, public ATS endpoints - the same data a company serves on its own public careers page. No login, no cookies, no paywall. It minimizes PII (no personal/candidate data, no recruiter names). You remain responsible for lawful use of the outputs (GDPR/CCPA apply to personal data even when public). See the "Responsible use / data scope" note above.
Q: How is this different from an Indeed or LinkedIn jobs scraper? A: Those hit auth-walled, anti-bot platforms (Indeed deprecated its public API in 2023; LinkedIn requires login). This actor uses companies' own public ATS feeds - no auth, no anti-bot - and adds the intelligence layer: hiring-surge detection, department-expansion deltas, and JD tech-stack parsing that a raw scraper doesn't give you.
Q: How do I find a company's ATS slug?
A: Look at its careers URL. boards.greenhouse.io/<slug>, jobs.lever.co/<slug>, jobs.ashbyhq.com/<slug>, jobs.smartrecruiters.com/<slug>, <slug>.recruitee.com, <slug>.workable.com. Or just pass the careers-page URL in careers_urls and let the actor detect it.
Q: How does the hiring-surge flag work?
A: The actor stores a small per-company baseline (job ids + department counts) between runs in a persistent KVStore. On the next run it compares the current open roles against that baseline. A company is flagged when it has >= surge_abs_threshold net-new roles (default 3) OR its open-role count grew by >= surge_pct_threshold (default 20%). The first run for a company establishes the baseline (first_run: true, no surge).
Q: Why might a run return a fetch_error?
A: Usually a renamed/typo'd ATS slug, or a company that uses an ATS this actor doesn't support yet. The run still finishes SUCCEEDED and emits a fetch_error record naming the board so you can correct it.
Q: Can I schedule this? A: Yes. Daily or weekly cron on a saved Task gives you a hands-off hiring-surge feed. Pair with monitor mode (below) so you only get the delta.
Save your input as an Apify Task
Apify Tasks let you save a configured input once and re-run it with one click - the foundation for schedules, monitor mode, and the hiring-surge baseline (the baseline is most useful when the same company list runs on a cadence).
- Click
Runwith your input configured. - Click
Save as task. - Name it (e.g.
target-account hiring surge - weekly). - Reload the task page and click
Startanytime.
Run this weekly with Apify Schedules
- Save your input as a Task (above).
- Go to https://console.apify.com/schedules and
Create new schedule. - Pick your Task and set a cron expression (weekly Mondays 9am:
0 9 * * 1). - Save. Each run refreshes the baseline and surfaces the week's net-new roles and surging companies.
Monitor mode (beta)
When this actor runs under an Apify Schedule, monitor mode emits only the change-delta (new / changed / removed postings) instead of the full set, with a digest record at the top. Provide monitor_webhook_url and the digest also fires to your Slack channel. Cost: one scheduled_delta_run event ($0.05) per scheduled run plus standard PPE on emitted delta records only.
Related Actors
- b2b-sales-triggers - turn a hiring surge into an outbound sales trigger for your AE/SDR team. This actor is its live job-postings engine.
- sec-edgar-intel - pair hiring surges with Form D raises and 8-K events for a full "this company is scaling" picture.
- local-leads-without-websites - SMB prospects to layer hiring + intent signals on top of.
Support
Open an issue via the Apify Store contact link. Include the run ID and input config so the issue is reproducible.
Changelog
See ./CHANGELOG.md.
Found this useful?
If this actor saved you time or money, please leave a quick review on the Apify Store. Reviews help other buyers find work that solves their problem: https://apify.com/seibs.co/hiring-signal-intel#reviews