LinkedIn Profile Scraper — Public Profile Data Extraction avatar

LinkedIn Profile Scraper — Public Profile Data Extraction

Pricing

from $7.00 / 1,000 record scrapeds

Go to Apify Store
LinkedIn Profile Scraper — Public Profile Data Extraction

LinkedIn Profile Scraper — Public Profile Data Extraction

Extract public profile data from LinkedIn without login. Gets name, headline, experience, education, skills, certifications, languages, and more.

Pricing

from $7.00 / 1,000 record scrapeds

Rating

0.0

(0)

Developer

bootforge

bootforge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

LinkedIn Profile Scraper — Cookie-based Deep Profile Extraction

Scrape LinkedIn profile data with structured fields: name, headline, about, full experience history (reverse-chronological), education, skills, honors, projects, certifications, and optional contact info (email, phone, websites, twitter). Cookie-required — works on Apify residential proxy where no-cookie scrapers hit the authwall.

How to Scrape LinkedIn Profiles

  • Reliable on Apify residential proxy — paste your li_at cookie, get data. No-cookie scrapers can't access LinkedIn from cloud infrastructure anymore.
  • No surprise platform fees — single-line per-event pricing, all-in.
  • Cookie persistencecookie_persist_key stores the cookie in your own per-account Apify KV store. Paste once, reuse across runs. We never see your credentials.
  • Resume cache — re-running the same URLs hits cache, you only pay for new work.
  • Compass-friendly proxy config — Apify residential, Bright Data, Oxylabs, SmartProxy, or raw URLs.
  • Open source — inspect the parser, no black box.

LinkedIn now serves an authwall (HTTP 999 + login redirect) to anonymous requests from cloud IPs. Apify residential proxies are widely used and frequently flagged. Empirically: anonymous requests against any LinkedIn profile URL from Apify infrastructure return zero data. A li_at cookie bypasses this gate.

Other LinkedIn scrapers that claim "no cookie required" either:

  • Run their own clean residential pools (not Apify), or
  • Charge customers for runs that return mostly empty data.

Our actor is honest: cookie-required, predictable output, fair pricing.

⚠️ Critical setup — proxy country MUST match your cookie's country

LinkedIn ties session validity to IP geography. Your li_at cookie was issued to a session in a specific country (the country you live / sign in from). If you proxy through a different country, LinkedIn flags it as a session hijack and deauthorizes the cookie within 1-2 requests — you'll get HTTP 401 on every profile.

Always set proxy.country to the same country as your cookie.

Where you sign into LinkedInYour proxy.country
United StatesUS
United KingdomGB
VietnamVN
GermanyDE
JapanJP
etc.(matching ISO-3166 code)
"proxy": { "provider": "apify", "group": "RESIDENTIAL", "country": "US" }

If country is unset, Apify rotates IPs across all geos for every request — guaranteed deauth. The actor logs a loud warning when it detects this, but the right fix is to set the country in your input.

  1. Sign into LinkedIn in your normal browser
  2. Open DevTools (F12 / Cmd+Opt+I)
  3. Application tab → StorageCookieshttps://www.linkedin.com
  4. Find the li_at row → copy the Value column
  5. Paste into the cookie field of this actor's input
  6. Note your sign-in country — that's the value you set in proxy.country (see above)

Cookies typically last ~1 year. If a run starts returning 401s, the most common causes (in order): (1) proxy.country doesn't match your cookie's home geo, (2) cookie expired — paste a fresh one.

What You Get

Structured fields per profile (only present fields populate; missing sections stay empty):

Always populated when LinkedIn ships them:

  • name, headline, about, profile_photo_url
  • experience (reverse-chronological, with company/title/location/start_date/end_date/description)
  • education (school, degree, field of study, years)
  • current_company, current_title, location (derived from your current job)
  • premium, influencer badges

Populated when LinkedIn ships them on your target profile (varies by privacy / completeness):

  • industry, connection_count_numeric, follower_count
  • open_to_work, verified
  • skills (full list), skill_endorsements (per-skill counts)
  • certifications, languages, volunteer
  • honors, publications, patents, projects, courses, organizations, test_scores

Optional contact-info enrichment (scrape_contact_info: true):

  • email, phones[], websites[], twitter[], ims[], birthday, address, interests[]

Quick Start

Single profile

