Hiring Signal Monitor: Open Roles & Hiring Velocity
Pricing
from $5.00 / 1,000 results
Hiring Signal Monitor: Open Roles & Hiring Velocity
Track open roles and hiring velocity from companies' Greenhouse and Lever job boards as a B2B sales and expansion trigger. New-role and velocity-spike alerts, with a hard cost cap. For sales, recruiting and market research.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
0
Monthly active users
9 days ago
Last modified
Categories
Share
Hiring Signal Monitor โ track open roles & hiring velocity for sales triggers
Turn a company's hiring into a sales and expansion signal. A hiring signal monitor /
job-postings scraper / extractor / data API / feed that reads companies' public
Greenhouse and Lever job boards and surfaces the actual SIGNAL โ which functions a
company is hiring for, how fast, and where โ not just raw rows. Every open role is normalized
to one schema with a normalized function (Engineering, Sales, Product, โฆ), a real derived
seniority, a cleaned department, hiring velocity (postedWithinDays / isRecent),
and a best-effort salary band. Flip on groupBy: "company" for one aggregated hiring
summary per company โ roles by function, roles posted in the last 30/90 days, top locations,
remote share, and the newest roles. Repeated runs turn it into a new-role and velocity-spike
monitor โ for B2B sales teams, recruiters, CI/market researchers, and investors tracking
talent demand.
Quick Start: click Start with the default input. With zero configuration it pulls open roles from a known public Greenhouse board and a known public Lever board and returns clean rows โ company, role title, function, seniority, department, team, employment type, location, remote flag, days since posted + a recent flag, salary (when listed), open-role count, and the posting link. To track your own target accounts, paste company board tokens into greenhouseTokens (e.g.
gitlabโ the slug afterboards.greenhouse.io/) and/or leverTokens (e.g.leverdemoโ the slug afterjobs.lever.co/). Set groupBy tocompanyfor one rolled-up hiring-signal summary per company. Narrow the feed with the optional filters โ roleKeywords, seniority, department, locationIncludes, remoteOnly (all empty = every role). First useful results in under two minutes.
What it does
Greenhouse and Lever expose public, no-auth JSON job boards per company, so the data is clean, stable, and easy to extract โ no browser, no login, and deliberately not the anti-bot Indeed/LinkedIn head. This actor:
- pulls a company's open roles with title, cleaned department, team, employment type, location, and remote flag;
- enriches every role with a normalized business function (Engineering, Product, Design,
Data & Analytics, Sales, Marketing, Customer Success, Support, Operations, Finance, People &
HR, Legal, IT, Security, Other), a real derived seniority band (intern โ executive),
hiring velocity (
postedWithinDays+ anisRecentโค30-day flag), and a best-effort salary band (from a structured pay field where the board exposes one, else parsed from the description); - normalizes every role across boards to one schema with a stable, board-scoped id and a company-level open-roles count (a hiring level โ the budget-and-expansion signal; tracked over scheduled runs it becomes the velocity trend);
- with
groupBy: "company", aggregates the whole board into one summary per company โ open-role count, roles by function and by seniority, top locations, remote share, roles posted in the last 30/90 days, the top functions, and the newest roles; - on a schedule, becomes a monitor โ emitting (and charging for) only roles (or company summaries) that are new or whose details changed since the last run.
The function field is deterministic-first: a built-in keyword classifier always populates
it, so the actor works with no setup. Set an optional AI_API_KEY (any OpenAI-compatible
endpoint โ OpenRouter by default) and a single batched AI call per run refines the function for
each company's bespoke department names; without a key it degrades silently to the
deterministic rules.
Who it's for
B2B sales teams (hiring is a buying trigger โ a company hiring five sales reps is expanding), recruiters, and market researchers tracking talent demand.
Sources & roadmap
- Greenhouse โ live today, via the public board JSON (
boards-api.greenhouse.io). - Lever โ live today, via the public board JSON (
api.lever.co). - Other ATS / niche boards (Ashby, Workable, vertical boards) โ planned follow-ons; the
schema already carries a
boardfield so they slot in without a schema change.
Input
Runs zero-config. Optional fields:
greenhouseTokensโ one or more Greenhouse board tokens (the slug in a board URL). Leave empty for a demo run on a known public board.leverTokensโ one or more Lever board tokens (the slug in a Lever jobs URL). Leave empty for a demo run on a known public board.roleKeywordsโ keep only roles whose title contains one of these (case-insensitive); e.g.["engineer", "sales"]. Empty = every role.seniorityโ keep only roles whose derived seniority is one ofintern,junior,mid,senior,lead,executive,unknown. Empty = every level.departmentโ keep only roles whose department contains one of these. Empty = every department.locationIncludesโ keep only roles whose location contains one of these (e.g.["berlin", "remote"]). Empty = every location.remoteOnlyโ when true, keep only roles flagged remote. Default false.groupByโrole(default) = one row per open role with all the enriched fields;company= one aggregated hiring-signal summary per company.maxItemsโ cap on roles returned per run (keeps runs cheap).maxCostPerRunUsdโ hard ceiling on spend per run (default $5).
Optional environment variable: AI_API_KEY (+ optional AI_BASE_URL, AI_MODEL) enables the
AI function-refinement pass. It is never required โ the actor produces a full result without it.
All filters are applied at fetch time, so you only pay for the roles you asked for. The boards have no query API; the actor fetches the public board and drops non-matching roles in-process.
Output
groupBy: "role" (default) โ one role per row: company, board, title, function,
seniority, department, team, employmentType, location, remote, postedDate,
postedWithinDays, isRecent, salaryMin, salaryMax, salaryCurrency, openRoles, and the
role sourceUrl, plus a stable board-scoped id and kind: "role".
groupBy: "company" โ one summary per company: company, board, openRoles,
rolesByFunction, rolesBySeniority, topLocations, remotePct, postedLast30d,
postedLast90d, topFunctions, newestRoles, the board sourceUrl, a company-scoped id,
and kind: "company".
See .actor/dataset_schema.json (the overview and companies views).
Notes on fields:
functionis a normalized business function from the fixed taxonomy above โ deterministic by default, AI-refined whenAI_API_KEYis set.postedWithinDaysis whole days between the posting date and run time;isRecentis true at โค30 days. Salary is null on all three fields when the board exposes no structured pay field and the description states no pay.openRolesis the number of open roles on that company's board at fetch time โ a hiring level (identical on every role row from the same board), not a per-run rate. Schedule the actor and the change in this level run-over-run is the velocity trend.companyfor Lever rows is the board slug (e.g.leverdemo); Lever's public board JSON does not carry a display name. Greenhouse rows carry the realcompany_name.departmentis cleaned of any leading internal-ID prefix (e.g.1195 Account ExecutivesโAccount Executives). It populates on Greenhouse (via the public board'sdepartments) and on Lever (native).teamandemploymentTypeare Lever-native and arenullon Greenhouse.
Pricing
Pay-per-event: a small start fee plus a per-result charge, with a hard per-run cost cap on by default โ so the bill is never a surprise. In monitor mode you pay only for new or changed roles. Built on public, stable Greenhouse and Lever board APIs, so it is low-maintenance โ fixes within 24h.
