Linkedin Profile Scraper avatar

Linkedin Profile Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Linkedin Profile Scraper

Linkedin Profile Scraper

LinkedIn Profile Scraper extracts structured data from LinkedIn profiles, including names, headlines, experience, education, skills, bios, and contact details when available. Ideal for recruiting, lead generation, market research, and automating high-quality professional data collection

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

79

Total users

6

Monthly active users

5 days ago

Last modified

Share

LinkedIn Profile Scraper — Experience, Education and Location Data

The LinkedIn Profile Scraper turns a list of public linkedin.com/in/… URLs into structured JSON: name, location, followers, connections, about text, work experience, education, recent posts, projects, recommendations, and "People also viewed" similar profiles. It runs anonymously — no login, cookie, or li_at session — which makes it a fit for recruiters, sales and lead-generation teams, and researchers who need public profile data at scale without manual copy-pasting. Point it at a batch of URLs and get one clean record back per profile.

What is LinkedIn Profile Scraper?

LinkedIn Profile Scraper is an Apify Actor that fetches public LinkedIn profile pages and parses their embedded JSON-LD plus HTML into a consistent JSON schema. It requires no LinkedIn account, login, or cookie — it reads only the data LinkedIn already exposes to anonymous visitors and logged-out search engines. Because it works off a fixed list of URLs rather than a search or category feed, each run is a targeted fetch of exactly the profiles you name.

  • Bulk multi-URL input — queue any number of linkedin.com/in/… URLs (vanity or URN /in/ACoAA… form), processed in order.
  • Core identity fields — name, avatar image, location, follower count, connections string, and About/summary text.
  • Career history — full work experience and education sections, each with organization name, URL, and dates/role description where public.
  • Secondary content — recent posts, articles, publications, activity, projects, and written recommendations.
  • Optional expansion data — "People also viewed" similar profiles, toggled on or off per run.
  • Fetch fallback ladder — direct proxy fetch with retries, an optional bring-your-own scraping-API template, and two Wayback Machine fallbacks if LinkedIn blocks the live page.

What data can I extract with LinkedIn Profile Scraper?

Every successfully scraped profile returns the fields below in one JSON record.

FieldExample ValueUse Case
successtrueConfirms the row represents a completed scrape (only successful profiles are pushed to the dataset)
partialfalseFlags rows recovered only from meta/OpenGraph tags (limited data) vs. a full JSON-LD parse
name"Jane Doe"Identify the person for a lead list or candidate record
image"https://media.licdn.com/dms/image/.../profile.jpg"Avatar for a CRM record or people directory
location"San Francisco, California"Geographic segmentation of a contact list
followers4820Gauge audience size/influence for outreach prioritization
connections"500+ connections"Network-size signal as displayed on the profile
about"Product leader focused on developer tools…"Summary text for enrichment or AI-generated outreach copy
experience[]{"name": "Acme Corp", "url": "...", "location": "...", "member": {"description": "Director of Product"}}Current/past employer and role for account-based targeting
education[]{"name": "Stanford University", "url": "...", "member": {"startDate": "2010", "endDate": "2014"}}Alumni matching for recruiting or affinity marketing
recentPosts[]{"title": "Excited to share...", "activityType": "Posted by Jane Doe", "link": "...", "image": "..."}Recent posting activity from the profile's JSON-LD
activity[]{"title": "...", "activityType": "...", "link": "...", "image": "..."}Recent activity cards parsed from the page HTML
articles[]{"headline": "...", "author": "...", "datePublished": "...", "articleBody": "..."}Published long-form articles for thought-leadership research
publications[]{"name": "...", "url": "..."}Listed publications
projects[]{"name": "...", "url": "...", "dateRange": "...", "description": "...", "contributors": []}Side/portfolio projects (toggle with extractProjects)
recommendations[]{"name": "John Smith", "link": "...", "text": "Jane is an outstanding..."}Social-proof text (toggle with extractRecommendations)
similarProfiles[]{"link": "...", "name": "Someone Else", "location": "New York, NY"}"People also viewed" expansion (toggle with extractSimilarProfiles)
source"wayback"Only present on rows recovered via a fallback path (custom_fetcher, wayback, or wayback_spn); absent on a direct successful fetch

Career and education signals

experience[] and education[] carry the decision-driving data behind every profile. Each experience entry names the employer, links to its LinkedIn company page, and — where the profile makes it public — a role description; each education entry names the school and the enrollment start/end dates. These arrays are what a recruiter filters candidates on ("has fintech experience", "graduated after 2015") and what a sales rep uses to confirm a prospect's current employer before outreach. Because the HTML and JSON-LD sources are merged (build_profile backfills missing names/URLs from the page's visible experience-education cards), the arrays stay populated even when one source alone is incomplete.

Location and network signals