{
"profile_urls": ["https://www.linkedin.com/in/williamhgates/"],
"cookie": "<your_li_at_cookie>",
"proxy": { "provider": "apify", "group": "RESIDENTIAL", "country": "US" }
}

With contact info enrichment

{
"profile_urls": ["https://www.linkedin.com/in/alice-walker-1234/"],
"cookie": "<your_li_at_cookie>",
"scrape_contact_info": true,
"proxy": { "provider": "apify", "group": "RESIDENTIAL", "country": "US" }
}

Tired of pasting the cookie every run? Set cookie_persist_key and the actor stores it in your own Apify Key-Value Store (named linkedin-profile-scraper-cookies, scoped to your account — we never see it).

First run — provide both cookie and cookie_persist_key:

{
"profile_urls": ["https://www.linkedin.com/in/williamhgates/"],
"cookie": "<your_li_at_cookie>",
"cookie_persist_key": "main",
"proxy": { "provider": "apify", "group": "RESIDENTIAL", "country": "US" }
}

Subsequent runs — omit cookie, the actor reads from your KV:

{
"profile_urls": ["https://www.linkedin.com/in/jeffweiner08/"],
"cookie_persist_key": "main",
"proxy": { "provider": "apify", "group": "RESIDENTIAL", "country": "US" }
}

Refresh when a cookie expires — provide a new cookie value alongside the same key, and it overwrites the saved copy.

Multiple LinkedIn accounts — use different keys (alice, bob, team-shared, etc.).

Sample Output

{
"public_identifier": "alice-walker-1234",
"request_id": "5b1f4d2e3c8a4f6b9e7d2a1c8b4d6e9f",
"status": "ok",
"error": null,
"profile_url": "https://www.linkedin.com/in/alice-walker-1234/",
"name": "Alice Walker",
"headline": "VP Engineering at TechCo",
"location": "Boston, MA",
"industry": "Software",
"profile_photo_url": "https://media.licdn.com/...",
"about": "Builder of teams and systems...",
"connection_count_numeric": 1234,
"follower_count": 56789,
"open_to_work": false,
"premium": true,
"verified": true,
"current_company": "TechCo",
"current_title": "VP Engineering",
"experience": [
{"company": "TechCo", "title": "VP Engineering", "location": "Boston, MA", "start_date": "Mar 2022", "end_date": "Present", "description": "..."},
{"company": "PrevCo", "title": "Director", "location": "NYC, NY", "start_date": "Jan 2018", "end_date": "Feb 2022"}
],
"education": [
{"school": "Stanford", "degree": "MS", "field_of_study": "Computer Science", "start_year": "2014", "end_year": "2016"}
],
"skills": ["Python", "Distributed Systems", "Leadership"],
"honors": [{"title": "Forbes 30 Under 30", "issuer": "Forbes", "issued_on": "Mar 2022"}],
"projects": [{"title": "Open-source ANN library", "url": "https://github.com/alice/ann"}],
"contact": {
"email": "alice@techco.com",
"phones": [{"number": "+1-555-0100", "type": "MOBILE"}],
"websites": [{"url": "https://alice.dev", "category": "PERSONAL"}],
"twitter": ["alicewalker"]
},
"scraped_at": "2026-05-05T12:00:00+00:00"
}

Input Parameters

ParameterDefaultDescription
profile_urlsrequiredLinkedIn profile URLs or bare vanity slugs. Both https://www.linkedin.com/in/williamhgates/ and williamhgates work; mix freely in the same list
cookierequiredYour li_at cookie. Either inline, or seed once via cookie_persist_key
cookie_persist_keynullOptional. Reuse a cookie across runs by storing it in your own per-account Apify KV
scrape_contact_infofalseFires profileContactInfo per profile — adds email, phones, websites, twitter, IM
proxynullProxy config — set country to match cookie's home geo
max_concurrency5Concurrent profile requests
max_requests_per_minute30Rate cap to avoid LinkedIn throttling
cache_providermemorymemory, apify, or none
cache_ttl_seconds3600Cache TTL for re-runs

Pricing

Two tiers, billed only on success. No charge for blocked, failed, or not-found rows — they still appear in the dataset (for traceability) but never trigger a profile event.

