LinkedIn Profile & Company Data Extractor
Pricing
Pay per usage
LinkedIn Profile & Company Data Extractor
Extract company employee lists, decision-maker profiles, job postings, and company page data from LinkedIn. B2B lead generation tool for sales teams and recruiters.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Richard P
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
An Apify Actor for extracting publicly available data from LinkedIn company pages and public profiles. Uses JSON-LD structured data, meta tags, and HTML parsing — no login required.
Features
Company Data Extraction
- Company Name — extracted from JSON-LD, meta tags, and HTML
- Industry — parsed from the company about page
- Company Size — employee count or size range
- Headquarters — location from about section
- Website — from JSON-LD
sameAsor visible links - Description — company summary
- Followers — follower count from interaction statistics
- Specialties — comma/semicolon-separated list
Profile Data Extraction
- Name & Headline — from JSON-LD Person schema, meta tags, HTML
- Location — geographic location
- About — profile summary text
- Experience — work history (company, title, dates, description)
- Education — schools, degrees, dates
- Connections Count — if publicly visible
Job Listing Extraction
- For each company, fetches job postings from LinkedIn's public jobs search
- Extracts: title, location, posted date, description, employment type
- Configurable limit (default 20, max 50)
Input
| Field | Type | Default | Description |
|---|---|---|---|
companyUrls | string[] | ["https://www.linkedin.com/company/microsoft/"] | LinkedIn company page URLs |
profileUrls | string[] | [] | LinkedIn public profile URLs |
includeJobs | boolean | true | Whether to fetch job listings |
maxJobs | integer | 20 | Max job listings per company (max 50) |
Example Input
{"companyUrls": ["https://www.linkedin.com/company/microsoft/","https://www.linkedin.com/company/google/"],"profileUrls": ["https://www.linkedin.com/in/sundarpichai/"],"includeJobs": true,"maxJobs": 10}
Output
Each record is pushed to the Apify dataset. Records have a type field distinguishing companies from profiles.
Company Record Fields
| Field | Type | Description |
|---|---|---|
type | string | "company" |
companyName | string | Company name |
linkedinUrl | string | LinkedIn URL |
slug | string | URL slug |
industry | string | Industry |
companySize | string | Employee count / range |
headquarters | string | HQ location |
website | string | Company website |
description | string | Company description |
followers | integer | LinkedIn followers |
specialties | string[] | Specialty tags |
jobs | object[] | Job listings (if requested) |
scrapedAt | string | ISO 8601 timestamp |
Profile Record Fields
| Field | Type | Description |
|---|---|---|
type | string | "profile" |
name | string | Full name |
headline | string | Profile headline |
location | string | Location |
about | string | About section |
experience | object[] | Work experience |
education | object[] | Education |
connectionsCount | integer | Connection count |
linkedinUrl | string | LinkedIn URL |
scrapedAt | string | ISO 8601 timestamp |
Job Entry Fields (inside jobs array)
| Field | Type | Description |
|---|---|---|
title | string | Job title |
location | string | Job location |
postedDate | string | Date posted |
description | string | Job description |
employmentType | string | Full-time, part-time, etc. |
seniority | string | Seniority level |
Technical Approach
- JSON-LD — primary data source. Parse
script[type="application/ld+json"]tags forOrganization,Corporation,Person, andJobPostingschemas. - Meta tags — secondary source. Extract OG and standard meta tags.
- Visible HTML — tertiary source. Regex patterns and CSS selectors for fields not in structured data.
- Rate limiting — 3.5s delay between requests with exponential backoff on 429 responses.
- Google Cache fallback — if the direct LinkedIn fetch fails, tries
webcache.googleusercontent.com. - Graceful abort — listens for the Apify
ABORTINGevent to stop mid-crawl.
Limitations
Important: LinkedIn is extremely protective of its data. This actor only extracts what is publicly visible without authentication. Many profiles and data fields require a LinkedIn login to access.
- Profile details (experience, education, about) are often only partially visible without login. Profiles with "public" visibility settings yield the most data.
- Job listings are fetched from the public jobs search page. Some companies may require login to view jobs.
- HTML selectors for experience/education sections are fragile — LinkedIn changes class names frequently. JSON-LD parsing is far more reliable.
- Rate limiting — aggressive scraping triggers LinkedIn's rate limits. The actor implements delays and backoff.
- No login/cookie support — this actor never authenticates. For authenticated scraping, consider using the Apify LinkedIn Actors with built-in session management.
Local Development
# Install dependenciespip install -r requirements.txt# Run locally with Apify CLIapify run --purge
Deployment
$apify push
Input Schema
See .actor/input_schema.json for the full input specification.