# ✨Mass Linkedin Profile Scraper with Email 📧 (No Cookies) (`dev_fusion/linkedin-profile-scraper`) Actor

🚀 Extract full LinkedIn profile insights: verified email 📧, phone number 📞, work history, education, and more...

- **URL**: https://apify.com/dev_fusion/linkedin-profile-scraper.md
- **Developed by:** [Dev Fusion](https://apify.com/dev_fusion) (community)
- **Categories:** Lead generation
- **Features:** Full permissions
- **Stats:** 63,923 total users, 939 monthly users, 100.0% runs succeeded, 1,713 bookmarks
- **User rating**: 2.99 out of 5 stars

## Pricing

$10.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🚀 LinkedIn Profile Scraper

> A powerful Apify Actor that enriches LinkedIn profiles with comprehensive data extraction, email discovery, and mobile number lookup capabilities.

### 📋 Overview

The LinkedIn Profile Scraper is an enterprise-grade Apify Actor designed to extract comprehensive information from LinkedIn profiles. It automatically enriches profile data with contact information, work history, education, skills, and more, making it an essential tool for lead generation, recruitment, market research, and sales outreach.

**Key Highlights:**

- ✅ **No LinkedIn Cookies Required** – Operates without authentication cookies
- ✅ **Bulk Processing** – Process multiple profiles concurrently
- ✅ **Smart Email Discovery** – Automatically attempts to find email addresses
- ✅ **Mobile Number Lookup** – Exclusive mobile number enrichment for paying users
- ✅ **Structured Output** – Returns normalized, consistent JSON data format

***

### ✨ Features

#### 👤 Comprehensive Profile Data

Extracts complete profile information including:

- **Personal Information**: Full name, headline, summary, profile pictures, location
- **Work Experience**: Current and past positions, companies, job descriptions, durations
- **Education**: Universities, degrees, fields of study, graduation dates
- **Skills & Endorsements**: Professional skills and endorsement counts
- **Additional Data**: Languages, certifications, publications, patents, volunteer work, recommendations

#### 🏢 Company Intelligence

Automatically gathers company information from job history:

- Company name, industry, website, LinkedIn URL
- Company size (headcount range)
- Founded year and company identifiers

#### 📧 Contact Enrichment

- **Email Discovery**: Automatically attempts to find email addresses of the person
- **Mobile Number Lookup**: For paying Apify users, attempts to find mobile phone numbers

#### ⚡ Performance & Reliability

- **Concurrent Processing**: Processes multiple profiles in parallel
- **Error Handling**: Graceful error handling with detailed logging
- **Retry Mechanism**: Automatic retries for failed requests
- **URL Validation**: Automatic validation and normalization of LinkedIn URLs

***

### 🚀 Quick Start

1. **Get Started**: Create an [Apify account](https://apify.com/) if you don't have one
2. **Prepare URLs**: Collect the LinkedIn profile URLs you want to enrich
3. **Run the Actor**: Use the Apify Console UI to run the actor with your profile URLs
4. **Download Results**: Export your enriched data as JSON, CSV, or Excel

***

### 🛠️ Usage

#### Prerequisites

- An [Apify account](https://apify.com/)
- LinkedIn profile URLs you want to enrich

#### Input Format

The actor accepts a JSON input with an array of LinkedIn profile URLs:

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates",
    "https://www.linkedin.com/in/jeannie-wyrick-b4760710a"
  ]
}
```

#### Running the Actor

##### Option 1: Apify Console (Recommended)

1. Navigate to the actor on [Apify Console](https://console.apify.com/)
2. Enter your LinkedIn profile URLs in the input field
3. Click **Start** to begin the enrichment process

##### Option 2: API

```bash
curl -X POST \
  'https://api.apify.com/v2/acts/2SyF0bVxmgGr8IVCZ/runs?token=YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "profileUrls": [
      "https://www.linkedin.com/in/williamhgates"
    ]
  }'
```

##### Option 3: Local Development

```bash
## Install dependencies
npm install

## Run locally
npm start

