Company Hiring Signals Scraper | Open Roles, ATS & Growth avatar

Company Hiring Signals Scraper | Open Roles, ATS & Growth

Pricing

from $1.60 / 1,000 jobs

Go to Apify Store
Company Hiring Signals Scraper | Open Roles, ATS & Growth

Company Hiring Signals Scraper | Open Roles, ATS & Growth

Company domains or career/ATS URLs in → who is hiring, for what, where and how fast. Reads Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee & Workday boards: open roles by function/location, remote share, hiring velocity, new roles since last run + every job. No API key. $1.60 per 1,000 jobs.

Pricing

from $1.60 / 1,000 jobs

Rating

0.0

(0)

Developer

Mr Zack

Mr Zack

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Categories

Share

Company Hiring Signals Scraper | Open Roles, ATS & New Jobs by Domain

Give it a list of company domains (or careers / ATS URLs) and get back who is hiring, for what, where and how fast — straight from each company's applicant tracking system (Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workday). One company-signal row per company (open roles, roles by function, remote share, hiring velocity, new roles since your last run) plus one job row per open role. HTTP-only, pay per result ($1.60 / 1,000 jobs · $4 / 1,000 company signals · $0.001 start), MCP-ready. No API key, no login, no proxies.

Who uses it and why

  • Sales / SDR teams & agencies — a company that just opened 5 SDR roles is buying sales tooling; 12 new data-engineering roles = infra budget. Feed your account list, get the hiring signal, prioritize outreach. Pair with Contact Details Scraper for emails.
  • Recruiting agencies — find which target accounts are actively hiring for your specialty (keywords: ["account executive"], postedWithinDays: 14) and pitch them first.
  • Job boards & aggregators — clean, normalized postings (title, department, location, remote, type, posted date, salary when disclosed, apply URL) from career sites, without scraping HTML.
  • Investors / analysts / competitive intel — headcount intent by function and location for a watchlist of companies, refreshed daily with onlyNew.
  • AI agents — "Which of these 50 companies is hiring salespeople in London right now?" is a single Actor call via MCP.

How it finds the jobs

  1. Direct ATS URLboards.greenhouse.io/x, jobs.lever.co/x, jobs.ashbyhq.com/x, jobs.smartrecruiters.com/X, x.recruitee.com, x.wd5.myworkdayjobs.com/Site are used as-is.
  2. Domain / website URL — fetches the homepage, follows the careers link (up to 2 hops), and looks for ATS references (embeds, links, API calls).
  3. Slug guess — if the site hides its ATS, tries the domain label on Greenhouse, Lever, Ashby, Recruitee and SmartRecruiters and keeps it only when a real board with jobs comes back (flagged discovery: "slug-guess").
  4. Jobs are read from the ATS's public JSON API (Workday via its cxs endpoint, paginated) — the same data the career site renders, so fields are exact.

Companies with no detectable / supported ATS (custom career sites, iCIMS, Jobvite, SuccessFactors, Workable without a public list) produce a free company-not-found row with the careers URL that was found, so you know what to check by hand.

Input

FieldTypeDefaultNotes
companieslist4 demo companiesDomains, website / careers URLs or ATS board URLs, one per line. Duplicates are merged.
keywordslistKeep roles whose title / department / team contains any keyword (case-insensitive).
excludeKeywordslistDrop roles matching any of these.
locationslistSubstring match on location / country. Remote matches remote roles.
remoteOnlybooleanfalseOnly remote roles.
postedWithinDaysinteger00 = no age filter. Workday dates are approximate ("Posted 3 Days Ago").
maxJobsPerCompanyinteger200Cap before filters (max 5,000). Big employers list 1,000+ roles.
includeJobsbooleantruePush one row per role (charged as job). Off = signals only.
includeCompanySignalbooleantruePush one row per company with a found board (charged as company-signal).
includeDescriptionbooleanfalseFull plain-text description (≤ 5,000 chars) instead of a 500-char snippet. Not available from Workday / SmartRecruiters list APIs.
onlyNewbooleanfalseMonitor mode — remembers job ids per board in a named key-value store; later runs push only new roles and fill newRoles.

Output

company-signal row (one per company with a board)

FieldDescription
company, domain, ats, atsBoardUrl, careersUrl, discoveryIdentity, ATS vendor, board URL, how it was found (input-url / homepage / careers-page / slug-guess).
openRolesTotal roles on the board (before your filters / cap).
matchedRoles, newRolesRoles after filters; roles not seen in the previous run (monitor mode).
remoteRoles, remoteShare, rolesWithSalaryRemote count / % and how many roles disclose pay.
postedLast7d, postedLast30d, hiringVelocityPerWeek, newestPostedAt, oldestPostedAtFreshness of the pipeline (when the ATS exposes posting dates).
byFunction, engineeringRoles, salesRoles, salesToEngineeringRatioRoles bucketed into engineering / sales / marketing / product / customer / operations / finance / people / legal / other.
topDepartments, topLocations, employmentTypes, topTitlesTop 8 departments and locations with counts, employment-type mix, first 10 titles.
isHiring, isNew, scrapedAtisNew = company seen for the first time in monitor mode.

job row (one per open role)

