LinkedIn Profile Scraper avatar

LinkedIn Profile Scraper

Pricing

Pay per usage

Go to Apify Store
LinkedIn Profile Scraper

LinkedIn Profile Scraper

Scrape public LinkedIn profiles without login when data is public. Extract name, headline, location, about, experience, education, skills, connections, and current company/title for GTM and lead enrichment.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Harsh

Harsh

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Scrape public LinkedIn profile data for GTM, outbound, and lead enrichment — name, headline, location, about, experience, education, skills, connections, and current company/title. Built with TypeScript and Crawlee CheerioCrawler (HTTP-first, no browser) using multi-strategy extraction (JSON-LD, meta tags, public DOM, embedded state).

Run it on the Apify platform for scheduling, API access, residential proxy rotation, monitoring, and dataset exports (JSON, CSV, Excel, HTML).

Legal / ToS notice: This Actor is intended for publicly available data only. It does not log into LinkedIn. Respect LinkedIn Terms of Service, robots rules, and applicable privacy laws (GDPR/CCPA). Do not use this tool to scrape private content, bypass authentication, or harass people. You are responsible for how you use the data.

What does LinkedIn Profile Scraper do?

Given a list of LinkedIn profile URLs, this Actor:

  1. Deduplicates profile URLs (case-insensitive /in/ slugs)
  2. Loads each public profile page over HTTP (Cheerio — no headless browser)
  3. Extracts profile fields: full name, headline, location, about/summary, current company & title, connections/followers text, profile ID when present
  4. Extracts experience, education, and skills when they appear in public HTML / structured data
  5. Handles auth walls, blocks, and missing profiles gracefully — writes a dataset row with an error field and exits 0
  6. Pushes clean JSON dataset items
  7. Exports PROFILES.csv and SUMMARY.md to the key-value store

Ideal for outbound / GTM stacks, warm-lead enrichment, and CRM backfill where Apollo-style profile data is needed at scale.

Why use LinkedIn Profile Scraper?

  • Lead enrichment — turn /in/ URLs into structured person records for your CRM
  • Outbound research — pull headlines, current roles, and locations before personalizing emails
  • Talent & market intel — sample public experience and skills for role mapping
  • Automation-ready — JSON dataset + CSV export + Apify API, schedules, and webhooks

Proxy necessity (important)

LinkedIn aggressively rate-limits and auth-walls unauthenticated traffic, especially from datacenter IPs. For production runs:

SettingRecommendation
ProxyApify Proxy RESIDENTIAL (default in input schema)
maxConcurrency12
requestDelayMs15003000+
maxRequestRetries3+

Without residential proxies you will often see sign-in walls or empty shells. The Actor detects these and writes an error on the profile record instead of crashing the run.

Data depth note: Public / guest LinkedIn HTML is limited. Full experience histories, complete skills graphs, and connection counts beyond “500+” often require a logged-in session — which this Actor intentionally does not use. You get what LinkedIn exposes publicly for that URL/IP.

