Pricing
from $10.00 / 1,000 profile scrapeds
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
Actor stats
0
Bookmarked
31
Total users
10
Monthly active users
3 months ago
Last modified
Categories
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
| Field | Type | Default | Description |
|---|---|---|---|
profileUrls | string[] | โ | LinkedIn /in/ profile URLs to scrape. Required (unless using inputRequestQueueName). |
maxProfiles | integer | unlimited | Cap the number of profiles processed. |
maxConcurrency | integer | 1 | Parallel browser tabs (max 5). Keep at 1โ2 to avoid blocks. |
requestDelay | integer | 3000 | Milliseconds to wait between requests. Higher = safer. |
proxyConfiguration | object | disabled | Apify proxy config. Recommended when running on the platform. |
linkedinCookies | string | โ | Value of the li_at LinkedIn session cookie. Enables authenticated scraping. |
verifyEmail | boolean | false | Verify inferred emails via SMTP. Slower but more accurate. |
inputRequestQueueName | string | โ | Name 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}}
Using a session cookie
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:
- Log in to LinkedIn in your browser
- Open DevTools โ Application โ Cookies โ
linkedin.com - Copy the value of
li_at - Paste it into the
linkedinCookiesinput field
The cookie is marked
isSecretand 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
| Value | Meaning |
|---|---|
valid | SMTP check passed โ mailbox exists |
invalid | SMTP check failed โ address rejected |
catch_all | Domain accepts all addresses โ unverifiable |
unverified | SMTP check skipped (verifyEmail is false) |
no_email | No 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
maxConcurrencyat 1 (default). LinkedIn blocks aggressive parallel scraping quickly. - Increase
requestDelayif 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. UseverifyEmail: truefor higher accuracy.
