# LinkedIn Person Search | X-Ray | No Login | Bulk (`aeonkosmos/linkedin-person-search`) Actor

Find LinkedIn profiles by name and company. No login or cookies. Free accounts receive 10 shared result credits; honest feedback automatically unlocks 50 supporter credits for 30 days.

- **URL**: https://apify.com/aeonkosmos/linkedin-person-search.md
- **Developed by:** [Eugene Volper](https://apify.com/aeonkosmos) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 3 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Person Search — Find Profile by Name | X-Ray Search

Find anyone's LinkedIn profile by name and company. X-ray search — no login, no cookies, zero ban risk.

**No LinkedIn account needed | 4 search patterns | Bulk search up to 1000 names**

Free Apify accounts receive 100 starter results shared across all eight Actors. The private links in `SUPPORTER_ACCESS` let a user submit honest feedback for 500 additional results valid for 30 days, or report a reproducible bug for 500 additional results after bug confirmation. No public review or positive feedback is required. Any paid Apify plan is uncapped by this internal result allowance; normal Apify platform and Actor charges still apply.

> **Not a scraper.** We use X-ray search — the same technique recruiters use manually, but automated. We never touch LinkedIn's servers. There's nothing for LinkedIn to block.

***

### LinkedIn Profile Search by Name — How It Works

Enter a person's name (and optionally their company) to find their LinkedIn profile. The tool uses X-ray search to find profiles through publicly indexed data — the same technique recruiters have used for years, now automated.

1. Enter the person's full name
2. Optionally add their company name (helps with common names)
3. Choose search pattern (1 = strictest, 4 = broadest)
4. Get matching profiles with URL, name, headline, and photo

***

### What You Get

Each result returns structured JSON:

| Field | Type | Description |
|-------|------|-------------|
| `url` | string | Full LinkedIn profile URL |
| `name` | string | Full name as shown on LinkedIn |
| `headline` | string | LinkedIn headline (e.g., "CEO at Microsoft") |
| `photoUrl` | string | Profile photo URL |
| `firstName` | string | First name (parsed from metadata) |
| `lastName` | string | Last name (parsed from metadata) |

***

### LinkedIn People Search Patterns

| Pattern | Query Style | Best For |
|---------|-------------|----------|
| 1 (default) | `"Name" "Company"` — both exact | Most precise results |
| 2 | `"Name" Company` — name exact, company loose | Slightly broader |
| 3 | `Name Company` — no quotes | Maximum flexibility |
| 4 | `"Name"` only — ignores company | Name-only search |

**Start with Pattern 1** and broaden only if you need more results.

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `name` | string | Yes\* | — | Full name to search for |
| `company` | string | No | `""` | Company name to narrow results |
| `personPattern` | string | No | `"1"` | Search pattern (1-4) |
| `personCountries` | string | No | `""` | Comma-separated country codes |
| `bulkNames` | string | No\* | — | Bulk mode: one person per line |
| `bulkDelayMs` | integer | No | `1500` | Delay between bulk searches (ms) |

\*Either `name` or `bulkNames` is required.

***

### Find LinkedIn Profile by Name and Company — Examples

#### Find a Specific Person

```json
{
    "name": "Satya Nadella",
    "company": "Microsoft"
}
```

**Result:**

```json
{
    "url": "https://www.linkedin.com/in/satyanadella",
    "name": "Satya Nadella",
    "headline": "Chairman and CEO at Microsoft",
    "photoUrl": "https://media.licdn.com/...",
    "firstName": "Satya",
    "lastName": "Nadella"
}
```

#### Search Across Multiple Countries

```json
{
    "name": "John Smith",
    "company": "Deloitte",
    "personCountries": "us, uk, de"
}
```

#### Bulk Search — 1000 Names at Once

```json
{
    "bulkNames": "Satya Nadella, Microsoft\nTim Cook, Apple\nJane Smith\nBob Wilson, Google, us"
}
```

#### Name-Only Search (Pattern 4)

```json
{
    "name": "Elon Musk",
    "personPattern": "4"
}
```

***

### LinkedIn People Finder — Use Cases

- **Sales prospecting** — Find decision-makers at target companies by name
- **Recruiting / X-ray search** — Automate the LinkedIn X-ray search recruiters do manually
- **CRM enrichment** — Match names in your CRM to LinkedIn profile URLs
- **Lead list building** — Build prospect lists from conference attendee lists or directories
- **Conference prep** — Look up speakers and attendees before events
- **Due diligence** — Verify people's professional identities
- **Competitive intelligence** — Find specific people at competitor companies

***

### LinkedIn Sales Navigator Alternative — Compare Costs

| Feature | LinkedIn Sales Navigator | This Tool |
|---------|--------------------------|-----------|
| Monthly cost | $79.99-$149.99/mo | **Pay per search query plus per result** |
| LinkedIn account needed | Yes (premium) | **No** |
| Account ban risk | N/A (official) | **Zero** |
| Breaks when LinkedIn updates | Rarely | **Never** |
| Speed per 10 results | Manual clicking | **< 5 seconds** |
| API access | No | **Yes** |
| Bulk search | Manual | **Up to 1000 names** |

***

### Reliable LinkedIn Profile Finder

- **Incremental saving** — Every profile is saved the moment it's found. Run stops? You keep everything.
- **Automatic deduplication** — Same profile URL never appears twice across countries.
- **Retry with backoff** — Transient failures retried automatically (3 attempts with exponential backoff).
- **Stable infrastructure** — Not dependent on LinkedIn's page structure. Updates don't affect us.

***

### API Integration

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("your_api_token")
run = client.actor("aeonkosmos/linkedin-person-search").call(run_input={
    "name": "Jane Smith",
    "company": "Google"
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['name']} — {item['url']}")
```

#### JavaScript

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

const client = new ApifyClient({ token: 'your_api_token' });
const run = await client.actor('aeonkosmos/linkedin-person-search').call({
    name: 'Jane Smith',
    company: 'Google'
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/aeonkosmos~linkedin-person-search/runs" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_token" \
  -d '{"name":"Jane Smith","company":"Google"}'
```

#### Batch Processing (Python — CSV of Names)

```python
import csv
from apify_client import ApifyClient

client = ApifyClient("your_api_token")

with open("prospects.csv") as f:
    for row in csv.DictReader(f):
        run = client.actor("aeonkosmos/linkedin-person-search").call(run_input={
            "name": row["name"],
            "company": row.get("company", ""),
        })
        items = client.dataset(run["defaultDatasetId"]).list_items().items
        if items and items[0].get("url"):
            print(f"Found: {row['name']} → {items[0]['url']}")
```

***

### Tips for Best Results

1. **Add company name** — drastically improves accuracy for common names
2. **Start with Pattern 1** — broaden only if too few results
3. **Use country codes** — helps narrow results geographically
4. **Bulk mode for lists** — up to 1000 names per run, much cheaper than individual runs
5. **Results are deduplicated** — same URL never appears twice across countries

***

### Limitations (Honest)

- **Results are not 100% accurate** — common names may return multiple people. Manual review recommended.
- **Returns up to 10 profiles per name** — you're charged per search query plus per result
- **Returns URLs + basic info only** — not full profile data (experience, education, email)
- **No email enrichment** — pair with an email finder tool if needed
- Results come from publicly indexed data — very new profiles may not appear yet

***

### FAQ

**Q: How do I find someone's LinkedIn profile by name?**
A: Enter their full name and optionally their company. The tool searches publicly indexed data and returns matching LinkedIn profiles with URLs, headlines, and photos.

**Q: What if the name is very common?**
A: Add the company name — this drastically narrows results. You can also use country codes and try Pattern 1 (strictest) for the most precise match.

**Q: Can I search LinkedIn without an account?**
A: Yes — no LinkedIn account, cookies, or login needed. The tool finds profiles through publicly indexed data.

**Q: How many names can I search at once?**
A: Up to 1000 names per run in bulk mode. Each name is searched individually and results are pushed to your dataset as they're found.

**Q: What's X-ray search?**
A: X-ray search is a well-known recruiting technique that finds LinkedIn profiles through publicly indexed data rather than LinkedIn's own search. We automate this with structured output and multiple search patterns.

**Q: How is this different from a LinkedIn scraper?**
A: We never touch LinkedIn's servers. LinkedIn can't block what doesn't hit their infrastructure. When LinkedIn cracks down on scrapers, we keep working.

***

### Support

Email: grow@nomad.email
Response time: < 24 hours

***

### Legal

This tool finds LinkedIn profile URLs through publicly indexed data. It does not scrape LinkedIn, access private profiles, bypass authentication, or use LinkedIn credentials.

Users are responsible for ensuring their use of extracted data complies with applicable laws, including GDPR and other data protection regulations.

# Changelog

This Actor's version history is a separate document: https://apify.com/aeonkosmos/linkedin-person-search/changelog.md

# Actor input Schema

## `name` (type: `string`):

Full name of the person to search for. Returns up to 10 matching profiles. You pay per profile returned (see Pricing tab).

## `company` (type: `string`):

Company name to help narrow down results. Highly recommended for common names.

## `personPattern` (type: `string`):

How to construct the search query. Start with Pattern 1 (strictest) — broaden only if too few results.

## `personCountries` (type: `string`):

Comma-separated country codes (e.g. uk, us, de). Each country = separate search. Leave empty for 1 global search.

## `bulkNames` (type: `string`):

One person per line. Format: Name, Company, Country (company and country are optional).

Example:
Satya Nadella, Microsoft
Tim Cook, Apple
Jane Smith
Bob Wilson, Google, us

## `bulkDelayMs` (type: `integer`):

Milliseconds to wait between bulk searches. Lower = faster but may hit rate limits. Does not affect pricing.

## Actor input object example

```json
{
  "name": "Satya Nadella",
  "personPattern": "1",
  "bulkDelayMs": 1500
}
```

# Actor output Schema

## `profiles` (type: `string`):

All LinkedIn profiles found matching your search criteria

# 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 = {
    "name": "Satya Nadella"
};

// Run the Actor and wait for it to finish
const run = await client.actor("aeonkosmos/linkedin-person-search").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 = { "name": "Satya Nadella" }

# Run the Actor and wait for it to finish
run = client.actor("aeonkosmos/linkedin-person-search").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 '{
  "name": "Satya Nadella"
}' |
apify call aeonkosmos/linkedin-person-search --silent --output-dataset

```

## MCP server setup

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

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/CqmOQQC0LiLVxRBvt/builds/OYYLqg9jAEWYsyEI2/openapi.json
