LinkedIn Hiring Signals & B2B Leads avatar

LinkedIn Hiring Signals & B2B Leads

Pricing

from $2.50 / 1,000 job results

Go to Apify Store
LinkedIn Hiring Signals & B2B Leads

LinkedIn Hiring Signals & B2B Leads

Find companies hiring right now and turn public LinkedIn jobs into actionable B2B leads. Get decision-makers, business emails, phone numbers, reviews, hiring signals, and change alertsโ€”all in one export.

Pricing

from $2.50 / 1,000 job results

Rating

0.0

(0)

Developer

DataForge

DataForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

a day ago

Last modified

Share

๐Ÿ”— LinkedIn Hiring Signals & B2B Leads

Most LinkedIn scrapers hand you a pile of job titles and stop. This one keeps going โ€” from a public job page all the way to a named decision-maker with a business email you can actually send to, and it shows its work at every step.

This page is built around that output. We start with the record you came for, then explain exactly how each value in it is earned.

๐Ÿ’ผ Jobs ยท ๐Ÿ“ˆ Hiring signals ยท ๐ŸŽฏ Decision-makers ยท ๐Ÿ“ง Evidence-backed emails ยท ๐Ÿ“ž Phones ยท โญ Reviews ยท ๐Ÿ”„ Change alerts

Here's the chain โ€” a run stops at whichever scrapeType you pick:

๐Ÿ”Ž queries ยท ๐Ÿ“ locations ยท ๐Ÿ”— URLs
โ”‚
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๐Ÿ’ผ Public jobs โ”‚ โ”€โ”€โ”€โ”€ scrapeType: jobs โ”€โ”€โ”€โ”€โ”€โ–ถ ๐Ÿ’ผ Job records
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ roll roles up per company
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๐Ÿข Company + โ”‚ โ”€โ”€โ”€โ”€ scrapeType: signals โ”€โ”€โ–ถ ๐Ÿ“ˆ Ranked accounts
โ”‚ ๐Ÿ“ˆ hiring score โ”‚ (hiringSignalScore)
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ match decision-makers to personas
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๐ŸŽฏ Contact โ”‚
โ”‚ ๐Ÿ“ง email ๐Ÿ“ž phoneโ”‚ โ”€โ”€โ”€ scrapeType: contacts โ”€โ”€โ–ถ โญ Scored lead
โ”‚ โœ… MX/SMTP check โ”‚ (email + confidence)
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
๐Ÿ”„ scrapeType: monitor โ”€โ”€ new / closed roles vs. the last snapshot

โญ The record everything leads to

A single contact row ties together the whole chain โ€” who, at which hiring company, with what email, and how sure we are:

{
"recordType": "contact",
"contactType": "decision_maker",
"fullName": "Jordan Lee",
"jobTitle": "Head of Talent Acquisition",
"targetPersona": "recruiter",
"company": "Acme Robotics",
"companyLinkedinUrl": "https://www.linkedin.com/company/acme-robotics",
"linkedinUrl": "https://www.linkedin.com/in/โ€ฆ",
"email": "jordan.lee@acme.com",
"emailStatus": "generated",
"emailConfidence": 0.72,
"emailDeliveryStatus": "accepted",
"emailMxValid": true,
"emailSmtpAccepted": true,
"phone": "+1 415-555-0142",
"phoneE164": "+14155550142",
"evidenceUrl": "https://โ€ฆ",
"confidence": 0.81,
"scrapedAt": "2026-08-07T18:30:02Z"
}

Three things make this row worth more than a scraped name. Here's each one, and where it comes from.


๐Ÿ”ฆ Spotlight 1 โ€” The email carries its own proof

The email field is never a naked string. It ships with a provenance label and a deliverability verdict that are kept deliberately separate, so you always know both where an address came from and whether mail routes to it.

FieldWhat it tells you
emailStatusProvenance โ€” public (found in the open) vs generated (a likely company pattern, always labeled as guessed)
emailConfidence0โ€“1 confidence in the address itself
emailMxValidThe domain actually accepts mail (MX check)
emailSmtpChecked ยท emailSmtpAcceptedA mailbox-acceptance probe, when the receiving server allows it
emailDeliveryStatusThe routing verdict โ€” e.g. accepted
emailCatchAllFlags catch-all domains where acceptance means less
emailVerificationSource ยท emailVerifiedAtWhat ran the check, and when
emailEvidenceUrlThe public source, for anything not generated

Why the split matters: a generated address that passes MX + SMTP is a confident send; a public address on a catch-all domain is not. Two different fields, two different decisions โ€” nothing is collapsed into a single misleading "verified โœ…".

Turn this on with includeEmails and verifyGeneratedEmails (both on by default). Phones follow the same rule: returned only when public evidence exists, with a normalized phoneE164 and phoneEvidenceUrl alongside.


๐Ÿ”ฆ Spotlight 2 โ€” Companies ranked by how hard they're hiring

Before you ever look at a person, signals mode tells you which companies deserve the attention. Each company row rolls up its live roles into an explainable score:

FieldWhat it measures
hiringSignalScoreThe prioritization number for the account
hiringSignalLabelThe plain-language band for that score
signalReasonsThe specific reasons behind it โ€” no black box
openJobs ยท remoteJobs ยท salaryVisibleJobsVolume and quality of current demand
departmentBreakdown ยท sampleTitlesWhere they're growing and for what

Paired with identity fields โ€” websiteUrl, domain (with domainStatus, domainConfidence, domainEvidenceUrl), companyLegalName, companyAddress โ€” a signals run is a ranked account list, not a job dump. Flip excludeStaffingAgencies on (default) to keep it to direct employers.


