LinkedIn People Profile Scraper
Pricing
from $4.99 / 1,000 results
LinkedIn People Profile Scraper
LinkedIn People Profile Scraper extracts public professional profile data, including names, job titles, companies, locations, skills, experience, education, and profile URLs. Build structured datasets for recruiting, lead generation, talent sourcing, and market research.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
LinkedIn People Profile Scraper — Experience & Education Data
LinkedIn People Profile Scraper turns a list of LinkedIn profile URLs into structured JSON: full name, headline, current company, complete work history, education, and skills for each person, with no HTML parsing or CSS selectors required. Every run returns an 85-field record per profile, in Public or Authenticated Mode, with automatic proxy escalation built in so blocked requests retry through progressively stronger proxy tiers. Paste a list of profile URLs and open the run to watch records land in the dataset.
What is LinkedIn People Profile Scraper?
LinkedIn People Profile Scraper is an Apify Actor that fetches public LinkedIn profile pages and — optionally, when a caller supplies a li_at session cookie — the same data a logged-in browser sees, then normalizes both into one consistent 85-field JSON schema per person. No LinkedIn account is required by default; li_at is only needed to unlock experience and education dates, skills, honors, publications, volunteering, certifications, languages, organizations, and patents. It's built for recruiters and sales teams doing bulk profile lookups, and for developers or AI engineers who need typed profile data for a pipeline rather than a login flow.
What LinkedIn people data is publicly available to scrape?
Without any login, LinkedIn's guest profile page exposes a real name, photo, location, and awards, but redacts most free text and withholds several data types entirely — supplying li_at unlocks the rest, and a handful of fields are not reachable through either path.
| Data Category | Public (no login) | Requires li_at |
|---|---|---|
| Name, photo, location, about text | Yes | — |
| Headline text | Not returned | Returned |
| Job titles & position descriptions | Frequently redacted (masked per-string, not by position) | Returned in full |
| Education dates | Present | Present (same source) |
| Experience (work history) dates | Not present in the guest page at all | Returned |
| Skills, certifications, languages, publications, volunteering, organizations, patents | Not served to guests | Returned |
| Follower / connection counts | Rounded counts shown on the page (e.g. "500+") | Same rounded counts — exact figures aren't exposed either way |
| Contact info, recommendations, similar/also-viewed profiles | Not available | Not returned by this Actor's authenticated call either — see the field tables below |
LinkedIn People Profile Scraper only returns data visible to whichever viewer state it runs as — a logged-out visitor by default, or the holder of the supplied li_at session. It never accesses private, connections-only, or DM content outside that visibility.
What data can I extract with LinkedIn People Profile Scraper?
LinkedIn People Profile Scraper returns identity fields, complete career and education history, and network/contact fields for every profile submitted — every field below is a key in the pushed dataset record, not a UI label.
Identity & profile fields
| Field Name | Description |
|---|---|
username | LinkedIn public identifier — the handle in /in/<handle>/ |
full_name | The person's full display name |
first_name / last_name | Given and family name parsed separately |
display_name / unformatted_full_name | Full-name variants kept for downstream compatibility |
profile_headline | The headline under the person's name — populated only in Authenticated Mode |
description | The About/summary section text |
avatar_url / avatar_all_dimensions | Profile photo URL, plus every image size variant found |
background_picture / background_picture_all_dimensions | Cover photo URL and size variants |
location / location_city / country | The person's displayed location and country code |
profile_link | Canonical https://www.linkedin.com/in/<username>/ URL |
linkedin_sales_link | Sales Navigator lead URL, built from the profile's own entity URN (Authenticated Mode) |
is_influencer / is_premium | LinkedIn influencer and Premium-subscriber badges |
temp_status | "NOT_FOUND" when the profile couldn't be retrieved; otherwise null |
Career & credentials fields
| Field Name | Description |
|---|---|
current_company_name / current_company_linkedin_url | Employer name and company page URL, taken from the most recent experience entry |
company_industry / company_website / company_image | Current employer firmographics (company logo, industry, website) |
job_title / job_started_on / job_ended_on / job_still_working | Current role title and date range |
job_location / job_location_city / job_location_state / job_location_country | Current role's location, split into parts where LinkedIn provides them |
total_experiences | Total number of positions on the profile, even when only some are embedded in this record |
experience | Full work history array — one object per role, with its own company_name, job_title, dates, and job_description |
education | Full education array — school name, degree, fields_of_study, and started_on/ended_on |
honors_and_awards | Awards list — title, issuer, description |
skills | Flat list of skill names — Authenticated Mode only |
certification | Certifications — name and issuer — Authenticated Mode only |
language | Languages — name and proficiency — Authenticated Mode only |
publication, patents, project, organizations, volunteering | Each an array of structured records — all Authenticated Mode only |
Network, contact & engagement fields
| Field Name | Description |
|---|---|
connections / followers | Connection and follower counts parsed from the visible page counters |
extracted_contacts | Emails/phone numbers found inside the profile's own public About text or headline, if any were pasted there |
email / phone_number / websites / twitter_link | Contact fields kept in the schema for compatibility — not populated by this Actor's current data sources (see the constraints noted below) |
contact_info / recommendations_given / recommendations_received / similar_profiles / also_viewed / updates | Reserved schema fields that come back empty — LinkedIn serves these only through separate endpoints this Actor does not call |
featured / same_name / associated_hashtag | Additional reserved schema fields, currently always empty |
🤖 Add-on: Need additional LinkedIn data?
If your workflow needs verified email addresses baked into the same run instead of relying on extracted_contacts, see Linkedin Profile Scraper with Email & Company Data (No Cookie) in the same account — it adds email discovery on top of a similar cookie-free profile scrape. For prospecting across platforms rather than just LinkedIn, pair this with Twitter X Profile Viewer for the same person's public X/Twitter presence.
Why build this instead of scraping LinkedIn yourself?
LinkedIn does not publish a general-purpose, self-serve API for member profile data, so most teams end up scraping the site directly — and run into the same problems this Actor already handles.
An unauthenticated request to /in/{handle}/ returns an HTTP 999 authwall unless the client carries LinkedIn's guest cookies (set by one prior request) and arrives with a referer LinkedIn trusts — get either wrong and you get a wall instead of a page. Guest pages also mask most free text per-string, with no reliable pattern (the same field can be real on one profile and redacted on another), so naive position-based parsing produces silently wrong data. On the authenticated side, LinkedIn's internal profile API version number drifts over time, so a hardcoded endpoint eventually 404s without warning — this Actor tries five known-recent versions in order each run and caches whichever responds. Handling proxies naively is its own cost: minting a brand-new authenticated session on every run is a common cause of LinkedIn flagging an account, so this Actor caches and re-verifies a session across runs instead of logging in fresh every time, and only reaches for a paid proxy tier when LinkedIn actually blocks a request.
How to use LinkedIn People Profile Scraper
Run it from its Apify Store listing — no separate signup or API key is needed beyond your Apify account.
- Open the Actor's page in Apify Console and start a new run.
- Provide the required
urlsinput — paste one or more LinkedIn profile URLs. - Optionally paste a
li_atcookie to enable Authenticated Mode, toggleenrichCompanyoff if you don't need company firmographics in Public Mode, and setproxyConfigurationonly if you want to force a specific proxy tier. - Start the run.
- Download or stream results as JSON or CSV from the dataset, or open one of the built-in Overview / Experience & Education / Skills & Credentials / Media & Links views.
How to scale to bulk profile extraction
urls is a plain array input, so pasting dozens or hundreds of profile URLs — or uploading a file, or linking a Google Sheet/text file — runs them all in one job; there's no separate "bulk" mode to switch on. Guest-mode runs process up to 3 profiles concurrently by default; Authenticated-mode runs process up to 2 concurrently, a deliberately lower ceiling meant to reduce the chance of LinkedIn flagging the session. The same urls field handles one profile or a thousand.
What can you do with LinkedIn profile data?
- 🎯 A sales development rep prospecting accounts uses
current_company_nameandjob_titleto segment a lead list before outreach. - 🧑💼 A recruiter screening candidates uses
experienceandeducationto check tenure and degree history against a submitted resume. - 📊 A people-analytics team benchmarking hiring trends uses
total_experiencesandjob_started_onacross a batch of profiles to model average tenure by company. - 🏆 A talent-brand researcher uses
honors_and_awardsandskillsto shortlist recognized experts in a field. - 🤖 An AI engineer building a sourcing agent feeds
description,experience, andprofile_headlineinto a vector store so the agent can answer natural-language questions about a candidate pool.
Because a run is triggered over a standard HTTP-callable Actor interface, any agent framework that can make an API call can pull this data directly into its own context.
How does LinkedIn People Profile Scraper handle rate limits and blocking?
Every run starts with no proxy at all. If LinkedIn responds with a block signal (HTTP 999, 403, 429, or a small authwall-looking 200 response), the Actor escalates to an Apify Proxy datacenter IP, and if that's also rejected, to a residential IP — then stays on residential for the rest of the run rather than stepping back down. Each request retries up to 3 times with increasing backoff before the Actor gives up on that URL. Guest-mode runs establish one shared cookie session before scraping starts; Authenticated-mode runs cache session cookies across runs in a named key-value store and re-verify a cached session with one cheap request before ever minting a fresh login.
⚠️ If a profile can't be reached after retries, or looks private or removed, the Actor pushes a record with temp_status set to "NOT_FOUND" for that URL and continues — one bad URL never stops the run. The run does stop early after 12 consecutive connectivity failures, treating that as a network/proxy problem. If LinkedIn actively challenges an authenticated session mid-run, the Actor stops rather than retrying (retrying a live challenge only deepens the flag) and reports that the user should wait or supply a fresh li_at.
⬇️ Input
LinkedIn People Profile Scraper accepts four input parameters, defined in .actor/input_schema.json.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
urls | Yes | array | One or more full LinkedIn profile URLs to scrape (bulk supported). Paste a list, upload a file, or point to a Google Sheet / text file URL. | ["https://www.linkedin.com/in/williamhgates/"] |
li_at | No | string | The li_at session cookie from a logged-in LinkedIn browser session. Switches on Authenticated Mode. Leave empty for Public Mode. Encrypted at rest — never logged or shown in output. | "AQEDATxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" |
enrichCompany | No | boolean | In Public Mode, fetch the current employer's public company page for its logo, industry, and website. Ignored in Authenticated Mode. Default: true. | true |
proxyConfiguration | No | object | Proxy settings. By default the Actor uses no proxy and auto-escalates only if LinkedIn blocks a request; you can force a tier here instead. | {"useApifyProxy": false} |
Example input
{"urls": ["https://www.linkedin.com/in/williamhgates/","https://www.linkedin.com/in/reidhoffman/"],"li_at": "AQEDATxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","enrichCompany": true,"proxyConfiguration": {"useApifyProxy": false}}
⬆️ Output
Every run pushes one typed JSON record per profile to the dataset, with the same 85 field names and the same shape whether Public or Authenticated Mode ran. Results are available as JSON or CSV, and through four preset dataset views (Overview, Experience & Education, Skills & Credentials, Media & Links) for browsing a subset of fields without downloading the full record.
Example output
{"address": null,"address_with_country": "San Francisco, California United States","also_viewed": [],"associated_hashtag": [],"avatar_all_dimensions": [{ "expires_at": 1735689600000, "height": 800, "width": 800, "image": "https://media.licdn.com/dms/image/C4E03AQ_abc123/profile-displayphoto-shrink_800_800" },{ "expires_at": 1735689600000, "height": 400, "width": 400, "image": "https://media.licdn.com/dms/image/C4E03AQ_abc123/profile-displayphoto-shrink_400_400" }],"avatar_url": "https://media.licdn.com/dms/image/C4E03AQ_abc123/profile-displayphoto-shrink_800_800","background_picture": "https://media.licdn.com/dms/image/C4E03AQ_def456/profile-background-shrink_1400_400","background_picture_all_dimensions": [{ "expires_at": 1735689600000, "height": 400, "width": 1400, "image": "https://media.licdn.com/dms/image/C4E03AQ_def456/profile-background-shrink_1400_400" }],"birthday": { "day": "", "month": "", "year": "" },"certification": [{ "name": "AWS Certified Solutions Architect", "issuer": "Amazon Web Services" }],"company_id": "18913223","company_image": "https://media.licdn.com/dms/image/C560BAQ_ghi789/company-logo_400_400","company_industry": "Software Development","company_name_on_profile_top_card_shown": true,"company_website": "","connections": 0,"contact_info": [],"country": "US","current_company_linkedin_url": "https://www.linkedin.com/company/northwind-labs/","current_company_name": "Northwind Labs","description": "VP of Engineering building developer tools. Previously led platform teams at two Series-B startups.","display_name": "Jordan Ellis","education": [{"degree": "B.S. Computer Science","description": "","ended_on": { "month": 5, "year": 2011 },"fields_of_study": ["Computer Science"],"grade": "","logo": "https://media.licdn.com/dms/image/C560BAQ_jkl012/school-logo_400_400","social_url": "https://www.linkedin.com/school/university-of-washington/","started_on": { "month": 9, "year": 2007 },"university_id": "12345","university_name": "University of Washington"}],"education_on_profile_top_card_shown": true,"email": "","experience": [{"company_headcount_range": "51-200 employees","company_id": "18913223","company_image": "https://media.licdn.com/dms/image/C560BAQ_ghi789/company-logo_400_400","company_industry": "","company_name": "Northwind Labs","company_url": "https://www.linkedin.com/company/northwind-labs/","company_urn": "urn:li:fsd_company:18913223","company_website": "","employment_type": "Full-time","job_description": ["Leading a 40-person engineering org across three product lines."],"job_ended_on": "","job_location": "San Francisco, California, United States","job_location_city": "San Francisco","job_location_country": "United States","job_location_county": "","job_location_state": "California","job_started_on": "3-2021","job_still_working": true,"job_title": "VP of Engineering","raw_company_name": "Northwind Labs","raw_job_title": "VP of Engineering"}],"extracted_contacts": { "emails": [], "personal_emails": [], "phone_numbers": [], "professional_emails": [] },"featured": [],"first_name": "Jordan","followers": 0,"full_name": "Jordan Ellis","geo_location_backfilled": false,"honors_and_awards": [{ "description": "", "issuer": "", "title": "Top 40 Under 40 in Tech" }],"is_creator": false,"is_influencer": false,"is_job_seeker": false,"is_memorialized": false,"is_open_to_work": false,"is_openlink": false,"is_premium": true,"is_retired": false,"job_description": ["Leading a 40-person engineering org across three product lines."],"job_ended_on": "","job_location": "San Francisco, California, United States","job_location_city": "San Francisco","job_location_country": "United States","job_location_county": "","job_location_state": "California","job_started_on": "3-2021","job_still_working": true,"job_title": "VP of Engineering","language": [{ "name": "English", "proficiency": "Native or bilingual proficiency" }],"last_name": "Ellis","linkedin_id": "","linkedin_sales_link": "https://www.linkedin.com/sales/lead/urn:li:fsd_profile:ACoAAB1234","location": "San Francisco, California, United States","location_city": "San Francisco, California, United States","location_county": "","location_state": "","middle_name": "","organizations": [],"patents": [],"phone_number": null,"primary_locale": { "country": "US", "language": "en" },"profile_headline": "VP of Engineering at Northwind Labs","profile_link": "https://www.linkedin.com/in/jordanellis/","project": [],"publication": [],"raw_company_name": "Northwind Labs","raw_job_title": "VP of Engineering","recommendations_given": [],"recommendations_received": [],"sales_id": "urn:li:fsd_profile:ACoAAB1234","same_name": [],"show_premium_badge": true,"similar_profiles": [],"skills": ["Distributed Systems", "Engineering Management", "Python"],"temp_status": null,"total_experiences": 4,"twitter_link": "","unformatted_full_name": "Jordan Ellis","updates": [],"username": "jordanellis","volunteering": [],"websites": []}
This example is from an Authenticated Mode run. connections, followers, contact_info, email, phone_number, twitter_link, websites, recommendations_given, recommendations_received, similar_profiles, also_viewed, and updates stay empty in Authenticated Mode too — the source documents these as fields the current API call structurally cannot fill, not as "this profile has none." A Public Mode record for the same profile would additionally leave skills, certification, language, publication, patents, project, organizations, and volunteering empty, since LinkedIn does not serve those to logged-out visitors at all.
How does it work?
In Public Mode, the Actor's first request establishes LinkedIn's own guest cookies with a single GET, then requests each profile URL with a referer LinkedIn trusts; without both, LinkedIn returns an HTTP 999 authwall instead of the page. The rendered page's Person structured-data block is parsed for name, location, dates, and awards; free text LinkedIn redacts for guests is checked string-by-string and dropped rather than guessed at. In Authenticated Mode, the same profile is instead fetched through LinkedIn's own internal profile API using the supplied li_at cookie, returning full experience, education, skills, and more in one response. Both paths normalize into the same 85-field schema, so the output shape doesn't change regardless of which mode ran or how LinkedIn's own page markup shifts.
Integrations
LinkedIn People Profile Scraper runs like any Apify Actor, so it works with the tools you already use to call APIs and automate workflows.
Calling LinkedIn People Profile Scraper programmatically
import requestsresp = requests.post("https://api.apify.com/v2/acts/YOUR_USERNAME~linkedin-people-profile-scraper/run-sync-get-dataset-items",headers={"Authorization": "Bearer YOUR_APIFY_TOKEN"},json={"urls": ["https://www.linkedin.com/in/williamhgates/"]},)profiles = resp.json()print(profiles[0]["full_name"], profiles[0]["current_company_name"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
No-code tools (n8n, Make, LangChain)
In n8n, add an HTTP Request node pointed at the Actor's run-sync-get-dataset-items endpoint, with your Apify token in the Authorization header and the urls array in the JSON body. In Make, use Apify's own "Run an Actor and get dataset items" module, select linkedin-people-profile-scraper, and map urls from an upstream module such as a Google Sheets row. In LangChain, wrap the same HTTP call in a custom tool (or the community Apify integration) so an agent can trigger a run and receive parsed JSON profile records as tool output.
Is it legal to scrape LinkedIn profiles?
Scraping publicly available LinkedIn profile data is generally lawful — U.S. courts, including the Ninth Circuit in hiQ Labs v. LinkedIn, have held that accessing data a person has made publicly visible does not violate anti-hacking law. LinkedIn People Profile Scraper only returns data visible to a logged-out visitor by default, or to the holder of the supplied li_at session in Authenticated Mode — never private, connections-only, or login-gated content beyond that. Because the output is personal data about identifiable individuals (name, employment history, education), any bulk storage, enrichment, or downstream use is subject to GDPR if the data subject is in the EU/EEA, or CCPA if they're a California resident — including having a documented lawful basis and honoring deletion or access requests. Consult legal counsel if your use case involves bulk storage of personal data.
Frequently asked questions
What LinkedIn profile fields does LinkedIn People Profile Scraper return?
The dataset includes full_name, profile_headline, current_company_name, experience, and education for every profile submitted, alongside dozens more fields covering skills, honors, credentials, and network stats — see What data can I extract above for the full list.
Does LinkedIn People Profile Scraper require a LinkedIn account or login?
No. By default the Actor runs entirely in Public Mode with no LinkedIn account, cookie, or login. Supplying an optional li_at session cookie switches on Authenticated Mode, unlocking experience/education dates, skills, honors, publications, volunteering, certifications, languages, organizations, and patents that LinkedIn withholds from logged-out visitors.
How many LinkedIn profiles can I extract in one run?
There's no fixed cap in the input schema — urls accepts as many profile URLs as you paste, upload, or link from a file or Google Sheet, and all of them run in the same job. Guest-mode runs process up to 3 profiles concurrently by default; Authenticated-mode runs process up to 2 concurrently, a deliberately lower ceiling meant to reduce the chance of a flagged session.
What happens if a profile is private or doesn't exist?
The Actor still pushes a record for that URL, with temp_status set to "NOT_FOUND" and the identity fields left empty, rather than skipping the row or failing the run. In Public Mode this happens whenever no name can be parsed from the returned page (blocked, removed, or private); in Authenticated Mode it happens whenever the profile lookup returns no matching profile.
Can I scrape multiple LinkedIn profiles at once?
Yes. urls is an array input, so a single run accepts one URL or thousands, pasted directly, uploaded as a file, or linked from a Google Sheet / text file URL.
Does LinkedIn People Profile Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes, as a callable HTTP endpoint — any agent framework that can make an authenticated API request can start a run and read back typed JSON, without an Actor-specific SDK.
What's the difference between Public Mode and Authenticated Mode?
Public Mode (default, no li_at) reads LinkedIn's logged-out guest page and returns real names, locations, education dates, follower/connection counts, and awards, but LinkedIn redacts most free text (job titles, most descriptions, roughly half of company/school names) and omits skills, certifications, publications, volunteering, organizations, and patents entirely for guests. Authenticated Mode (li_at supplied) calls LinkedIn's own internal profile API and returns all of that in one request, plus experience dates that Public Mode cannot access at all.
Does LinkedIn People Profile Scraper return data in a format LLMs can use directly?
Yes. Every run returns typed, normalized JSON with the same 85 field names in the same order across every profile and every run — no HTML, no selectors, no per-run schema drift — so it can be piped directly into an LLM prompt, a vector store, or an agent tool.
What happens when LinkedIn changes its layout or anti-bot system?
The Actor is maintained to track LinkedIn's current guest-page structure and internal profile API version — it already tries five recent API version candidates in order and caches whichever responds, so a single version bump doesn't break a run. The output schema stays the same 85 fields regardless of upstream changes; no specific update turnaround time is published.
Can I use LinkedIn People Profile Scraper without managing proxies or browser infrastructure?
Yes. The Actor ships its own tiered proxy escalation (no proxy → Apify Proxy datacenter → Apify Proxy residential) that only engages when LinkedIn actually blocks a request, and manages all cookie and session handling itself.
Which LinkedIn profile fields work best for AI training data and RAG indexing?
For RAG, index description (the profile's About/summary text), profile_headline, and the free-text job_description entries inside experience — these carry the most natural-language signal. For structured training data, experience, education, skills, and honors_and_awards return the most consistently shaped records across profiles, and every field is a typed primitive, list, or object rather than a formatted string.
Related scrapers
| Scraper | What it extracts |
|---|---|
| Linkedin Profile Scraper with Email & Company Data (No Cookie) | LinkedIn profiles with verified email discovery and current-company enrichment, no login cookie required |
| Twitter X Profile Viewer | Public X/Twitter profile bio, stats, verification, affiliate badge, and pinned tweets |
| Instagram Transcript API & Profile Scraper - AI Video to Text | Public Instagram profile posts, plus AI-generated transcripts of Reels and videos |
Your feedback
Found a bug, or a field that doesn't match what you see on a real LinkedIn profile? Let the Scraper Engine team know at dev.scraperengine@gmail.com — reports like this are how the field coverage documented above stays accurate as LinkedIn's own site changes.