LinkedIn Hiring Signals — Company Hiring Intent & Velocity avatar

LinkedIn Hiring Signals — Company Hiring Intent & Velocity

Pricing

from $30.00 / 1,000 results

Go to Apify Store
LinkedIn Hiring Signals — Company Hiring Intent & Velocity

LinkedIn Hiring Signals — Company Hiring Intent & Velocity

Track which companies are hiring & how fast. Input companies → open-role count, hiring velocity (posted last 7/30/90 days), momentum, department & location breakdown, full job list + employer firmographics (size, industry, HQ, domain). Sales-intent, no login.

Pricing

from $30.00 / 1,000 results

Rating

0.0

(0)

Developer

Berkan Kaplan

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

LinkedIn Hiring Signals — Company Hiring Intent & Velocity

LinkedIn Hiring Signals — Company Hiring Intent & Velocity

Point this Actor at a list of companies and learn who is hiring, for what, and how fast — a company-qualified sales-intent feed built from public LinkedIn job postings (no login, no cookies). Rivals hand you a flat job search; this resolves the employer entity, computes hiring velocity, and fuses the company's firmographics into one clean record — every field provenance-tagged.

  • 🎯 Company-centric, not a job dump — one record per company: open-role count, momentum, and the full role breakdown.
  • 📈 Velocity, not a snapshot — 7 / 30 / 90-day posting deltas show who's accelerating hiring, the strongest growth/buying signal.
  • 🏢 Firmographics fused inline — employee count, industry, HQ, domain & followers, so "who's hiring" becomes "500-person fintechs that added 12 sales roles this month".
  • 🔗 Entity-resolved & joinable — each company resolved to its LinkedIn id + domain, so records join cleanly to your CRM. No login, no cookies.

Quick start (API)

Track three companies and get their hiring-signal records in one call:

curl -X POST "https://api.apify.com/v2/acts/foxlabs~linkedin-hiring-signals/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "companies": ["stripe", "datadog", "https://www.linkedin.com/company/openai/"], "maxJobsPerCompany": 200 }'

Prefer no code? Open the Input tab, paste your companies (URLs or slugs), and click Start — then download the results.

What you get

One clean, flat record per company:

FieldTypeDescription
companyNamestringCompany name (from the LinkedIn page; falls back to the slug)
companySlugstringLinkedIn company handle from /company/{slug}
companyLinkedInUrlstringCanonical company page URL
companyIdstring | nullNumeric LinkedIn organization id (urn:li:organization:…)
companyDomainstring | nullCompany website domain — the clean join key for CRM / enrichment
employeeCountnumber | nullEmployee count (firmographic)
industrystring | nullIndustry (firmographic)
hqstring | nullHeadquarters — city, region, country
followersnumber | nullLinkedIn follower count
websitestring | nullCompany website URL
foundednumber | nullFounding year, when LinkedIn publishes it
openJobCountnumberOpen public roles found (up to maxJobsPerCompany)
isHiringbooleantrue when any open role was found
hiringMomentumstringhigh / medium / low / not-hiring (thresholds in FAQ)
postedLast7d / postedLast30d / postedLast90dnumberRoles posted within the last 7 / 30 / 90 days (velocity)
newestJobDate / oldestJobDatestring | nullDate range of the sampled postings (YYYY-MM-DD)
topDepartmentsarray[{ name, count }] — department mix inferred from job titles
topLocationsarray[{ name, count }] — where the open roles are
openJobCountIsCappedbooleanPresent & true only when openJobCount hit the cap (true total may be higher)
jobsarrayFull job list [{ jobId, jobUrl, title, location, postedDate }] (when Include jobs is on)
sourcesobjectProvenance — { hiringSignals, firmographics }
notestringPresent only when the company id can't be resolved (firmographics-only record)
source / scrapedAtstring"LinkedIn (public)" + ISO scrape timestamp

Sample output

Illustrative record (values shown for shape, not a live pull):

{
"companyName": "Stripe",
"companySlug": "stripe",
"companyLinkedInUrl": "https://www.linkedin.com/company/stripe",
"companyId": "3641377",
"companyDomain": "stripe.com",
"employeeCount": 8000,
"industry": "Software Development",
"hq": "South San Francisco, California, US",
"followers": 1284003,
"website": "https://stripe.com",
"founded": 2010,
"openJobCount": 143,
"isHiring": true,
"hiringMomentum": "high",
"postedLast7d": 12,
"postedLast30d": 47,
"postedLast90d": 118,
"topDepartments": [
{ "name": "Engineering", "count": 58 },
{ "name": "Sales", "count": 22 },
{ "name": "Product", "count": 14 }
],
"topLocations": [
{ "name": "New York, NY", "count": 31 },
{ "name": "Dublin, Ireland", "count": 18 }
],
"newestJobDate": "2026-07-04",
"oldestJobDate": "2026-03-20",
"jobs": [
{
"jobId": "3901234567",
"jobUrl": "https://www.linkedin.com/jobs/view/3901234567",
"title": "Senior Software Engineer, Payments",
"location": "New York, NY",
"postedDate": "2026-07-04"
}
],
"sources": {
"hiringSignals": "LinkedIn public jobs (f_C)",
"firmographics": "LinkedIn company page"
},
"source": "LinkedIn (public)",
"scrapedAt": "2026-07-05T09:12:44.001Z"
}