๐Ÿ”ฆ Spotlight 3 โ€” Every row admits what it doesn't know

The killer feature isn't a field โ€” it's the honesty layer wrapped around all of them. Each record carries:

  • confidence โ€” how much to trust this row overall
  • availabilityStatus, dataCompleteness, unavailableFields โ€” a per-row completeness report
  • Missing source values written as not_available; fields that don't apply to a mode written as not_applicable

Nothing is invented to fill a gap. A blank is labeled as a blank, and you can filter on it. That's what makes the emails above safe to act on.


๐Ÿงญ Getting the record you want

scrapeType picks how far down the chain a run goes. Same searches and toggles, different destination:

ModeEnds at
jobsClean, structured job records โ€” the fastest export
signalsCompanies ranked by hiringSignalScore
contactsDecision-makers with evidence-backed emails & phones
monitorNew / closed roles vs. the last watchlist snapshot
selfTestAn Actor health check + diagnostics

Go straight to leads:

{
"scrapeType": "contacts",
"queries": ["SAP consultant"],
"targetPersonas": ["recruiter", "hiring_manager"],
"includeEmails": true,
"includePhones": true,
"verifyGeneratedEmails": true,
"maxContactsPerCompany": 5
}

Rank accounts by hiring intent:

{
"scrapeType": "signals",
"queries": ["backend engineer", "VP Sales"],
"locations": ["Germany", "Remote"],
"excludeStaffingAgencies": true
}

Just the jobs, fast:

{
"scrapeType": "jobs",
"queries": ["software engineer"],
"locations": ["New York"],
"includeDetails": true,
"maxResults": 100
}

Watch for changes on a schedule:

{
"scrapeType": "monitor",
"queries": ["data engineer"],
"watchlistName": "data-team-watch"
}

Runs read public LinkedIn pages request-only โ€” no login, no cookies. maxResults caps the primary records (jobs, companies, or contacts); related company, contact, review and diagnostic rows can add to the final item count.


๐Ÿ—‚๏ธ Where the records land

Every row is tagged with recordType and routed to its own tab:

TabHolds
OverviewOne quick-scan line per record โ€” type, status, confidence, completeness
JobsFull job records: seniority, employment type, function, applicants, benefits, apply mode
CompaniesHiring signals + identity, domain, address, public emails/phones
ContactsDecision-makers, deliverability-checked emails, phones, evidence
ReviewsPublic company rating / review evidence from supported sources
ChangesNew and closed roles vs. the previous watchlist snapshot
DiagnosticsPer-run counts, timings, error breakdown โ€” never charged

๐Ÿ“š Full field reference


๐ŸŽ›๏ธ Input reference

FieldTypeDefaultPurpose
scrapeTypeenumjobsjobs ยท signals ยท contacts ยท monitor ยท selfTest
queriesarray["software engineer"]Titles / skills / keywords; each combines with every location
locationsarray[]Cities, regions, countries (New York, Germany, Remote)
startUrlsarray[]Exact public LinkedIn job / search URLs
companyUrlsarray[]LinkedIn company pages or websites to enrich directly
targetPersonasarray["recruiter","hiring_manager"]Roles prioritized in Contacts mode
includeDetailsbooltrueFull description, seniority, type, function, benefits, applicants
includeCompanyEnrichmentbooltrueWebsite, domain, legal identity, address, hiring-signal score
includeContactsbooltrueFind public decision-makers matching the personas
includeEmailsbooltruePublic + patterned business emails (guessed ones labeled)
verifyGeneratedEmailsbooltrueSyntax + MX + optional SMTP acceptance checks
includePhonesbooltruePublic phones, with E.164 when possible
includeReviewsbooltruePublic company rating / review evidence
includeTitles ยท excludeTitlesarray[]Allow/deny jobs by title substring
includeCompanies ยท excludeCompaniesarray[]Allow/deny by company name
includeCountries ยท excludeCountriesarray[]Allow/deny by country name or ISO code
excludeStaffingAgenciesbooltrueDrop staffing / recruiting intermediaries
maxResultsint100Max primary job / company / contact records
maxPagesint5Result pages per query/location combo
maxReviewsPerCompanyint5Review rows per company (0 = none)
maxContactsPerCompanyint5Contacts per company
watchlistNamestringdefaultSnapshot name Monitor compares against
maxConcurrencyint10Public pages processed at once (1โ€“100)
maxRetriesint5Attempts for a temporarily unavailable request
proxyConfigurationobjectResidentialConnection settings (Residential recommended)

๐Ÿ’ฌ Common questions

Do I need a LinkedIn login or cookies? No โ€” public pages are read request-only.

What separates a generated email from a public one? Provenance. public was found in the open; generated is a likely company pattern, always labeled as guessed and never dressed up as evidence. Deliverability (emailDeliveryStatus) is scored independently either way.

Do I pay for blocked or empty pages? You're charged per saved result โ€” jobs, signals, contacts, reviews, changes. Diagnostics rows aren't charged, and a run that hits its charge limit stops early and says so.

How do I track hiring over time? Run scrapeType: "monitor" with a stable watchlistName and search scope on a schedule; new and closed roles appear in the Changes tab from the second run on.


Pick a scrapeType, add a search or a company URL, and press Start โ€” the record at the top of this page is what comes back.

๐Ÿ’ฌ If a run turned into a lead you could actually send to, leaving a review on the Apify Store is the best way to support it โ€” a rating lifts the Actor in search and tells me where to aim next.

๐Ÿท๏ธ Tags: linkedin ยท linkedin jobs ยท lead generation ยท b2b leads ยท sales intelligence ยท hiring signals ยท recruiting ยท email finder ยท contact enrichment ยท jobs scraper