LinkedIn Profile Scraper By Similar Profile Finder
Pricing
$14.99/month + usage
LinkedIn Profile Scraper By Similar Profile Finder
Scrapes public LinkedIn profiles to collect names, headlines, job titles, experience, education, skills, locations, and profile URLs. Ideal for lead generation, recruitment research, talent sourcing, market insights, and large-scale professional data extraction
Pricing
$14.99/month + usage
Rating
0.0
(0)
Developer
Scrapio
Maintained by CommunityActor stats
2
Bookmarked
78
Total users
6
Monthly active users
5 days ago
Last modified
Categories
Share
LinkedIn Scraper — Profiles, Work Experience and Similar Profiles
LinkedIn Profile Scraper By Similar Profile Finder turns one or more public LinkedIn profile URLs into a breadth-first network of lookalike people. It reads each profile's "People also viewed" browsemap and re-scrapes every discovered profile through the same anonymous engine, up to three hops deep. Every row returns a full profile record — name, location, followers, work experience, education, projects, recommendations — plus network-position labels (discoveryDepth, seedHandle, discoveredVia). Unlike scraping frameworks that return raw HTML, it returns typed JSON, ready for your database, CRM, or LLM pipeline without any parsing step. This guide covers every input, the full output schema, and three ways teams deploy it in production.
🧭 What Does LinkedIn Profile Scraper By Similar Profile Finder Do?
LinkedIn Profile Scraper By Similar Profile Finder starts from seed LinkedIn profile URLs and expands outward through the public "People also viewed" widget, turning a single contact into a deduplicated network graph of similar people. No LinkedIn account, login, cookie, or Voyager session token is required — the actor reads only publicly rendered profile pages (JSON-LD structured data plus HTML) and falls back to residential proxies or Wayback Machine snapshots when LinkedIn blocks a direct fetch.
- Expands one or more seed profiles into a breadth-first network, 0–3 hops deep
- Re-scrapes every discovered profile in full — not just a name and a link
- Returns core identity fields: name, image, location, followers, connections, about
- Returns structured work history:
experienceandeducationarrays with organization name, URL, and role dates - Returns
projects,recommendations,recentPosts,articles,activity, andpublicationsper profile - Returns each profile's own
similarProfileslist, so the graph can be walked further downstream - Labels every row with
type,isSeed,discoveryDepth,seedHandle, anddiscoveredViaso the discovery path is reconstructable
⚡ Features & Capabilities
The actor combines a full profile scraper with a network-discovery engine and a multi-layer anti-block fallback ladder.
Core features
- Breadth-first expansion via
similarProfilesDepth(0–3): depth 0 scrapes only the seeds, depth 1 adds their similar profiles, depth 2–3 expand each discovered profile's similar list too - Discovered-profile cap via
similarProfileLimitwith dedup byhandle— no profile is ever scraped twice in a run - Full profile payload per row, including exact fields
name,location,followers,connections,about,experience,education,projects,recommendations,similarProfiles,recentPosts,articles,activity,publications - Anonymous fetch ladder: direct residential/datacenter proxy attempts (
maxRetries), then an optional custom fetcher template (customFetcherUrlTemplate), then an existing Wayback Machine snapshot (enableWaybackFallback), then a fresh Wayback Save Page Now capture (enableWaybackSaveFallback) - Honest coverage — a profile that stays blocked through the whole ladder produces no row and no charge; it is never backfilled with fabricated values
- Optional per-run dataset mirror (
mirrorNetworkDataset) that writes the same rows to a named<runId>-networkdataset for easy chaining into a second pipeline step
LinkedIn Profile Scraper By Similar Profile Finder within the Scrapio data stack
LinkedIn Profile Scraper By Similar Profile Finder covers people and their extended network. For company pages and their affiliates, use LinkedIn Company About Scraper : Similar Companies & Affiliates. For an employee roster tied to a specific company, use LinkedIn Company Employees Scraper : Public Contact Info. For direct contact details (email/phone) on people already identified through this network, use LinkedIn B2B Emails Scraper By Phone & Email Finder. For monitoring what a person or company posts, use LinkedIn Post Scraper By Keyword or LinkedIn Scraper: Posts, Reactions, Comments & Engagement.
Why do developers and data teams scrape LinkedIn?
Public LinkedIn profile data feeds four kinds of teams differently: recruiters need candidate pools, sales teams need lookalike buyers, researchers need labeled network graphs, and AI teams need clean text fields. The audiences below are the ones this actor's network-expansion output genuinely serves.
🏢 Recruiting, sales prospecting and network mapping
Recruiters seed a strong-fit candidate's profile URL, expand similarProfilesDepth to 1–2, and mine the experience and education arrays of every discovered profile to build a passive-candidate shortlist without ever opening LinkedIn Recruiter. Sales and growth teams seed a converted customer or an ideal-customer-profile contact, then read location, experience[].name (employer), and followers off each discovered row to route lookalike buyers into a CRM by territory or company size. Network and talent-mapping teams seed a competitor's team lead and follow the discoveredVia/discoveryDepth chain across two or three hops to reconstruct that team's extended professional network, using seedHandle to keep each branch traceable back to its origin.
📊 AI training data and RAG indexing
The about, experience[].member.description, and recommendations[].text fields are the highest-information free text on a LinkedIn profile — they read like short biographies and peer testimonials, which makes them useful for two distinct AI workflows. For RAG, indexing about and recommendations[].text per profile lets an agent answer "who has done X" queries over a professional network with grounded, sourced snippets instead of hallucinated bios. For training data, the labeled network fields (discoveryDepth, similarProfilesCount, seedHandle) give a ready-made, structurally consistent dataset for training or evaluating lookalike-ranking and profile-similarity models, since every row shares the same schema regardless of hop depth.
📱 Competitive and market intelligence
Re-running the same seed set on a schedule and diffing experience arrays across runs surfaces job changes and team growth at a competitor before it shows up anywhere else — a new entry in experience[0] for several profiles seeded from one company is an early signal of a hiring push or a reorg. Tracking similarProfilesCount and followers over time on a competitor's leadership profiles gives a rough proxy for how their public visibility is trending.
🔬 Research and academic use
Social network researchers use the discoveryDepth, seedHandle, and discoveredVia labels to build homophily and network-diffusion datasets — who is professionally "similar to" whom, according to LinkedIn's own recommendation graph — without needing platform API access. This is public-data research only: the actor does not collect private connections, messages, or any data behind a login wall.
🎥 Product and SaaS development
Teams building lookalike-audience tools, CRM enrichment plugins, or recruiting-intelligence products use the actor as the data-collection layer, running it against a batch of seed URLs and loading handle, profileUrl, and the full profile payload straight into their own schema.
🍚 Input Parameters
No parameter is required — the actor defaults to expanding depth 1 around the prefilled seed profile if run with no input at all.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
seedProfileUrls | No | array | Starting LinkedIn profiles (linkedin.com/in/username). Their "People also viewed" lists seed the expansion. Accepts vanity or URN (/in/ACoAA…) URLs. The base actor's urls field is still accepted for backward compatibility. | ["https://www.linkedin.com/in/timbakke/"] |
similarProfilesDepth | No | integer (0–3) | How many hops to follow through "People also viewed". 0 = seeds only. 1 = seeds + their similar profiles. 2–3 expand each discovered profile's similar list too. Default 1. | 1 |
similarProfileLimit | No | integer | Cap on discovered (non-seed) profiles re-fetched across the run. Seeds are always fetched. Deduped by handle. 0 = unlimited. Default 25. | 25 |
includeProjects | No | boolean | Extract each profile's Projects section (name, dates, description, contributors). Default true. The base actor's extractProjects field is still accepted and takes priority if explicitly submitted. | true |
includeRecommendations | No | boolean | Include written recommendations for every profile in the network. Default true. The base actor's extractRecommendations field is still accepted and takes priority if explicitly submitted. | true |
mirrorNetworkDataset | No | boolean | Also write every row to a named per-run dataset (<runId>-network) alongside the default dataset. Default false. | false |
customFetcherUrlTemplate | No | string | Optional 3rd-party scraping-API URL template with the literal placeholder {url}, used if every direct proxy attempt is blocked. Leave empty to skip. | https://app.scrapingbee.com/api/v1/?api_key=YOUR_KEY&url={url}&premium_proxy=true |
enableWaybackFallback | No | boolean | If LinkedIn blocks a hop and no custom fetcher succeeds, look up an existing Wayback Machine snapshot. Default true. | true |
enableWaybackSaveFallback | No | boolean | If no existing snapshot is found, trigger Wayback Save Page Now to create a fresh one. Slow (30–60s per profile) and rate-limited but free and anonymous. Default true. | true |
maxRetries | No | integer (1–15) | How many direct proxy attempts per profile before falling back (residential auto-activates on a block). Default 5. | 5 |
requestTimeoutSecs | No | integer (5–120) | Per-request timeout in seconds for each profile fetch. Default 30. | 30 |
proxyConfiguration | No | object | Apify Proxy (RESIDENTIAL recommended for LinkedIn) or custom proxy URLs. Default uses Apify Proxy with the RESIDENTIAL group. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
{"seedProfileUrls": ["https://www.linkedin.com/in/timbakke/"],"similarProfilesDepth": 2,"similarProfileLimit": 40,"includeProjects": true,"includeRecommendations": true,"mirrorNetworkDataset": false,"enableWaybackFallback": true,"enableWaybackSaveFallback": true,"maxRetries": 5,"requestTimeoutSecs": 30,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Supported URL types and input formats
seedProfileUrls accepts standard vanity profile URLs (https://www.linkedin.com/in/janedoe/) and URN-style URLs (https://www.linkedin.com/in/ACoAAB1c2D3.../); both are normalized and deduplicated by the /in/<handle> slug before fetching. URLs are matched against linkedin.com/in/ and trailing query strings are stripped, so pasting a URL copied straight from a browser (with tracking parameters) works without cleanup.
- Single seed, shallow scan:
{"seedProfileUrls": ["https://www.linkedin.com/in/janedoe/"], "similarProfilesDepth": 0}— scrapes only that one profile - Multiple seeds, one hop out:
{"seedProfileUrls": ["https://www.linkedin.com/in/janedoe/", "https://www.linkedin.com/in/johnsmith/"], "similarProfilesDepth": 1, "similarProfileLimit": 50}— expands both seeds' similar-profile lists, capped at 50 discovered people total - Deep expansion with a bring-your-own fetcher:
{"seedProfileUrls": ["https://www.linkedin.com/in/janedoe/"], "similarProfilesDepth": 3, "similarProfileLimit": 100, "customFetcherUrlTemplate": "https://api.scraperapi.com/?api_key=YOUR_KEY&url={url}&premium=true"}— routes blocked hops through a paid scraping API before falling back to Wayback
📦 Output Format
Every run pushes typed JSON to the default Apify dataset, one row per unique profile (seed or discovered). Rows share one schema regardless of network position, so seed and discovered profiles can be filtered from the same dataset by the isSeed field.
Output for Profiles
{"handle": "janedoe","profileUrl": "https://www.linkedin.com/in/janedoe/","type": "discovered","isSeed": false,"discoveryDepth": 1,"seedHandle": "timbakke","seedProfileUrl": "https://www.linkedin.com/in/timbakke/","discoveredVia": "timbakke","discoveredViaUrl": "https://www.linkedin.com/in/timbakke/","similarProfilesCount": 8,"scrapedAt": "2026-07-25T14:32:07Z","success": true,"partial": false,"name": "Jane Doe","image": "https://media.licdn.com/dms/image/v2/D4E03AQ.../profile-displayphoto.jpg","location": "San Francisco Bay Area","followers": 4200,"connections": "500+ connections","about": "Product leader focused on developer tools and API platforms. 10+ years building B2B SaaS.","recentPosts": [{ "title": "Excited to share our Q2 roadmap...", "activityType": "Posted by Jane Doe", "link": "https://www.linkedin.com/posts/janedoe_...", "image": "https://static.licdn.com/aero-v1/sc/h/53n89ecoxpr1qrki1do3alazb" }],"experience": [{"@type": "Organization","name": "Acme Software Inc.","url": "https://www.linkedin.com/company/acme-software/","location": "San Francisco, CA","member": { "@type": "OrganizationRole", "description": "VP of Product" }}],"articles": [],"activity": [],"education": [{"@type": "EducationalOrganization","name": "University of California, Berkeley","url": "https://www.linkedin.com/school/berkeley/","member": { "@type": "OrganizationRole", "startDate": "2008", "endDate": "2012" }}],"publications": [],"projects": [{ "name": "Open API Toolkit", "url": "https://www.linkedin.com/in/janedoe/details/projects/", "dateRange": "2021 - 2022", "description": "Led an internal SDK used across three product lines.", "contributors": [] }],"recommendations": [{ "name": "Alex Rivera", "link": "https://www.linkedin.com/in/alexrivera/", "image": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2", "text": "Jane is one of the sharpest product minds I've worked with." }],"similarProfiles": [{ "link": "https://www.linkedin.com/in/samchen/", "name": "Sam Chen", "location": "New York, NY", "image": "https://media.licdn.com/dms/image/..." }],"source": "direct"}
Schema stability and export options
Field names stay stable across runs — the actor always writes the full row shape, and a section that fails to parse on a given profile (for example, a changed DOM class on the Projects widget) defaults to an empty array rather than shifting or dropping keys, so downstream consumers never see a partial schema. Datasets export in the formats Apify provides natively: JSON, CSV, Excel, XML, and HTML table, either from the Apify Console or via the API/SDK, with no separate flattening step required for the flat fields (nested arrays like experience and similarProfiles export as JSON strings in flat formats like CSV).
💡 LinkedIn Profile Scraper By Similar Profile Finder Strategy Guide
🎯 Strategy 1: Real-time enrichment pipeline
Trigger a run whenever a new contact enters your CRM or lead form: pass the contact's LinkedIn URL as the sole entry in seedProfileUrls with similarProfilesDepth: 0 for a single-profile lookup, or 1 if you also want their immediate lookalikes. Read name, location, followers, experience[0].name (current employer), and about off the returned row and write them back to the CRM record via your own API call — the whole loop runs inside a webhook handler since the actor returns a normal Apify dataset per run.
🎯 Strategy 2: Scheduled monitoring and alerting
Run the same seed list on an Apify Scheduler cadence (the actor has no built-in cron; scheduling is a platform-level Apify feature applied to any actor run). Diff each new run's experience[0].name and similarProfilesCount against the previous run's dataset for the same handle, and alert when experience[0].name changes — that is a job change on a tracked profile — or when similarProfilesCount jumps, which can flag a newly active or newly indexed profile.
🎯 Strategy 3: Bulk dataset build
For research or training datasets, submit a large seedProfileUrls list with similarProfilesDepth at 2 or 3 and set similarProfileLimit explicitly to bound both cost and run time. One honest limitation to plan around: the actor's BFS loop fetches profiles one at a time within a run (each hop runs its full retry/fallback ladder before the next is dequeued), so a deep, high-limit expansion can take a long time to complete; splitting a large seed list across several parallel Actor runs, each with its own bounded similarProfileLimit, gets you concurrency at the run level instead. Aggregate the resulting datasets to CSV via the Apify API for downstream loading into a warehouse or notebook.
Strategy comparison at a glance
| Strategy | Best for | Run pattern | Output format |
|---|---|---|---|
| Real-time enrichment | Enriching a single new contact on the fly | On-demand run per event, depth 0–1 | JSON row read back via API |
| Scheduled monitoring | Tracking job changes on a watchlist | Recurring Apify Scheduler run, same seeds | Dataset diffed run-over-run |
| Bulk dataset build | Research or training datasets | One or more large runs, depth 2–3, bounded similarProfileLimit | CSV/JSON export per run |
🌴 Related LinkedIn Scrapers & Tools
| Scraper Name | What it extracts |
|---|---|
| LinkedIn Company About Scraper : Similar Companies & Affiliates | Company page details plus similar companies and affiliates |
| LinkedIn Company Employees Scraper : Public Contact Info | Employee rosters and public contact info for a given company |
| LinkedIn B2B Emails Scraper By Phone & Email Finder | Business emails and phone numbers for public LinkedIn profiles |
| LinkedIn Post Scraper By Keyword | LinkedIn posts matching a brand, product, or keyword |
| LinkedIn Scraper: Posts, Reactions, Comments & Engagement | Post-level reactions, comments, and engagement analytics |
| Twitter Profile Scraper: Sentiment Analyzer | Twitter/X profile data with sentiment scoring |
| Instagram Followers With Mutual Connections Profile | Instagram followers/following with mutual-connection mapping |
| Instagram Related Person By Niche Content Creator Search | Related Instagram creator profiles by niche |
How to integrate LinkedIn Profile Scraper By Similar Profile Finder with your stack
LinkedIn Profile Scraper By Similar Profile Finder works with any language or tool that can call the Apify API or one of Apify's official SDKs.
Python
import csvfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")seed_urls = ["https://www.linkedin.com/in/timbakke/","https://www.linkedin.com/in/janedoe/",]rows = []for url in seed_urls:run = client.actor("scrapio/linkedin-profile-scraper-by-similar-profile-finder").call(run_input={"seedProfileUrls": [url],"similarProfilesDepth": 1,"similarProfileLimit": 25,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():rows.append(item)with open("linkedin_network.csv", "w", newline="", encoding="utf-8") as f:writer = csv.DictWriter(f, fieldnames=["handle", "name", "location", "followers", "discoveryDepth", "seedHandle", "profileUrl"])writer.writeheader()for row in rows:writer.writerow({k: row.get(k) for k in writer.fieldnames})print(f"Saved {len(rows)} profiles across {len(seed_urls)} seed(s) to linkedin_network.csv")
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const seedUrls = ['https://www.linkedin.com/in/timbakke/'];const run = await client.actor('scrapio/linkedin-profile-scraper-by-similar-profile-finder').call({seedProfileUrls: seedUrls,similarProfilesDepth: 1,similarProfileLimit: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const seeds = items.filter((row) => row.isSeed);const discovered = items.filter((row) => !row.isSeed);console.log(`${seeds.length} seed profile(s), ${discovered.length} discovered profile(s)`);
Async and scheduled pipelines
Every run is asynchronous by nature — call() waits for the run to finish and hands back a dataset ID, or you can start a run and poll client.run(runId).get() for status without blocking. For recurring jobs, use Apify's Scheduler to run the same input on a cadence rather than managing your own cron process; there is no actor-specific webhook feature, so fire-and-forget large jobs should poll the run status or dataset item count until the run reaches SUCCEEDED.
🎯 Who Needs LinkedIn Profile Scraper By Similar Profile Finder? (Use Cases & Industries)
🏢 Recruiters and talent sourcers
A recruiter seeds a strong-fit hire's profile URL, sets similarProfilesDepth to 1, and screens the experience and education arrays of every discovered profile for passive candidates who match the same background without ever needing LinkedIn Recruiter seats.
📊 Sales and growth teams
A sales team seeds a closed-won customer's profile and reads location and experience[0].name off each discovered row to route lookalike prospects to the right rep or territory inside their CRM.
📱 Competitive and network intelligence teams
An analyst seeds a competitor's leadership team and re-runs on a schedule, diffing experience[0].name across runs to catch job changes and org moves before they're announced.
🔬 Researchers
Social-network researchers use discoveryDepth, seedHandle, and discoveredVia to build labeled graphs of LinkedIn's own "similar to" recommendations for homophily and diffusion studies, working only from publicly rendered profile data.
Is it legal to scrape LinkedIn?
Scraping publicly accessible LinkedIn data is legal in the United States: in hiQ Labs, Inc. v. LinkedIn Corp., the Ninth Circuit Court of Appeals held in 2019 (on remand after the Supreme Court's 2021 Van Buren decision, reaffirmed by the Ninth Circuit in 2022) that scraping data a website makes publicly available does not violate the Computer Fraud and Abuse Act. Separately, scraping in a way that violates LinkedIn's Terms of Service can still expose you to civil claims like breach of contract — that is a private contract risk, not a criminal one, and it is distinct from the CFAA question the hiQ case addressed. Because profile data (names, locations, employment history) is personal data, any storage or downstream use is also subject to GDPR, CCPA, or other applicable data protection law depending on your jurisdiction and your subjects'. LinkedIn Profile Scraper By Similar Profile Finder returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.
❓ Frequently asked questions
Does LinkedIn Profile Scraper By Similar Profile Finder work without a LinkedIn account?
Yes. The actor never logs in and never uses a session cookie or Voyager auth token — it reads only the public HTML and JSON-LD structured data already rendered on a profile page.
How does it handle LinkedIn's anti-scraping measures?
It runs a fallback ladder per profile: direct fetches through Apify Proxy (with automatic residential-proxy fallback on a block) for up to maxRetries attempts with exponential backoff, then an optional custom third-party fetcher template, then an existing Wayback Machine snapshot, then a fresh Wayback Save Page Now capture as a last resort.
Can I run it at scale without getting blocked?
You can run large seed lists, but the actor fetches profiles sequentially within a single run and each blocked hop retries the full ladder before moving on, so deep, high-limit expansions take proportionally longer and hit LinkedIn's authwall more often as depth increases. Use similarProfileLimit and similarProfilesDepth to bound both cost and run time, and split very large seed lists across multiple parallel runs.
How fresh is the data it returns?
Direct hits are a live fetch on every run. When a hop falls through to the Wayback Machine fallback, the row reflects whatever snapshot the Wayback API has archived, which may be older than the current live page — the source field (direct, custom_fetcher, wayback, wayback_spn) tells you which path returned each row so you can judge freshness per row.
Is it legal to scrape LinkedIn profiles like this?
Public LinkedIn profile scraping was upheld as lawful under the CFAA in hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019, reaffirmed 2022), though LinkedIn's own Terms of Service still prohibit automated access, which is a separate contractual matter from criminal liability.
Which fields work best for AI training and RAG indexing?
For RAG, index the about field and each recommendations[].text entry — they are the highest-density free text on a profile and read naturally as short bios and peer endorsements. For training data, the network-position fields (discoveryDepth, similarProfilesCount, seedHandle) are the most structurally consistent across every row regardless of depth. All fields return as typed primitives or nested JSON objects, so no HTML parsing or normalization is needed before loading them into a model or vector index.
Does it handle personal data under GDPR or CCPA?
The actor extracts only publicly available profile data that LinkedIn itself displays to logged-out visitors — it does not collect private messages, connections lists, or anything behind a login wall. Because names, locations, and employment history are still personal data, the lawful basis for storing, processing, or using that data under GDPR, CCPA, or another applicable regime sits with you as the operator, not with the actor.
Does it work with Claude, ChatGPT, and other AI agent tools?
There is no dedicated MCP server registration for this actor, so it is not a ready-made tool inside an MCP-compatible client out of the box. Any agent framework that can call the Apify API or the apify-client/apify SDK — including custom tools wired into Claude, ChatGPT, or LangChain-style agents — can start a run and read the dataset back. Every row is typed JSON, so no HTML parsing step is needed before it goes into an agent's context window.
What happens when a profile can't be reached at all?
If every rung of the fallback ladder fails for a given hop, the actor writes no row for that profile and does not charge for it — it logs the profile as unavailable and moves to the next item in the queue, so the dataset never contains a fabricated or partially-guessed record.
What does the similarProfileLimit and similarProfilesDepth combination actually control?
similarProfilesDepth sets how many hops the BFS crawl follows outward from your seeds (0–3), while similarProfileLimit caps the total number of discovered, non-seed profiles re-fetched across the whole run regardless of how many hops are available — seeds are always fetched and never count against the cap, and every discovered profile is deduplicated by handle so the same person is never scraped twice even if multiple seeds' networks overlap.
ℹ️ Disclaimer
LinkedIn Profile Scraper By Similar Profile Finder extracts only publicly available data from LinkedIn. This tool is intended for lawful use cases only. Users are responsible for complying with LinkedIn's terms of service and applicable data protection laws in their jurisdiction.