LinkedIn Profile Contact Enricher avatar

LinkedIn Profile Contact Enricher

Pricing

Pay per event

Go to Apify Store
LinkedIn Profile Contact Enricher

LinkedIn Profile Contact Enricher

Enrich public LinkedIn profile URLs with profile details and source-attributed work contacts from public company websites. Emails are never guessed.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

20 days ago

Last modified

Share

Turn known public LinkedIn profile URLs into typed professional records and inspect official company or institution pages for explicitly published work contacts. The Actor uses public metadata and public website pages—no LinkedIn login, cookies, or private data.

It never invents an email address. Every returned email includes the exact public page and nearby evidence that explains what the address represents, such as an administrative contact.

What does LinkedIn Profile Contact Enricher do?

Provide one or more linkedin.com/in/... URLs. For each URL, the Actor:

  1. normalizes the profile URL;
  2. resolves public profile metadata such as name, headline, company, and summary;
  3. optionally visits a supplied official company or institution URL;
  4. follows up to five same-domain contact, team, leadership, or about links;
  5. returns only published emails found near the person's name or on the supplied public person page;
  6. attaches source URLs and evidence to every result.

The default dataset contains one record per successfully enriched profile.

Who is it for?

  • Sales operations teams enriching an existing list of known profile URLs.
  • Recruiters adding public headline and organization context to candidate records.
  • Research teams collecting reproducible, source-attributed professional metadata.
  • CRM administrators normalizing profile URLs before imports and deduplication.
  • Developers building responsible enrichment pipelines through the Apify API.

Use LinkedIn Public Profile Search Scraper when you need to discover profile URLs first.

Why use this Actor?

No LinkedIn account

The Actor does not request your LinkedIn cookies, credentials, or Sales Navigator session.

No guessed private emails

Many lead tools generate likely addresses from a person's name and a company pattern. This Actor does not. An empty publicWorkEmails array means no qualifying published address was found.

Evidence, not a black box

Each profile has a sources array. Each email includes sourceUrl and evidence, so a reviewer can understand whether it is a direct address, administrator address, or another published work-contact route.

Bounded public website inspection

Company enrichment stays on the hostname you provide and inspects at most five relevant pages. It does not crawl an entire website.

What LinkedIn profile data is extracted?

FieldTypeMeaning
linkedinUrlstringNormalized public /in/ URL
fullNamestring or nullName from public metadata
headlinestring or nullPublic professional headline
currentCompanystring or nullCompany parsed from an “at” headline when available
publicProfileSummarystring or nullPublic profile description or search snippet
publicWorkEmailsarrayPublished work-contact emails with evidence; never predicted
companyContactsarrayGeneral contact pages or phone numbers found on contact pages
sourcesarrayRetrieval surface, URL, and timestamp
enrichedAtstringISO 8601 completion time
warningsarraySkipped enrichment or recoverable company-page errors

A published address can belong to an assistant or administrator. Read its evidence; do not assume every address is the person's direct inbox.

Getting started

  1. Open the Actor in Apify Console.
  2. Add one or more public LinkedIn profile URLs under Profiles to enrich.
  3. Add fullName for best matching, especially when a profile slug is opaque.
  4. Optionally add an official public companyDomain or exact person page.
  5. Keep Inspect public company websites enabled when you want work contacts.
  6. Set Maximum profile records.
  7. Click Start.
  8. Open the default dataset to review records and source evidence.

Input parameters

profiles

Required array with 1–1,000 objects.

{
"url": "https://www.linkedin.com/in/fei-fei-li-4541247",
"fullName": "Fei-Fei Li",
"companyDomain": "https://profiles.stanford.edu/fei-fei-li"
}
  • url must be a public LinkedIn /in/ profile.
  • fullName is recommended and required when the slug does not contain separate name words.
  • companyDomain is optional. Use an official public hostname or an exact public staff/profile page.

enrichCompanyContacts

Defaults to true. Set it to false for profile-only enrichment and fewer external requests.

