Hiring Signals: Who Is Hiring in Your Niche
Pricing
from $10.00 / 1,000 company analyseds
Hiring Signals: Who Is Hiring in Your Niche
Returns one row per company with its open roles that match your niche keywords, new roles in the last N days, change since the last run and a 0 to 100 hiring score. Reads Workday, Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee career pages.
Pricing
from $10.00 / 1,000 company analyseds
Rating
0.0
(0)
Developer
Brightknot
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Security
Limited permissionsShare
Give it a list of companies and a few keywords that describe your niche. It reads each company's public careers page and returns one row per company: how many open roles match your niche, how many of those are new, how the count changed since your last run, and a hiring score from 0 to 100 so you can sort the list.
Supported job boards: Workday, Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee.
For AI agents
Use this Actor when you have a list of target companies and want to know which of them are hiring for a skill, team or tool right now, ranked by hiring intent. Not for individual job rows. Use ATS Jobs Monitor (brightknot/ats-jobs-monitor) for one row per job.
- Actor id:
brightknot/hiring-signals - Required input:
companies - Call: MCP
call-actorwith the input below, thenget-dataset-items. Over HTTP:POST https://api.apify.com/v2/acts/brightknot~hiring-signals/run-sync-get-dataset-itemswith the input as the JSON body. - Cap the spend with
maxTotalChargeUsdin the call options, not in the input.
Example input
{"companies": ["https://boards.greenhouse.io/airbnb", "https://jobs.ashbyhq.com/ramp", "lever:palantir"],"keywords": ["security", "data engineer"],"countries": ["US", "GB", "REMOTE"],"lookbackDays": 30,"minOpenRoles": 0,"monitorMode": false}
Example output row
Trimmed to the main fields. See the Output schema tab for every field.
{"company": "Airbnb","ats": "greenhouse","careers_url": "https://job-boards.greenhouse.io/airbnb","total_open_roles": 2,"matching_roles": 1,"new_matching_roles_in_lookback": 1,"hiring_score": 23,"top_departments": ["Engineering (1)"],"top_locations": ["Remote, US (1)"],"sample_titles": ["Senior Security Engineer"],"signal_summary": "Airbnb has 1 open role matching security or engineer out of 2 in total, 1 posted in the last 30 days, and this is the first run, so there is no growth figure yet."}
Rows are sorted by hiring_score, highest first.
Cost per call
| Event | Price | When |
|---|---|---|
| Company analysed | USD 0.01 | per company row returned |
| Actor start | USD 0.005 | once per run |
The example input costs at most USD 0.035 (3 companies plus the start).
Limits
- Plain company names are auto-detected on 6 ATS. Workday needs the careers URL.
- Companies below
minOpenRoles(default 1) are left out and not charged. Set 0 to get a row for every company found. - Growth needs at least two runs with the same
monitorName; on the first run the change fields are empty. - Usually finishes in under a minute for 10 companies.
matchDescriptionon Workday is slower. - No credentials needed. Runs with limited permissions.
Who it is for
- Sales and business development teams who sell to companies that are building a certain kind of team. A company that opens 12 security roles in a month is likely to buy security tools. A company hiring Salesforce admins is likely to buy Salesforce services.
- Account-based marketing: rank your target account list by hiring activity in your area each week.
- Recruiting agencies: see which clients and prospects are hiring in the roles you place.
- Investors and analysts: track hiring at a list of companies over time.
Input
| Field | What it does |
|---|---|
| Companies | One per line. A careers URL (https://boards.greenhouse.io/airbnb, https://jobs.lever.co/palantir, https://jobs.ashbyhq.com/ramp, https://apply.workable.com/blueground, https://bunq.recruitee.com, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite), ats:slug (lever:palantir, workday:nvidia/wd5/NVIDIAExternalCareerSite), or a company name to auto-detect. Workday needs the careers URL. |
| Niche keywords | Words that define your niche, for example security, salesforce, data engineer. A role matches when a keyword appears as a whole word in its title, department or team. Plurals match. Leave empty to count all roles. |
| Exclude title words | Roles with these words in the title are not counted (for example intern). |
| Countries | Only count roles in these countries (US, GB, AE). Add REMOTE to also count remote roles anywhere. |
| Also match keywords in job descriptions | Also count a role when a keyword is in its description. Useful for tools such as Salesforce or Snowflake that often appear only in the description. |
| Lookback window (days) | Matching roles posted within this many days count as new. Default 30. |
| Minimum matching roles | Companies with fewer matching roles are left out of the results and not charged. Default 1. |
| Monitor mode | Remember each company's count and report the change on the next run. On by default. |
| Monitor name | A separate memory for each list or schedule. |
| Max jobs read per company | Read at most this many jobs per board. 0 means all. |
Example input:
{"companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite","https://boards.greenhouse.io/airbnb","https://jobs.ashbyhq.com/ramp","lever:palantir","careem"],"keywords": ["security", "soc analyst", "iam"],"excludeKeywords": ["intern"],"lookbackDays": 30,"minOpenRoles": 2,"monitorName": "security-accounts"}
Output (one row per company)
{"company": "Example Co","ats": "greenhouse","careers_url": "https://job-boards.greenhouse.io/exampleco","total_open_roles": 120,"matching_roles": 14,"new_matching_roles_in_lookback": 6,"lookback_days": 30,"previous_matching_roles": 9,"matching_roles_change": 5,"score_volume": 35.6,"score_recency": 35.0,"score_growth": 13.9,"hiring_score": 84,"top_departments": ["Security (9)", "Engineering (4)", "IT (1)"],"top_locations": ["London, GB (6)", "Remote, US (5)", "Dubai, AE (3)"],"sample_titles": ["Senior Security Engineer", "SOC Analyst", "IAM Engineer", "Security Architect", "Detection Engineer"],"signal_summary": "Example Co has 14 open roles matching security, soc analyst or iam out of 120 in total, 6 posted in the last 30 days, up 5 since 2026-10-04.","keywords": ["security", "soc analyst", "iam"],"first_seen": "2026-09-06T07:00:00Z","last_run": "2026-10-11T07:00:00Z","previous_run": "2026-10-04T07:00:00Z","input": "https://boards.greenhouse.io/exampleco"}
This example is illustrative. Rows are sorted by hiring_score, highest first.
| Field | Meaning |
|---|---|
total_open_roles | All open roles on the board (before your keywords and countries). |
matching_roles | Open roles that match your niche. |
new_matching_roles_in_lookback | Matching roles posted within the lookback window. |
previous_matching_roles, matching_roles_change | The count from the last run of the same monitor and the difference. Empty on the first run. |
top_departments, top_locations | The most common departments and locations among matching roles, with counts. |
sample_titles | Up to 5 matching titles, newest first. |
first_seen | When this monitor first analysed the company. |
last_run, previous_run | When this row was produced, and when the previous count was taken. |
A run summary, including companies that were not found or were below the minimum, is saved as SUMMARY in the run's key-value store.
How the hiring score works
The score is the sum of three parts, rounded to a whole number between 0 and 100.
| Part | Points | Formula | In words |
|---|---|---|---|
| Volume | up to 40 | 40 x min(1, ln(1 + matching_roles) / ln(21)) | More matching roles score higher. Full marks at 20 or more. The first few roles count the most. |
| Recency | up to 35 | 35 x min(1, ln(1 + new_matching_roles_in_lookback) / ln(6)) | Roles posted inside the lookback window. Full marks at 5 or more. |
| Growth | up to 25 | 25 x clamp((matching_roles - previous) / max(previous, 5), 0, 1) | Increase since the last run. Full marks when the count doubles (or grows by 5 when it was 5 or fewer). No points on the first run, when the count fell, or after you change the keywords or countries. |
Some reference points: 1 matching role posted this week scores about 23 on a first run. 20 roles with 5 new scores 75 on a first run, and 100 if the count doubled since the last run.
Pricing
$0.01 per company analysed, plus $0.005 per run.
You are charged for each company row in the results. Companies that are not found, or that have fewer matching roles than your minimum, are not returned and not charged. A weekly check of 100 target accounts costs at most $1.005.
How it works
- Each company is matched to its job board. URLs and
ats:slugentries are used as given. Plain names are tried on Greenhouse, Lever, Ashby, Workable, Recruitee and SmartRecruiters in turn. - The Actor reads the public job feed that the job board provides for the company's own careers page. On Workday it reads the job list 20 at a time and opens a job's page only when it needs the description, the country or the exact date.
- Roles are matched against your keywords, counted and scored.
- In monitor mode, the matching count for each company is saved in a named key-value store (
hiring-signals-state) and compared on the next run.
Data and privacy
It only reads job postings that companies publish on their own careers pages. No login, no cookies, no proxies. It does not collect names, emails or any other personal data, and it does not read hiring manager or recruiter details.
Notes and limits
- Some companies use a custom domain for their careers page. If a name does not auto-detect, paste the job board link from an "Apply" button instead.
- Workday shows at most 2,000 jobs per board, so very large Workday employers are counted up to 2,000. Workday does not publish departments, so
top_departmentsis empty for Workday companies. Workday gives dates as "Posted 3 Days Ago", so they have day precision. - A role that has no posting date is counted in
matching_rolesbut not as new. - Keyword matching is on whole words.
engineermatches "Engineers" but not "Engineering"; add both if you want both.