Company Hiring Signals
Pricing
from $15.00 / 1,000 companies
Company Hiring Signals
Find companies that are hiring, or enrich your own company domains, with open roles by function, seniority, country and technology, plus 7- and 30-day hiring trends. About 5,500 companies from Greenhouse, Ashby and Lever, updated daily. Pay per company returned.
Pricing
from $15.00 / 1,000 companies
Rating
0.0
(0)
Developer
PoliteBots
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
11 hours ago
Last modified
Categories
Share
Which companies are hiring, for what, and how fast? This Actor returns one row per company with its open roles, split by function, seniority, country and technology, and with 7- and 30-day hiring trends. The data comes from the public job boards of Greenhouse, Lever and Ashby, crawled every day.
It is for sales and recruiting teams that prospect companies by hiring, for lead-generation tools that enrich a list of company domains, and for analysts who follow hiring trends.
What you get
Role filters (function, title keywords, technology, country, remote only) choose which open roles count. Two company
filters choose which companies come back: minMatchingRoles, the minimum number of matching open roles (1 by default),
and openedWithinDays, at least one matching role opened in the last N days. A third, changeTypes, keeps the
companies whose own job ads say they are making a change, such as building a new team or entering a new market (see
Company changes).
- Search mode: set the filters you need. You get the companies with the most matching open roles first.
- Enrichment mode: pass your own list of company domains in
domains. You get one row per known company with matching open roles, in your order. Each row'sinputDomainis the domain from your list that it answers, so you can join the rows back to your list even when you gave an alias. Known companies that fail your filters, and domains we do not know, are listed free in theSUMMARYrecord. SetminMatchingRoles: 0to get a row for every known company, hiring or not.
Example: prospecting
{"functions": ["engineering"],"countries": ["US"],"technologies": ["Kubernetes"],"maxCompanies": 50}
Example: companies building a new team or entering a new market
{ "changeTypes": ["new_team", "market_entry"], "countries": ["US"], "maxCompanies": 50 }
Example: enrichment
{ "domains": ["acme.io", "www.example.com/careers"], "openedWithinDays": 30 }
Output example
{"domain": "acme.io","inputDomain": "acme.io","companyName": "Acme","ats": "greenhouse","openRoles": 42,"matchingOpenRoles": 12,"opened7d": 5,"opened30d": 14,"closed30d": 6,"openRoles30dAgo": 35,"remoteShare": 0.4,"technologyNames": ["Kubernetes", "Python"],"changes": [{"type": "market_entry","title": "Founding Account Executive, Japan","url": "https://job-boards.greenhouse.io/acme/jobs/4100001","firstSeen": "2026-10-20"}],"dataAsOf": "2026-10-24","schemaVersion": 2}
The full item has more fields (list below). Every field is always present; unknown values are null.
Output fields
| Field | Meaning |
|---|---|
domain | Registrable domain of the company. |
inputDomain | Enrichment mode: the first of your domains, after normalization, that matched this company; it can be an alias of domain. Null in search mode. |
companyName | Company name from its job board. |
ats | Job board system: greenhouse, lever or ashby. |
boardUrl | Public job-board URL. |
openRoles | Open roles as of dataAsOf. A role listed in several locations counts once. |
openTitles | Distinct normalized titles among open postings. |
matchingOpenRoles | Open roles that match your role filters; equals openRoles with no role filter. |
matchingOpened7d, matchingOpened30d | Matching postings opened in the last 7 or 30 days. Reposts do not count. |
byFunction | Open roles per function; every function is present, 0 when none. |
bySeniority | Open roles per seniority level; every level is present, 0 when none. |
countries | Countries of open roles (ISO 3166-1 alpha-2), most frequent first. |
remoteShare | Share of open roles flagged remote, two decimals; null when there are no open roles. |
opened7d, opened30d | Postings opened in the last 7 or 30 days. Reposts do not count. Null on new Lever and Ashby boards (see Data freshness). |
closed7d, closed30d | Postings closed in the last 7 or 30 days; null until we have that many days of history (see Data freshness). |
openRoles30dAgo | Open roles 30 days before dataAsOf; null when our history starts later. |
openOver60d | Open roles that were opened 60 or more days ago; null when most open roles have no opening date. |
technologies | Technologies named in open roles: {name, openRoles}, most open roles first. |
technologyNames | The first 10 technology names, for flat exports such as CSV. |
sampleRoles | Up to sampleRolesLimit matching open roles, newest first, each role once: title, function, seniority, countries, remote, url, openedAt. |
changes | Up to 5 changes the company's open job ads state, newest first: type, title, url and firstSeen of the posting. With changeTypes, only those types. Empty when the data has no change labels. |
historyStart | Date we first crawled the board successfully. |
lastCrawledAt | Date we last crawled the board successfully. |
dataAsOf | Date of the data behind this run. |
schemaVersion | Version of this output format. Adding values to a list does not change it; changing fields does. |
Company changes
changes lists what a company's own open job ads say it is starting or building now, not what it already does. There
are 14 types: new_team (a new team, function or office, or a first or founding hire), market_entry (a new country,
region or customer segment), product_launch, ai_buildout, data_platform, migration (to or between clouds, or
re-platforming), system_rollout (ERP, CRM, HRIS, billing), security_certification (SOC 2, ISO 27001, FedRAMP, PCI,
HIPAA), regulatory_program (new regulation or a licence), ipo_readiness, acquisition_integration,
enterprise_push (moving upmarket), partner_program and scale_program. Each change gives the job title, its link
and the day we first saw the posting; nothing else from the ad is returned.
- A language model read the ads offline; no model runs during your run.
- Coverage is partial: we read a few ads per company, the most senior ones and those about a new team, so a company with no listed change may still be making one.
- A label can be wrong: in our tests about 1 change in 5 was not confirmed by a check that read the whole ad. Every change links to its posting, so you can read it yourself.
Price
You pay per company returned, plus Apify's small per-run start fee. A company costs US$0.020 on the Free and Starter
plans (US$20 per 1,000 companies), US$0.018 on Scale (US$18 per 1,000) and US$0.015 on Business and above (US$15 per
1,000). You pay no company charge for domains we do not know, domains that fail your filters, invalid input or empty
results. If your maximum total charge for the run is lower than the rows you asked for, the Actor returns only the rows
that fit and says so in the SUMMARY record (budgetCut: true). The start fee comes out of the same maximum, so leave
room for it: on the Free plan a maximum of US$0.20 returns 9 companies, not 10.
Data freshness
The data is rebuilt once a day. dataAsOf is the date of that build. If the newest data is more than 7 days old, the
Actor still returns rows, charges nothing for them, and sets staleData: true in SUMMARY.
Our crawl history starts on 2026-10-23, so closed7d is null until about 2026-10-30 and closed30d until about
2026-11-22. The same wait applies to opened7d, opened30d, matchingOpened7d and matchingOpened30d for companies
on Lever and Ashby, because their opening date is the day we first saw the posting. Greenhouse gives its own publish
date, so those counts are filled from the start. A board we start crawling later has the same wait.
Sources and coverage
Public job boards of companies that use Greenhouse, Lever or Ashby. Companies on other systems, and companies that post only on their own site, are not covered. A company appears only when we can match its board to a company domain.
Limits
- Up to 10,000 companies per run (
maxCompanies, ignored when you passdomains) and 10,000 domains. - Up to 20 sample roles per company.
- The data is a daily snapshot, not live. Roles opened today appear after the next daily build.
- A job board shows what the company chose to publish; hidden or unlisted postings are not included.
- An input field the Actor does not know, such as a misspelled filter, stops the run before any charge and is named in the error.
- When the data has no change labels, a run with
changeTypesreturns no company, and its status message says so.