location, followers, and connections are the fields you segment a scraped batch on after the run completes. location gives you a city/region string for geographic targeting; followers and connections are rough proxies for reach and network size, useful for prioritizing which contacts in a batch to approach first. similarProfiles[] adds a lightweight network-expansion signal — each entry is another public profile LinkedIn associates with the one you scraped, letting you grow a seed list without a second search step.

How does LinkedIn Profile Scraper differ from the official LinkedIn API?

LinkedIn's official API gates almost all member-profile access behind partner approval — the only permission open to every developer without review is "Sign in with LinkedIn," which returns the authenticated user's own name, headline, and photo, not a third party's public profile (LinkedIn API docs, Microsoft Learn, updated June 2025, checked 2026-07-26). Reading someone else's profile data by URL — what this Actor does — has no self-serve official endpoint at all.

FeatureOfficial LinkedIn APILinkedIn Profile Scraper
Access to a third party's public profileNot available to unapproved developers; only Sales Navigator (SNAP) or Talent Solutions partners get matched-profile lookups, and both require a partner applicationAny public profile URL, no application or approval
Approval processManual partner review for Marketing, Sales, and Talent programsNone — runs directly on Apify
Setup requirementLinkedIn Developer Portal app, OAuth 2.0 flow, partner-tier approvalApify account + Actor input, no LinkedIn credentials
Data returned per profileLimited to the authenticated member's own basic fields under Open PermissionsFull public profile: identity, experience, education, posts, projects, recommendations, similar profiles
Output formatJSON via REST, shaped by the granted permissionConsistent JSON schema across every profile, regardless of permission tier

Why is third-party profile data locked behind LinkedIn's partner programs?

LinkedIn restricts read access to other members' profiles to protect user data and its own data business — the only unapproved-developer permission is limited to the logged-in user's own basic info, while Sales Navigator and Talent Solutions APIs that touch other members' profiles require a formal partner application and ongoing review (Microsoft Learn). In practice this means a developer without a signed partner agreement has no official way to pull a public profile by URL. LinkedIn Profile Scraper covers that gap by reading the same public HTML and JSON-LD that a logged-out browser or search engine sees — no partner agreement, no OAuth flow, no approval wait.

Use the official API when you're building an authenticated "Sign in with LinkedIn" flow or already hold Sales Navigator/Talent Solutions partner status. Use this Actor when you need to pull data from public profiles you don't have API-level access to, without waiting on a partner review.

How to use data extracted from LinkedIn?

Recruiting and candidate research

Recruiters and sourcers paste a shortlist of candidate profile URLs and get back experience[], education[], about, and recommendations[] in one pass — enough to screen career history and alumni background before an outreach call. Because extractRecommendations surfaces written endorsements, a sourcer can gauge social proof without opening each profile individually. The resulting JSON drops straight into an ATS import or a spreadsheet-based shortlist, with location used to confirm a candidate is in the right market before scheduling a call.

Sales prospecting and lead-generation agencies

Agencies running outreach on behalf of clients feed in a list of target-account employee URLs (often sourced from a separate company/employee scraper) and pull name, location, experience[], and about to personalize first-touch messages. Because runs are billed per successfully scraped profile, an agency can process a fresh prospect list per client campaign and re-run it periodically to catch job changes reflected in experience[], without maintaining LinkedIn login infrastructure themselves.

Market and talent research

Researchers scraping a set of profiles from the same company or industry can compare experience[] durations, education[] institutions, and location across the batch to map talent concentration, alumni networks, or career-path patterns for a sector. Combined with followers/connections, this also supports lightweight influence mapping — for example, identifying which people in a target company have the largest public network before planning an account-based campaign.

AI agents and automated pipelines

Because the Actor takes a flat list of URLs and returns typed JSON, it plugs directly into an agent tool call: an agent can pass a URL discovered elsewhere in its workflow (a company employee page, a search result) and receive back structured experience/education/about fields to ground a RAG answer or auto-fill a CRM enrichment step, without any custom HTML parsing on the agent's side.

🔼 Input sample

All fields are optional (there are no required parameters), though a run with an empty urls list produces no output.

