# LinkedIn People Search Scrapper (`zerobreak/linkedin-people-search-scrapper`) Actor

A powerful LinkedIn People Search Scraper that finds accurate profiles by name and company. Ideal for recruitment, sales, and research, it delivers clean, structured data with a fast two-step search system and easy JSON input. Perfect for bulk LinkedIn people lookup and profile extraction.

- **URL**: https://apify.com/zerobreak/linkedin-people-search-scrapper.md
- **Developed by:** [ZeroBreak](https://apify.com/zerobreak) (community)
- **Categories:** Lead generation
- **Stats:** 109 total users, 4 monthly users, 88.2% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $9.99 / 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 People Search Scraper

Find and extract profile information for people within specific companies using their names. Perfect for recruitment, sales prospecting, and professional networking.

### Features

- ✅ Search for people by name within companies
- ✅ Batch process multiple searches at once
- ✅ Extract complete profile information
- ✅ JSON-based structured input
- ✅ Accurate company-specific results
- ✅ Export in multiple formats

### How It Works

**Two-Step Process:**

1. **Generate Snapshot ID**: Submit search criteria (company + person's name)
2. **Fetch Data**: After 30 seconds, retrieve the profile results

This method ensures accurate matching and prevents timeouts when searching for multiple people.

### Input

#### Required Fields

- **Action**: Generate Snapshot ID or Fetch Data

#### For Generate Snapshot ID

- **People Search Data** (required): JSON array containing search objects

Each search object must include:

- `url`: LinkedIn company page URL
- `first_name`: Person's first name
- `last_name`: Person's last name

#### For Fetch Data

- **Snapshot ID** (required): The ID from the generate step

### Input Format

The search data must be valid JSON. Here's the structure:

```json
[
  {
    "url": "https://www.linkedin.com/company/company-name/",
    "first_name": "John",
    "last_name": "Doe"
  }
]
```

### Input Examples

#### Example 1: Single Search

```json
{
  "action": "generate_snap_id",
  "search_data": "[\n  {\n    \"url\": \"https://www.linkedin.com/company/microsoft/\",\n    \"first_name\": \"Satya\",\n    \"last_name\": \"Nadella\"\n  }\n]"
}
```

#### Example 2: Multiple Searches (Copy-Paste Ready)

```json
[
  {
    "url": "https://www.linkedin.com/company/microsoft/",
    "first_name": "Satya",
    "last_name": "Nadella"
  },
  {
    "url": "https://www.linkedin.com/company/google/",
    "first_name": "Sundar",
    "last_name": "Pichai"
  },
  {
    "url": "https://www.linkedin.com/company/apple/",
    "first_name": "Tim",
    "last_name": "Cook"
  },
  {
    "url": "https://www.linkedin.com/company/meta/",
    "first_name": "Mark",
    "last_name": "Zuckerberg"
  }
]
```

#### Example 3: Executive Team Search

```json
[
  {
    "url": "https://www.linkedin.com/company/tesla/",
    "first_name": "Elon",
    "last_name": "Musk"
  },
  {
    "url": "https://www.linkedin.com/company/tesla/",
    "first_name": "Zachary",
    "last_name": "Kirkhorn"
  },
  {
    "url": "https://www.linkedin.com/company/tesla/",
    "first_name": "Franz",
    "last_name": "von Holzhausen"
  }
]
```

#### Example 4: Fetch Data (Wait 30 seconds!)

```json
{
  "action": "fetch_data",
  "snap_id": "linkedin_people_search_s_people456"
}
```

### Data Extracted

#### Profile Information

- Full name
- Profile URL
- Current job title
- Current company
- Location (city, country)
- Profile headline
- Profile picture
- Connection degree

#### Professional Details

- Work experience summary
- Education background
- Number of connections
- Profile summary/about section

#### Company Context

- Company they work for
- Department/division
- Years at company
- Previous roles at same company

### Example Output

```json
{
  "name": "Satya Nadella",
  "profile_url": "https://www.linkedin.com/in/satyanadella/",
  "headline": "Chairman and CEO at Microsoft",
  "current_position": "Chairman and CEO",
  "company": "Microsoft",
  "company_url": "https://www.linkedin.com/company/microsoft/",
  "location": "Redmond, Washington, United States",
  "connections": "500+",
  "profile_picture": "https://media.licdn.com/dms/image/...",
  "about": "Satya Nadella is Chairman and Chief Executive Officer of Microsoft. Before being named CEO in February 2014, Satya held leadership roles in both enterprise and consumer businesses across the company...",
  "experience_summary": [
    {
      "title": "Chairman and CEO",
      "company": "Microsoft",
      "duration": "Feb 2014 - Present"
    }
  ],
  "education": [
    {
      "school": "University of Chicago Booth School of Business",
      "degree": "MBA"
    }
  ],
  "search_query": {
    "first_name": "Satya",
    "last_name": "Nadella",
    "company_url": "https://www.linkedin.com/company/microsoft/"
  }
}
```

### Step-by-Step Guide

#### 1. Prepare Your Search Data

Create a JSON array with your search criteria. Each object needs:

- Company LinkedIn URL
- Person's first name
- Person's last name

**Tips:**

- Use official company page URLs
- Use the name as it appears on LinkedIn
- Check spelling carefully

#### 2. Generate Snapshot ID

- Set action to "Generate Snapshot ID"
- Paste your JSON into the search_data field
- Run the actor
- **Copy the snapshot ID from results**

#### 3. Wait 30 Seconds

Set a timer! The search process needs time to find and match profiles.

#### 4. Fetch Your Results

- Set action to "Fetch Data"
- Paste your snapshot ID
- Run the actor
- Profile data appears in your dataset!

### Important Notes

⚠️ **JSON Format Required**
The search data MUST be valid JSON. Use quotes around all strings, and ensure proper formatting.

⚠️ **30-Second Wait Minimum**
Always wait at least 30 seconds between generating and fetching data.

⚠️ **Exact Names Work Best**
Use the exact first and last name as it appears on the person's LinkedIn profile.

⚠️ **Company URLs Must Be Accurate**
Use the official LinkedIn company page URL, not profile URLs or other pages.

### Use Cases

#### Recruitment & HR

- Find candidates at specific companies
- Research potential hires
- Verify employment information
- Build talent pipelines
- Competitive talent analysis

#### Sales & Business Development

- Identify decision makers
- Find contacts at target accounts
- Build prospect lists
- Verify contact information
- Account mapping

#### Research & Investigation

- Verify professional backgrounds
- Company leadership research
- Due diligence investigations
- Market research
- Competitive intelligence

#### Networking

- Find alumni at companies
- Identify mutual connections
- Research people before meetings
- Conference attendee research

### JSON Format Guide

#### Basic Structure

```json
[
  {
    "url": "company_url_here",
    "first_name": "FirstName",
    "last_name": "LastName"
  }
]
```

#### Rules for Valid JSON

✅ **Correct:**

```json
[
  {
    "url": "https://www.linkedin.com/company/microsoft/",
    "first_name": "John",
    "last_name": "Doe"
  }
]
```

❌ **Incorrect** (missing quotes):

```json
[
  {
    url: https://www.linkedin.com/company/microsoft/,
    first_name: John,
    last_name: Doe
  }
]
```

❌ **Incorrect** (missing commas):

```json
[
  {
    "url": "https://..."
    "first_name": "John"
    "last_name": "Doe"
  }
]
```

#### Testing Your JSON

Before running the actor, validate your JSON:

1. Copy your JSON
2. Visit [JSONLint.com](https://jsonlint.com/)
3. Paste and validate
4. Fix any errors shown

### Tips for Best Results

#### Name Variations

If you're unsure of the exact name spelling, try variations:

```json
[
  {
    "url": "https://www.linkedin.com/company/microsoft/",
    "first_name": "Bill",
    "last_name": "Gates"
  },
  {
    "url": "https://www.linkedin.com/company/microsoft/",
    "first_name": "William",
    "last_name": "Gates"
  }
]
```

#### Common Name Handling

For common names, you might get multiple results. The output will include all matches, and you can filter by:

- Job title
- Location
- Experience level
- Profile picture (manual verification)

#### International Names

- Use the name as written on LinkedIn
- Include accents and special characters
- For names with prefixes (van, de, von), try both with and without

#### Company Selection

- Use main company page, not divisions
- For large companies, results are more reliable
- Acquired companies: use current parent company URL

### Batch Processing Tips

#### Optimal Batch Size

- Recommended: 10-50 searches per run
- Maximum: Up to 100 searches
- Larger batches: Split into multiple runs

#### Organizing Results

Export and organize by:

- Company
- Department
- Job level
- Location

### Common Questions

**Q: What if I get multiple results for one search?**
A: Common names may return several profiles. Use additional criteria (title, location) to identify the correct person.

**Q: Can I search without a company URL?**
A: No, the company URL is required to narrow down results and ensure accuracy.

**Q: What if the person doesn't work at that company?**
A: You may get no results or profiles of people with similar names at that company.

**Q: How accurate is the matching?**
A: Very accurate when using exact names. Variations in spelling may affect results.

**Q: Can I search for people who left the company?**
A: This searches current employees. For past employees, the results may vary.

**Q: Does capitalization matter?**
A: No, "John" and "john" will work the same way.

**Q: What about middle names?**
A: Only use first and last name. Middle names or initials may reduce match accuracy.

### Troubleshooting

#### "Invalid JSON format" Error

**Cause**: Your JSON syntax is incorrect

**Solutions:**

- Check all strings have quotes: `"text"`
- Verify commas between properties
- Ensure brackets are properly closed
- Use a JSON validator

#### No Results Found

**Possible Reasons:**

- Name spelling doesn't match LinkedIn profile
- Person doesn't work at that company
- Profile is private or hidden
- Company URL is incorrect

**Solutions:**

- Try name variations (Bill vs William)
- Verify person's employment on LinkedIn
- Check company URL is correct
- Try common nicknames

#### "Data not ready" Error

**Cause**: Fetched too soon

**Solution**: Wait longer (45-60 seconds for large batches)

#### Partial Results

**Cause**: Some searches may fail while others succeed

**Solution**: Check individual results and re-run failed searches

### Data Quality Tips

#### Verify Results

- Check profile pictures for visual confirmation
- Verify job titles match expectations
- Confirm location makes sense
- Review experience timeline

#### Handle Duplicates

- Multiple profiles may exist for same person
- Compare profile completeness
- Check most recent activity
- Verify with mutual connections

### Privacy & Ethics

#### Responsible Use

- Only search for publicly visible profiles
- Respect LinkedIn's terms of service
- Don't use for spam or harassment
- Comply with data protection laws (GDPR, CCPA)

#### Data Handling

- Store data securely
- Don't share without consent
- Use for legitimate business purposes only
- Delete data when no longer needed

#### Best Practices

- Be transparent about data collection
- Respect opt-out requests
- Follow applicable regulations
- Use data ethically

### Data Export Options

#### Available Formats

- **JSON**: For databases and applications
- **CSV**: For Excel and CRM systems
- **Excel**: Ready-to-use spreadsheets
- **XML**: For system integration

#### Export Uses

- Import to CRM (Salesforce, HubSpot)
- Build prospect databases
- Create contact lists
- Populate recruiting systems
- Generate reports

### Pricing

- Charged per successful profile match
- Failed searches not charged
- Snapshot IDs valid for 24 hours
- No limit on batch size

### Advanced Techniques

#### Department Research

Search multiple people in same department:

```json
[
  {
    "url": "https://www.linkedin.com/company/google/",
    "first_name": "Sundar",
    "last_name": "Pichai"
  },
  {
    "url": "https://www.linkedin.com/company/google/",
    "first_name": "Ruth",
    "last_name": "Porat"
  }
]
```

#### Competitive Analysis

Map competitor's team structure:

```json
[
  {
    "url": "https://www.linkedin.com/company/competitor/",
    "first_name": "CEO_FirstName",
    "last_name": "CEO_LastName"
  },
  {
    "url": "https://www.linkedin.com/company/competitor/",
    "first_name": "CTO_FirstName",
    "last_name": "CTO_LastName"
  }
]
```

#### Alumni Networks

Find where former colleagues work now:

```json
[
  {
    "url": "https://www.linkedin.com/company/new-company-1/",
    "first_name": "Former",
    "last_name": "Colleague"
  },
  {
    "url": "https://www.linkedin.com/company/new-company-2/",
    "first_name": "Another",
    "last_name": "Alumni"
  }
]
```

### Integration Ideas

#### CRM Integration

- Export to CSV
- Import to Salesforce/HubSpot
- Enrich existing contact records
- Automate lead scoring

#### Recruiting Systems

- Build candidate databases
- Track passive candidates
- Verify applications
- Source for open positions

#### Sales Intelligence

- Build account maps
- Identify champions
- Track job changes
- Warm introduction paths

### Support

#### Getting Help

1. **Check Logs**: Detailed error messages in run logs
2. **Validate JSON**: Use online validators
3. **Review Examples**: Compare with working examples
4. **Test Small**: Start with 1-2 searches
5. **Contact Support**: Reach out through Apify for technical issues

#### Common Support Requests

- JSON formatting help
- Name matching issues
- Batch size optimization
- Export format questions
- Integration guidance

### Best Practices Checklist

✅ Validate JSON before submitting
✅ Use exact names from LinkedIn
✅ Verify company URLs are correct
✅ Wait full 30 seconds before fetching
✅ Test with small batches first
✅ Export results regularly
✅ Use data responsibly and ethically
✅ Keep snapshot IDs for 24 hours
✅ Review results for accuracy
✅ Document your search criteria

### Success Stories

#### Recruitment Team

"We reduced candidate research time by 70% using bulk searches for target companies."

#### Sales Team

"Built accurate contact lists for 50+ target accounts in minutes instead of days."

#### Research Team

"Verified executive information for due diligence reports 10x faster."

***

**Find the right people at the right companies! 🔍**

# Actor input Schema

## `action` (type: `string`):

Choose whether to generate a snapshot ID or fetch data

## `snap_id` (type: `string`):

Snapshot ID to fetch data (required for fetch_data action). ⚠️ Wait 30 seconds after generating.

## `search_data` (type: `string`):

JSON array of objects with url, first_name, and last_name (required for generate_snap_id action)

## Actor input object example

```json
{
  "action": "generate_snap_id",
  "snap_id": "linkedin_people_search_s_people456",
  "search_data": "[\n  {\n    \"url\": \"https://www.linkedin.com/company/microsoft/\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\"\n  },\n  {\n    \"url\": \"https://www.linkedin.com/company/google/\",\n    \"first_name\": \"Jane\",\n    \"last_name\": \"Smith\"\n  }\n]"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "action": "generate_snap_id",
    "snap_id": "",
    "search_data": `[
  {
    "url": "https://www.linkedin.com/company/microsoft/",
    "first_name": "John",
    "last_name": "Doe"
  }
]`
};

// Run the Actor and wait for it to finish
const run = await client.actor("zerobreak/linkedin-people-search-scrapper").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 = {
    "action": "generate_snap_id",
    "snap_id": "",
    "search_data": """[
  {
    \"url\": \"https://www.linkedin.com/company/microsoft/\",
    \"first_name\": \"John\",
    \"last_name\": \"Doe\"
  }
]""",
}

# Run the Actor and wait for it to finish
run = client.actor("zerobreak/linkedin-people-search-scrapper").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 '{
  "action": "generate_snap_id",
  "snap_id": "",
  "search_data": "[\\n  {\\n    \\"url\\": \\"https://www.linkedin.com/company/microsoft/\\",\\n    \\"first_name\\": \\"John\\",\\n    \\"last_name\\": \\"Doe\\"\\n  }\\n]"
}' |
apify call zerobreak/linkedin-people-search-scrapper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zerobreak/linkedin-people-search-scrapper"
        }
    }
}
```

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/Xm9eZyMFHhMHdfMMW/builds/b6N66kbJ4cd1mT9Jb/openapi.json
