To combine LinkedIn email and phone results, submit the same public profile URLs to the LinkedIn Email Scraper and the LinkedIn Phone Number Finder. Join both Datasets back to your original file using the returned linkedin_url. Keep email and phone statuses separate so partial matches remain useful.
The email Actor supplies available work or personal email fields; the phone Actor supplies mobile_phone. You can run both through their input forms or ask an MCP-connected agent to coordinate them. Your master file preserves the source relationships throughout the process.
Step 1. Prepare a master file and a unique lookup list
Create a master sheet with row_id, original_url and profile_key. Retain prospect context such as source list or expected employer. Give every original row its own ID, including repeated profiles.
For ordinary public /in/ URLs, use a consistent HTTPS LinkedIn host, remove tracking queries and trailing slashes, and preserve the verified profile slug. Review different slug spellings before merging their identities.
- Keep all original rows in Master.
- Create one comparison key per supported public profile.
- Put unsupported company pages or unresolved Sales Navigator links into a review status.
- Copy distinct supported profile keys into Lookup inputs.
- Save that exact list for both Actors.
For example, two campaign rows can refer to the same person. That person needs one lookup per Actor, while both campaign rows remain in the final master file.
Step 2. Run the email lookup
Open the LinkedIn Email Scraper, click Try for free and use the Input form in Apify Console. Paste the first five distinct public profiles from your prepared list.
Enable work email and disable personal email for a work-only test. Keep the email-only filter on for a contact matches file. Review pricing and the run budget, start the Actor and save its Dataset plus run ID.
{
"linkedinUrls": [
"https://www.linkedin.com/in/YOUR_PROFILE"
],
"includeWorkEmails": true,
"includePersonalEmails": false,
"onlyWithEmails": true
}Replace the placeholder with your real input. Keep linkedin_url, work_email, has_email and available identity fields from the output. The email lookup guide explains personal email options and diagnostic filter settings.
Step 3. Run the phone lookup on the same profiles
Open the LinkedIn Phone Number Finder in Apify Console. Paste the same distinct public URL list, keep onlyWithPhones on for a phone matches file and set a separate run budget.
{
"linkedinUrls": [
"https://www.linkedin.com/in/YOUR_PROFILE"
],
"onlyWithPhones": true
}Save linkedin_url, mobile_phone, has_phone and the available identity fields. Keep this run ID and Dataset ID separate from the email stage. Follow the phone lookup guide for phone formats and account allowance details.

