Linkedin B2b Phone Number Scraper avatar

Linkedin B2b Phone Number Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Linkedin B2b Phone Number Scraper

Linkedin B2b Phone Number Scraper

๐Ÿ“ž LinkedIn B2B Phone Number Scraper extracts publicly available business phone numbers from profiles & company pages for lead gen and sales prospecting. โšก Fast, accurate, CSV/CRM export & enrichment. โœ… Use ethically and per LinkedIn terms and data laws. ๐Ÿš€ Perfect for SDRs.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

0

Bookmarked

24

Total users

3

Monthly active users

4 days ago

Last modified

Share

๐Ÿ”— LinkedIn B2B Lead Discovery Scraper

Discover LinkedIn B2B leads at scale using Google search. This actor runs site:linkedin.com queries for your keywords (roles, names, companies) or direct LinkedIn URLs, then parses each search-result snippet into a structured lead record: person name, headline / job title, company, location, profile URL, and connection / follower counts.

It is built for honest lead discovery. A phone number or email is emitted only when it is genuinely present in the public search snippet โ€” and every phone is validated with the phonenumbers library against the country you select. The actor never fabricates a phone by attaching a dial code to an unrelated number (e.g. a follower count or ID). LinkedIn contact details are login/connection-gated, so phone and email coverage is naturally low โ€” the primary, reliable output is the profile identity record.

What it extracts

FieldDescription
typeEntity type parsed from the URL: person (/in/), company (/company/), school, job, post, or other.
personNamePerson's name parsed from the result title (for /in/ profiles).
headlineHeadline / job title parsed from the title.
companyNameCompany parsed from the title tail (person) or the title itself (company page).
companyDomainCompany web domain, derived from a business email or an external link in the snippet.
locationLocation parsed from the snippet (e.g. "London, England, United Kingdom").
profileUrlCanonical LinkedIn URL (Google redirect stripped, query/fragment removed).
profileSlugPublic identifier / vanity slug from the URL.
connectionsCountConnections parsed from the snippet (e.g. "500+ connections"), when present.
followerCountFollowers parsed from the snippet, when present.
emailBusiness email โ€” parsed from the snippet, or discovered & verified via email discovery (see below). null when none is confirmed.
emailSourceWhere email came from: snippet (public search snippet), pattern_verified (guessed pattern confirmed live over SMTP), hunter (Hunter.io provider), or null.
emailConfidenceFor pattern_verified: the matched pattern (e.g. first.last). For hunter: the provider confidence score (0โ€“100).
emailStatusverified / provider status, when an email is present.
phoneE164Genuine phone in E.164, only when validated for the selected country. null otherwise.
phoneTypeLine type of a validated phone (mobile, fixed_line, โ€ฆ).
phoneValidWhether a validated phone was found.
phoneConfidencehigh (explicit international format) or medium (national format validated for the region).
phoneRegionISO region of the validated phone.
contactChannelphone, email, phone+email, or none.
hasContactWhether the record has any genuine contact.
serpRank, serpPagePosition of the result in Google search.
scrapedAtISO-8601 UTC timestamp of the run.

Inputs

InputDescription
keywordsKeywords or direct LinkedIn profile/company URLs (required).
locationOptional geo term added to the search query.
countryCountry whose dial code validates phone numbers (required).
maxResultsMax lead records per keyword/URL (default 20).
profileTypeFilterany / person / company.
countryMatchStrictAccept a phone only if its country code matches the selected country (default on).
mustHavePhone / mustHaveEmailKeep only rows with a validated phone / an email.
excludeKeywordsDrop records whose text contains these terms.
findEmailsDiscover & verify business emails via company-domain resolution + SMTP (verified-only). See caveat below. Default off.
enrichmentApiKeyOptional Hunter.io API key (secret) for high-accuracy provider-verified emails.
concurrencyKeywords searched in parallel (default 3).
proxyConfigurationProxy for the Google searches (defaults to Apify GOOGLE_SERP; honored).

Example input

{
"keywords": ["marketing manager", "growth lead"],
"location": "London",
"country": "United Kingdom (+44)",
"maxResults": 20,
"profileTypeFilter": "person",
"countryMatchStrict": true
}

Example output

