{
  "data": {
    "id": "XT4TN0dq0BLSbtzyr",
    "actId": "46jMUELMYodVPcA9a",
    "userId": "4P6eiRh7Zh5UTwC9T",
    "startedAt": "2026-10-15T14:50:09.304Z",
    "finishedAt": "2026-10-15T14:50:31.697Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 22155,
      "runTimeSecs": 22.155,
      "computeUnits": 0.024616666666666665,
      "imageSizeBytes": 584294400
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Email to LinkedIn Profile Finder input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"emails\": {\n      \"title\": \"Email addresses (add names to find more)\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"description\": \"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.\",\n      \"prefill\": [\n        \"satya.nadella@microsoft.com\"\n      ],\n      \"maxItems\": 1000\n    }\n  },\n  \"required\": [\n    \"emails\"\n  ]\n}",
    "readme": "## What does Email to LinkedIn Profile Finder do?\n\n**Email to LinkedIn Profile Finder** takes a list of email addresses and\nreturns the LinkedIn profile URL on record for each one, with the person's\nname, headline, job title, current company and location. Use it to find\nLinkedIn by email for a signup list, a CRM export or a newsletter audience.\n\n- **One narrow row per address**: the profile URL and just enough of the\n  card to recognise the person.\n- **You pay only for a profile found.** Addresses with no match, invalid\n  entries, duplicates and shared mailboxes are free rows that say why.\n- **Work and personal addresses** both resolve, Gmail included.\n- **Add the name and find more.** Write `Jane Doe <jane@acme.com>` or paste\n  two spreadsheet columns, and a work address that is not on record is looked\n  up again by name at the address's company. On 150 corporate addresses this\n  raised found profiles from 26% to 65%.\n- **Up to 1,000 addresses per run**, from the form, the API or an MCP client.\n- **A database lookup.** Nothing is crawled while your run is in progress;\n  each found row carries a freshness label.\n\n## What data do you get from an email address?\n\n| Field | Example | Notes |\n|---|---|---|\n| `_status` | `found` | `found`, `not_found`, `ambiguous`, `invalid`, `duplicate`, `role_address`, `profile_removed`, `error` |\n| `_input.email` | `Jane Doe <Jane.Doe@acme-example.com>` | the entry exactly as you wrote it |\n| `email` | `jane.doe@acme-example.com` | the address we looked up |\n| `linkedinUrl` | `https://www.linkedin.com/in/jane-doe-example` | on every `found` row |\n| `fullName` | `Jane Doe` | on every `found` row in our test |\n| `headline` | `VP Marketing at Acme Example` | when the profile has one |\n| `jobTitle` | `VP Marketing` | when a current position is on record |\n| `company` | `Acme Example` | current employer name, when on record |\n| `companyLinkedinUrl` | `https://www.linkedin.com/company/acme-example` | when the employer has a company page on record |\n| `location`, `country` | `Austin, Texas, United States`, `US` | when on record |\n| `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) |\n| `matchedEmail` | `jane.doe@acme-example.com` | the spelling on record; absent on `name_and_domain` rows |\n| `_freshness` | `fresh_90d` | `fresh_90d`, `updated_1y` or `older` |\n| `_matchCandidates` | `3` | only on `ambiguous` rows: how many profiles share the address |\n| `_error` | | a plain sentence on every row that is not `found` |\n\n## How to convert email to LinkedIn (3 steps)\n\n1. Paste your email addresses, one per line. If you have names, put each one beside its address.\n2. Press **Start** and wait for the run to finish.\n3. Export the dataset as CSV, Excel or JSON, or read it through the API.\n\n## How much does it cost to find LinkedIn by email?\n\n| Event | Price | When |\n|---|---|---|\n| LinkedIn profile found | **$0.0032** ($3.20 per 1,000) | the address resolved to one person and the row carries their profile URL |\n| Everything else | **$0** | no match, removed profile, several profiles on one address, invalid entry, duplicate, shared mailbox |\n\nPrices above are for Apify's Free and Starter plans. Scale plans pay 10%\nless and Business plans and up 20% less, applied by Apify automatically; the\nStore page quotes the lowest of these as \"from\".\n\nThe platform's free $5 monthly credit covers about 1,560 found profiles.\nA small per-run start fee may apply; it is shown on the Pricing tab.\n\n## Input\n\n```json\n{\n  \"emails\": [\n    \"jane.doe@acme-example.com\",\n    \"Sam Rivera <sam.rivera+news@gmail.com>\",\n    \"lee.park@acme-example.com, Lee Park\",\n    \"info@acme-example.com\"\n  ]\n}\n```\n\nAddresses are cleaned before the lookup: upper case, `mailto:` links, a\ndisplay name with the address in angle brackets, and a trailing dot or comma\nare all read as the address inside. For Gmail addresses that miss as\nwritten, the Actor tries the same mailbox without the `+tag`, on `gmail.com`\ninstead of `googlemail.com`, and without dots. It never rewrites addresses\non other domains.\n\n**Names.** A name can sit beside its address in any of these forms:\n`Jane Doe <jane@acme.com>`, `jane@acme.com, Jane Doe`, `Jane Doe; jane@acme.com`,\nor two columns pasted from a spreadsheet. The address is always tried first.\nOnly when a work address is not on record is the person looked up by name at\nthe address's company, and the row is `found` only if first and last name both\nmatch and nobody else at that company does. Such rows say\n`matchedVia: name_and_domain`. Names are not used for Gmail and other consumer\nmailboxes, where the domain names no employer.\n\n## Output\n\nA found row (charged):\n\n```json\n{\n  \"_status\": \"found\",\n  \"_input\": { \"email\": \"Sam Rivera <sam.rivera+news@gmail.com>\" },\n  \"_freshness\": \"updated_1y\",\n  \"email\": \"sam.rivera+news@gmail.com\",\n  \"matchedEmail\": \"sam.rivera@gmail.com\",\n  \"matchedVia\": \"gmail_normalized\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/sam-rivera-example\",\n  \"fullName\": \"Sam Rivera\",\n  \"headline\": \"Staff Engineer at Northwind Example\",\n  \"jobTitle\": \"Staff Engineer\",\n  \"company\": \"Northwind Example\",\n  \"companyLinkedinUrl\": \"https://www.linkedin.com/company/northwind-example\",\n  \"location\": \"Denver, Colorado, United States\",\n  \"country\": \"US\"\n}\n```\n\nA miss (free):\n\n```json\n{\n  \"_status\": \"not_found\",\n  \"_input\": { \"email\": \"jane.doe@acme-example.com\" },\n  \"email\": \"jane.doe@acme-example.com\"\n}\n```\n\nA shared mailbox (free, not looked up):\n\n```json\n{\n  \"_status\": \"role_address\",\n  \"_input\": { \"email\": \"info@acme-example.com\" },\n  \"_error\": \"info@ is a shared mailbox, not one person's address; it was not looked up\"\n}\n```\n\n## Email to LinkedIn API, MCP and integrations\n\nRun it from the Apify API, from the Apify MCP server in an AI assistant, or\nfrom Make, n8n and Zapier through their Apify connectors. The input is one\narray and the output is one flat row per address, so it maps onto a\nspreadsheet column without any reshaping.\n\n## Use cases\n\n- **Sales and RevOps**: turn the emails in a CRM or a signup export into\n  profile links your team can open before a call.\n- **Recruiting**: attach a LinkedIn profile to applicants who left only an\n  email address.\n- **Marketing**: see which job titles and companies are behind a newsletter\n  or waitlist.\n- **Developers**: add a profile link to a user record at signup time.\n\n## FAQ\n\n### How do I find a LinkedIn profile from an email address?\n\nPaste the address into the input and start the run. If the address is on\nrecord for one person, the row comes back with `linkedinUrl` and the\nperson's name and current role.\n\n### What is the match rate for email to LinkedIn?\n\nIt depends on whether the list has names.\n\n| List | Found |\n|---|---|\n| Public developer addresses, address only | about 31% (84 of 270) |\n| Corporate addresses of engineers, address only | about 26% (39 of 150) |\n| The same corporate addresses with the name beside each one | about 65% (97 of 150) |\n\nMeasured on our own test samples on 2026-09-30; your list may do better or\nworse. In the name-matched rows the person's current company was the expected\none in 55 of 58. A name match can still be a namesake at the same company:\nin a larger check that happened in about 2 of 100 such rows, which is why\nthey are labelled. A lookup with nothing to return costs nothing, so a test\nrun on your own list costs only what it finds.\n\n### Am I charged when nothing is found?\n\nNo. `not_found`, `profile_removed`, `invalid`, `duplicate`, `role_address`\nand `ambiguous` rows are free.\n\n### What happens when several people share one address?\n\nSome addresses are on record for more than one profile. We cannot tell which\nof them you mean, so the row is marked `ambiguous`, shows one candidate and\nthe number of profiles in `_matchCandidates`, and is not charged.\n\n### Why are info@ and support@ addresses refused?\n\nA shared mailbox does not belong to one person, so any profile returned for\nit would be a guess. These entries come back as free `role_address` rows.\n\n### Can I run email to LinkedIn in bulk from a CSV?\n\nPaste up to 1,000 addresses per run, or send them as a JSON array through\nthe API. For a CSV file of any size, use\n[Bulk People Enrichment](https://apify.com/b2bsearch/bulk-people-enrichment).\n\n### Does it need cookies, login or an API key?\n\nNo. You do not provide a LinkedIn account, cookies or any key. The Actor\nreads from our own database.\n\n### How fresh is the data?\n\nEach found row carries `_freshness`: `fresh_90d` (record updated within 90\ndays), `updated_1y` or `older`. People change jobs; open the profile before\nyou rely on a title.\n\n### Is it legal to look up a LinkedIn profile by email?\n\nThe Actor returns professional profile data from our own database. Whether\nyour use is lawful depends on what you do with it and where you and the\nperson are. Read \"Disclaimer and permitted use\" below.\n\n## Use Email to LinkedIn Profile Finder with AI agents and MCP\n\nThis Actor works as a tool for AI agents. Add it to Claude, ChatGPT, Cursor or any other MCP client through the Apify MCP server:\n\n```\nhttps://mcp.apify.com?tools=b2bsearch/email-to-linkedin\n```\n\n- **Fast enough for a tool call.** A small request finishes in seconds, so the agent gets its answer inside one call.\n- **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`.\n- **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.\n\nInput an agent can send as is:\n\n```json\n{\n  \"emails\": [\n    \"satya.nadella@microsoft.com\"\n  ]\n}\n```\n\nThe 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.\n\n## Related Actors: which one should you use?\n\n| Need | Actor |\n|---|---|\n| Email → LinkedIn profile URL | **Email to LinkedIn** (this Actor) |\n| Email → current company and job title | [Email to Company](https://apify.com/b2bsearch/email-to-company) |\n| Email → phone numbers on record | [Email to Phone](https://apify.com/b2bsearch/email-to-phone) |\n| Email → X (Twitter) profile | [Email to Twitter](https://apify.com/b2bsearch/email-to-twitter) |\n| Email → Facebook profile | [Email to Facebook](https://apify.com/b2bsearch/email-to-facebook) |\n| Email → full professional profile | [Reverse Email Lookup](https://apify.com/b2bsearch/reverse-email-lookup) |\n| LinkedIn URL → full profile | [Profile Lookup](https://apify.com/b2bsearch/profile-lookup) |\n| LinkedIn URL → email addresses on record | [LinkedIn Email Finder](https://apify.com/b2bsearch/linkedin-email-finder) |\n| LinkedIn URL → phone numbers on record | [LinkedIn to Phone](https://apify.com/b2bsearch/linkedin-to-phone) |\n| X (Twitter) handle → email | [Twitter to Email](https://apify.com/b2bsearch/twitter-to-email) |\n| X (Twitter) handle → LinkedIn profile | [Twitter to LinkedIn](https://apify.com/b2bsearch/twitter-to-linkedin) |\n| X (Twitter) handle → phone numbers on record | [Twitter to Phone](https://apify.com/b2bsearch/twitter-to-phone) |\n| Facebook profile → email | [Facebook to Email](https://apify.com/b2bsearch/facebook-to-email) |\n| Facebook profile → phone numbers on record | [Facebook to Phone](https://apify.com/b2bsearch/facebook-to-phone) |\n| Facebook profile → LinkedIn profile | [Facebook to LinkedIn](https://apify.com/b2bsearch/facebook-to-linkedin) |\n| GitHub username → email | [GitHub to Email](https://apify.com/b2bsearch/github-to-email) |\n| GitHub username → LinkedIn profile | [GitHub to LinkedIn](https://apify.com/b2bsearch/github-to-linkedin) |\n| Name + company domain → work email | [Work Email Finder](https://apify.com/b2bsearch/work-email-finder) |\n| Name + company domain → LinkedIn profile | [Name to Profile](https://apify.com/b2bsearch/name-to-profile) |\n| Name + company domain → phone numbers on record | [Name to Phone](https://apify.com/b2bsearch/name-to-phone) |\n| Handle on any of three networks → full profile | [Social Handle Lookup](https://apify.com/b2bsearch/social-handle-lookup) |\n| Company domain → company record | [Domain to Company](https://apify.com/b2bsearch/domain-to-company) |\n| Company domain → decision makers | [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers) |\n| Company domain → current employees | [Company Employees](https://apify.com/b2bsearch/company-employees) |\n| Company domain → former employees | [Former Employees Finder](https://apify.com/b2bsearch/former-employees-finder) |\n| Filters → list of people | [People Database Search](https://apify.com/b2bsearch/people-database-search) |\n| Filters → leads with an email, from $1.50/1k | [B2B Leads Finder](https://apify.com/b2bsearch/b2b-leads-finder) |\n| Filters → list of companies | [Company Database Search](https://apify.com/b2bsearch/company-database-search) |\n| CSV of emails, URLs or names → profiles in bulk | [Bulk People Enrichment](https://apify.com/b2bsearch/bulk-people-enrichment) |\n\n## Free Apify plan\n\nA run started from a free Apify plan delivers the first 100 results and stops;\nthe run's status line says so. Any paid Apify plan lifts the cap. The rows are\nthe same rows a paid run returns.\n\n## Feedback and reviews\n\nHow did it go? A rating in the **Reviews** tab of this Actor tells the next\nbuyer what to expect; we read every word, good or bad. Got a wrong or stale\nrow? Open the **Issues** tab with the run ID. Issues are public, so leave out\nemails, phones and names; the run ID is enough for us to find the row. We\ncheck every report, fix what is ours to fix and answer in the thread.\n\n## Disclaimer and permitted use\n\n**Independent product.** This Actor is an independent tool. It is not\naffiliated with, endorsed by, or sponsored by LinkedIn Corporation.\nLinkedIn® is a trademark of its owner and is named here only to describe\nthe kind of public profile link this Actor returns.\n\n**No platform access.** This Actor does not log in to or crawl LinkedIn.\nEvery answer comes from our own database of business-contact records. It\nnever returns passwords, direct messages, or content from accounts that are\nnot public.\n\n**Permitted use.** Business-to-business purposes only: sales prospecting,\nrecruiting outreach, CRM enrichment, and checking that a business contact\nis who they say they are. You may not use this Actor or its output to:\n\n- stalk, harass, threaten, dox or publicly expose any person;\n- identify the person behind a pseudonymous or non-professional account;\n- decide on anyone's eligibility for credit, employment, housing or\n  insurance. This Actor is not a consumer reporting agency and its output\n  is not a consumer report under the U.S. Fair Credit Reporting Act;\n- send unsolicited bulk messages, or place autodialed or prerecorded calls\n  or texts without the consent the law requires;\n- profile people by health, religion, political opinion, sexual\n  orientation, ethnicity or union membership;\n- build or resell a contact database from the results.\n\n**Your responsibilities.** You decide whom to look up and what to do with\nthe result. You are responsible for having a lawful basis for that use and\nfor complying with the laws that apply to you, including GDPR and UK GDPR,\nePrivacy and PECR, CCPA/CPRA, CAN-SPAM, and the TCPA and Do Not Call rules.\nHonor every opt-out you receive.\n\n**Removal requests.** To have a person's data removed, open an issue on\nthis Actor with only the profile link. Nothing else is needed, and the\nrecord is removed from every listing.\n\n**Accuracy.** Records can be incomplete or out of date. Output is provided\nas is. Check it before you rely on it.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "email-to-linkedin",
      "title": "Email to LinkedIn Profile Finder — Bulk, Misses Free",
      "description": "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.",
      "version": "0.1",
      "buildTag": "latest",
      "input": {
        "title": "Email to LinkedIn Profile Finder input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "emails": {
            "title": "Email addresses (add names to find more)",
            "type": "array",
            "editor": "stringList",
            "description": "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.",
            "prefill": [
              "satya.nadella@microsoft.com"
            ],
            "maxItems": 1000
          }
        },
        "required": [
          "emails"
        ]
      },
      "readme": "## What does Email to LinkedIn Profile Finder do?\n\n**Email to LinkedIn Profile Finder** takes a list of email addresses and\nreturns the LinkedIn profile URL on record for each one, with the person's\nname, headline, job title, current company and location. Use it to find\nLinkedIn by email for a signup list, a CRM export or a newsletter audience.\n\n- **One narrow row per address**: the profile URL and just enough of the\n  card to recognise the person.\n- **You pay only for a profile found.** Addresses with no match, invalid\n  entries, duplicates and shared mailboxes are free rows that say why.\n- **Work and personal addresses** both resolve, Gmail included.\n- **Add the name and find more.** Write `Jane Doe <jane@acme.com>` or paste\n  two spreadsheet columns, and a work address that is not on record is looked\n  up again by name at the address's company. On 150 corporate addresses this\n  raised found profiles from 26% to 65%.\n- **Up to 1,000 addresses per run**, from the form, the API or an MCP client.\n- **A database lookup.** Nothing is crawled while your run is in progress;\n  each found row carries a freshness label.\n\n## What data do you get from an email address?\n\n| Field | Example | Notes |\n|---|---|---|\n| `_status` | `found` | `found`, `not_found`, `ambiguous`, `invalid`, `duplicate`, `role_address`, `profile_removed`, `error` |\n| `_input.email` | `Jane Doe <Jane.Doe@acme-example.com>` | the entry exactly as you wrote it |\n| `email` | `jane.doe@acme-example.com` | the address we looked up |\n| `linkedinUrl` | `https://www.linkedin.com/in/jane-doe-example` | on every `found` row |\n| `fullName` | `Jane Doe` | on every `found` row in our test |\n| `headline` | `VP Marketing at Acme Example` | when the profile has one |\n| `jobTitle` | `VP Marketing` | when a current position is on record |\n| `company` | `Acme Example` | current employer name, when on record |\n| `companyLinkedinUrl` | `https://www.linkedin.com/company/acme-example` | when the employer has a company page on record |\n| `location`, `country` | `Austin, Texas, United States`, `US` | when on record |\n| `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) |\n| `matchedEmail` | `jane.doe@acme-example.com` | the spelling on record; absent on `name_and_domain` rows |\n| `_freshness` | `fresh_90d` | `fresh_90d`, `updated_1y` or `older` |\n| `_matchCandidates` | `3` | only on `ambiguous` rows: how many profiles share the address |\n| `_error` | | a plain sentence on every row that is not `found` |\n\n## How to convert email to LinkedIn (3 steps)\n\n1. Paste your email addresses, one per line. If you have names, put each one beside its address.\n2. Press **Start** and wait for the run to finish.\n3. Export the dataset as CSV, Excel or JSON, or read it through the API.\n\n## How much does it cost to find LinkedIn by email?\n\n| Event | Price | When |\n|---|---|---|\n| LinkedIn profile found | **$0.0032** ($3.20 per 1,000) | the address resolved to one person and the row carries their profile URL |\n| Everything else | **$0** | no match, removed profile, several profiles on one address, invalid entry, duplicate, shared mailbox |\n\nPrices above are for Apify's Free and Starter plans. Scale plans pay 10%\nless and Business plans and up 20% less, applied by Apify automatically; the\nStore page quotes the lowest of these as \"from\".\n\nThe platform's free $5 monthly credit covers about 1,560 found profiles.\nA small per-run start fee may apply; it is shown on the Pricing tab.\n\n## Input\n\n```json\n{\n  \"emails\": [\n    \"jane.doe@acme-example.com\",\n    \"Sam Rivera <sam.rivera+news@gmail.com>\",\n    \"lee.park@acme-example.com, Lee Park\",\n    \"info@acme-example.com\"\n  ]\n}\n```\n\nAddresses are cleaned before the lookup: upper case, `mailto:` links, a\ndisplay name with the address in angle brackets, and a trailing dot or comma\nare all read as the address inside. For Gmail addresses that miss as\nwritten, the Actor tries the same mailbox without the `+tag`, on `gmail.com`\ninstead of `googlemail.com`, and without dots. It never rewrites addresses\non other domains.\n\n**Names.** A name can sit beside its address in any of these forms:\n`Jane Doe <jane@acme.com>`, `jane@acme.com, Jane Doe`, `Jane Doe; jane@acme.com`,\nor two columns pasted from a spreadsheet. The address is always tried first.\nOnly when a work address is not on record is the person looked up by name at\nthe address's company, and the row is `found` only if first and last name both\nmatch and nobody else at that company does. Such rows say\n`matchedVia: name_and_domain`. Names are not used for Gmail and other consumer\nmailboxes, where the domain names no employer.\n\n## Output\n\nA found row (charged):\n\n```json\n{\n  \"_status\": \"found\",\n  \"_input\": { \"email\": \"Sam Rivera <sam.rivera+news@gmail.com>\" },\n  \"_freshness\": \"updated_1y\",\n  \"email\": \"sam.rivera+news@gmail.com\",\n  \"matchedEmail\": \"sam.rivera@gmail.com\",\n  \"matchedVia\": \"gmail_normalized\",\n  \"linkedinUrl\": \"https://www.linkedin.com/in/sam-rivera-example\",\n  \"fullName\": \"Sam Rivera\",\n  \"headline\": \"Staff Engineer at Northwind Example\",\n  \"jobTitle\": \"Staff Engineer\",\n  \"company\": \"Northwind Example\",\n  \"companyLinkedinUrl\": \"https://www.linkedin.com/company/northwind-example\",\n  \"location\": \"Denver, Colorado, United States\",\n  \"country\": \"US\"\n}\n```\n\nA miss (free):\n\n```json\n{\n  \"_status\": \"not_found\",\n  \"_input\": { \"email\": \"jane.doe@acme-example.com\" },\n  \"email\": \"jane.doe@acme-example.com\"\n}\n```\n\nA shared mailbox (free, not looked up):\n\n```json\n{\n  \"_status\": \"role_address\",\n  \"_input\": { \"email\": \"info@acme-example.com\" },\n  \"_error\": \"info@ is a shared mailbox, not one person's address; it was not looked up\"\n}\n```\n\n## Email to LinkedIn API, MCP and integrations\n\nRun it from the Apify API, from the Apify MCP server in an AI assistant, or\nfrom Make, n8n and Zapier through their Apify connectors. The input is one\narray and the output is one flat row per address, so it maps onto a\nspreadsheet column without any reshaping.\n\n## Use cases\n\n- **Sales and RevOps**: turn the emails in a CRM or a signup export into\n  profile links your team can open before a call.\n- **Recruiting**: attach a LinkedIn profile to applicants who left only an\n  email address.\n- **Marketing**: see which job titles and companies are behind a newsletter\n  or waitlist.\n- **Developers**: add a profile link to a user record at signup time.\n\n## FAQ\n\n### How do I find a LinkedIn profile from an email address?\n\nPaste the address into the input and start the run. If the address is on\nrecord for one person, the row comes back with `linkedinUrl` and the\nperson's name and current role.\n\n### What is the match rate for email to LinkedIn?\n\nIt depends on whether the list has names.\n\n| List | Found |\n|---|---|\n| Public developer addresses, address only | about 31% (84 of 270) |\n| Corporate addresses of engineers, address only | about 26% (39 of 150) |\n| The same corporate addresses with the name beside each one | about 65% (97 of 150) |\n\nMeasured on our own test samples on 2026-09-30; your list may do better or\nworse. In the name-matched rows the person's current company was the expected\none in 55 of 58. A name match can still be a namesake at the same company:\nin a larger check that happened in about 2 of 100 such rows, which is why\nthey are labelled. A lookup with nothing to return costs nothing, so a test\nrun on your own list costs only what it finds.\n\n### Am I charged when nothing is found?\n\nNo. `not_found`, `profile_removed`, `invalid`, `duplicate`, `role_address`\nand `ambiguous` rows are free.\n\n### What happens when several people share one address?\n\nSome addresses are on record for more than one profile. We cannot tell which\nof them you mean, so the row is marked `ambiguous`, shows one candidate and\nthe number of profiles in `_matchCandidates`, and is not charged.\n\n### Why are info@ and support@ addresses refused?\n\nA shared mailbox does not belong to one person, so any profile returned for\nit would be a guess. These entries come back as free `role_address` rows.\n\n### Can I run email to LinkedIn in bulk from a CSV?\n\nPaste up to 1,000 addresses per run, or send them as a JSON array through\nthe API. For a CSV file of any size, use\n[Bulk People Enrichment](https://apify.com/b2bsearch/bulk-people-enrichment).\n\n### Does it need cookies, login or an API key?\n\nNo. You do not provide a LinkedIn account, cookies or any key. The Actor\nreads from our own database.\n\n### How fresh is the data?\n\nEach found row carries `_freshness`: `fresh_90d` (record updated within 90\ndays), `updated_1y` or `older`. People change jobs; open the profile before\nyou rely on a title.\n\n### Is it legal to look up a LinkedIn profile by email?\n\nThe Actor returns professional profile data from our own database. Whether\nyour use is lawful depends on what you do with it and where you and the\nperson are. Read \"Disclaimer and permitted use\" below.\n\n## Use Email to LinkedIn Profile Finder with AI agents and MCP\n\nThis Actor works as a tool for AI agents. Add it to Claude, ChatGPT, Cursor or any other MCP client through the Apify MCP server:\n\n```\nhttps://mcp.apify.com?tools=b2bsearch/email-to-linkedin\n```\n\n- **Fast enough for a tool call.** A small request finishes in seconds, so the agent gets its answer inside one call.\n- **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`.\n- **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.\n\nInput an agent can send as is:\n\n```json\n{\n  \"emails\": [\n    \"satya.nadella@microsoft.com\"\n  ]\n}\n```\n\nThe 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.\n\n## Related Actors: which one should you use?\n\n| Need | Actor |\n|---|---|\n| Email → LinkedIn profile URL | **Email to LinkedIn** (this Actor) |\n| Email → current company and job title | [Email to Company](https://apify.com/b2bsearch/email-to-company) |\n| Email → phone numbers on record | [Email to Phone](https://apify.com/b2bsearch/email-to-phone) |\n| Email → X (Twitter) profile | [Email to Twitter](https://apify.com/b2bsearch/email-to-twitter) |\n| Email → Facebook profile | [Email to Facebook](https://apify.com/b2bsearch/email-to-facebook) |\n| Email → full professional profile | [Reverse Email Lookup](https://apify.com/b2bsearch/reverse-email-lookup) |\n| LinkedIn URL → full profile | [Profile Lookup](https://apify.com/b2bsearch/profile-lookup) |\n| LinkedIn URL → email addresses on record | [LinkedIn Email Finder](https://apify.com/b2bsearch/linkedin-email-finder) |\n| LinkedIn URL → phone numbers on record | [LinkedIn to Phone](https://apify.com/b2bsearch/linkedin-to-phone) |\n| X (Twitter) handle → email | [Twitter to Email](https://apify.com/b2bsearch/twitter-to-email) |\n| X (Twitter) handle → LinkedIn profile | [Twitter to LinkedIn](https://apify.com/b2bsearch/twitter-to-linkedin) |\n| X (Twitter) handle → phone numbers on record | [Twitter to Phone](https://apify.com/b2bsearch/twitter-to-phone) |\n| Facebook profile → email | [Facebook to Email](https://apify.com/b2bsearch/facebook-to-email) |\n| Facebook profile → phone numbers on record | [Facebook to Phone](https://apify.com/b2bsearch/facebook-to-phone) |\n| Facebook profile → LinkedIn profile | [Facebook to LinkedIn](https://apify.com/b2bsearch/facebook-to-linkedin) |\n| GitHub username → email | [GitHub to Email](https://apify.com/b2bsearch/github-to-email) |\n| GitHub username → LinkedIn profile | [GitHub to LinkedIn](https://apify.com/b2bsearch/github-to-linkedin) |\n| Name + company domain → work email | [Work Email Finder](https://apify.com/b2bsearch/work-email-finder) |\n| Name + company domain → LinkedIn profile | [Name to Profile](https://apify.com/b2bsearch/name-to-profile) |\n| Name + company domain → phone numbers on record | [Name to Phone](https://apify.com/b2bsearch/name-to-phone) |\n| Handle on any of three networks → full profile | [Social Handle Lookup](https://apify.com/b2bsearch/social-handle-lookup) |\n| Company domain → company record | [Domain to Company](https://apify.com/b2bsearch/domain-to-company) |\n| Company domain → decision makers | [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers) |\n| Company domain → current employees | [Company Employees](https://apify.com/b2bsearch/company-employees) |\n| Company domain → former employees | [Former Employees Finder](https://apify.com/b2bsearch/former-employees-finder) |\n| Filters → list of people | [People Database Search](https://apify.com/b2bsearch/people-database-search) |\n| Filters → leads with an email, from $1.50/1k | [B2B Leads Finder](https://apify.com/b2bsearch/b2b-leads-finder) |\n| Filters → list of companies | [Company Database Search](https://apify.com/b2bsearch/company-database-search) |\n| CSV of emails, URLs or names → profiles in bulk | [Bulk People Enrichment](https://apify.com/b2bsearch/bulk-people-enrichment) |\n\n## Free Apify plan\n\nA run started from a free Apify plan delivers the first 100 results and stops;\nthe run's status line says so. Any paid Apify plan lifts the cap. The rows are\nthe same rows a paid run returns.\n\n## Feedback and reviews\n\nHow did it go? A rating in the **Reviews** tab of this Actor tells the next\nbuyer what to expect; we read every word, good or bad. Got a wrong or stale\nrow? Open the **Issues** tab with the run ID. Issues are public, so leave out\nemails, phones and names; the run ID is enough for us to find the row. We\ncheck every report, fix what is ours to fix and answer in the thread.\n\n## Disclaimer and permitted use\n\n**Independent product.** This Actor is an independent tool. It is not\naffiliated with, endorsed by, or sponsored by LinkedIn Corporation.\nLinkedIn® is a trademark of its owner and is named here only to describe\nthe kind of public profile link this Actor returns.\n\n**No platform access.** This Actor does not log in to or crawl LinkedIn.\nEvery answer comes from our own database of business-contact records. It\nnever returns passwords, direct messages, or content from accounts that are\nnot public.\n\n**Permitted use.** Business-to-business purposes only: sales prospecting,\nrecruiting outreach, CRM enrichment, and checking that a business contact\nis who they say they are. You may not use this Actor or its output to:\n\n- stalk, harass, threaten, dox or publicly expose any person;\n- identify the person behind a pseudonymous or non-professional account;\n- decide on anyone's eligibility for credit, employment, housing or\n  insurance. This Actor is not a consumer reporting agency and its output\n  is not a consumer report under the U.S. Fair Credit Reporting Act;\n- send unsolicited bulk messages, or place autodialed or prerecorded calls\n  or texts without the consent the law requires;\n- profile people by health, religion, political opinion, sexual\n  orientation, ethnicity or union membership;\n- build or resell a contact database from the results.\n\n**Your responsibilities.** You decide whom to look up and what to do with\nthe result. You are responsible for having a lawful basis for that use and\nfor complying with the laws that apply to you, including GDPR and UK GDPR,\nePrivacy and PECR, CCPA/CPRA, CAN-SPAM, and the TCPA and Do Not Call rules.\nHonor every opt-out you receive.\n\n**Removal requests.** To have a person's data removed, open an issue on\nthis Actor with only the profile link. Nothing else is needed, and the\nrecord is removed from every listing.\n\n**Accuracy.** Records can be incomplete or out of date. Output is provided\nas is. Check it before you rely on it.\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "_status": {
                "type": "string",
                "nullable": true,
                "description": "Outcome of this row: \"found\" is a paid result; every other value (not_found, invalid, no_phone, ambiguous, …) is a free row that explains itself in _error or _note.",
                "example": "found"
              },
              "_input": {
                "type": "object",
                "nullable": true,
                "description": "The input entry this row answers, as the run read it.",
                "example": {
                  "email": "jane.doe@example.com"
                }
              },
              "linkedinUrl": {
                "type": "string",
                "nullable": true,
                "description": "LinkedIn URL: the person's profile, or the company page on company rows.",
                "example": "https://www.linkedin.com/in/jane-doe-example"
              },
              "fullName": {
                "type": "string",
                "nullable": true,
                "description": "Full name of the person.",
                "example": "Jane Doe"
              },
              "headline": {
                "type": "string",
                "nullable": true,
                "description": "The profile headline, as the person wrote it.",
                "example": "VP of Engineering at Example Corp"
              },
              "jobTitle": {
                "type": "string",
                "nullable": true,
                "description": "Current job title.",
                "example": "VP of Engineering"
              },
              "company": {
                "type": "string",
                "nullable": true,
                "description": "Name of the current employer.",
                "example": "Example Corp"
              },
              "companyLinkedinUrl": {
                "type": "string",
                "nullable": true,
                "description": "LinkedIn page of the current employer.",
                "example": "https://www.linkedin.com/company/example-corp"
              },
              "location": {
                "description": "Where the person is based, as free text.",
                "example": "Austin, Texas, United States"
              },
              "country": {
                "type": "string",
                "nullable": true,
                "description": "Two-letter country code.",
                "example": "US"
              },
              "email": {
                "type": "string",
                "nullable": true,
                "description": "The best email address on record: one at the current employer first, then a personal mailbox.",
                "example": "jane.doe@example.com"
              },
              "matchedEmail": {
                "type": "string",
                "nullable": true,
                "description": "The address the person was found by.",
                "example": "jane.doe@example.com"
              },
              "matchedVia": {
                "type": "string",
                "nullable": true,
                "description": "How the match was made: the address as given, or the name beside it.",
                "example": "as_given"
              },
              "_freshness": {
                "type": "string",
                "nullable": true,
                "description": "How recently the record was refreshed: fresh_90d, updated_1y, older or unknown.",
                "example": "updated_1y"
              },
              "_matchCandidates": {
                "type": "number",
                "nullable": true,
                "description": "How many different people matched the input when more than one did.",
                "example": 2
              },
              "_error": {
                "type": "string",
                "nullable": true,
                "description": "Why this row is not a result, in plain words. Empty on found rows.",
                "example": "No record matches this email address. Not charged."
              }
            },
            "required": [],
            "additionalProperties": true
          },
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "_status",
                  "_input",
                  "linkedinUrl",
                  "fullName",
                  "headline",
                  "jobTitle",
                  "company",
                  "companyLinkedinUrl",
                  "location",
                  "country",
                  "email",
                  "matchedEmail",
                  "matchedVia",
                  "_freshness",
                  "_matchCandidates",
                  "_error"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "_status": {
                    "label": "Status",
                    "format": "text"
                  },
                  "_input": {
                    "label": "Input",
                    "format": "object"
                  },
                  "linkedinUrl": {
                    "label": "LinkedIn profile",
                    "format": "link"
                  },
                  "fullName": {
                    "label": "Name",
                    "format": "text"
                  },
                  "headline": {
                    "label": "Headline",
                    "format": "text"
                  },
                  "jobTitle": {
                    "label": "Job title",
                    "format": "text"
                  },
                  "company": {
                    "label": "Company",
                    "format": "text"
                  },
                  "companyLinkedinUrl": {
                    "label": "Company page",
                    "format": "link"
                  },
                  "location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "country": {
                    "label": "Country",
                    "format": "text"
                  },
                  "email": {
                    "label": "Email looked up",
                    "format": "text"
                  },
                  "matchedEmail": {
                    "label": "Matched address",
                    "format": "text"
                  },
                  "matchedVia": {
                    "label": "Matched via",
                    "format": "text"
                  },
                  "_freshness": {
                    "label": "Freshness",
                    "format": "text"
                  },
                  "_matchCandidates": {
                    "label": "Possible matches",
                    "format": "number"
                  },
                  "_error": {
                    "label": "Details",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Results",
        "description": "Result rows are stored in the run's default dataset.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Results",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "defaultRunOptions": {
        "timeoutSecs": 3600,
        "memoryMbytes": 1024
      },
      "environmentVariables": {
        "API_BASE_URL": "https://apify.sputnik.io",
        "API_TOKEN": "@key_email_to_linkedin",
        "FULL_OUTPUT_ENABLED": "true"
      }
    },
    "buildNumber": "0.1.14",
    "imageDigest": "261b70224aa32effc12ffcf922e336d655e4273f796cab959c12816aa88b4e96",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "0.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.024616666666666665
    }
  }
}