## Or with TypeScript
npm run start:dev
```

***

### 📊 Output Format

The actor returns a structured JSON object for each successfully enriched profile.

#### Main Profile Data

```json
{
  "linkedinUrl": "https://www.linkedin.com/in/williamhgates",
  "linkedinPublicUrl": "https://linkedin.com/in/williamhgates",
  "firstName": "Bill",
  "lastName": "Gates",
  "fullName": "Bill Gates",
  "headline": "Co-chair, Bill & Melinda Gates Foundation",
  "connections": 500,
  "followers": 15000,
  "email": "bill.gates@example.com",
  "mobileNumber": "+1234567890",
  "publicIdentifier": "williamhgates",
  "urn": "ACoAAABxN1IBk82L_jCY2opFKNZpSCCcsr6X1MU"
}
```

#### Work Experience

```json
{
  "jobTitle": "Co-chair",
  "jobStartedOn": "2021-01",
  "jobLocation": "Seattle, Washington, United States",
  "jobStillWorking": true,
  "currentJobDuration": "3 yrs 6 mos",
  "currentJobDurationInYrs": 3.5,
  "companyName": "Bill & Melinda Gates Foundation",
  "companyIndustry": "Non-profit Organizations",
  "companyWebsite": "https://www.gatesfoundation.org",
  "companyLinkedin": "https://www.linkedin.com/company/gatesfoundation",
  "companySize": "1001-5000",
  "experiences": [
    {
      "companyId": "12345",
      "companyUrn": "urn:li:fsd_company:12345",
      "companyName": "Bill & Melinda Gates Foundation",
      "title": "Co-chair",
      "jobDescription": "Leading foundation initiatives, Strategic planning",
      "jobStartedOn": "2021-01",
      "jobEndedOn": null,
      "jobStillWorking": true,
      "jobLocation": "Seattle, Washington, United States",
      "companyWebsite": "https://www.gatesfoundation.org",
      "companyIndustry": "Non-profit Organizations",
      "companySize": "1001-5000"
    }
  ]
}
```

#### Additional Data Fields

The output includes comprehensive arrays for:

- `educations`: University, degree, field of study, dates
- `skills`: Professional skills with titles
- `languages`: Languages spoken
- `certifications`: Professional certifications and licenses
- `publications`: Published articles and papers
- `recommendations`: Recommendations received and given
- And many more fields...

#### Export Options

Your enriched data can be:

- Downloaded as JSON
- Accessed via Apify Dataset API
- Exported to other formats (CSV, Excel) via Apify Console

***

### 🎯 Rate Limits & Plan Restrictions

#### Free Plan Users

- **Daily Run Limit**: 10 runs per day
- **Profile Limit**: Maximum 10 LinkedIn profiles per run
- **Execution Method**: UI only (cannot run via API or CLI)
- **Mobile Number Lookup**: Not available

#### Paying Users

- **Daily Run Limit**: 10,000,000 runs per day (effectively unlimited)
- **Execution Method**: UI, API, or CLI
- **Mobile Number Lookup**: Available

***

### 🔍 Error Handling

The actor handles errors gracefully:

- **Invalid URLs**: Automatically skipped with a warning message
- **API Failures**: Individual profile failures don't stop the entire run
- **Timeout Errors**: Clear error messages for timeout issues
- **Rate Limits**: Automatic enforcement with user-friendly messages

#### Error Output Format

```json
{
  "inputUrl": "https://www.linkedin.com/in/invalid-profile",
  "succeeded": false,
  "error": "Profile enrichment API responded with success=false."
}
```

***

### 📈 Performance Tips

1. **Batch Processing**: Process multiple profiles in a single run to maximize efficiency
2. **URL Validation**: Ensure LinkedIn URLs are correctly formatted before submission
3. **Monitor Progress**: Check the Apify Console logs to track processing status

***

### 🔐 Security & Privacy

- **No Cookies Required**: The actor doesn't require LinkedIn authentication cookies
- **Data Privacy**: All data processing complies with Apify's data handling policies

***

### 🆘 Support

For issues, questions, or feature requests:

- **Email**: devfusion70@gmail.com
- **Apify Actor**: [LinkedIn Profile Scraper](https://console.apify.com/actors/2SyF0bVxmgGr8IVCZ)

***

**Made with ❤️ for the LinkedIn data enrichment community**

# Actor input Schema

## `profileUrls` (type: `array`):

Enter the Linkedin URLs of the people, you want to enrich data.

## Actor input object example

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates",
    "http://www.linkedin.com/in/jeannie-wyrick-b4760710a"
  ]
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "profileUrls": [
        "https://www.linkedin.com/in/williamhgates",
        "http://www.linkedin.com/in/jeannie-wyrick-b4760710a"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dev_fusion/linkedin-profile-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "profileUrls": [
        "https://www.linkedin.com/in/williamhgates",
        "http://www.linkedin.com/in/jeannie-wyrick-b4760710a",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("dev_fusion/linkedin-profile-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates",
    "http://www.linkedin.com/in/jeannie-wyrick-b4760710a"
  ]
}' |
apify call dev_fusion/linkedin-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dev_fusion/linkedin-profile-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2SyF0bVxmgGr8IVCZ/builds/l0q6JP9gnNizrogy0/openapi.json