{
"type": "person",
"isChild": false,
"personName": "Jane Doe",
"headline": "Marketing Manager",
"companyName": "Acme Ltd",
"companyDomain": null,
"location": "London, England, United Kingdom",
"profileUrl": "https://uk.linkedin.com/in/jane-doe",
"profileSlug": "jane-doe",
"connectionsCount": 500,
"followerCount": null,
"email": null,
"phoneE164": null,
"phoneType": null,
"phoneValid": false,
"phoneConfidence": null,
"phoneRegion": null,
"contactChannel": "none",
"hasContact": false,
"country": "United Kingdom",
"dialCode": "+44",
"keyword": "marketing manager",
"serpRank": 3,
"serpPage": 1,
"scrapedAt": "2026-07-02T10:00:00Z"
}

How it works

  1. Each keyword becomes a site:linkedin.com "<keyword>" Google query (a LinkedIn URL is looked up by its public slug). An optional location term narrows the geography, and profileTypeFilter narrows to /in/ or /company/.
  2. Results are fetched page by page through the Apify GOOGLE_SERP proxy, with retries on a fresh IP. Block detection keys on the presence of the organic result container โ€” not on loose words like "sorry" or "captcha".
  3. Each result is parsed into an identity record. Emails use a strict, boundary-anchored regex. Phones are extracted with phonenumbers.PhoneNumberMatcher at VALID leniency and validated for the selected country โ€” so a bare digit run (connection count, ID, date) is never emitted as a phone.
  4. Records are deduplicated globally across pages and keywords on the canonical profile URL.

Email discovery (optional, verified-only)

LinkedIn hides every contact detail behind its login/connection wall, so public Google snippets and logged-out profile pages contain no email or phone. To still deliver contacts honestly, the actor can turn a discovered identity (person name + company) into a verified business email through two opt-in paths. Nothing is ever fabricated โ€” an address is emitted only when a live check confirms it exists:

  1. findEmails โ€” pattern + SMTP verification (no key). The company name is resolved to a web domain, the common business-email permutations are generated for the person (first.last@, first@, flast@, โ€ฆ), and each candidate is probed over SMTP (MX โ†’ EHLO โ†’ MAIL FROM โ†’ RCPT TO). An address is accepted only if the mail server explicitly accepts it and the domain is not catch-all (a random control address is rejected first). Catch-all domains, providers that block verification (Microsoft 365 rejects every probe), and unreachable servers yield nothing. โš ๏ธ Important: most cloud/hosting environments โ€” including Apify's โ€” block outbound SMTP (port 25), so on the platform this path typically verifies 0 emails and the run log says so plainly. It is provided for completeness and for environments where port 25 is open; for reliable results use path 2.
  2. enrichmentApiKey โ€” bring your own Hunter.io key (recommended). With a key, each lead's name + company domain is sent to Hunter's Email Finder, which returns a provider-verified address plus a confidence score (emailSource="hunter"). Skipped cleanly when no key is set. This is the honest high-yield path โ€” the contact comes from a licensed data provider, not a guess. Get a free key at hunter.io.

Phones cannot be discovered this way and remain null.

Billing

The actor charges the row_result event only for rows that are a genuine identity record (name/company + profile URL) or carry a validated contact. Empty or non-identity rows are not charged.

Notes & limitations

  • Contact coverage from public LinkedIn is structurally near-zero โ€” email and phone are behind login/connection walls and do not appear in public Google snippets or logged-out profile pages. The core output is the identity record. For emails, enable the optional email-discovery paths above (a Hunter.io key gives the most reliable coverage). Phones are not obtainable publicly and stay null โ€” never fabricated.
  • Snippet parsing is best-effort: name/headline/company are derived from LinkedIn's title format and may occasionally be partial for unusual titles. Fields are null when not confidently available โ€” never faked.
  • Google may rate-limit heavy runs; the actor retries on fresh proxy IPs and reports blocks honestly in the log.

Scrape only publicly available data and comply with LinkedIn's terms and applicable data-protection law (GDPR/CCPA) when contacting individuals.

Keywords: linkedin scraper, linkedin lead generation, b2b lead scraper, linkedin profile scraper, linkedin company scraper, sales prospecting, linkedin data extraction, google serp scraper, contact discovery, lead discovery, linkedin email finder, b2b prospecting.