FieldDescription
company, domain, ats, jobIdWhich board the role belongs to. jobId is stable per ATS (used for monitor mode).
title, department, team, employmentTypeAs published.
location, locations, isRemotePrimary location, all locations, remote flag (from the ATS or the location / title text).
postedAt, updatedAtISO timestamps where the ATS provides them.
url, applyUrlJob page and application page.
salary{min, max, currency, text} when disclosed in structured fields or the description.
description500-char snippet, or full text with includeDescription.
extraVendor specifics: requisition id, offices, workplace type, experience level, industry, tags, country.
isNew, scrapedAtMonitor flag and run time.

Free company-not-found rows: company, domain, careersUrl, reason, tried.

The run's SUMMARY key-value record has counts: companies, atsFound, byVendor, jobsFetched, jobsPushed, signals, notFound, slugGuesses, requests.

Example output (one real row, 8 Sep 2026)

{
"type": "company-signal", "company": "Stripe", "domain": "stripe.com", "ats": "greenhouse",
"atsBoardUrl": "https://boards.greenhouse.io/stripe", "careersUrl": "https://stripe.com/careers", "discovery": "slug-guess",
"openRoles": 619, "matchedRoles": 619, "newRoles": null, "remoteRoles": 100, "remoteShare": 16, "rolesWithSalary": 13,
"postedLast7d": 80, "postedLast30d": 218, "hiringVelocityPerWeek": 50.9, "newestPostedAt": "2026-09-07T18:53:00.000Z", "oldestPostedAt": "2023-03-21T16:01:12.000Z",
"byFunction": { "engineering": 220, "sales": 97, "operations": 80, "customer": 62, "other": 42, "marketing": 41, "product": 36, "finance": 18, "people": 14, "legal": 9 },
"engineeringRoles": 220, "salesRoles": 97, "salesToEngineeringRatio": 0.44,
"topDepartments": [ { "name": "Account Executives (EMEA)", "count": 18 }, { "name": "Global Operations", "count": 17 } ],
"topLocations": [ { "name": "Singapore", "count": 46 }, { "name": "Dublin", "count": 30 }, { "name": "Bengaluru", "count": 29 } ],
"isHiring": true, "isNew": null, "scrapedAt": "2026-09-08T03:30:28.493Z"
}
{
"type": "job", "company": "Stripe", "domain": "stripe.com", "ats": "greenhouse", "jobId": "8172487",
"title": "Abuse Investigator", "department": "8611 Security Analytics", "team": null, "location": "Dublin", "locations": ["Dublin"],
"isRemote": false, "employmentType": null, "postedAt": "2026-09-03T17:30:34.000Z", "updatedAt": "2026-09-04T18:12:20.000Z",
"url": "https://stripe.com/jobs/search?gh_jid=8172487", "applyUrl": "https://stripe.com/jobs/search?gh_jid=8172487",
"salary": null, "description": "Who we are. About Stripe. Stripe is a financial infrastructure platform for businesses…", "extra": { "requisitionId": "See Opening ID", "offices": ["Ireland Locations"] }
}

Cost of that run (4 demo companies, 200-role cap): 4 signals × $0.004 + ~420 jobs × $0.0016 + $0.001 start ≈ $0.69. Signals-only run (includeJobs: false) for 100 companies ≈ $0.40.

Schedule it (hiring monitor)

Create a Schedule in Apify Console (daily is the sweet spot — ATS boards change a few times a day) with your account list and onlyNew: true. Each run then returns only roles that appeared since the last run plus the updated company-signal rows (newRoles > 0 = the account just opened positions). Push the dataset to Google Sheets, Slack or your CRM with an integration, or read it via API:

https://api.apify.com/v2/acts/tactful_anvil~company-hiring-signals-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN

Example input for an SDR team selling to sales orgs:

{ "companies": ["stripe.com", "linear.app", "gopuff.com", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],
"keywords": ["account executive", "sdr", "bdr", "sales development", "revenue"], "postedWithinDays": 14, "onlyNew": true }

Use with AI agents (MCP)

Add the Actor to your Apify MCP server (https://mcp.apify.com with tools=tactful_anvil/company-hiring-signals-scraper) and ask: "Which of these companies are hiring engineers in Europe this month?" — the agent passes the domains, sets keywords / locations / postedWithinDays, and reads the company-signal rows first (cheap), then jobs for the interesting ones. Deterministic JSON, stable field names, one row per fact — no HTML for the agent to interpret.

Limits & honesty

  • Supported ATS with public list APIs: Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workday. Workable is detected (vendor + board URL in the free row) but its list API is not public. iCIMS, Jobvite, SuccessFactors, Taleo, BambooHR, Personio and fully custom career sites are reported as company-not-found — free.
  • Slug guessing can pick a same-named company on a shared board host; rows are flagged discovery: "slug-guess" so you can review them.
  • Workday list pages give relative dates ("Posted 3 Days Ago") and no department; descriptions require the job page (not fetched).
  • postedAt reflects what the ATS exposes (Greenhouse first_published, Lever createdAt, Ashby publishedAt, SmartRecruiters releasedDate, Recruitee published_at).
  • Rate: ~4 companies in parallel, one request per board page. 100 companies ≈ 1–3 minutes.

Changelog

  • 0.1.0 (8 Sep 2026) — first release: 6 ATS list APIs, homepage → careers → slug discovery, keyword / location / remote / age filters, company-signal aggregation (functions, velocity, remote share), monitor mode, free not-found rows.

Found this useful? Bookmark & review

If this Actor saves you a scraping pipeline, a ⭐ review and a bookmark help other sales and recruiting teams find it. Missing an ATS you need? Open an issue with a careers URL and I'll look at adding it.