The read-only reference shows the phone Actor’s URL input and result filter. Enter the same actual profile list in both editable Console forms.
Understand what the two filters can hide
With onlyWithEmails and onlyWithPhones enabled, each Dataset contains its qualifying results. A profile absent from one file may still appear in the other. An absent profile is not enough to establish why a contact is missing.
For diagnostics, disabling a result filter can return matching stored profiles without that contact. It still does not guarantee output for every unmatched URL, and exported no-contact profiles may also be charged. Keep the submitted list and completion evidence for each run.
The Actors look up stored records. Names, employers or contact values can disagree between the two outputs or with a current public profile. Put those cases into review before selecting the contact you will use.
Step 4. Create one reviewed row per profile in each results table
Create Email review and Phone review sheets. Normalize returned linkedin_url values with the same rules as your input keys. Each review sheet should contain at most one selected result per profile key.
| Table | Keep |
|---|---|
| Email review | Profile key, selected work email, optional grouped personal emails, email status and email run ID. |
| Phone review | Profile key, selected mobile_phone, phone status and phone run ID. |
| Conflict review | All differing candidates, identity context and the reason a selection needs review. |
Collapse duplicate identical values. If a profile has different returned emails or numbers, retain the candidates and resolve them deliberately. Selecting the first row without review can hide conflicting contact data.
Use statuses such as matched, profile without contact, no return, not submitted, run incomplete and conflict. Some statuses require the batch log or diagnostic output rather than the contact matches file alone.
Step 5. Join both results from the master sheet
In a spreadsheet, use exact lookups from Master’s profile_key into each reviewed table. Bring back the contact and status separately. Keep every master row, including unsupported URLs and rows that appear in several source lists.
| Row | Work email | Phone | Summary |
|---|---|---|---|
| 101 | Returned | Returned | Both contacts available. |
| 102 | Returned | Empty | Email only; phone status retained. |
| 103 | Empty | Returned | Phone only; email status retained. |
| 104 | Empty | Empty | Detailed lookup statuses explain the empty fields. |
Check that the merged master has the same number of rows as the original. If its row count grows, inspect duplicate keys in the review tables. Multiple email and phone records for the same profile can multiply each other when joined directly.
Optional SQL join for reviewed tables
This local query assumes master retains every source row and each review table has a unique profile_key. The phone review column uses the actual Actor output name mobile_phone. Unsupported master keys are stored as NULL.
SELECT m.row_id, m.original_url,
e.work_email, p.mobile_phone,
CASE WHEN m.profile_key IS NULL
THEN 'unsupported input'
ELSE COALESCE(e.status, 'not reconciled')
END AS email_status,
CASE WHEN m.profile_key IS NULL
THEN 'unsupported input'
ELSE COALESCE(p.status, 'not reconciled')
END AS phone_status
FROM master AS m
LEFT JOIN email_review AS e
ON e.profile_key = m.profile_key
LEFT JOIN phone_review AS p
ON p.profile_key = m.profile_key
ORDER BY m.row_id;Keep candidates for a conflict in a separate review table and leave the selected field empty until resolved. Retrying the phone lookup can then update Phone review while preserving the existing email selection and all source rows.
Scale the workflow with separate batch histories
Each Actor accepts up to 100,000 profile URLs per run. Split larger files into batches and keep the exact same normalized profile keys across stages. Save inputs, filters, budgets, terminal statuses and Dataset IDs for every batch.
Read account allowances, pricing and any QUOTA or ERROR records exposed by the selected Actor. If one stage stops early, retain its partial output and mark that stage incomplete. The other stage can still have useful completed results.
Report original source rows, distinct submitted profiles, reviewed email matches, reviewed phone matches and profiles with both. A profile repeated across two source lists counts once at the profile level and twice at the source-row level.
Ask your agent to coordinate both Actors through Apify MCP
Connect an MCP-compatible agent to https://mcp.apify.com and authorize your Apify account using the MCP setup guide. Give it the master file and a separate budget for each lookup.
Enrich my LinkedIn profile master file.
Actors:
x_guru/linkedin-email-scraper-no-cookies
x_guru/linkedin-phone-number-finder
Input file: [MY_MASTER_FILE]
Approved event caps USD:
email [AMOUNT], phone [AMOUNT].
Inspect both current schemas. Keep every
master row with row_id and original_url.
Build distinct supported public profile
keys and use the same list in both runs.
Start with five profiles.
Request work email only, with
onlyWithEmails=true. Use
onlyWithPhones=true for the phone run.
Apply each approved cap through
callOptions.maxTotalChargeUsd.
Wait for each run and read all pages.
Review linkedin_url and identity fields.
Build one reviewed row per profile key
for email and phone separately. Flag
conflicting contacts instead of picking
an arbitrary value.
Left-join work_email and mobile_phone
to every master row, with separate
statuses and run IDs. Preserve partial
matches, unsupported URLs and failures.
Save raw results and the enriched CSV.
Report counts before expanding.The agent can start each run with call-actor, wait with get-actor-run and read successive Dataset pages with get-dataset-items. Its report should make clear which stage supplied each field and which stages remain incomplete.
For a quick combined lookup in Dievio, open LinkedIn Lookup. For recurring application exports, use the Apify run and Dataset guide. Keep the separate email and phone guides handy when changing either stage’s settings.



