Linkedin B2b Phone Number Scraper
Pricing
$19.99/month + usage
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
Maintained by CommunityActor stats
0
Bookmarked
24
Total users
3
Monthly active users
4 days ago
Last modified
Categories
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
| Field | Description |
|---|---|
type | Entity type parsed from the URL: person (/in/), company (/company/), school, job, post, or other. |
personName | Person's name parsed from the result title (for /in/ profiles). |
headline | Headline / job title parsed from the title. |
companyName | Company parsed from the title tail (person) or the title itself (company page). |
companyDomain | Company web domain, derived from a business email or an external link in the snippet. |
location | Location parsed from the snippet (e.g. "London, England, United Kingdom"). |
profileUrl | Canonical LinkedIn URL (Google redirect stripped, query/fragment removed). |
profileSlug | Public identifier / vanity slug from the URL. |
connectionsCount | Connections parsed from the snippet (e.g. "500+ connections"), when present. |
followerCount | Followers parsed from the snippet, when present. |
email | Business email โ parsed from the snippet, or discovered & verified via email discovery (see below). null when none is confirmed. |
emailSource | Where email came from: snippet (public search snippet), pattern_verified (guessed pattern confirmed live over SMTP), hunter (Hunter.io provider), or null. |
emailConfidence | For pattern_verified: the matched pattern (e.g. first.last). For hunter: the provider confidence score (0โ100). |
emailStatus | verified / provider status, when an email is present. |
phoneE164 | Genuine phone in E.164, only when validated for the selected country. null otherwise. |
phoneType | Line type of a validated phone (mobile, fixed_line, โฆ). |
phoneValid | Whether a validated phone was found. |
phoneConfidence | high (explicit international format) or medium (national format validated for the region). |
phoneRegion | ISO region of the validated phone. |
contactChannel | phone, email, phone+email, or none. |
hasContact | Whether the record has any genuine contact. |
serpRank, serpPage | Position of the result in Google search. |
scrapedAt | ISO-8601 UTC timestamp of the run. |
Inputs
| Input | Description |
|---|---|
keywords | Keywords or direct LinkedIn profile/company URLs (required). |
location | Optional geo term added to the search query. |
country | Country whose dial code validates phone numbers (required). |
maxResults | Max lead records per keyword/URL (default 20). |
profileTypeFilter | any / person / company. |
countryMatchStrict | Accept a phone only if its country code matches the selected country (default on). |
mustHavePhone / mustHaveEmail | Keep only rows with a validated phone / an email. |
excludeKeywords | Drop records whose text contains these terms. |
findEmails | Discover & verify business emails via company-domain resolution + SMTP (verified-only). See caveat below. Default off. |
enrichmentApiKey | Optional Hunter.io API key (secret) for high-accuracy provider-verified emails. |
concurrency | Keywords searched in parallel (default 3). |
proxyConfiguration | Proxy 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
- Each keyword becomes a
site:linkedin.com "<keyword>"Google query (a LinkedIn URL is looked up by its public slug). An optionallocationterm narrows the geography, andprofileTypeFilternarrows to/in/or/company/. - Results are fetched page by page through the Apify
GOOGLE_SERPproxy, 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". - Each result is parsed into an identity record. Emails use a strict, boundary-anchored regex. Phones are extracted with
phonenumbers.PhoneNumberMatcheratVALIDleniency and validated for the selected country โ so a bare digit run (connection count, ID, date) is never emitted as a phone. - 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:
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.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
nullwhen 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.
Legal
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.