Company Hiring Signals avatar

Company Hiring Signals

Pricing

from $15.00 / 1,000 companies

Go to Apify Store
Company Hiring Signals

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

PoliteBots

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

11 hours ago

Last modified

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).

  1. Search mode: set the filters you need. You get the companies with the most matching open roles first.
  2. 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's inputDomain is 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 the SUMMARY record. Set minMatchingRoles: 0 to 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

FieldMeaning
domainRegistrable domain of the company.
inputDomainEnrichment mode: the first of your domains, after normalization, that matched this company; it can be an alias of domain. Null in search mode.
companyNameCompany name from its job board.
atsJob board system: greenhouse, lever or ashby.
boardUrlPublic job-board URL.
openRolesOpen roles as of dataAsOf. A role listed in several locations counts once.
openTitlesDistinct normalized titles among open postings.
matchingOpenRolesOpen roles that match your role filters; equals openRoles with no role filter.
matchingOpened7d, matchingOpened30dMatching postings opened in the last 7 or 30 days. Reposts do not count.
byFunctionOpen roles per function; every function is present, 0 when none.
bySeniorityOpen roles per seniority level; every level is present, 0 when none.
countriesCountries of open roles (ISO 3166-1 alpha-2), most frequent first.
remoteShareShare of open roles flagged remote, two decimals; null when there are no open roles.
opened7d, opened30dPostings opened in the last 7 or 30 days. Reposts do not count. Null on new Lever and Ashby boards (see Data freshness).
closed7d, closed30dPostings closed in the last 7 or 30 days; null until we have that many days of history (see Data freshness).
openRoles30dAgoOpen roles 30 days before dataAsOf; null when our history starts later.
openOver60dOpen roles that were opened 60 or more days ago; null when most open roles have no opening date.
technologiesTechnologies named in open roles: {name, openRoles}, most open roles first.
technologyNamesThe first 10 technology names, for flat exports such as CSV.
sampleRolesUp to sampleRolesLimit matching open roles, newest first, each role once: title, function, seniority, countries, remote, url, openedAt.
changesUp 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.
historyStartDate we first crawled the board successfully.
lastCrawledAtDate we last crawled the board successfully.
dataAsOfDate of the data behind this run.
schemaVersionVersion 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.

  1. A language model read the ads offline; no model runs during your run.
  2. 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.
  3. 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

  1. Up to 10,000 companies per run (maxCompanies, ignored when you pass domains) and 10,000 domains.
  2. Up to 20 sample roles per company.
  3. The data is a daily snapshot, not live. Roles opened today appear after the next daily build.
  4. A job board shows what the company chose to publish; hidden or unlisted postings are not included.
  5. 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.
  6. When the data has no change labels, a run with changeTypes returns no company, and its status message says so.