LinkedIn Profile Scraper avatar

LinkedIn Profile Scraper

Pricing

from $10.00 / 1,000 profile scrapeds

Go to Apify Store
LinkedIn Profile Scraper

LinkedIn Profile Scraper

Scrapes comprehensive LinkedIn profile data (experience, education, skills, email) from public profiles. Supports optional session cookie for authenticated scraping.

Pricing

from $10.00 / 1,000 profile scrapeds

Rating

0.0

(0)

Developer

Dino

Dino

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrapes comprehensive data from public LinkedIn profiles: identity, work experience, education, skills, languages, certifications, and more. Optionally infers and verifies professional email addresses.

Built with Crawlee for Python + Camoufox (stealthy Firefox) for reliable scraping with minimal bot detection.


Features

  • Extracts full profile data: name, headline, summary, location, connections, followers, experience, education, skills, languages, certifications, publications, patents, volunteer work, recommendations
  • Infers professional email addresses from company domain patterns
  • Optional SMTP email verification
  • Optional LinkedIn session cookie for authenticated scraping (unlocks more data)
  • Optional Apify proxy or local Tor proxy support
  • Pipeline mode: consume URLs from a named RequestQueue (for use with a discovery actor)
  • Graceful per-profile error handling — one failure never aborts the whole run

Input

FieldTypeDefaultDescription
profileUrlsstring[]LinkedIn /in/ profile URLs to scrape. Required (unless using inputRequestQueueName).
maxProfilesintegerunlimitedCap the number of profiles processed.
maxConcurrencyinteger1Parallel browser tabs (max 5). Keep at 1–2 to avoid blocks.
requestDelayinteger3000Milliseconds to wait between requests. Higher = safer.
proxyConfigurationobjectdisabledApify proxy config. Recommended when running on the platform.
linkedinCookiesstringValue of the li_at LinkedIn session cookie. Enables authenticated scraping.
verifyEmailbooleanfalseVerify inferred emails via SMTP. Slower but more accurate.
inputRequestQueueNamestringName of an Apify RequestQueue to consume URLs from (pipeline mode). Overrides profileUrls.

Example input

{
"profileUrls": [
"https://www.linkedin.com/in/williamhgates",
"https://www.linkedin.com/in/jeffweiner08"
],
"maxConcurrency": 1,
"requestDelay": 4000,
"proxyConfiguration": { "useApifyProxy": true }
}

Providing a LinkedIn session cookie (li_at) allows the scraper to access authenticated profile data and greatly reduces the risk of bot blocks.

To find your cookie:

  1. Log in to LinkedIn in your browser
  2. Open DevTools → Application → Cookies → linkedin.com
  3. Copy the value of li_at
  4. Paste it into the linkedinCookies input field

The cookie is marked isSecret and will not appear in logs.


Output

Each profile produces one record in the default dataset. On success:

{
"linkedinUrl": "https://www.linkedin.com/in/williamhgates",
"linkedinPublicUrl": "https://linkedin.com/in/williamhgates",
"publicIdentifier": "williamhgates",
"urn": "ACoAAABxN1IBk82L_jCY2opFKNZpSCCcsr6X1MU",
"firstName": "Bill",
"lastName": "Gates",
"fullName": "Bill Gates",
"headline": "Co-chair, Bill & Melinda Gates Foundation",
"summary": "...",
"profilePictureUrl": "https://...",
"backgroundPictureUrl": "https://...",
"location": "Seattle, Washington, United States",
"connections": 500,
"followers": 35000000,
"email": "bill.gates@gatesfoundation.org",
"emailVerificationStatus": "valid",
"jobTitle": "Co-chair",
"jobStartedOn": "2021-01",
"jobLocation": "Seattle, Washington, United States",
"jobStillWorking": true,
"currentJobDuration": "4 yrs",
"currentJobDurationInYrs": 4.0,
"companyName": "Bill & Melinda Gates Foundation",
"companyIndustry": "Non-profit Organizations",
"companyWebsite": "https://www.gatesfoundation.org",
"companyLinkedin": "https://www.linkedin.com/company/gatesfoundation",
"companySize": "1001-5000",
"experiences": [
{
"companyName": "Bill & Melinda Gates Foundation",
"title": "Co-chair",
"jobDescription": "...",
"jobStartedOn": "2021-01",
"jobEndedOn": null,
"jobStillWorking": true,
"jobLocation": "Seattle, Washington, United States",
"companyWebsite": "https://www.gatesfoundation.org",
"companyIndustry": "Non-profit Organizations",
"companySize": "1001-5000"
}
],
"educations": [
{
"schoolName": "Harvard University",
"degree": "...",
"fieldOfStudy": "...",
"startYear": 1973,
"endYear": 1975
}
],
"skills": [{ "title": "Strategic Planning" }],
"languages": [{ "name": "English", "proficiency": "NATIVE_OR_BILINGUAL" }],
"certifications": [],
"publications": [],
"patents": [],
"volunteerWork": [],
"recommendations": [],
"succeeded": true
}

On failure, a minimal error record is pushed and the run continues:

{
"inputUrl": "https://www.linkedin.com/in/nonexistent-profile",
"succeeded": false,
"error": "Profile not found or access denied."
}

Email verification status values

ValueMeaning
validSMTP check passed — mailbox exists
invalidSMTP check failed — address rejected
catch_allDomain accepts all addresses — unverifiable
unverifiedSMTP check skipped (verifyEmail is false)
no_emailNo email was inferred

Pipeline mode

This actor can consume profile URLs from a named Apify RequestQueue instead of the profileUrls input. This is useful when chaining it with a discovery actor that enqueues profiles for processing.

{
"inputRequestQueueName": "linkedin-discovery-output"
}

Set inputRequestQueueName to the same value as the discovery actor's outputRequestQueueName. The scraper will drain the queue and process all URLs found.


Anti-detection notes

  • Keep maxConcurrency at 1 (default). LinkedIn blocks aggressive parallel scraping quickly.
  • Increase requestDelay if you observe bot detection. 5000–10000 ms is safer for large batches.
  • Use a proxy (proxyConfiguration) when running on the Apify platform — residential proxies work best.
  • Provide a session cookie (linkedinCookies) to reduce blocks and access more profile data.
  • The scraper uses Camoufox — a hardened Firefox with realistic browser fingerprints — which passes most bot-detection heuristics.

Limitations

  • Scrapes only publicly visible data. Fields hidden behind LinkedIn's login wall may not be available without a session cookie.
  • LinkedIn's page structure changes frequently; some fields may occasionally fail to parse.
  • Email inference is pattern-based (e.g. firstname.lastname@company.com) and not guaranteed to be correct. Use verifyEmail: true for higher accuracy.