How to scrape Hiring Velocity Signals
Hiring velocity signals show which companies are hiring faster. You get one row per company with open roles, new roles in 7 and 30 days, trend vs the prior window, team and seniority mix, and a 0-100 score, from public ATS boards and LinkedIn jobs. No login.
Open Hiring Velocity Signals: Company Growth from Job Posts on Apify
Hiring Velocity Signals turns a list of companies into one row per company that says how fast each one is hiring, which teams are growing, and where. It reads public careers boards (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee) and LinkedIn's public job search, then works out the numbers for you: new roles in the last 7 and 30 days, the trend against the previous window, the department and seniority mix, new cities and regions, and a 0-100 hiring score with the reason behind it.
You do not get a pile of job listings to sort through. You get the answer a sales team, an investor or a competitor analyst actually wants: "Acme posted 31 roles in the last 30 days, up 140% on the 30 days before, 60% of them in sales, and it opened its first roles in Europe."
What it outputs
One row per company. This is a real row from a test run (trimmed: the dataset also has the full department, seniority and region breakdowns and the top roles).
Example input
{
"companies": [
"https://boards.greenhouse.io/figma",
"https://jobs.lever.co/spotify",
"ashby:notion",
"discord.com",
"https://www.linkedin.com/company/hubspot",
"Ramp"
],
"lookbackDays": 30
}Sample output
{
"company": "HubSpot",
"status": "ok",
"signal": "HubSpot: 35 open roles, 25 new in 30d (5.8/wk, +150% vs prior 30d); top team sales. Signals: hiring up +150% (25 vs 10 roles, last 30d vs prior 30d); sales surge +700% (16 vs 2 roles). Score 71/100.",
"hiringScore": 71,
"trend": "surging",
"openRoles": 35,
"newRoles7d": 2,
"newRolesInWindow": 25,
"prevWindowRoles": 10,
"velocityPerWeek": 5.8,
"trendPct": 150,
"topDepartment": "sales",
"gtmShare": 68,
"engineeringShare": 24,
"deptSales": 18,
"deptEngineering": 8,
"signalFlags": ["HIRING_SURGE", "DEPT_SURGE", "NEW_CITY", "GTM_BUILDOUT"],
"signals": [
"hiring up +150% (25 vs 10 roles, last 30d vs prior 30d)",
"sales surge +700% (16 vs 2 roles)",
"engineering surge +67% (5 vs 3 roles)",
"new office cities: London, Paris, Berlin",
"go-to-market build-out: 68% of new roles are sales, marketing or customer success"
],
"scoreExplained": "volume 25/35 (25 new roles in 30d) + momentum 25/25 (+150% vs prior 30d) + breadth 12/15 (4 teams hiring) + expansion 9/15 (3 new city/region/team-region) + leadership 0/10 (0 director+, 0 manager) = 71",
"newLocations": ["London", "Paris", "Berlin"],
"openRolesBasis": "LinkedIn postings in the last 60 days",
"sourcesUsed": ["linkedin:68529"],
"sourceUrl": "https://www.linkedin.com/jobs/search?f_C=68529",
"linkedinCompanyUrl": "https://www.linkedin.com/company/hubspot",
"monitorStatus": null,
"checkedAt": "2026-10-14T00:18:12.471Z"
}Sample taken from the actor's README; values shown as placeholders there are placeholders.
FAQ
Do I need a LinkedIn account, cookies or an API key?
No. The board APIs are public, and LinkedIn is read through its logged-out job search pages. You only need an Apify account.
What should I put in `companies`?
The most precise input wins. A board URL (https://boards.greenhouse.io/figma) or token (greenhouse:figma) is exact. A domain (figma.com) works well because the actor checks the careers page. A plain name works for distinctive names. A LinkedIn company URL is exact for LinkedIn.
Why was a company not charged?
Either nothing was found (status: no_jobs_found), the board lists zero roles, the score was under minHiringScore, or, in monitor mode, nothing changed. The run's OUTPUT record lists counts for each case.
How long does a run take?
ATS boards answer in a second or two each, three at a time, so 100 board companies take about a minute. LinkedIn companies take about 5-10 seconds each because requests are paced. Use linkedinMode: "off" for big lists of known board companies.
Can I get the individual job postings?
This actor returns one row per company, with the five newest roles in topRoles. For full job listings use ATS Open Roles or LinkedIn Public Jobs (below).
How is this different from a job scraper?
A job scraper gives you thousands of postings and leaves the counting to you. This actor does the counting, the time windows, the classification and the comparison, and returns one ranked row per company.
Can I change the score weights?
Not in this version. Every part of the score is in its own column (scoreVolume, scoreMomentum, scoreBreadth, scoreExpansion, scoreLeadership), so you can re-weight them in a sheet.
Which countries does it work for?
Any. Regions and cities are read from location text in any language the boards use, with the best coverage for English place names.
Where do I run it?
On Apify: https://apify.com/transparent_meteorite/hiring-velocity-signals. Check the Pricing tab there for current prices.
Try Hiring Velocity Signals: Company Growth from Job Posts on Apify