maxItems

Defaults to 10, with a maximum of 1,000. Processing stops after this many successful dataset records.

Profile-only input example

{
"profiles": [
{
"url": "https://www.linkedin.com/in/satyanadella",
"fullName": "Satya Nadella"
}
],
"enrichCompanyContacts": false,
"maxItems": 1
}

Public work-contact input example

{
"profiles": [
{
"url": "https://www.linkedin.com/in/fei-fei-li-4541247",
"fullName": "Fei-Fei Li",
"companyDomain": "https://profiles.stanford.edu/fei-fei-li"
}
],
"enrichCompanyContacts": true,
"maxItems": 1
}

This real example returns Fei-Fei Li's public professional metadata and a Stanford administrative contact published on the supplied profile page. The evidence identifies the address as an administrative contact rather than claiming it is a private or direct email.

Output example

A current profile-only run produces this shape:

{
"linkedinUrl": "https://www.linkedin.com/in/satyanadella",
"fullName": "Satya Nadella",
"headline": "Chairman and CEO at Microsoft",
"currentCompany": "Microsoft",
"publicProfileSummary": "Chairman and CEO at Microsoft · As chairman and CEO of Microsoft...",
"publicWorkEmails": [],
"companyContacts": [],
"sources": [
{
"type": "public-metadata",
"url": "https://api.microlink.io?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fsatyanadella",
"retrievedAt": "2026-08-02T02:46:23.618Z"
}
],
"enrichedAt": "2026-08-02T02:46:23.619Z",
"warnings": ["Company contact enrichment disabled."]
}

Timestamps and public snippets change between runs.

How source attribution works

Profile metadata is obtained through a public metadata endpoint, with public Bing search snippets as a fallback. The Actor accepts a profile only when the returned URL normalizes to the requested LinkedIn profile.

Company-page sources use type: "company-page". Website requests remain on the supplied origin after redirects. Private IP addresses, localhost names, credentials in URLs, and unsupported protocols are rejected.

For an email to be returned, it must be explicitly present:

  • near the supplied person's name in visible page text; or
  • as a mailto: link on the supplied non-root public person page that also contains the person's name.

No name-to-email pattern generation occurs.

How much does it cost to enrich LinkedIn profile contacts?

The Actor uses pay-per-event pricing:

  • one start event per run;
  • one item event for each successful profile record;
  • no separate charge for individual emails, phones, or source pages.

Current Bronze pricing is $0.005 per run plus $0.008 per successful profile. Pricing is tiered by Apify plan; the live Console price shown before a run is authoritative.

Bronze examples:

Successful profilesEstimated Actor charge
1$0.013
10$0.085
100$0.805

Failed or rejected inputs do not create an item event. Platform limits and maximum total charge settings can stop a run early.

Reliability and retry behavior

The Actor retries temporary network errors, HTTP 429 responses, and selected 5xx responses with bounded backoff. It does not repeatedly retry malformed URLs, deterministic access errors, or parser bugs.

A profile that cannot be matched to public metadata fails closed rather than returning another person's record. A company page failure is recorded in warnings; the already matched profile can still be useful.

For repeatable production jobs:

  • supply fullName for every input;
  • supply exact official person pages when known;
  • keep batches bounded;
  • inspect warnings and evidence before writing data to a CRM;
  • use Apify schedules for recurring snapshots.

The Actor itself does not compare snapshots, monitor changes, or send alerts. Store run datasets separately if your workflow needs change detection.

Export and integration workflows

Spreadsheet enrichment

Run a batch, open the dataset, and export JSON, CSV, Excel, or XML from Apify Console.

CRM pipeline

Use a webhook or API client to read the default dataset. Keep linkedinUrl as the stable deduplication key and store contact evidence alongside any email.

Responsible outreach review

Filter rows with non-empty publicWorkEmails, inspect evidence, and route ambiguous administrator or general contacts to a human review step before outreach.

Scheduled snapshots

