Working code for Hiring Signals, an Actor that reads a company's public job board and returns what the board reveals instead of the listings on it.
Everything here is standard library only. Nothing to install.
Point it at a company. It reads the board and answers one question: what is this company about to do?
Reddit · 188 open roles
↳ Exactly one legal role on the entire board, and it is a
Director of Ads Policy.
You do not hire a policy director for an ads business you
are not about to scale.
Duolingo · 64 open roles
↳ 5 leadership openings in marketing, plus single roles in
Japan, the UK and China while 78% of the board sits in the US.
Three markets opening at once.
Notion · 110 open roles
↳ Half the board is go-to-market.
The product is finished. They are buying distribution now.
Those are real, from one run. The scripts in examples/ are how you get them, and FINDINGS.md has a full pass over 112 company boards and 11,969 open roles — including the loudest signal of that run, which turned out to be wrong and why.
run_and_export.py |
Run over a list of companies, write one CSV row per signal. The shape you want for a spreadsheet or a CRM import. |
watch_target_accounts.py |
Run on a schedule and print only what changed. The first run stores a baseline; after that you hear about a company the week it crosses a line it had not crossed before. |
export APIFY_TOKEN=your_token
printf 'stripe\nfigma\nwise\n' > companies.txt
python examples/run_and_export.py companies.txt signals.csv{
"companies": [
{ "board": "stripe" },
{ "board": "wise", "name": "Wise" },
{ "board": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite", "name": "NVIDIA" }
],
"minSeverity": 50,
"includeJobs": false
}board is the company's slug on its ATS — usually just the company name. The platform is detected automatically and then remembered, so a repeat run costs one request per company.
Seven platforms: Greenhouse · Lever · Ashby · Workable · SmartRecruiters · Recruitee · Workday
Workday is the exception to the slug rule: every customer gets its own host, so paste the careers page URL and it is recognised on sight.
GTM_PUSH |
Revenue hiring outweighs product hiring. The product is ready; they are buying distribution. |
GEO_EXPANSION |
First roles in a country they have none in. The earliest visible sign of market entry. |
FIRST_HIRE_IN_FUNCTION |
A function being created from nothing. |
AI_CAPABILITY_BUILD |
Concentrated ML hiring. They are building AI, not buying it. |
INFRA_SHIFT |
First platform and SRE hires. The original stack stopped working. |
LEADERSHIP_BUILD |
Several director-and-above searches in one function. An org is being built. |
HIRING_SURGE |
Most of the board is new. Headcount just unlocked. |
NET_NEW_ROLES |
Diffed against the previous crawl, not against posting dates. |
Every signal carries a severity, a confidence level, the reason it matters, and the exact postings that triggered it.
A signal that fires on every company is not a signal.
The first calibration returned at least one signal for every single company tested, and AI_CAPABILITY_BUILD fired on 77% of boards — which in 2026 is just a description of the technology industry. That was treated as a bug, not a feature.
The test suite contains a deliberately boring control company that is required to produce zero signals. If it ever produces one, the build is wrong.
The pricing follows from the same idea: $0.08 per company that produced a signal, and nothing for one that didn't. If silence earned money there would be an incentive to loosen thresholds and bury you in noise.
It reads the public, documented job-board APIs those seven platforms publish so companies can embed listings on their own careers pages. Third-party use is the intended use. No browser automation, no fingerprint evasion, no proxy rotation, no anti-bot arms race to eventually lose.
Two known-hard cases are handled explicitly rather than papered over:
Workday serves newest-first. Read the first thousand roles of a two-thousand-role board and you have read the fresh half — then reported "100% of this board opened in the last month". Truncated boards now report the true total, how much was actually read, and return null for freshness rather than a confident falsehood.
SmartRecruiters returns 200 OK with zero results for a company that does not exist, where every other platform returns 404. Counting that as a hit would attach an empty board to any string at all.