ParameterRequiredTypeDescriptionExample Value
urlsNoarrayPublic LinkedIn profile URLs to scrape (linkedin.com/in/handle). Accepts vanity and URN (/in/ACoAA…) forms; one per line or multiple entries, processed in order.["https://www.linkedin.com/in/timbakke/"]
extractSimilarProfilesNobooleanInclude "People also viewed" similar profiles in the result. Default true.true
extractProjectsNobooleanExtract the Projects section (name, dates, description, contributors). Default true.true
extractRecommendationsNobooleanInclude written recommendations from other members. Default true.true
customFetcherUrlTemplateNostringOptional 3rd-party scraping-API URL template with a literal {url} placeholder (e.g. ScrapingBee, ScraperAPI, Scrapingdog). Leave empty to skip."https://api.scraperapi.com/?api_key=YOUR_KEY&url={url}"
enableWaybackFallbackNobooleanIf LinkedIn blocks and no custom fetcher succeeds, look up an existing Wayback Machine snapshot. Default true.true
enableWaybackSaveFallbackNobooleanIf no existing snapshot is found, trigger Wayback Save Page Now to create a fresh one (slow, ~30–60s, rate-limited ~15/min, no auth). Default true.true
maxRetriesNointegerDirect-fetch attempts per profile before falling back (min 1, max 15). Default 5.5
requestTimeoutSecsNointegerPer-request timeout in seconds (min 5, max 180). Default 30.30
proxyConfigurationNoobjectApify Proxy or custom proxy URLs. Default {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}
{
"urls": [
"https://www.linkedin.com/in/timbakke/",
"https://www.linkedin.com/in/example-handle/"
],
"extractSimilarProfiles": true,
"extractProjects": true,
"extractRecommendations": true,
"enableWaybackFallback": true,
"enableWaybackSaveFallback": true,
"maxRetries": 5,
"requestTimeoutSecs": 30,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Common pitfall: proxyConfiguration defaults to the RESIDENTIAL proxy group, and that default matters — LinkedIn's anti-bot system returns a 999 block or an authwall almost immediately to datacenter IPs, so switching to a datacenter group to save cost typically increases how often a profile falls through to the slower Wayback fallbacks instead of a direct fetch.

🔽 Output sample

One dataset item per successfully scraped profile — a consistent JSON schema regardless of how much of the profile is public. Export as JSON, JSONL, CSV, or Excel from the Apify Console or API.

{
"success": true,
"partial": false,
"name": "Jane Doe",
"image": "https://media.licdn.com/dms/image/example/profile.jpg",
"location": "San Francisco, California",
"followers": 4820,
"connections": "500+ connections",
"about": "Product leader focused on developer tools and platform growth.",
"recentPosts": [
{
"title": "Excited to share our latest release…",
"activityType": "Posted by Jane Doe",
"link": "https://www.linkedin.com/posts/janedoe_launch-activity-123456",
"image": "https://static.licdn.com/aero-v1/sc/h/example"
}
],
"experience": [
{
"@type": "Organization",
"name": "Acme Corp",
"url": "https://www.linkedin.com/company/acme/",
"location": "San Francisco, CA",
"member": {
"@type": "OrganizationRole",
"description": "Director of Product"
}
}
],
"articles": [],
"activity": [],
"education": [
{
"@type": "EducationalOrganization",
"name": "Stanford University",
"url": "https://www.linkedin.com/school/stanford-university/",
"member": {
"@type": "OrganizationRole",
"startDate": "2010",
"endDate": "2014"
}
}
],
"publications": [],
"projects": [],
"recommendations": [
{
"name": "John Smith",
"link": "https://www.linkedin.com/in/johnsmith/",
"image": "https://media.licdn.com/dms/image/example/headshot.jpg",
"text": "Jane is an outstanding product leader who consistently ships."
}
],
"similarProfiles": [
{
"link": "https://www.linkedin.com/in/someone-else/",
"name": "Someone Else",
"location": "New York, NY",
"image": "https://media.licdn.com/dms/image/example/other.jpg"
}
]
}

A profile the direct fetch reaches successfully carries no source field. Rows recovered through a fallback path add "source": "custom_fetcher", "source": "wayback", or "source": "wayback_spn". When only meta/OpenGraph tags could be recovered (no JSON-LD person record), the row is still returned with "partial": true rather than being dropped.

How do you filter and target specific profiles?

This Actor has no search, category, or location filter to tune — it works off an exact list of profile URLs you supply, so precision here happens entirely on the input side rather than through result filters. You control which profiles come back simply by curating the urls list (vanity linkedin.com/in/handle or URN linkedin.com/in/ACoAA… form, both accepted), and you control how much of each profile comes back with the three extract toggles: turn extractSimilarProfiles off when you only need the named profiles and don't want network-expansion noise; turn extractProjects and extractRecommendations off when you only need core identity plus experience/education, which keeps the payload smaller and the dataset easier to scan for high-volume runs. A minimal, fast-scanning configuration looks like:

{
"urls": ["https://www.linkedin.com/in/timbakke/"],
"extractSimilarProfiles": false,
"extractProjects": false,
"extractRecommendations": false
}

There is no maxItems-style cap to tune beyond the URL list itself — the number of profiles scraped equals the number of valid URLs submitted.

▶️ Want to try other LinkedIn scrapers?

Scraper NameWhat it extracts
LinkedIn Company Scraper: Search By Name, Keyword or URLCompany pages by name, keyword, company ID, or URL
LinkedIn Company Employees Scraper With Growth TrackerEmployee headcount and growth tracking for a target company
LinkedIn Company About Scraper With Firmographic EnrichmentCompany "About" data with firmographic enrichment
LinkedIn Post Scraper & Comments ReactionsPosts, comments, and reactions from LinkedIn post URLs
LinkedIn B2B Email ScraperB2B and personal emails discovered from LinkedIn via search patterns
Glassdoor Jobs ScraperJob listings with roles, company, and posting details from a comparable professional-data directory

How to extract LinkedIn data programmatically

This Actor runs as a standard Apify Actor: one API call starts the run, structured JSON comes back from the dataset — no separate scraping infrastructure to maintain.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("SimpleAPI/linkedin-profile-scraper").call(run_input={
"urls": ["https://www.linkedin.com/in/timbakke/"],
"extractRecommendations": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["location"], len(item["experience"]))

MCP for AI agents

This Actor is reachable through Apify's Actors MCP Server, which exposes any Apify Actor as a callable tool over MCP. Register it with:

npx @apify/actors-mcp-server --actors SimpleAPI/linkedin-profile-scraper

using your APIFY_TOKEN as the environment variable, with clients such as Claude Desktop or Cursor. A typical agent use case: an outreach agent that resolves a candidate or prospect's LinkedIn URL from another tool call, then invokes this Actor to ground its next message in real experience/education data instead of a guess.

Export to spreadsheets or CRM

Export the dataset as CSV directly from the Apify Console or API, then import into a spreadsheet or CRM. Map name to a Contact Name column, location to a Location/Region field, experience[0].name to a Current Employer column, and about to a Notes/Bio field.

Yes, for data that is publicly visible — this Actor collects only what a logged-out visitor or search engine already sees on a public profile page; it does not bypass LinkedIn's authentication wall or read login-gated fields. That said, a profile record is personal data under GDPR and CCPA (it can identify a named individual), so once you store or reuse it — building a candidate database, a sales list, or a CRM enrichment pipeline — you need a lawful basis for holding that data and must be able to honor access/deletion requests from the person it describes. This applies regardless of whether the underlying page was public. Consult legal counsel for commercial applications involving bulk storage of personal data.

❓ FAQ

What happens if a profile has changed or been deleted since I last scraped it? Each run reads the live public page (or a Wayback fallback) at request time, so re-running the same URL returns the current state — including a profile that has since gone private, been deleted, or changed its About/experience content. There is no separate "stale" flag; treat every row as a snapshot from its scrape time.

Can I get recommendations and projects along with the core profile? Yes — extractRecommendations and extractProjects are both on by default and return the full recommendation text and project details (name, date range, description, contributors) alongside the core fields, no extra run required.

How accurate is the location and connections data? The Actor returns location and connections exactly as displayed on the public profile at request time; accuracy depends entirely on whether the profile owner keeps that information current. Re-scrape periodically if you need up-to-date figures for a long-running list.

How many profiles can I get per run? There is no built-in cap — the run processes every URL in the urls list, in order, one profile per URL.

What's the most useful toggle for a large bulk run? Turning off extractSimilarProfiles, extractProjects, and extractRecommendations keeps each output row to just identity, experience, and education, which is the fastest-to-scan shape for a recruiting or prospecting shortlist at volume.

Does LinkedIn Profile Scraper work with Claude, ChatGPT, and AI agent frameworks? Yes — it's reachable through Apify's Actors MCP Server (npx @apify/actors-mcp-server --actors SimpleAPI/linkedin-profile-scraper) for MCP-native clients, and callable as a standard HTTP endpoint via the Apify API from any agent framework that can make a REST call.

How does LinkedIn Profile Scraper compare to other LinkedIn profile scrapers? As observed on their Apify Store listings on 2026-07-26, dev_fusion's LinkedIn Profile Scraper charges $10 per 1,000 results and caps free-plan users at 10 profiles per run, and harvestapi's LinkedIn Profile Scraper charges $4–$10 per 1,000 profiles depending on whether email lookup is included. This Actor does not attempt email or phone discovery — it stays within publicly displayed profile fields, plus adds a Wayback Machine fallback ladder neither of those listings describes, for coverage when a direct fetch is blocked.

Can I use LinkedIn Profile Scraper without a LinkedIn API key or developer account? Yes. You only need an Apify account and the profile URLs you want to scrape — no LinkedIn login, cookie, API key, or developer application of any kind.

Conclusion

LinkedIn Profile Scraper turns a list of public profile URLs into consistent, structured JSON — identity, experience, education, and network signals — without a LinkedIn login or the partner-approval wait of the official API. It's built for recruiters, prospecting teams, and researchers who need public profile data at scale, with a fallback ladder that keeps runs working when LinkedIn blocks a direct fetch. Paste in your URL list and run it from the Apify Console, the API, or an MCP-connected agent to get your first batch of profiles back as JSON.