Use an Apify schedule to rerun a stable input. Your downstream system can compare headline, company, summary, and contact arrays. Scheduling does not guarantee that upstream public metadata remains available.

Use the Actor through the API

Replace YOUR_APIFY_TOKEN with a secret stored outside source control.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~linkedin-profile-contact-enricher/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profiles": [{
"url": "https://www.linkedin.com/in/satyanadella",
"fullName": "Satya Nadella"
}],
"enrichCompanyContacts": false,
"maxItems": 1
}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/linkedin-profile-contact-enricher').call({
profiles: [{
url: 'https://www.linkedin.com/in/fei-fei-li-4541247',
fullName: 'Fei-Fei Li',
companyDomain: 'https://profiles.stanford.edu/fei-fei-li',
}],
enrichCompanyContacts: true,
maxItems: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/linkedin-profile-contact-enricher').call(run_input={
'profiles': [{
'url': 'https://www.linkedin.com/in/satyanadella',
'fullName': 'Satya Nadella',
}],
'enrichCompanyContacts': False,
'maxItems': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with Apify MCP

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/linkedin-profile-contact-enricher"

Claude Desktop, Cursor, and VS Code MCP setup

Use this equivalent remote MCP configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/linkedin-profile-contact-enricher"
}
}
}

Example prompts:

  • “Enrich these LinkedIn profile URLs and return source-attributed public fields.”
  • “Inspect the supplied official staff pages and list only published work contacts with evidence.”
  • “Prepare a CSV-ready dataset and flag rows with no public work contact.”

Limits and responsible expectations

  • Public metadata providers and search surfaces can rate-limit, change, or omit profiles.
  • The Actor does not access login-only sections or private LinkedIn data.
  • It does not return complete work history, education history, posts, or connections.
  • A company website may publish no email for a person; empty arrays are expected.
  • General phone numbers and administrative addresses are not guaranteed to reach the person directly.
  • JavaScript-only company pages may expose less information to the HTTP parser.
  • Website crawling is limited to five same-origin pages per profile.
  • There is no automatic residential proxy or browser fallback.

Use only data you are authorized to process. Follow LinkedIn's terms, the terms and robots guidance of company websites, applicable privacy law, anti-spam law, and your organization's retention rules.

Public availability does not automatically authorize unsolicited outreach. Establish a lawful purpose, minimize collected fields, preserve source and context, honor deletion or objection requests, and review contact evidence before use.

Do not use this Actor for discrimination, surveillance, credential harvesting, or attempts to reveal private contact information.

Troubleshooting

“No public metadata or search snippet matched”

Confirm that the URL is a real public /in/ profile and that fullName exactly identifies the person. Public metadata can be temporarily unavailable; retry later rather than substituting another profile.

The record has no email

This is normal. Add the exact official public person page as companyDomain when available. The Actor deliberately does not guess an address.

A company page appears in warnings

Check that the hostname is public, resolves normally, serves HTML, and does not require login or browser interaction. The profile record may still be valid.

currentCompany is null

The field is parsed only from public headlines containing an “at” phrase. Use headline and publicProfileSummary for the unmodified public context.

Choose this Actor when you already have person-profile URLs and specifically need conservative, source-attributed public contact enrichment.

FAQ

Does it need LinkedIn cookies?

No.

Does it infer likely email addresses?

No. It returns only addresses explicitly published on inspected company or institution pages.

Is every returned email the person's direct inbox?

No. It can be an administrator or other work-contact route. Always inspect evidence.

Can it find profiles by keyword or title?

No. Use LinkedIn Public Profile Search Scraper first, then pass the resulting URLs here.

Can I run it on a schedule?

Yes. Apify schedules can create recurring snapshots, but comparison and alerting belong in your downstream workflow.

What happens when one company site fails?

The Actor records a warning and preserves the matched profile record. An unmatched profile fails rather than emitting incorrect data.

Does it use my supplied domain outside that domain?

No. Company links must remain on the same origin after redirects.