The problem
"Which companies are hiring right now?" is the starting question for sales prospecting, recruiting, and competitive research — and answering it manually means opening a company's careers page, finding their ATS, and counting roles by hand for every account on your list. Commercial intent platforms will sell you an answer, but it arrives as a black-box score with no source evidence attached, at a price that only makes sense for a funded sales team.
The underlying data is actually public. Companies on Greenhouse, Lever, or Ashby publish their open roles on unauthenticated job-board endpoints that anyone can read. The work is in turning those raw feeds into a consistent, comparable signal across dozens of boards — and in being honest about what a job posting does and does not prove.
What the actor does
The Company Hiring Radar reads the public Greenhouse, Lever, and Ashby board APIs for tokens you supply and returns one normalized, evidence-backed observation per board. No login, no ATS API key, no proxies.
From the README:
-
Explicit or auto-detected boards. Best input form is
provider:token—greenhouse:stripe,lever:spotify,ashby:ramp— where the token is the slug in the company's careers URL. A bare token (stripe) probes all three providers and picks the board with the most open roles. -
Honest identity handling. A token is not a company. Bare-token rows disclose the picked board's declared name (
ownerName/ownerWebsite) and any other real boards found under the same token (candidates, withsameNameflags). The README's live examples make the point: barepulseresolves to Pulse Healthcare on Greenhouse (2,615 roles) while an unrelatedrunpulse.comsits on Ashby (9 roles), and barejunomatches two genuinely different boards both named "Juno". Explicitprovider:tokeninput has nothing to guess. -
Normalized hiring signals per board: total open roles, a plain-English activity band (
light/active/strong/aggressive hiring, derived only from the current posting count), role counts by function (sales, marketing, engineering, product, leadership, data, ops, people, finance, support, legal), remote share, a full by-location breakdown, and how many roles carry a parseable posting timestamp inside yournewWindowDayswindow (default 30). -
Keyword highlights in
matchedRoles— only the roles whose title, department, or function contains your keywords — plus the full normalized role list (title, function, location, remote flag, posted date with itspostedAtBasis, apply URL) in one shape across all three providers. -
Decision context on every row: stable
entityId/observationId/eventId,evidence[]with provider URLs and HTTP status,evidenceCoverage, confidence score with reasons, explicitdataGaps, a conservativerecommendedAction, andsafeToAutomate: false. A run-level KVSOUTPUTreconciles requested, unique, delivered, paid, free-failure, withheld, and replay-safe state.
The README keeps the interpretation boundary in the data: open postings are research evidence — they do not prove headcount growth, budget, expansion, purchase intent, or permission to contact anyone. A clean 404 (no board) is a free row, distinct from a source failure, which is also free.
Example: input and output
Input from the manifest:
{
"companies": ["greenhouse:stripe", "lever:spotify", "ashby:ramp"],
"keywords": ["sales", "marketing"]
}
The README's real output row for ashby:ramp, trimmed:
{
"source": "ashby:ramp",
"provider": "ashby",
"found": true,
"matchBasis": "explicit",
"signals": {
"totalOpenRoles": 118,
"hiringMomentum": "aggressive hiring",
"salesHiring": 46,
"marketingHiring": 16,
"engineeringHiring": 30,
"remoteShare": 0.93,
"newRolesLast30d": 28
},
"matchedKeywords": ["sales", "marketing"],
"summary": "ramp (ashby) — 118 open roles, aggressive hiring. Top: sales 46, engineering 30, marketing 16. 93% remote, 63 match your keywords, 28 new in last 30d."
}
Each of the 118 roles also appears in the normalized roles list with title, function, location, remote flag, postedAt, postedAtBasis, and apply URL.
Pricing and the free limit
Pay-per-event: $0.005 per run start plus $0.002 per successfully delivered company-board report (result-found) — one charge per board regardless of whether it contains 0, 10, or 500 roles, with lower per-event prices on paid Apify tiers. At list prices, a 100-board run costs $0.005 + 100 × $0.002 = $0.205. Apify's free plan includes $5 of usage credits per month, covering about 24 full 100-board runs — roughly 2,500 board reports — before you pay anything. Clean not-found and source-failure rows are never billed.
Try it
Paste three board tokens from careers pages you want to watch, check the candidates disclosures on any bare-token row, then schedule the watchlist: Company Hiring Radar.
For AI agents and MCP
The actor takes JSON in and returns structured JSON via the Apify API, and the README notes it is callable from the Apify API, the SDK, or the Apify MCP server. The integration guidance is written for agents: join rows across runs on entityId, gate downstream automation on OUTPUT.status === "COMPLETE" and replaySafe === true, keep evidence, confidence, and dataGaps attached so a bounded observation never becomes an overclaim, and treat matchedRoles as a human research queue — row-level safeToAutomate is always false.
Top comments (0)