How to scrape LinkedIn profiles

  1. Open the Actor in Apify Console
  2. Paste one or more profile URLs (e.g. https://www.linkedin.com/in/williamhgates/)
  3. Keep residential proxy enabled
  4. Click Start
  5. Download results from the Dataset tab or key-value store (PROFILES.csv, SUMMARY.md)

Input

FieldTypeDefaultDescription
profileUrlsstring[][] (required)LinkedIn /in/ profile URLs (deduped)
maxConcurrencyinteger2Concurrent requests (keep low)
maxRequestRetriesinteger3HTTP retry count
requestDelayMsinteger1500Used for rate limiting
proxyConfigurationobjectResidential onApify Proxy settings

Example:

{
"profileUrls": [
"https://www.linkedin.com/in/williamhgates/",
"https://www.linkedin.com/in/satyanadella/"
],
"maxConcurrency": 2,
"maxRequestRetries": 3,
"requestDelayMs": 1500,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

See also ./examples/input.json.

Output

Each dataset item is one profile:

{
"fullName": "Jane Doe",
"headline": "Senior Software Engineer at Acme Corp",
"location": "San Francisco Bay Area",
"about": "Builder of reliable data platforms...",
"currentCompany": "Acme Corp",
"currentTitle": "Senior Software Engineer",
"profileUrl": "https://www.linkedin.com/in/jane-doe",
"profileId": "123456789",
"connectionsText": "500+ connections",
"followersText": "12K followers",
"experience": [
{
"title": "Senior Software Engineer",
"company": "Acme Corp",
"companyUrl": "https://www.linkedin.com/company/acme-corp",
"location": "San Francisco, CA",
"dateRange": "Jan 2022 – Present · 3 yrs",
"description": "Building core data APIs and event pipelines.",
"isCurrent": true
}
],
"education": [
{
"school": "Stanford University",
"schoolUrl": "https://www.linkedin.com/school/stanford-university",
"degree": "Master of Science",
"fieldOfStudy": "Computer Science",
"dateRange": "2016 – 2018",
"description": null
}
],
"skills": ["TypeScript", "Node.js", "Distributed Systems"],
"scrapedAt": "2026-07-18T12:00:00.000Z",
"error": null
}

You can download the dataset in JSON, HTML, CSV, Excel, and other formats from the Apify Console.

Data fields

FieldDescription
fullNameDisplay name
headlineProfile headline
locationLocation text when public
aboutAbout / summary section
currentCompanyCurrent employer (experience or headline)
currentTitleCurrent title (experience or headline)
profileUrlCanonical /in/ URL
profileIdMember ID when detectable
connectionsTexte.g. 500+ connections
followersTextFollowers caption when public
experienceArray of roles
educationArray of schools
skillsSkill name strings
scrapedAtISO timestamp
errorNon-null on block / not found / failure

How much does it cost to scrape LinkedIn profiles?

This Actor uses Pay-per-event (PPE) pricing:

  • Actor start: small fixed fee per run
  • Profile result: $0.005 per dataset item (apify-default-dataset-item)

Example: 200 profiles ≈ $1.00 (plus start event and platform compute / proxy). Free Apify tier credits apply as usual.

Residential proxy usage is billed separately by Apify Proxy.

Tips for better results

  • Prefer canonical https://www.linkedin.com/in/{slug}/ URLs
  • Keep concurrency low and delay high when batching hundreds of profiles
  • Use residential proxies; rotate or retry profiles that return auth walls
  • Expect partial public data — LinkedIn often hides long experience lists from guests
  • Deduplication is automatic; safe to re-submit overlapping URL lists
  • Failed / blocked profiles still produce a row with error so your pipeline can retry later

FAQ, disclaimers, and support

Does this Actor log into LinkedIn?
No. It only requests public profile HTML. No cookies, no credentials, no session takeover.

Why are many fields null?
LinkedIn frequently serves auth walls or thin public cards. Enable residential proxies, lower concurrency, and retry. Some profiles simply do not expose experience/skills to guests.

Is scraping LinkedIn legal?
Laws vary by jurisdiction and use case. Public data scraping can still violate site ToS. Consult counsel for your use case. This tool is provided as-is for legitimate research and enrichment of publicly available information.

Can you build a custom solution?
Yes — open an Issue on the Actor page or contact the developer for higher-volume pipelines, logged-in enterprise connectors (where permitted), or CRM integrations.

Feedback
Use the Issues tab on the Apify Store Actor page for bugs and feature requests.

Local development

npm install
npm run lint
npm run format
npm run build
npm test
apify run --purge

Copy examples/input.json into storage/key_value_stores/default/INPUT.json for local runs.

Deploy

apify login
apify push

Project structure

.actor/ Actor config + input/output/dataset schemas
src/
main.ts Entry point (CheerioCrawler)
routes.ts Profile page router + sanitization
extractors.ts JSON-LD / meta / DOM / embedded JSON extractors
utils.ts URL helpers, block detection, text utils
csv.ts PROFILES.csv + SUMMARY.md exporters
types.ts TypeScript types
test/
fixtures/ HTML fixtures for unit tests
extractors.test.ts
main.test.ts
examples/ Sample input/output

License

Apache-2.0