To find work emails from LinkedIn profile URLs, paste your public profile links into the LinkedIn Email Scraper on Apify. Enable work emails, run the lookup and export its Dataset as CSV. Keep the returned linkedin_url with each address so you can match the contact to your original spreadsheet.
The Actor looks up stored professional records associated with those profile URLs. You need an Apify account; the input does not require your LinkedIn cookies. You can start with one profile or process a prepared list of up to 100,000 URLs per run.
Step 1. Prepare public profile links
Start with ordinary person-profile links containing linkedin.com/in/. Keep a sheet with source_row, business context and the original URL. Copy the supported links into a separate lookup list.
- Remove spaces around the URLs.
- Use a consistent LinkedIn host and HTTPS scheme.
- Remove tracking query parameters and trailing slashes for your comparison key.
- Keep the profile slug from the verified public URL. Review different slug spellings before treating them as the same person.
- Deduplicate the lookup list, while retaining repeated source rows in your master file.
A company page, Sales Navigator record and public person profile are different inputs. If your file starts with Sales Navigator links, use the Sales Navigator export guide to check whether you have supported public profile URLs. Retain unsupported rows with a reason until you can resolve them.
For a short pilot, choose people whose name and employer you can verify. This makes it easier to recognize a stale or unexpected result before processing the full list.
Step 2. Choose work email settings in Apify Console
Open the LinkedIn Email Scraper on Apify, click Try for free and sign in if prompted. Open the editable Input form in Apify Console.
- Paste the profile URLs into LinkedIn Profile URLs.
- Leave Include Work Emails enabled.
- Turn Include Personal Emails off for a work-email-only list.
- Keep Only Return Profiles With Emails on when you want a matches file.
- Review the current Pricing tab and set the run spending limit.
- Click Start, then wait for completion before counting your final results.
The publisher also offers Bulk LinkedIn Email Finder with the same current input controls. Choose one listing for your workflow and keep its name with the run history.
The public input reference describes the switches. The image below is read-only; enter your profile list in the Console form.

JSON for a work-email batch
Replace the illustrative profile with a real public URL before starting. Add more profile URLs to the array when your list is ready.
{
"linkedinUrls": [
"https://www.linkedin.com/in/YOUR_PROFILE"
],
"includeWorkEmails": true,
"includePersonalEmails": false,
"onlyWithEmails": true
}The two email-type switches determine which contact categories you request. Enable at least one. With only work email enabled, the email-only filter keeps profiles with an available requested email; a personal address alone does not fill your work-email column.
Understand the email filter before interpreting omissions
onlyWithEmails: true is convenient for a contact file. A missing URL in that output can mean no matching stored profile, no requested email, or an incomplete lookup. Keep the original input list to distinguish what was submitted from what was returned.
For a diagnostic pilot, set onlyWithEmails to false. Matching profiles without the requested email can then appear too. Check pricing first because an exported profile may be a billable result even when its requested contact field is empty.
Disabling the filter still does not create a row for every unmatched URL. Your own source sheet remains the basis for a complete report. Compare it with the run status and logs before assigning an outcome.
Step 3. Read the returned profile and email fields
Open the completed run’s Dataset. Start with the profile link, name, company and role, then inspect the email. These fields help you check whether the match fits the person you intended to contact.
| Field | How to use it |
|---|---|
linkedin_url | Match the returned record to the public profile input. |
full_name, first_name, last_name | Review the person’s identity. |
job_title, company | Check employer and role context. |
work_email | The available work address when requested. |
personal_emails, personal_emails_count | Personal email results when that category is enabled. |
has_email | Whether the record has an available requested email. |
Keep work and personal addresses in separate columns. If the returned work domain differs from the expected company, check for a parent brand, a former employer or an older record before accepting it. Preserve disagreements in a review sheet.
The lookup returns stored data, so a current LinkedIn profile can differ from its associated record. An available work email also needs a separate deliverability check if your process requires one. Save the date of lookup with your export.
Step 4. Export CSV and attach matches to your source rows
- Choose CSV from the completed Dataset’s export action.
- Include the returned profile URL, identity fields and requested email fields.
- Save the original CSV with its run ID and Dataset ID.
- Normalize returned profile links with the same rules as the input keys.
- Look up email results from the original master sheet using an exact profile key.
- Keep source rows without matches and record their outcome.
Download JSON as well if personal email arrays are awkward in a spreadsheet. For one row per original prospect, group multiple contact values before joining. Keep a separate contacts table if you need one row per email.
| Outcome | Meaning |
|---|---|
| Work email returned | A reviewed profile has a work-email value. |
| Profile returned without work email | A matching record appeared, but the requested work contact is empty. |
| No profile returned | No saved row maps to the submitted URL; review filters and run completion. |
| Unsupported input | The source row still needs a supported public person-profile URL. |
| Review conflict | The identity, employer or contact candidates need checking. |
Process larger URL lists and report useful coverage
The Actor accepts 1–100,000 URLs per run. For a larger source file, prepare batches of distinct supported profiles and retain their source mappings. Save each batch input, selected email types, filter settings, run ID and Dataset ID.
Review the current run price and any account or output allowance before expanding. A spending limit or interrupted run can leave part of the submitted list without saved results. Mark that batch incomplete until the run evidence supports a completed lookup.
Count original rows, unique submitted profiles and profiles with usable work emails separately. If one matched profile appears twice in a five-row master list, that is one matched person and two enriched source rows. Keep those two measurements clear.
When comparing the two email Actor listings or another service, use the same URL list and email categories. Count reviewed usable matches, conflicts and actual charges for the test. Coverage depends on the profiles you submit.
Run LinkedIn email lookup with your agent through Apify MCP
Connect an MCP-compatible agent to https://mcp.apify.com and authorize your Apify account using the official MCP guide. Give the agent your file and the email categories you want.
Use x_guru/linkedin-email-scraper-no-cookies.
Profile input: [MY_URLS_OR_FILE]
Approved event-charge cap USD: [AMOUNT]
Inspect the current schema. Start with
five distinct public /in/ profile URLs.
Keep a mapping to every source row.
Use includeWorkEmails=true,
includePersonalEmails=false and
onlyWithEmails=true.
Apply the approved cap through
callOptions.maxTotalChargeUsd.
Wait for completion. Read all Dataset
pages. Match linkedin_url to the input
profile keys. Preserve name, company,
job_title, work_email and has_email.
Keep unsupported, unmatched and
incomplete cases visible in the master.
Flag identity or employer conflicts.
Save raw output and an enriched CSV.
Report counts, run ID and Dataset ID.
Wait before processing the full list.The agent starts the Actor with call-actor, checks progress with get-actor-run and reads Dataset pages through get-dataset-items. Its final report should distinguish missing contacts from unprocessed inputs.
For a quick lookup in Dievio, open LinkedIn Lookup. To add numbers, follow the phone finder guide and combine both Actor results. For repeat exports from an application, use the Apify run and Dataset guide.



