LinkedIn Profile & Company Scraper — Profiles, Skills, Experien
Pricing
Pay per usage
LinkedIn Profile & Company Scraper — Profiles, Skills, Experien
Extract LinkedIn profile data including names, headlines, job titles, experience history, education, skills, certifications, and connection counts. Scrape company pages for industry, size, headquarters, specialties, and employee info. Discover profiles via Google dorking with search terms. Four scra
Pricing
Pay per usage
Rating
0.0
(0)
Developer

Ricardo Akiyoshi
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
an hour ago
Last modified
Categories
Share
LinkedIn Profile & Company Scraper
Extract structured data from LinkedIn profiles and company pages at scale. Discover new profiles via Google dorking. Four scraping strategies with automatic fallback for maximum reliability.
Features
- Profile scraping -- names, headlines, locations, connections, experience history, education, skills, certifications, languages, volunteer experience
- Company scraping -- name, industry, size, headquarters, description, website, specialties, employee count, featured employees
- Google dorking -- discover LinkedIn profiles by search terms (e.g., "CTO fintech San Francisco")
- 4 scraping strategies with automatic fallback:
- LinkedIn public profile/company pages (HTML parsing)
- JSON-LD structured data extraction
- Google search result discovery
- LinkedIn Voyager API (public endpoints)
- Anti-detection -- rotating user agents, configurable delays, residential proxy support
- Auth wall handling -- detects login walls and falls back to alternative strategies
- Deduplication -- automatically skips duplicate profiles/companies
- Pay-per-event -- only pay for successfully scraped profiles ($0.01 each)
Use Cases
Recruiting & Talent Sourcing
Discover candidates matching specific criteria by searching for job titles, skills, and locations. Export structured profiles for your ATS pipeline.
Sales Lead Generation
Build targeted prospect lists by scraping company employees with specific titles. Combine with company data for firmographic targeting.
Competitive Intelligence
Monitor competitor company pages for headcount changes, new hires in key roles, and organizational structure shifts.
Market Research
Analyze workforce trends across industries -- which skills are growing, where talent is concentrating, and what titles companies are creating.
Academic Research
Study professional networks, career trajectories, skill distributions, and labor market dynamics with structured data.
Investor Due Diligence
Research founding teams, track employee growth, and analyze company leadership before investment decisions.
Input
| Field | Type | Default | Description |
|---|---|---|---|
profileUrls | Array | [] | LinkedIn profile URLs or username slugs to scrape |
searchTerms | Array | [] | Search queries for Google dorking discovery |
companyUrls | Array | [] | LinkedIn company URLs or slugs to scrape |
scrapeType | String | profiles | What to scrape: profiles, companies, or both |
maxResults | Integer | 200 | Maximum total results to scrape |
maxSearchResults | Integer | 50 | Max profiles per Google search term |
scrapeExperience | Boolean | true | Extract work experience history |
scrapeEducation | Boolean | true | Extract education history |
scrapeSkills | Boolean | true | Extract listed skills |
scrapeCertifications | Boolean | true | Extract certifications |
maxConcurrency | Integer | 2 | Parallel requests (keep low!) |
requestDelay | Integer | 5 | Seconds between requests |
proxy | Object | (none) | Apify proxy config (STRONGLY recommended) |
Input Examples
Scrape specific profiles
{"profileUrls": ["https://www.linkedin.com/in/satyanadella","https://www.linkedin.com/in/williamhgates","sundarpichai"],"scrapeType": "profiles","maxResults": 10}
Discover software engineers in San Francisco
{"searchTerms": ["software engineer San Francisco","senior developer Python Bay Area"],"scrapeType": "profiles","maxResults": 100,"maxSearchResults": 50,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Scrape company pages
{"companyUrls": ["https://www.linkedin.com/company/google","https://www.linkedin.com/company/microsoft","apple","meta"],"scrapeType": "companies","maxResults": 10}
Find CTOs at fintech companies
{"searchTerms": ["CTO fintech","Chief Technology Officer financial technology","VP Engineering payments"],"scrapeType": "profiles","maxResults": 200,"maxSearchResults": 70,"requestDelay": 8,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Combined profiles and companies
{"profileUrls": ["satyanadella", "williamhgates"],"companyUrls": ["microsoft", "google"],"searchTerms": ["AI researcher"],"scrapeType": "both","maxResults": 50,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output
Profile Output
Each scraped profile is saved to the default dataset:
{"type": "profile","name": "Satya Nadella","headline": "Chairman and CEO at Microsoft","location": "Greater Seattle Area","connections": "500+","currentTitle": "Chairman and CEO","currentCompany": "Microsoft","about": "Passionate about technologies and their impact on the world...","profileImage": "https://media.licdn.com/dms/image/...","experience": [{"title": "Chairman and CEO","company": "Microsoft","startDate": "Feb 2014","endDate": "Present","duration": "12 yrs 1 mo","location": "Redmond, Washington","description": null},{"title": "Executive Vice President, Cloud and Enterprise","company": "Microsoft","startDate": "2011","endDate": "Feb 2014","duration": "3 yrs","location": null,"description": null}],"education": [{"school": "University of Chicago Booth School of Business","degree": "MBA","fieldOfStudy": "Business Administration","startDate": null,"endDate": "1997","grade": null,"activities": null},{"school": "Manipal Institute of Technology","degree": "Bachelor of Engineering","fieldOfStudy": "Electrical Engineering","startDate": null,"endDate": "1988","grade": null,"activities": null}],"skills": ["Cloud Computing","Enterprise Software","Strategy","Leadership","Software Development"],"certifications": [],"languages": [],"volunteerExperience": [],"profileUrl": "https://www.linkedin.com/in/satyanadella","slug": "satyanadella","scrapedAt": "2026-03-01T12:00:00.000Z","strategy": "public-profile"}
Company Output
{"type": "company","name": "Microsoft","industry": "Software Development","size": "10,001+ employees","headquarters": "Redmond, Washington, United States","description": "Every company has a mission. What's ours? To empower every person and every organization...","website": "https://www.microsoft.com","founded": "1975","companyType": "Public Company","specialties": ["Business Software","Developer Tools","Home & Educational Software","Tablets","Search","Advertising","Servers","Cloud Computing"],"employees": "221000","followers": "22000000","logo": "https://media.licdn.com/dms/image/...","featuredEmployees": [{"name": "Satya Nadella","profileUrl": "https://www.linkedin.com/in/satyanadella","slug": "satyanadella"}],"companyUrl": "https://www.linkedin.com/company/microsoft","slug": "microsoft","scrapedAt": "2026-03-01T12:00:00.000Z","strategy": "public-company-page"}
Scraping Strategies
The actor uses four strategies with automatic fallback:
Strategy 1: Public Profile Pages
Scrapes LinkedIn's public-facing profile pages that are visible without login. Parses HTML to extract all profile sections. This is the primary strategy.
Strategy 2: JSON-LD Structured Data
LinkedIn embeds Schema.org JSON-LD data in some pages. When available, this provides clean, structured data that's more reliable than HTML parsing.
Strategy 3: Google Dorking
Uses Google search with site:linkedin.com/in/ to discover profiles matching search terms. Discovered profiles are then scraped using Strategy 1.
Strategy 4: Voyager API
LinkedIn's internal API sometimes returns data for public profiles. Used as a fallback when HTML parsing fails or the auth wall blocks access.
The actor automatically falls through strategies when one fails. For example, if a public profile page shows an auth wall, it falls back to the Voyager API.
Performance Tips
- Always use residential proxies -- LinkedIn aggressively blocks datacenter IPs. Use
"apifyProxyGroups": ["RESIDENTIAL"]. - Start small -- test with 1-2 profiles before scaling to hundreds.
- Increase delay for large scrapes -- set
requestDelayto 8-15 seconds for 100+ profiles. - Keep concurrency low --
maxConcurrency: 1is safest. Only increase to 2-3 with good proxies. - Disable unused sections -- set
scrapeSkills: falseetc. if you only need basic info. - Google dorking limits -- Google shows ~100 results per query. Use specific search terms for better targeting.
Rate Limiting and Blocks
LinkedIn uses aggressive anti-scraping measures:
- HTTP 999 -- LinkedIn's custom "request denied" status code
- HTTP 429 -- Standard rate limiting
- Auth wall -- Redirects to login page for non-authenticated users
- CAPTCHA -- Google may show CAPTCHA for too many dorking queries
This actor handles these by:
- Rotating user agents and headers
- Configurable delays between requests (default 5s)
- Automatic fallback to alternative strategies
- Graceful degradation (saves partial data)
- Residential proxy support
Pricing (Pay Per Event)
This actor uses Apify's pay-per-event model. You are charged $0.01 per profile or company successfully scraped and saved to the dataset. Failed requests are not charged.
Legal Notice
This actor scrapes publicly available LinkedIn data only. No authentication or login is used. Users are responsible for ensuring compliance with LinkedIn's Terms of Service, applicable data protection laws (GDPR, CCPA), and all relevant regulations. This tool is intended for legitimate business purposes such as recruiting, market research, and competitive analysis. Do not use scraped data for spam, harassment, or unauthorized profiling.
Integration — Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("sovereigntaylor/linkedin-profile-scraper").call(run_input={"searchTerm": "linkedin profile","maxResults": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item.get('title', item.get('name', 'N/A'))}")
Integration — JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('sovereigntaylor/linkedin-profile-scraper').call({searchTerm: 'linkedin profile',maxResults: 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => console.log(item.title || item.name || 'N/A'));