Skip to content

How to Merge LinkedIn Email and Phone Results from Two Actors

Run email and phone lookups on one LinkedIn URL list, review each result, and merge both into the original file without dropping partial matches.

Dievio Team · Growth Systems · November 6, 2026 · 7 min read

Email and telephone records joining into one workflow

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.

  1. Keep all original rows in Master.
  2. Create one comparison key per supported public profile.
  3. Put unsupported company pages or unresolved Sales Navigator links into a review status.
  4. Copy distinct supported profile keys into Lookup inputs.
  5. 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.

LinkedIn Phone Number Finder reference showing where to supply the shared profile URL list and select the phone-only filter
The phone lookup uses the same prepared public profile list as the email stage.

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.

Dievio

You have the profiles. Find the contacts.

Turn LinkedIn URLs into available work emails and phone numbers with Dievio.

Find work emails

One profile or a whole list

LinkedIn LookupExample
LinkedIn URLContact details
AM
Alex MorganFounder & CEO · Northstaralex@northstar.example
JC
Jamie ChenCo-founder · Formlyjamie@formly.example
Work emailsCompany detailsCSV export

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.

Fields for the reviewed lookup tables
TableKeep
Email reviewProfile key, selected work email, optional grouped personal emails, email status and email run ID.
Phone reviewProfile key, selected mobile_phone, phone status and phone run ID.
Conflict reviewAll 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.

Fictional example of an enriched master list
RowWork emailPhoneSummary
101ReturnedReturnedBoth contacts available.
102ReturnedEmptyEmail only; phone status retained.
103EmptyReturnedPhone only; email status retained.
104EmptyEmptyDetailed 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.

Keep reading

Build your first list.

100 free credits. No credit card required.

Start free