LinkedIn Profile Scraper avatar

LinkedIn Profile Scraper

Pricing

from $5.20 / 1,000 profile scrapeds

Go to Apify Store
LinkedIn Profile Scraper

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

Automation Lab

Maintained by Community

Actor stats

3

Bookmarked

593

Total users

73

Monthly active users

11 days ago

Last modified

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 success flag and nullable error reason 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

FieldTypeDescription
successBooleantrue only when a usable public profile identity was extracted
errorString or nullFailure reason for unsuccessful rows; null on success
nameString or nullFull name from the profile
linkedinUrlStringCanonical LinkedIn profile URL
headlineStringProfessional headline
locationStringLocation as displayed on the profile
aboutStringAbout/summary section text
followerCountNumberTotal follower count
connectionCountStringConnection count (may show "500+")
profileImageUrlStringURL to the profile photo
currentPositionsArrayCurrent job positions with title, company, startDate
educationArrayEducation entries with institution, degree, startYear, endYear
languagesArrayCompatibility field; currently empty when the public page does not expose languages
websitesArrayWebsites linked on the profile
scrapedAtStringISO 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 planRun startPer 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

  1. 📝 Go to the actor page — Navigate to LinkedIn Profile Scraper on Apify Store.
  2. ▶️ Click "Start" — Open the input configuration panel.
  3. 🔗 Add profile URLs — Paste LinkedIn profile URLs or slugs into the profileUrls field. One URL per line, for example: https://www.linkedin.com/in/williamhgates/.
  4. 🔢 Set max profiles — Optionally adjust maxProfiles to limit how many profiles to scrape (default: 100).
  5. 🚀 Run the scraper — Click "Start" and wait for results. Each profile takes a few seconds.
  6. 📥 Download results — Export your data as JSON, CSV, Excel, or connect it to your workflow via API or webhooks.

Input parameters

ParameterTypeRequiredDefaultDescription
profileUrlsArrayYes—List of LinkedIn profile URLs or slugs to scrape. Accepts full URLs like https://www.linkedin.com/in/williamhgates/ or just the slug williamhgates.
maxProfilesIntegerNo100Maximum 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 ApifyClient
client = 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().items
for profile in dataset:
print(f"{profile['name']} — {profile['headline']}")

cURL

# Start the actor run
curl -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.

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.