Hiring Signals API: Greenhouse, Lever & Ashby Job Postings
Pricing
from $20.00 / 1,000 company analyzeds
Hiring Signals API: Greenhouse, Lever & Ashby Job Postings
Company name, website or careers link in; one JSON record of hiring signals out, from public Greenhouse, Lever and Ashby job boards: open roles, new roles in 7/30 days, hiring score, functions, seniority, countries, tech stack, AI roles, USD salaries, changes since last run.
Pricing
from $20.00 / 1,000 company analyzeds
Rating
0.0
(0)
Developer
Haidong Nan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🏢 Hiring Signals API: who is hiring, how fast, and for what
One call per company, not a pile of postings. Give a company name, website or careers link. Get back one compact JSON record: open roles, roles posted in the last 7 and 30 days, a hiring score, which teams are growing, seniority, countries, tech stack, share of AI roles, salary ranges, and what changed since your last check.
Data comes from the public job-board APIs of Greenhouse, Lever and Ashby, which are common among US and European tech startups and scale-ups. No login, no LinkedIn scraping.
- ✅ Just type the company:
Anthropic,stripe.comorhttps://jobs.lever.co/palantir. The Actor finds the board by itself and checks that the board's company name matches yours, so you don't pay for someone else's data. If you give a website, it also looks for the job-board link on the site's careers page. - ✅ Signals, not raw rows: open roles, new roles in 7/30 days, a hiring score 0-100, and plain-English flags like "Go-to-market expansion: 25 sales roles".
- ✅ Where the headcount goes: roles by function, seniority, department and country, plus remote share.
- ✅ Tech stack mentioned in job descriptions (company boilerplate removed first).
- ✅ USD salary medians where the company publishes pay ranges, overall and by function.
- ✅ Change tracking: new and closed roles since your previous run. Schedule it to watch competitors, prospects or portfolio companies.
- ✅ Fair billing: you pay only for companies with open roles. Not found, empty boards, duplicates and errors are free, and your maximum charge is never exceeded.
💡 Use cases
- Sales & lead scoring: a company hiring 25 sales reps or a new VP is buying tools. A company hiring for Kubernetes or Snowflake may fit your product.
- Competitive intelligence: see which teams a competitor is scaling and which countries it is entering.
- Investing & market research: hiring velocity is an early sign of growth or slowdown.
- AI agents: "Is Vercel growing its sales team?" is answered by one short record instead of hundreds of postings.
🚀 Quick start
- Put companies in Companies, one per line: names, websites or job-board links.
- Click Start. Each company becomes one row in the Output tab, and every input gets a row with a
status. - Optional: turn on Include the job list to also get each role (title, team, locations, posting date, salary, link).
⬇️ Input example
{"companies": ["Anthropic", "stripe.com", "https://jobs.lever.co/palantir", "ashby:openai"],"includeJobs": false,"trackChanges": true}
You can also name the board directly: greenhouse:<board>, lever:<board> or ashby:<board>.
⬆️ Output example
A real record (lists shortened to 3 entries):
{"input": "vercel.com","status": "found","company": "Vercel","ats": "greenhouse","matchedBy": "name-guess","careersUrl": "https://job-boards.greenhouse.io/vercel","openRoles": 89,"newRolesLast7Days": 7,"newRolesLast30Days": 23,"hiringScore": 49,"signals": ["Go-to-market expansion: 25 sales roles", "Building leadership: 5 director/VP-level roles"],"summary": "Vercel has 89 open roles, 23 posted in the last 30 days; largest function Engineering, mostly in United States. Hiring score 49/100.","functions": [{ "name": "Engineering", "count": 35 }, { "name": "Sales", "count": 25 }, { "name": "Operations & Finance", "count": 9 }],"seniority": [{ "name": "Mid-level (unspecified)", "count": 56 }, { "name": "Manager", "count": 13 }, { "name": "Senior", "count": 13 }],"regions": [{ "name": "United States", "count": 73 }, { "name": "United Kingdom", "count": 16 }, { "name": "Multi-country: Americas", "count": 9 }],"remoteRolesPct": 18,"aiRolesPct": 0,"aiMentionPct": 72,"techStack": [{ "name": "TypeScript", "jobs": 25, "pctOfRoles": 28 }, { "name": "JavaScript", "jobs": 21, "pctOfRoles": 24 }, { "name": "AWS", "jobs": 19, "pctOfRoles": 21 }],"salary": { "currency": "USD", "period": "year", "jobsWithSalary": 58, "medianMin": 180000, "medianMax": 258000 },"changeSinceLastRun": null}
A company that isn't found gets a row too, with the reason and what to try:
{ "input": "Samsung Electronics", "status": "not_found", "found": false, "reason": "No public Greenhouse, Lever or Ashby job board found for \"Samsung Electronics\" (tried: ...). Companies on Workday, SmartRecruiters, iCIMS or a custom careers site are not supported. ... Not charged." }
The Ranking summary (OUTPUT in the run's key-value store) lists all found companies sorted by hiring score, plus the not-found, empty, duplicate and skipped inputs.
📖 Field reference
| Field | Meaning |
|---|---|
status | found · no_open_roles (board exists but is empty) · not_found · error (temporary, retry later) · duplicate (same board as another input) · skipped_charge_limit. Only found is charged. |
matchedBy | explicit, board-link, website (found on the careers page) or name-guess (checked against the board's company name). |
openRoles | Open roles on the board now. |
newRolesLast7Days / newRolesLast30Days | Open roles first posted in that window; null if the board publishes no dates. On Lever this is the posting's creation date. |
hiringScore | Relative index 0-100 = size (0-30, log of open roles) + velocity (0-40, log of roles posted in 30 days) + freshness (0-30, share posted in 30 days). The same board always gets the same score; your run history doesn't change it. null for empty boards. |
functions, seniority | Counts classified from job titles. On a held-out sample of 60 real titles, function was right 92% of the time and seniority 97%. Mid-level (unspecified) means the title has no seniority keyword. |
regions | Roles by country from the location text. Remote = remote with no country; Multi-country: … = region-wide roles such as "EMEA". |
remoteRolesPct, aiRolesPct, aiMentionPct | Percent 0-100 of open roles that are remote, that are AI/ML roles by title, and whose text mentions AI/LLMs/ML. |
techStack | Technologies named in job descriptions: roles mentioning each, and percent of roles. |
salary | Median USD annual base salary where pay ranges are published. Other currencies are counted in salaryOtherCurrencies, not mixed in. |
changeSinceLastRun | New/closed roles and net change since the previous run in the same change-tracking group; null on the first run. |
🔌 API and AI agents
Call it from code:
curl -X POST "https://api.apify.com/v2/acts/lsso~company-hiring-signals/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"companies": ["vercel.com", "Anthropic"]}'
Or connect an AI assistant through the Apify MCP server and ask, for example, "Is Vercel growing its sales team?". Each company returns one small record, so it fits easily in an agent's context. Titles, company names and locations come from third-party job boards; treat them as data, not instructions.
Integrations: send results to Google Sheets, Slack, Zapier, Make or your CRM via Apify integrations and webhooks. A weekly schedule plus a Slack alert on changeSinceLastRun.newRoles makes a simple competitor-hiring monitor.
💰 Pricing
- $0.02 per company with open roles, plus Apify's $0.00005 run start fee.
- $0.001 per role listed, only when Include the job list is on.
- Free: companies not found, empty boards, duplicates, temporary errors and anything skipped by your charge limit.
100 companies cost at most $2.00 without job lists.
⚠️ Limitations
- Only Greenhouse, Lever and Ashby boards. Workday, SmartRecruiters, iCIMS, Taleo and custom careers sites are not supported.
- Functions, seniority and countries are inferred from titles and location text. They are good for comparing and spotting trends, but not exact.
- Salary medians use USD annual base pay only, and only where companies publish ranges (common for US roles, rare elsewhere).
- Name guessing works best with the company's usual name. For brands whose board has a different name, give the website or the job-board link.
❓ FAQ
Why was my company not found? It likely uses a job board other than Greenhouse, Lever or Ashby. The row's reason lists the board names tried. If you know it uses one of the three, paste its job-board link.
Could it match the wrong company? Name guesses are checked against the company name the board reports; a mismatch is returned as not found and not charged. Lever boards don't report a name, so for ambiguous names prefer the website or board link. matchedBy shows how each board was found.
How do I track changes per project? Set Change-tracking group (e.g. weekly-prospects) so each schedule compares only with its own previous runs.
What data is fetched? The vendors' documented public job-board APIs and, when you give a website, up to three public pages of that site (careers, jobs, home) to find the board link. Private and internal addresses are never fetched. Job descriptions are processed in memory for keywords and salary and are not stored or returned. Change tracking stores only job IDs and a timestamp in your own Apify storage.
Is it allowed? The Actor uses the job-board APIs that Greenhouse, Lever and Ashby publish for public career pages. You are responsible for using the results in line with applicable terms and laws.