# Email to LinkedIn Profile Finder — Find LinkedIn by Email (`b2bsearch/email-to-linkedin`) Actor

Turn email addresses into LinkedIn profiles: profile URL, full name, headline, job title, current company and location. Works for work and Gmail addresses in bulk; add the name beside a work email to find more. $3.20 per 1,000 found; misses and invalid addresses are free. Runs from API or MCP.

- **URL**: https://apify.com/b2bsearch/email-to-linkedin.md
- **Developed by:** [B2B Enrich Search](https://apify.com/b2bsearch) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 linkedin profile founds

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

### What does Email to LinkedIn Profile Finder do?

**Email to LinkedIn Profile Finder** takes a list of email addresses and
returns the LinkedIn profile URL on record for each one, with the person's
name, headline, job title, current company and location. Use it to find
LinkedIn by email for a signup list, a CRM export or a newsletter audience.

- **One narrow row per address**: the profile URL and just enough of the
  card to recognise the person.
- **You pay only for a profile found.** Addresses with no match, invalid
  entries, duplicates and shared mailboxes are free rows that say why.
- **Work and personal addresses** both resolve, Gmail included.
- **Add the name and find more.** Write `Jane Doe <jane@acme.com>` or paste
  two spreadsheet columns, and a work address that is not on record is looked
  up again by name at the address's company. On 150 corporate addresses this
  raised found profiles from 26% to 65%.
- **Up to 1,000 addresses per run**, from the form, the API or an MCP client.
- **A database lookup.** Nothing is crawled while your run is in progress;
  each found row carries a freshness label.

### What data do you get from an email address?

| Field | Example | Notes |
|---|---|---|
| `_status` | `found` | `found`, `not_found`, `ambiguous`, `invalid`, `duplicate`, `role_address`, `profile_removed`, `error` |
| `_input.email` | `Jane Doe <Jane.Doe@acme-example.com>` | the entry exactly as you wrote it |
| `email` | `jane.doe@acme-example.com` | the address we looked up |
| `linkedinUrl` | `https://www.linkedin.com/in/jane-doe-example` | on every `found` row |
| `fullName` | `Jane Doe` | on every `found` row in our test |
| `headline` | `VP Marketing at Acme Example` | when the profile has one |
| `jobTitle` | `VP Marketing` | when a current position is on record |
| `company` | `Acme Example` | current employer name, when on record |
| `companyLinkedinUrl` | `https://www.linkedin.com/company/acme-example` | when the employer has a company page on record |
| `location`, `country` | `Austin, Texas, United States`, `US` | when on record |
| `matchedVia` | `as_given` | how the person was found: `as_given` (the address as written), `gmail_normalized` (another spelling of the same Gmail mailbox) or `name_and_domain` (the name you gave, at the address's company) |
| `matchedEmail` | `jane.doe@acme-example.com` | the spelling on record; absent on `name_and_domain` rows |
| `_freshness` | `fresh_90d` | `fresh_90d`, `updated_1y` or `older` |
| `_matchCandidates` | `3` | only on `ambiguous` rows: how many profiles share the address |
| `_error` | | a plain sentence on every row that is not `found` |

### How to convert email to LinkedIn (3 steps)

1. Paste your email addresses, one per line. If you have names, put each one beside its address.
2. Press **Start** and wait for the run to finish.
3. Export the dataset as CSV, Excel or JSON, or read it through the API.

### How much does it cost to find LinkedIn by email?

| Event | Price | When |
|---|---|---|
| LinkedIn profile found | **$0.0032** ($3.20 per 1,000) | the address resolved to one person and the row carries their profile URL |
| Everything else | **$0** | no match, removed profile, several profiles on one address, invalid entry, duplicate, shared mailbox |

The platform's free $5 monthly credit covers about 1,560 found profiles.
A small per-run start fee may apply; it is shown on the Pricing tab.

### Input

```json
{
  "emails": [
    "jane.doe@acme-example.com",
    "Sam Rivera <sam.rivera+news@gmail.com>",
    "lee.park@acme-example.com, Lee Park",
    "info@acme-example.com"
  ]
}
```

Addresses are cleaned before the lookup: upper case, `mailto:` links, a
display name with the address in angle brackets, and a trailing dot or comma
are all read as the address inside. For Gmail addresses that miss as
written, the Actor tries the same mailbox without the `+tag`, on `gmail.com`
instead of `googlemail.com`, and without dots. It never rewrites addresses
on other domains.

**Names.** A name can sit beside its address in any of these forms:
`Jane Doe <jane@acme.com>`, `jane@acme.com, Jane Doe`, `Jane Doe; jane@acme.com`,
or two columns pasted from a spreadsheet. The address is always tried first.
Only when a work address is not on record is the person looked up by name at
the address's company, and the row is `found` only if first and last name both
match and nobody else at that company does. Such rows say
`matchedVia: name_and_domain`. Names are not used for Gmail and other consumer
mailboxes, where the domain names no employer.

### Output

A found row (charged):

```json
{
  "_status": "found",
  "_input": { "email": "Sam Rivera <sam.rivera+news@gmail.com>" },
  "_freshness": "updated_1y",
  "email": "sam.rivera+news@gmail.com",
  "matchedEmail": "sam.rivera@gmail.com",
  "matchedVia": "gmail_normalized",
  "linkedinUrl": "https://www.linkedin.com/in/sam-rivera-example",
  "fullName": "Sam Rivera",
  "headline": "Staff Engineer at Northwind Example",
  "jobTitle": "Staff Engineer",
  "company": "Northwind Example",
  "companyLinkedinUrl": "https://www.linkedin.com/company/northwind-example",
  "location": "Denver, Colorado, United States",
  "country": "US"
}
```

A miss (free):

```json
{
  "_status": "not_found",
  "_input": { "email": "jane.doe@acme-example.com" },
  "email": "jane.doe@acme-example.com"
}
```

A shared mailbox (free, not looked up):

```json
{
  "_status": "role_address",
  "_input": { "email": "info@acme-example.com" },
  "_error": "info@ is a shared mailbox, not one person's address; it was not looked up"
}
```

### Email to LinkedIn API, MCP and integrations

Run it from the Apify API, from the Apify MCP server in an AI assistant, or
from Make, n8n and Zapier through their Apify connectors. The input is one
array and the output is one flat row per address, so it maps onto a
spreadsheet column without any reshaping.

### Use cases

- **Sales and RevOps**: turn the emails in a CRM or a signup export into
  profile links your team can open before a call.
- **Recruiting**: attach a LinkedIn profile to applicants who left only an
  email address.
- **Marketing**: see which job titles and companies are behind a newsletter
  or waitlist.
- **Developers**: add a profile link to a user record at signup time.

### FAQ

#### How do I find a LinkedIn profile from an email address?

Paste the address into the input and start the run. If the address is on
record for one person, the row comes back with `linkedinUrl` and the
person's name and current role.

#### What is the match rate for email to LinkedIn?

It depends on whether the list has names.

| List | Found |
|---|---|
| Public developer addresses, address only | about 31% (84 of 270) |
| Corporate addresses of engineers, address only | about 26% (39 of 150) |
| The same corporate addresses with the name beside each one | about 65% (97 of 150) |

Measured on our own test samples on 2026-09-30; your list may do better or
worse. In the name-matched rows the person's current company was the expected
one in 55 of 58. A name match can still be a namesake at the same company:
in a larger check that happened in about 2 of 100 such rows, which is why
they are labelled. A lookup with nothing to return costs nothing, so a test
run on your own list costs only what it finds.

#### Am I charged when nothing is found?

No. `not_found`, `profile_removed`, `invalid`, `duplicate`, `role_address`
and `ambiguous` rows are free.

#### What happens when several people share one address?

Some addresses are on record for more than one profile. We cannot tell which
of them you mean, so the row is marked `ambiguous`, shows one candidate and
the number of profiles in `_matchCandidates`, and is not charged.

#### Why are info@ and support@ addresses refused?

A shared mailbox does not belong to one person, so any profile returned for
it would be a guess. These entries come back as free `role_address` rows.

#### Can I run email to LinkedIn in bulk from a CSV?

Paste up to 1,000 addresses per run, or send them as a JSON array through
the API. For a CSV file of any size, use
[Bulk People Enrichment](https://apify.com/b2bsearch/bulk-people-enrichment).

#### Does it need cookies, login or an API key?

No. You do not provide a LinkedIn account, cookies or any key. The Actor
reads from our own database.

#### How fresh is the data?

Each found row carries `_freshness`: `fresh_90d` (record updated within 90
days), `updated_1y` or `older`. People change jobs; open the profile before
you rely on a title.

#### Is it legal to look up a LinkedIn profile by email?

The Actor returns professional profile data from our own database. Whether
your use is lawful depends on what you do with it and where you and the
person are. Read "Disclaimer and permitted use" below.

### Use Email to LinkedIn Profile Finder with AI agents and MCP

This Actor works as a tool for AI agents. Add it to Claude, ChatGPT, Cursor or any other MCP client through the Apify MCP server:

```
https://mcp.apify.com?tools=b2bsearch/email-to-linkedin
```

- **Fast enough for a tool call.** A small request finishes in seconds, so the agent gets its answer inside one call.
- **The agent pays only for results.** Prices are per result (see the pricing section above) and every miss is a free row. Cap what one call may spend with `maxTotalChargeUsd`.
- **Rows explain themselves.** Each row has a `_status`; a row that is not a result says why in `_error`, so the agent can decide what to do next without guessing.

Input an agent can send as is:

```json
{
  "emails": [
    "satya.nadella@microsoft.com"
  ]
}
```

The same Actor is available as a tool in LangChain, CrewAI and the OpenAI Agents SDK, and as a step in n8n, Make and Zapier through the Apify integrations.

### Related Actors: which one should you use?

| Need | Actor |
|---|---|
| Email → LinkedIn profile URL | **Email to LinkedIn** (this Actor) |
| Email → current company and job title | [Email to Company](https://apify.com/b2bsearch/email-to-company) |
| Email → phone numbers on record | [Email to Phone](https://apify.com/b2bsearch/email-to-phone) |
| Email → X (Twitter) profile | [Email to Twitter](https://apify.com/b2bsearch/email-to-twitter) |
| Email → Facebook profile | [Email to Facebook](https://apify.com/b2bsearch/email-to-facebook) |
| Email → full professional profile | [Reverse Email Lookup](https://apify.com/b2bsearch/reverse-email-lookup) |
| LinkedIn URL → full profile | [Profile Lookup](https://apify.com/b2bsearch/profile-lookup) |
| LinkedIn URL → email addresses on record | [LinkedIn Email Finder](https://apify.com/b2bsearch/linkedin-email-finder) |
| LinkedIn URL → phone numbers on record | [LinkedIn to Phone](https://apify.com/b2bsearch/linkedin-to-phone) |
| X (Twitter) handle → email | [Twitter to Email](https://apify.com/b2bsearch/twitter-to-email) |
| X (Twitter) handle → LinkedIn profile | [Twitter to LinkedIn](https://apify.com/b2bsearch/twitter-to-linkedin) |
| X (Twitter) handle → phone numbers on record | [Twitter to Phone](https://apify.com/b2bsearch/twitter-to-phone) |
| Facebook profile → email | [Facebook to Email](https://apify.com/b2bsearch/facebook-to-email) |
| Facebook profile → phone numbers on record | [Facebook to Phone](https://apify.com/b2bsearch/facebook-to-phone) |
| Facebook profile → LinkedIn profile | [Facebook to LinkedIn](https://apify.com/b2bsearch/facebook-to-linkedin) |
| GitHub username → email | [GitHub to Email](https://apify.com/b2bsearch/github-to-email) |
| GitHub username → LinkedIn profile | [GitHub to LinkedIn](https://apify.com/b2bsearch/github-to-linkedin) |
| Name + company domain → work email | [Work Email Finder](https://apify.com/b2bsearch/work-email-finder) |
| Name + company domain → LinkedIn profile | [Name to Profile](https://apify.com/b2bsearch/name-to-profile) |
| Name + company domain → phone numbers on record | [Name to Phone](https://apify.com/b2bsearch/name-to-phone) |
| Handle on any of three networks → full profile | [Social Handle Lookup](https://apify.com/b2bsearch/social-handle-lookup) |
| Company domain → company record | [Domain to Company](https://apify.com/b2bsearch/domain-to-company) |
| Company domain → decision makers | [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers) |
| Company domain → current employees | [Company Employees](https://apify.com/b2bsearch/company-employees) |
| Company domain → former employees | [Former Employees Finder](https://apify.com/b2bsearch/former-employees-finder) |
| Filters → list of people | [People Database Search](https://apify.com/b2bsearch/people-database-search) |
| Filters → list of companies | [Company Database Search](https://apify.com/b2bsearch/company-database-search) |
| CSV of emails, URLs or names → profiles in bulk | [Bulk People Enrichment](https://apify.com/b2bsearch/bulk-people-enrichment) |

### Disclaimer and permitted use

**Independent product.** This Actor is an independent tool. It is not
affiliated with, endorsed by, or sponsored by LinkedIn Corporation.
LinkedIn® is a trademark of its owner and is named here only to describe
the kind of public profile link this Actor returns.

**No platform access.** This Actor does not log in to or crawl LinkedIn.
Every answer comes from our own database of business-contact records. It
never returns passwords, direct messages, or content from accounts that are
not public.

**Permitted use.** Business-to-business purposes only: sales prospecting,
recruiting outreach, CRM enrichment, and checking that a business contact
is who they say they are. You may not use this Actor or its output to:

- stalk, harass, threaten, dox or publicly expose any person;
- identify the person behind a pseudonymous or non-professional account;
- decide on anyone's eligibility for credit, employment, housing or
  insurance. This Actor is not a consumer reporting agency and its output
  is not a consumer report under the U.S. Fair Credit Reporting Act;
- send unsolicited bulk messages, or place autodialed or prerecorded calls
  or texts without the consent the law requires;
- profile people by health, religion, political opinion, sexual
  orientation, ethnicity or union membership;
- build or resell a contact database from the results.

**Your responsibilities.** You decide whom to look up and what to do with
the result. You are responsible for having a lawful basis for that use and
for complying with the laws that apply to you, including GDPR and UK GDPR,
ePrivacy and PECR, CCPA/CPRA, CAN-SPAM, and the TCPA and Do Not Call rules.
Honor every opt-out you receive.

**Removal requests.** To have a person's data removed, open an issue on
this Actor with only the profile link. Nothing else is needed, and the
record is removed from every listing.

**Accuracy.** Records can be incomplete or out of date. Output is provided
as is. Check it before you rely on it.

# Actor input Schema

## `emails` (type: `array`):

One address per line, work or personal, up to 1,000 per run. Put the person's name beside a work address to find more: "Jane Doe <jane@acme.com>" or "jane@acme.com, Jane Doe". You pay $0.0032 per LinkedIn profile found; addresses we cannot match, invalid entries and duplicates come back as free rows that say why.

## Actor input object example

```json
{
  "emails": [
    "satya.nadella@microsoft.com"
  ]
}
```

# Actor output Schema

## `results` (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 = {
    "emails": [
        "satya.nadella@microsoft.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2bsearch/email-to-linkedin").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 = { "emails": ["satya.nadella@microsoft.com"] }

# Run the Actor and wait for it to finish
run = client.actor("b2bsearch/email-to-linkedin").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 '{
  "emails": [
    "satya.nadella@microsoft.com"
  ]
}' |
apify call b2bsearch/email-to-linkedin --silent --output-dataset

```

## MCP server setup

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

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/46jMUELMYodVPcA9a/builds/VC4pkpaVW1slin1lF/openapi.json
