Company Hiring Signal Scraper: Open Roles & Growth Intent
Pricing
from $12.75 / 1,000 results
Company Hiring Signal Scraper: Open Roles & Growth Intent
Detect a company's ATS and aggregate its open roles into a hiring-intent signal: open roles count, departments and locations hiring, remote/engineering/sales counts, newest role and a High/Medium/Low signal. Export to JSON, CSV or Excel.
Pricing
from $12.75 / 1,000 results
Rating
4.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Company Hiring Signal Scraper: Open Roles & Growth Intent
Here is one real result, with every field the actor returns (long text fields and the roles array are trimmed with ...; a live run returns the full untrimmed values):
{"inputName": "stripe","companyName": "stripe","atsDetected": "greenhouse","atsBoardToken": "stripe","openRolesCount": 555,"hiringSignal": "High","departmentsHiring": "1130 Global Sales Development Mgrs, 1131 Vendor Mgmt and SD PM, 1132 AMER Sales Development Reps, ...","departmentsHiringCount": 189,"locationsHiring": "Dublin, Chicago, Illinois, San Francisco, New York, Seattle, Atlanta, Remote in the US, Tokyo, Singapore, Sydney, ...","locationsHiringCount": 234,"remoteRolesCount": 106,"engineeringRolesCount": 136,"salesRolesCount": 112,"sampleRoleTitles": "Manager, Sales Development | Head of Startups and Velocity Sales Development | Head of Sales ...","newestRoleDate": "2026-08-10T13:19:03.000Z","oldestRoleDate": "2026-08-06T16:09:47.000Z","roles": [{"title": "Manager, Sales Development","department": "1130 Global Sales Development Mgrs","location": "Dublin","isRemote": false,"isEngineering": false,"isSales": true,"postedAt": "2026-08-06T12:09:55-04:00","url": "https://stripe.com/jobs/search?gh_jid=7337544"}],"careersUrl": "https://boards.greenhouse.io/stripe","source": "CompanyHiringSignal","observedAt": "2026-08-10T14:29:22.310Z"}
The most complete company hiring-signal scraper available. It detects a company's applicant tracking system, aggregates every open role, and returns a full hiring-intent profile (role counts, departments and locations hiring, remote/engineering/sales breakdown, newest role date and a High/Medium/Low signal), with optional AI and contact-enrichment add-ons to target exactly the companies you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
For each company you pass (by name, ATS board slug, or careers URL), the actor detects the underlying applicant tracking system (Greenhouse, Lever, Ashby and others), pulls the company's open roles, and aggregates them into one hiring-signal record. It computes an open-role count, a High/Medium/Low hiring signal, the departments and locations hiring, remote/engineering/sales role counts, the newest and oldest role dates, and returns the full list of roles with per-role metadata.
Use it for sales and recruiting intent: a rising open-role count and a High signal indicate a company that is scaling. Optional AI add-ons (withAiCompanySummary, withAiIndustry, withAiHiringInsights) and a contact-enrichment add-on (enrichContacts) can enrich each record; they are opt-in, billed per enriched record, and disabled on free Apify plans.
Quickstart
Open the actor, paste this into the input, and press Run. It returns hiring signals for three companies.
{"companies": ["stripe", "notion", "ramp"],"maxCompanies": 10}
Each entry in companies can be a company name, an ATS board slug, or a full careers URL. The actor auto-detects the ATS for each.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
companies | array | yes | (none) | One or more company names, board slugs or careers URLs. One hiring-signal record is returned per company. |
maxCompanies | integer | no | (all) | Maximum companies to analyze in a single run. Free Apify plans are capped at 10 per run. |
withAiCompanySummary | boolean | no | false | Add a plain-English summary of each company. Paid add-on, disabled on free plans. |
withAiIndustry | boolean | no | false | Infer and classify the company's industry (NAICS-style). Paid add-on. |
withAiHiringInsights | boolean | no | false | Analyze the open roles to surface growth/strategic hiring insights. Paid add-on. |
enrichContacts | boolean | no | false | Attempt to find an email/contact for each result without one. Paid add-on. |
enrichContactsMax | integer | no | 50 | Cap how many results the contact add-on tries to enrich, to control add-on cost. |
Output reference
One dataset item per company. Types: string, integer, boolean, object[], array, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
inputName | string | The company identifier exactly as you passed it. |
companyName | string | Resolved company name or slug. |
atsDetected | string | Detected ATS provider, for example greenhouse, lever, ashby. |
atsBoardToken | string | ATS board token/slug used to fetch the roles. |
openRolesCount | integer | Total number of open roles found. |
hiringSignal | string | Overall hiring-intent signal: High, Medium, or Low. |
departmentsHiring | string | Comma-separated list of departments with open roles. |
departmentsHiringCount | integer | Number of distinct departments hiring. |
locationsHiring | string | Comma-separated list of locations with open roles. |
locationsHiringCount | integer | Number of distinct locations hiring. |
remoteRolesCount | integer | Number of open roles flagged as remote. |
engineeringRolesCount | integer | Number of open engineering roles. |
salesRolesCount | integer | Number of open sales roles. |
sampleRoleTitles | string | Pipe-separated sample of role titles. |
newestRoleDate | string | ISO 8601 date of the most recently posted role. |
oldestRoleDate | string | ISO 8601 date of the oldest open role. |
roles | object[] | Full list of open roles. Each item has title, department, location, isRemote, isEngineering, isSales, postedAt, url. |
careersUrl | string | Public careers/board URL for the company. |
source | string | Constant source tag (CompanyHiringSignal). |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
aiCompanySummary | string | AI company summary. Populated only when withAiCompanySummary is enabled, else null. |
aiIndustry | string | AI-inferred industry. Populated only when withAiIndustry is enabled, else null. |
aiIndustryCode | string | AI-inferred NAICS-style code, else null. |
aiHiringInsights | string | AI growth/strategic hiring insights. Populated only when withAiHiringInsights is enabled, else null. |
aiGrowthAreas | array | AI-identified growth areas, else null. |
enrichedEmail | string | Contact email found by the enrichment add-on. Present only when enrichContacts is enabled. |
enrichedContactName | string | Contact name found by the enrichment add-on, or null. |
enrichedJobTitle | string | Contact job title found by the enrichment add-on, or null. |
enrichedEmailStatus | string | Email status: verified, likely, guessed, not_found, or error. |
enrichedSource | string | Source of the enriched contact, or null. |
enrichedConfidence | number | Confidence score for the enriched contact, or null. |
Example output record
Real record from a live run (input {"companies": ["stripe", "notion", "ramp"], "maxCompanies": 10}), with the long text fields and roles array trimmed for readability:
{"inputName": "stripe","companyName": "stripe","atsDetected": "greenhouse","atsBoardToken": "stripe","openRolesCount": 555,"hiringSignal": "High","departmentsHiringCount": 189,"locationsHiringCount": 234,"remoteRolesCount": 106,"engineeringRolesCount": 136,"salesRolesCount": 112,"newestRoleDate": "2026-08-10T13:19:03.000Z","oldestRoleDate": "2026-08-06T16:09:47.000Z","roles": [{"title": "Manager, Sales Development","department": "1130 Global Sales Development Mgrs","location": "Dublin","isRemote": false,"isEngineering": false,"isSales": true,"postedAt": "2026-08-06T12:09:55-04:00","url": "https://stripe.com/jobs/search?gh_jid=7337544"}],"careersUrl": "https://boards.greenhouse.io/stripe","source": "CompanyHiringSignal","observedAt": "2026-08-10T14:29:22.310Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~company-hiring-signal-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"companies":["stripe","notion","ramp"],"maxCompanies":10}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~company-hiring-signal-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"companies":["https://boards.greenhouse.io/stripe"]}'
Apify CLI:
apify call scrapers_lat/company-hiring-signal-scraper \--input '{"companies":["stripe"],"maxCompanies":10}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per company hiring-signal record returned (
resultevent). See the pricing tab for the current per-result price. - Add-ons billed separately. The AI add-ons and
enrichContactseach charge their own event only when they produce output, and are disabled on free plans. - No charge on failure. If a company cannot be resolved to an ATS, the actor does not charge for it. Empty runs cost nothing.
- Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records (companies) per run. Upgrade for higher
maxCompanies.
FAQ and troubleshooting
A company returned no signal. Why? The actor could not detect a supported ATS for that company. Pass the exact ATS board slug or the full careers/board URL instead of the plain company name.
Which ATS providers are supported? Common providers including Greenhouse, Lever and Ashby. Passing a direct board URL improves detection.
How is the hiring signal computed?
It combines the open-role count and role recency into a High, Medium, or Low label. The underlying counts are all returned so you can apply your own thresholds.
Do the AI and contact add-ons work on a free plan? No. All add-ons require a paid Apify plan and are disabled automatically for free users. The base hiring-signal fields are always returned.
Is this affiliated with the companies or ATS providers? No. This actor is independent and reads only publicly available careers pages and public ATS job boards.
Related scrapers
- Greenhouse Jobs Scraper: Open roles from Greenhouse job boards.
- Lever Jobs Scraper: Open roles from Lever job boards.
- Ashby Jobs Scraper: Open roles from Ashby job boards.
- Company Research Enrichment Tool: Enrich a company with firmographic and web data.
- Website Contacts Scraper: Emails and contacts from company websites.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with any company or applicant tracking system provider. Accesses only publicly available careers pages and job boards.
