LinkedIn Profile Contact Enricher
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
20 days ago
Last modified
Categories
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:
- normalizes the profile URL;
- resolves public profile metadata such as name, headline, company, and summary;
- optionally visits a supplied official company or institution URL;
- follows up to five same-domain contact, team, leadership, or about links;
- returns only published emails found near the person's name or on the supplied public person page;
- 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?
| Field | Type | Meaning |
|---|---|---|
linkedinUrl | string | Normalized public /in/ URL |
fullName | string or null | Name from public metadata |
headline | string or null | Public professional headline |
currentCompany | string or null | Company parsed from an “at” headline when available |
publicProfileSummary | string or null | Public profile description or search snippet |
publicWorkEmails | array | Published work-contact emails with evidence; never predicted |
companyContacts | array | General contact pages or phone numbers found on contact pages |
sources | array | Retrieval surface, URL, and timestamp |
enrichedAt | string | ISO 8601 completion time |
warnings | array | Skipped 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
- Open the Actor in Apify Console.
- Add one or more public LinkedIn profile URLs under Profiles to enrich.
- Add
fullNamefor best matching, especially when a profile slug is opaque. - Optionally add an official public
companyDomainor exact person page. - Keep Inspect public company websites enabled when you want work contacts.
- Set Maximum profile records.
- Click Start.
- 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"}
urlmust be a public LinkedIn/in/profile.fullNameis recommended and required when the slug does not contain separate name words.companyDomainis 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
startevent per run; - one
itemevent 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 profiles | Estimated 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
fullNamefor 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 osfrom apify_client import ApifyClientclient = 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().itemsprint(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.
Legal and ethical use
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.
Related Automation Lab Actors
- LinkedIn Profile Scraper — deeper LinkedIn profile fields when you need work history, education, and other profile sections.
- LinkedIn Public Profile Search Scraper — discover public profile URLs by role, company, location, or keyword.
- LinkedIn Profile URL Finder — resolve known people or identity records to likely LinkedIn URLs.
- Domain to LinkedIn URL Resolver — connect company domains to LinkedIn company pages.
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.