LinkedIn Email Finder & Contacts Scraper avatar

LinkedIn Email Finder & Contacts Scraper

Deprecated

Pricing

from $0.01 / 1,000 results

Go to Apify Store
LinkedIn Email Finder & Contacts Scraper

LinkedIn Email Finder & Contacts Scraper

Deprecated

Discover publicly indexed contact emails tied to LinkedIn identities via targeted Google search, and optionally enrich specific profiles with your own session cookie. Every run reports exactly what it found — or why nothing was found, never a silent empty result.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

Assia Fadli

Assia Fadli

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 months ago

Last modified

Categories

Security

Limited permissions

Share

LinkedIn Contact Finder

Find contact emails tied to LinkedIn identities without guessing. This actor runs focused Google searches scoped to linkedin.com to surface email addresses that are already publicly indexed, and — when you supply your own logged-in session cookie — can open specific LinkedIn profiles to enrich them with name, headline, and any emails present on the page.

Built in TypeScript on Apify + Crawlee + Puppeteer. Billed pay-per-event: you are charged once per contact actually delivered (contact-scraped), never for blocked or empty pages.

What it can and cannot do — read this first

LinkedIn is aggressively anti-bot, and it does not put personal email addresses in profile page HTML. A member's email lives behind the "Contact info" overlay, visible only to 1st-degree connections. There is therefore no reliable way to "scrape everyone's email" straight from LinkedIn.

What this actor does:

  • Discovers publicly indexed emails associated with a LinkedIn identity — for example an address someone published in a LinkedIn About section, a company page, or a linked website that Google has crawled. This is the primary, login-free capability.
  • Enriches known LinkedIn profile URLs (name, headline, and any emails visible on the page) when you provide a valid li_at cookie.

What it cannot guarantee:

  • It cannot bypass LinkedIn's auth wall without a valid li_at cookie.
  • It cannot surface emails that are not published anywhere public.
  • Google actively rate-limits automated search, so some runs may be partially or fully blocked. When that happens the actor tells you clearly in the output instead of returning an empty dataset.

Input

FieldRequiredDescription
keywordsyes*Job titles, names, or companies to search on Google (scoped to linkedin.com).
locationsnoLocations appended to each query to narrow results.
profileUrlsnoExact LinkedIn profile/company URLs to open and enrich. Requires liAtCookie.
liAtCookierecommendedYour LinkedIn li_at session cookie (marked secret). Required to open any LinkedIn profile page.
scrapeProfilesnoIf true and liAtCookie is set, LinkedIn URLs found in Google results are also opened logged-in. Off by default.
gmail, yahoo, outlook, aol, icloud, protonmailnoWhich email providers to target in the search.
other + extraEmailProvidersnoAdd custom email domains (without the @).
maxProfilesnoMax number of LinkedIn profiles to open (default 50).
maxPagesPerQuerynoGoogle result pages to paginate per keyword (default 3).

* Provide keywords and/or profileUrls.

  1. Log into LinkedIn in a normal browser.
  2. Open DevTools > Application (or Storage) > Cookies > https://www.linkedin.com.
  3. Copy the value of the li_at cookie into the liAtCookie field.

Treat it like a password. It expires periodically; refresh it if runs report auth walls. Automating many profile views with your session can get your account rate-limited — keep maxProfiles modest.

Output

The dataset contains typed rows:

  • type: "email" — a discovered contact: { email, sourceQuery, foundOn, relatedLinkedInProfiles, discoveredAt }
  • type: "profile" — an enriched LinkedIn profile: { url, sourceQuery, name, headline, emails, note, scrapedAt }
  • type: "diagnostic" — a clear explanation when something was blocked (Google CAPTCHA, LinkedIn auth wall, invalid cookie) plus whatToDo.
  • type: "summary" — always pushed at the end of every run, with counts of what was found and why. A run is never silently empty.

Pricing (pay-per-event)

You are charged for the single event contact-scraped, once per delivered contact — that is, per unique email lead and per enriched profile. Diagnostic and summary rows are never charged. When your run's event budget is reached, the crawl stops cleanly.

Local development

npm install
npm run build
apify run --purge --input '{"keywords":["marketing manager"],"locations":["London"]}'

Only collect and process data that is lawful for you to handle (GDPR/CCPA obligations apply to personal data). Respect LinkedIn's and Google's terms of service. You are responsible for how you use any data collected. Provided as-is, without warranty.


Author: Assia Fadli · License: MIT