Input & filters

  • Companies — the list to track, as LinkedIn company URLs or bare slugs (stripe, https://www.linkedin.com/company/datadog/). One record is returned per company.
  • Max jobs per company — cap on how many open roles to sample per company for the signal computation (1–1000). Raise it for an exact openJobCount on large employers; lower it for faster, lighter runs.
  • Include full job list — attach the jobs[] array (title, location, posted date, URL). Turn off for compact signals-only output.
  • Enrich with firmographics — add employee count, industry, HQ, domain & followers from the company's public page. On by default — it's what turns a job list into qualified sales-intent (and it reuses the page already fetched to resolve the entity, so it adds no extra fetch).
  • ProxyResidential proxy is the default and strongly recommended; LinkedIn rate-limits and blocks un-proxied and datacenter traffic.

Example inputs (copy & paste)

// 1) Target-account watchlist for sales intent (full job list, slug + URL mix)
{ "companies": ["stripe", "datadog", "https://www.linkedin.com/company/openai/"], "maxJobsPerCompany": 300 }
// 2) Compact, fast signals-only — no job array, lighter cap
{ "companies": ["shopify", "gitlab", "snowflake"], "includeJobs": false, "maxJobsPerCompany": 100 }
// 3) Deep pull with firmographics + every open role
{ "companies": ["notion", "figma"], "includeJobs": true, "enrichCompany": true, "maxJobsPerCompany": 500 }
// 4) Momentum only — no firmographics, no job array (fastest scan)
{ "companies": ["airbnb", "uber", "doordash"], "includeJobs": false, "enrichCompany": false, "maxJobsPerCompany": 150 }
// 5) Single-account deep monitor via company URL
{ "companies": ["https://www.linkedin.com/company/anthropic/"], "maxJobsPerCompany": 1000 }
// 6) Portfolio / territory screen — many accounts, enriched for scoring
{ "companies": ["plaid", "brex", "ramp", "mercury", "deel", "rippling"], "enrichCompany": true, "maxJobsPerCompany": 200 }

Use cases

  • Sales intent / buying signals. Feed your target-account list → surface which accounts are ramping the team you sell to. hiringMomentum: "high" plus a jump in postedLast30d for Sales or Engineering is a timing trigger your reps can act on today — not a stale firmographic.
  • Competitive & market intelligence. Track rivals over scheduled runs → watch topDepartments and topLocations shift to see where a competitor is investing (new GTM motion, a new engineering hub, a market entry) before it's public.
  • Recruiting & talent-market mapping. See which companies are hiring for a function and where demand is concentrated, to time outreach and benchmark your own req load.
  • CRM enrichment & scoring. Already have accounts? Match on companyDomain → append employee count, industry, HQ and a live hiring-momentum score. Missing values return null, never a guess.
  • Investment / portfolio monitoring. Screen a sector or a portfolio for who's scaling: rank by postedLast30d / postedLast90d and momentum to spot acceleration and stalls between reporting cycles.
  • Territory & account prioritisation. Rank a whole book of accounts by hiring velocity so SDRs work the companies actually growing, not a random alphabetical list.

Performance & throughput

Each company costs one company-page fetch (which also powers firmographic enrichment — no second request) plus a paginated pull of its public job postings. Companies are processed 6 at a time; within a company, job pages are fetched sequentially (~250 ms apart) up to your maxJobsPerCompany cap, and LinkedIn exposes roughly the first 1,000 public roles per company. Runtime therefore scales with (number of companies) × (jobs sampled per company) — so for faster, lighter runs, lower maxJobsPerCompany or turn Include jobs off. There are no external API keys; throughput is bounded by LinkedIn's public rate limits and your proxy/Apify plan.

Integrations

JavaScript (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('foxlabs/linkedin-hiring-signals').call({
companies: ['stripe', 'datadog', 'openai'], maxJobsPerCompany: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("foxlabs/linkedin-hiring-signals").call(run_input={
"companies": ["stripe", "datadog", "openai"], "maxJobsPerCompany": 200,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["companyName"], item["openJobCount"], item["hiringMomentum"])

Also works with Make / n8n / Zapier (Apify app → run this Actor, map the input), scheduled runs to build a hiring-trend time series, webhooks, and the Apify MCP server so AI agents can pull hiring signals on demand.

Data quality

  • Public source only. Firmographics come from the company's public LinkedIn page (its structured ld+json / meta tags) and hiring signals from public job postings — nothing login-gated is used. Fields LinkedIn doesn't publish for a company (e.g. followers, founded, sometimes industry) return null; values are never fabricated or guessed.
  • Entity-resolved. Each company is matched to its numeric LinkedIn id and companyDomain, so records join on domain rather than fuzzy name-matching.
  • Velocity is measured, not estimated. postedLast7d/30d/90d are counted from each posting's own datetime, within the sampled set (maxJobsPerCompany).
  • Departments are inferred. topDepartments is derived from job-title keywords — a strong approximation, not LinkedIn's internal taxonomy.

Pricing

Pay per company — you're billed per company record returned. Firmographic enrichment reuses the single company-page fetch already needed to resolve the entity, so it adds signal without adding cost. There's an Apify free tier to evaluate the full output before you scale, and no third-party API or proxy fees beyond your Apify plan.

FAQ

What exactly is a "hiring signal"? For each company you get its current open-role count, whether it's hiring, a momentum label, 7/30/90-day posting velocity, and a department & location breakdown — computed from its public LinkedIn job postings and paired with firmographics.

How is hiringMomentum computed? Transparently, from posting counts: not-hiring = 0 open roles; high = 5+ posted in the last 7 days or 15+ in the last 30; medium = 5+ in the last 30 (and not high); low = at least one open role but below the medium threshold.

Do I need a LinkedIn login or cookies? No. Everything is read from public pages — cookieless.

How do I specify companies? As full LinkedIn company URLs (https://www.linkedin.com/company/stripe/) or bare slugs (stripe). Duplicates and country subdomains are normalised automatically.

A common name resolved to the wrong company — why? A bare slug follows LinkedIn's /company/{slug} page, which for common names may point at a namesake. Check the returned companyDomain to verify the match, and for well-known names pass the exact company URL.

How many jobs are counted per company? Up to maxJobsPerCompany (1–1000). LinkedIn itself exposes roughly the first 1,000 public roles per company.

What does openJobCountIsCapped mean? It's present and true when openJobCount reached your cap — the true total may be higher. Raise maxJobsPerCompany for an exact count.

Are topDepartments official LinkedIn categories? No — they're inferred from job-title keywords. Treat them as a reliable approximation, not LinkedIn's own taxonomy.

What export formats are available? JSON, CSV, Excel, or via the Apify API / integrations.

Is this affiliated with LinkedIn? No. It is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation, and reads only public data.

Troubleshooting

  • not-hiring / very few jobs for a company you know is hiring → its company id probably couldn't be resolved (the record then carries a note and firmographics only), or you hit the wrong slug. Pass the exact LinkedIn company URL and check companyId is populated.
  • A record with error: "company page unreachable" → the public page didn't load (rate-limit or a transient block). Use the default Residential proxy and re-run; smaller batches help.
  • Wrong company matched → slug ambiguity. Use the exact /company/{slug} URL and confirm via companyDomain.
  • Fewer roles than expected / openJobCountIsCapped: true → raise maxJobsPerCompany (up to 1000) for a complete count on large employers.
  • Public data only, cookieless. Signals are computed from public LinkedIn postings; a company's public page must be resolvable. If the company id can't be resolved, the record returns firmographics only plus a note.
  • Slug ambiguity. A bare slug follows /company/{slug}, which for common names may resolve to a different company than intended. The returned companyDomain lets you verify — pass the exact company URL for certainty.
  • Capped counts. openJobCount is capped at maxJobsPerCompany; when the cap is hit, openJobCountIsCapped: true is set (the true total may be higher). Velocity (7/30/90-day) is measured within the sampled set.
  • Inferred departments. topDepartments is inferred from job titles — a strong approximation, not LinkedIn's internal taxonomy.
  • Not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. This Actor reads public data. You are responsible for using the output lawfully — respect LinkedIn's Terms of Service and applicable data-protection law (e.g. GDPR) for your use case and jurisdiction. LinkedIn has no official public jobs/company API; if you need licensed data, use LinkedIn's own products.

Support

Questions, a field you'd like added, or a custom build? Open the Issues tab on this Actor, or email info@foxlabs.com.tr. We reply fast.

If this Actor saves you time, a ⭐ review really helps.

Changelog

0.2 — 2026-07-05

  • Reworked docs: API quick-start, full field table, sample output, input recipes, JS/Python/Make/MCP integrations, FAQ & troubleshooting, and honest legal notes.

0.1

  • Initial release. Company-centric hiring signals (open roles, 7/30/90-day velocity, momentum, department & location breakdown, full job list) + inline firmographic enrichment + provenance. Cookieless.

Part of the foXLabs data platform — public-data company, jobs, procurement, contact & AI-search intelligence scrapers. Browse the full suite at data.foxlabs.com.tr.