LinkedIn Profile Scraper
Pricing
from $5.20 / 1,000 profile scrapeds
LinkedIn Profile Scraper
Extract LinkedIn profile data at scale — name, headline, location, about, work experience, education, follower count, and profile image. No login required. Pure HTTP with residential proxy.
Pricing
from $5.20 / 1,000 profile scrapeds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
3
Bookmarked
593
Total users
73
Monthly active users
11 days ago
Last modified
Categories
Share
Scrape LinkedIn public profiles at scale — no login, no user-provided cookies, no browser. Extract structured data from any LinkedIn profile URL using fast HTTP requests and residential proxies.
What does LinkedIn Profile Scraper do?
LinkedIn Profile Scraper extracts structured data from public LinkedIn profile pages. It works entirely through HTTP requests with residential proxies — no LinkedIn account, login credentials, or user-provided cookies required.
For each profile, the scraper returns:
- A machine-readable
successflag and nullableerrorreason on every row - Full name, headline, and location
- About/summary section
- Follower and connection counts
- Profile image URL
- Current positions with company name, title, and start date
- Education history with institution, degree, and years
- Personal websites exposed by the public profile metadata
- Timestamp of when the data was scraped
The actor uses JSON-LD structured data embedded in LinkedIn's public profile pages, with stable metadata fallbacks. It processes profiles sequentially to reduce blocking and automatically retries failed requests across up to 4 fresh proxy sessions.
Use for engagement-lead enrichment
After collecting LinkedIn profile URLs from engagement workflows, run them through this actor to add headline, location, about text, current positions, education, follower count, websites, and canonical URLs. Use those fields to score fit and personalize outreach before sending sales outreach messages.
Who is it for?
🔍 Recruiters and talent sourcers — Build candidate pipelines by scraping profiles in bulk. Export to your ATS or spreadsheet for easy filtering by headline, location, and experience.
📊 Sales and business development teams — Enrich your prospect lists with up-to-date LinkedIn data. Get headlines, company info, and follower counts to prioritize outreach.
🧪 Market researchers — Analyze workforce trends, job title distributions, and career trajectories across industries at scale.
🤖 Data engineers and developers — Feed structured LinkedIn data into your pipelines, CRMs, or machine learning models via API or webhooks.
📈 Growth hackers and marketers — Identify influencers and thought leaders by follower count, build targeted audience segments, and track competitor teams.
Why use LinkedIn Profile Scraper?
🚫 No login required — Unlike most LinkedIn scrapers, this one works without any LinkedIn account. No risk of account bans or credential management.
⚡ Fast HTTP-based scraping — No headless browser overhead. Profiles are fetched via got-scraping with Cheerio parsing, making it significantly faster and cheaper than browser-based alternatives.
🔄 Automatic retries — LinkedIn occasionally returns 999 status codes as an anti-bot measure. The scraper automatically makes up to 4 attempts per profile with different proxy sessions.
💰 Pay per useful result — The profile event is charged only after a usable profile name and canonical LinkedIn URL are validated. Blocked, login, missing, and unparseable pages produce explicit success: false rows without a profile event charge.
📦 Clean structured output — Every profile is returned as a flat JSON object ready for import into databases, spreadsheets, or APIs.
🔗 Flexible input — Pass full LinkedIn URLs or just profile slugs (e.g., williamhgates). The scraper handles both formats.
Data extraction table
| Field | Type | Description |
|---|---|---|
success | Boolean | true only when a usable public profile identity was extracted |
error | String or null | Failure reason for unsuccessful rows; null on success |
name | String or null | Full name from the profile |
linkedinUrl | String | Canonical LinkedIn profile URL |
headline | String | Professional headline |
location | String | Location as displayed on the profile |
about | String | About/summary section text |
followerCount | Number | Total follower count |
connectionCount | String | Connection count (may show "500+") |
profileImageUrl | String | URL to the profile photo |
currentPositions | Array | Current job positions with title, company, startDate |
education | Array | Education entries with institution, degree, startYear, endYear |
languages | Array | Compatibility field; currently empty when the public page does not expose languages |
websites | Array | Websites linked on the profile |
scrapedAt | String | ISO 8601 timestamp of when the profile was scraped |
How much does it cost to scrape LinkedIn profiles?
LinkedIn Profile Scraper uses Apify's pay-per-event pricing model. A tiered run-start event is charged once, and you pay a tiered profile event only for profiles that pass the useful-profile validation.
| Apify plan | Run start | Per validated profile |
|---|---|---|
| Free | $0.01 | $0.008 |
| Bronze | $0.0095 | $0.0072 |
| Silver | $0.0085 | $0.0064 |
| Gold | $0.0075 | $0.0052 |
| Platinum | $0.006 | $0.004 |
| Diamond | $0.005 | $0.0032 |
Computed actor-charge example: 100 validated profiles cost about $0.81 on Free or $0.7295 on Bronze (run-start charge + 100 profile events). Error rows do not incur the profile event.
Residential proxy costs are included in these actor charges — no separate proxy fee.
How to scrape LinkedIn profiles
- 📝 Go to the actor page — Navigate to LinkedIn Profile Scraper on Apify Store.
- ▶️ Click "Start" — Open the input configuration panel.
- 🔗 Add profile URLs — Paste LinkedIn profile URLs or slugs into the
profileUrlsfield. One URL per line, for example:https://www.linkedin.com/in/williamhgates/. - 🔢 Set max profiles — Optionally adjust
maxProfilesto limit how many profiles to scrape (default: 100). - 🚀 Run the scraper — Click "Start" and wait for results. Each profile takes a few seconds.
- 📥 Download results — Export your data as JSON, CSV, Excel, or connect it to your workflow via API or webhooks.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
profileUrls | Array | Yes | — | List of LinkedIn profile URLs or slugs to scrape. Accepts full URLs like https://www.linkedin.com/in/williamhgates/ or just the slug williamhgates. |
maxProfiles | Integer | No | 100 | Maximum number of profiles to process from the input list. |
Example input:
{"profileUrls": ["https://www.linkedin.com/in/williamhgates/","https://www.linkedin.com/in/satyanadella","jeffweiner08"],"maxProfiles": 50}
Output example
Each scraped profile produces a JSON object with the following structure:
{"success": true,"error": null,"name": "Bill Gates","linkedinUrl": "https://www.linkedin.com/in/williamhgates/","headline": "Chair, Gates Foundation and Founder, Breakthrough Energy","location": "Seattle, Washington, United States","about": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft.","followerCount": 40063481,"connectionCount": "8","profileImageUrl": "https://media.licdn.com/dms/image/...","currentPositions": [{"title": "Co-chair","company": "Gates Foundation","startDate": "2000"},{"title": "Founder","company": "Breakthrough Energy","startDate": "2015"}],"education": [{"institution": "Harvard University","degree": null,"startYear": 1973,"endYear": 1975}],"languages": [],"websites": [],"scrapedAt": "2026-03-21T23:03:09.634Z"}
Results are stored in the default dataset and can be exported in JSON, CSV, XML, Excel, or accessed via the Apify API.
Tips and best practices
💡 Use full URLs when possible — While the scraper accepts bare slugs, full URLs reduce ambiguity and ensure correct profile resolution.
💡 Batch your requests — Running one actor call with 500 profiles is cheaper than 500 individual runs, because you pay the plan-specific start fee only once.
💡 Expect some failures — LinkedIn's anti-bot system occasionally blocks requests with a 999 status code. The scraper retries automatically, but some profiles may still fail. Plan for a 5-10% failure rate on large batches.
💡 Deduplicate your input — Remove duplicate URLs before running to avoid paying for the same profile twice.
💡 Schedule regular runs — Use Apify's built-in scheduler to keep your LinkedIn data fresh. Weekly or monthly scrapes work well for most use cases.
💡 Filter and retry failures — Filter dataset rows with success: false, inspect their error value, and re-run only those URLs. These rows do not incur a profile-scraped event.
Integrations
LinkedIn Profile Scraper connects with your existing tools through Apify's integration ecosystem:
📊 Google Sheets — Automatically push scraped profiles to a Google Sheet. Great for recruiters maintaining candidate trackers.
🗄️ Webhooks — Trigger your backend API whenever a run completes. Process new profile data in real time.
💾 Amazon S3 / Google Cloud Storage — Export datasets directly to cloud storage for data lake ingestion.
📧 Zapier / Make — Connect to 5,000+ apps. For example, scrape a profile and automatically create a HubSpot contact.
🔄 Slack notifications — Get notified in Slack when a scraping batch completes with result counts.
🗃️ Apify Dataset API — Programmatically fetch results in JSON, CSV, or Excel format from any language or platform.
API usage
Call LinkedIn Profile Scraper programmatically using the Apify API. Here are examples in popular languages.
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/linkedin-profile-scraper').call({profileUrls: ['https://www.linkedin.com/in/williamhgates/','https://www.linkedin.com/in/satyanadella',],maxProfiles: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((profile) => {console.log(`${profile.name} — ${profile.headline}`);});
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("automation-lab/linkedin-profile-scraper").call(run_input={"profileUrls": ["https://www.linkedin.com/in/williamhgates/","https://www.linkedin.com/in/satyanadella",],"maxProfiles": 100,})dataset = client.dataset(run["defaultDatasetId"]).list_items().itemsfor profile in dataset:print(f"{profile['name']} — {profile['headline']}")
cURL
# Start the actor runcurl -X POST "https://api.apify.com/v2/acts/automation-lab~linkedin-profile-scraper/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"profileUrls": ["https://www.linkedin.com/in/williamhgates/"],"maxProfiles": 10}'# Fetch results (replace RUN_ID with the actual run ID from the response)curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
Use with Claude AI (MCP)
This actor is available as a tool in Claude AI through the Model Context Protocol (MCP). Add it to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/linkedin-profile-scraper"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/linkedin-profile-scraper"}}}
Example prompts
- "Scrape the LinkedIn profile for Bill Gates and give me a summary of his current roles and background."
- "Get LinkedIn data for these 10 profile URLs and create a comparison table of their headlines and locations."
- "Pull LinkedIn profiles for the leadership team at OpenAI and tell me about their education backgrounds."
Learn more in the Apify MCP documentation.
Data handling, AI, and support
This Actor does not use AI models or send inputs/results to an AI provider. It requests only the public LinkedIn profile URLs supplied by the user and stores results in the run's Apify dataset; it has no external result database or Actor-side cache. Dataset and log retention follow the user's Apify account storage settings, and users can delete runs and datasets with Apify's storage controls. Do not submit credentials, private profile data, or sensitive personal data as input.
LinkedIn is a third-party source and may change or block its public pages. This Actor is independently operated and is not affiliated with, endorsed by, or sponsored by LinkedIn. For Actor support, use the issue/support channel on the Actor's Apify Store page and include the run ID plus a sanitized example URL.
Legality
Scraping publicly available data is generally considered legal based on the 2022 US Ninth Circuit ruling in hiQ Labs v. LinkedIn, which confirmed that scraping public profiles does not violate the Computer Fraud and Abuse Act (CFAA).
This actor only accesses publicly visible LinkedIn profile pages — the same data any visitor can see without logging in. It does not bypass any authentication, use stolen credentials, or access private data.
However, scraping may still violate LinkedIn's Terms of Service. Users are responsible for ensuring their use of scraped data complies with applicable laws including GDPR, CCPA, and other data protection regulations.
For more details, see Apify's guide on the legality of web scraping.
FAQ — Frequently asked questions
Q: Do I need a LinkedIn account to use this scraper?
No. LinkedIn Profile Scraper works entirely without login credentials. It accesses public profile pages through residential proxies, so no LinkedIn account is needed.
Q: Why did some profiles return no data?
LinkedIn's anti-bot system sometimes returns a 999 status code, a login page, or a challenge page. The scraper makes up to 4 attempts with different proxy sessions. If it still cannot validate a usable profile identity, it returns success: false with an error reason and does not charge the profile event. Try re-running only those failed URLs.
Q: Can I scrape private profiles or profiles behind a login wall?
No. This scraper only extracts data from publicly visible profiles. If a profile requires signing in to view, it cannot be scraped by this actor.
Q: How fast is the scraping?
Each profile takes approximately 2-5 seconds to scrape, including retries. Profiles are processed sequentially to avoid triggering LinkedIn's rate limits. A batch of 100 profiles typically completes in 5-10 minutes.
Q: What format can I export the data in?
Results can be exported as JSON, CSV, XML, Excel (XLSX), or accessed directly through the Apify API. You can also push data to Google Sheets, webhooks, or cloud storage.
Q: Why does connectionCount show as a string?
LinkedIn displays connection counts differently depending on the profile. Some show exact numbers, others show "500+". The field is kept as a string to preserve this original formatting.
Related scrapers
If you find LinkedIn Profile Scraper useful, check out these related actors from automation-lab:
🏢 LinkedIn Company Scraper — Scrape company pages for description, employee count, industry, and specialties.
💼 LinkedIn Jobs Scraper — Search and extract LinkedIn job listings with title, company, location, and description.
🔍 LinkedIn Jobs Enrichment — Enrich LinkedIn job postings with additional details and structured data.
📸 Instagram Scraper — Extract posts, profiles, and hashtag data from Instagram.
🐦 Twitter Scraper — Scrape tweets, user profiles, and search results from Twitter/X.
💙 Bluesky Scraper — Extract posts and profiles from Bluesky social network.
🎵 TikTok Scraper — Scrape TikTok videos, user profiles, and hashtag content.