LinkedIn Profile & Company Data Extractor avatar

LinkedIn Profile & Company Data Extractor

Pricing

Pay per usage

Go to Apify Store
LinkedIn Profile & Company Data Extractor

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

Richard P

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

6 days ago

Last modified

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 sameAs or 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

FieldTypeDefaultDescription
companyUrlsstring[]["https://www.linkedin.com/company/microsoft/"]LinkedIn company page URLs
profileUrlsstring[][]LinkedIn public profile URLs
includeJobsbooleantrueWhether to fetch job listings
maxJobsinteger20Max 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

FieldTypeDescription
typestring"company"
companyNamestringCompany name
linkedinUrlstringLinkedIn URL
slugstringURL slug
industrystringIndustry
companySizestringEmployee count / range
headquartersstringHQ location
websitestringCompany website
descriptionstringCompany description
followersintegerLinkedIn followers
specialtiesstring[]Specialty tags
jobsobject[]Job listings (if requested)
scrapedAtstringISO 8601 timestamp

Profile Record Fields

FieldTypeDescription
typestring"profile"
namestringFull name
headlinestringProfile headline
locationstringLocation
aboutstringAbout section
experienceobject[]Work experience
educationobject[]Education
connectionsCountintegerConnection count
linkedinUrlstringLinkedIn URL
scrapedAtstringISO 8601 timestamp

Job Entry Fields (inside jobs array)

FieldTypeDescription
titlestringJob title
locationstringJob location
postedDatestringDate posted
descriptionstringJob description
employmentTypestringFull-time, part-time, etc.
senioritystringSeniority level

Technical Approach

  1. JSON-LD — primary data source. Parse script[type="application/ld+json"] tags for Organization, Corporation, Person, and JobPosting schemas.
  2. Meta tags — secondary source. Extract OG and standard meta tags.
  3. Visible HTML — tertiary source. Regex patterns and CSS selectors for fields not in structured data.
  4. Rate limiting — 3.5s delay between requests with exponential backoff on 429 responses.
  5. Google Cache fallback — if the direct LinkedIn fetch fails, tries webcache.googleusercontent.com.
  6. Graceful abort — listens for the Apify ABORTING event 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 dependencies
pip install -r requirements.txt
# Run locally with Apify CLI
apify run --purge

Deployment

$apify push

Input Schema

See .actor/input_schema.json for the full input specification.