TierWhat you getPer profile1,000 profiles*
Tier 1 — ProfileFull structured profile (experience, education, skills, certifications, honors, projects, languages, etc.)$0.007$7.02
Tier 2 — Profile + ContactTier 1 fields + emails, phones, websites, twitter, IM, birthday, address (when the profile shares them)$0.007 + $0.003$10.02

* Includes the $0.02 per-run start charge.

Adaptive billing rules (you only pay when we deliver):

  • A profile that returns status="blocked" / "not_found" / "failed" is never billed.
  • Tier 2 only adds the $0.003 contact-info charge when contact data is actually returned. Private profiles, profiles that don't share contact info, or sessions where the contact endpoint fails — all cost zero extra.
CompetitorMode1,000 profiles
dev_fusionBasic + email$10.00
HarvestAPI Profile SearchFull + email~$14
Us — Tier 1Full structured fields$7.02
Us — Tier 2+ email/phone enrichment$10.02
CompetitorMode1,000 profiles
dev_fusionBasic + email$10.00
HarvestAPI Profile SearchFull + email~$14
Us — standardFull structured fields$7.02
Us — with contact+ email/phone enrichment$10.02

Proxy Configuration

LinkedIn aggressively rate-limits datacenter IPs. Residential proxy is mandatory, and the country MUST match your cookie's home country (see the Critical Setup section at the top). Replace US with your country in every example below.

// Apify managed proxy (recommended)
{ "provider": "apify", "group": "RESIDENTIAL", "country": "US" }
// Bright Data
{ "provider": "brightdata", "username": "USER", "password": "PASS", "zone": "residential", "country": "US" }
// Oxylabs
{ "provider": "oxylabs", "username": "USER", "password": "PASS", "proxy_type": "residential", "country": "US" }
// SmartProxy
{ "provider": "smartproxy", "username": "USER", "password": "PASS", "proxy_type": "residential", "country": "US" }

Mismatched country = deauthorized cookie. Don't skip the country field.

Error Handling

SituationWhat happens
No cookie + no persist keyActor fails fast with clear message — no charge for failed run
Cookie expired / invalidVoyager API returns 401; row emitted with status="blocked", not billed
Profile doesn't existRow emitted with status="not_found", not billed
Unparseable input stringRow emitted with status="failed" and the offending input in profile_url, not billed
Cookie geo ↔ proxy country mismatchLinkedIn deauthorizes session, returns 401 — fix by matching proxy.country to your account
Profile is privatePublic-readable fields populate; private sections stay empty
Residential IP timeoutAuto-retry on the next IP from a 5-IP rotation pool
Contact info hidden / privateProfile result still returned without contact; no billing for the contact event
Rate-limited (429 / 503)Exponential backoff + jitter, up to 3 attempts

Frequently Asked Questions

Can I scrape without a cookie? Not reliably from Apify or any cloud infrastructure. LinkedIn's authwall now requires authentication for anonymous cloud-IP requests. The actor will fail fast if you don't provide one.

Will my cookie get my account banned? LinkedIn flags accounts that pull thousands of profiles per hour. Stick under the default max_requests_per_minute: 30 and max_concurrency: 5 for sustainable use. The Voyager endpoint is the same one the LinkedIn web app uses, so request shape isn't a flag — volume and cadence are.

How long does a cookie last? Typically 1 year. If runs start failing with 401, paste a fresh cookie.

How fresh is the cache? Default 1 hour. Re-running the same profile_urls within that window returns cached results without re-scraping or re-charging.

Will all the rich fields populate on every profile? No — depends on what the profile owner has filled in and their privacy settings. Skills, honors, projects, certifications, languages etc. only show when the person added them. Numeric connection counts and badges populate when LinkedIn ships them on that profile (varies). Core fields (name, headline, about, experience, education) almost always populate.

What about LinkedIn's terms of service? Cookie-mode requires your LinkedIn account credentials and is your responsibility. We don't store the cookie outside your own Apify KV (and only if you opt into cookie_persist_key).

Building a full data pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.

Lead generation

Lead generation / Hiring

  • LinkedIn Jobs Scraper — Scrape LinkedIn job listings with 30 fields per job — company enrichment, salary, recruiter info, full description. No login required.

E-commerce intelligence

  • TikTok Shop Product Scraper — Scrape TikTok Shop products across 10 regions (US, GB, VN, TH, PH, MY, SG, JP, MX, BR) — variants, prices, seller info, ratings, sold counts.