← all playbooks

Get emails and mobiles for a list you already have

A copy of your own list with the contact columns you asked for filled in: personal email, work email or mobile. Each value is marked with the provider it came from and whether it was verified, and every row that came back empty says why.

use when
you already have the names, in a spreadsheet or a shortlist, and all you are missing is a way to reach them
starts from
A list

The prompt

Paste it into Claude Code or the Claude desktop app with Hyreflow connected. The first line tells your agent to use Hyreflow, so it reads the play, asks before it spends anything, and hands the work back to you.

paste this into Claude
Use hyreflow and get contact details for the list I already have.

The file is <FILE_PATH_OR_PASTED_ROWS>. These people are
<CANDIDATES_OR_CLIENT_CONTACTS>, so pick the channel to match: personal
email for candidates, work email for client contacts. Never a candidate's
work email.

The only columns I want added: <PERSONAL_EMAIL / WORK_EMAIL / MOBILE>.

How I want it run:
- Before spending anything, tell me which rows you cannot match and why.
- Skip any row that already holds the detail I asked for.
- Mobiles only for <WHICH_ROWS_NEED_A_MOBILE>. They cost more than an email.
- Verify the emails after you find them, and mark the ones that fail.

Run five rows first and tell me what the full run costs before you do the
rest. Wait for my go-ahead.

Give me back a copy of my file with the added columns and a status on every
row. Do not send anything to anyone and do not load it anywhere.

Replace every <PLACEHOLDER> with your own detail. Everything else can stay as written.

What you need first

  • The list as a CSV or spreadsheet export, with a LinkedIn URL per person, or first name, last name and company
  • A decision on who these people are: candidates, or client contacts and hiring managers
  • A Hyreflow workspace with credits, or your own provider keys connected

Tools it can reach for

The agent picks per step from what your workspace has. Nothing here is required by name.

What happens when you run it

Free steps are marked free. Anything that spends credits is marked, and the agent asks before the first paid run of any size.

  1. 1

    Read the file and pick the channel

    free

    The agent looks at your columns, counts the rows and asks one question before anything else: are these candidates or client contacts? Candidates get personal email and mobile, client contacts get work email, and the answer decides which providers are used.

  2. 2

    Check what each row can be matched on

    free

    A LinkedIn URL is the strongest match, and first name, last name and company domain also works. Rows with neither are marked as unmatchable here, and duplicates and rows that already hold the detail are set aside, all before anything is spent.

  3. 3

    Pilot five rows and price the full run

    credits

    Five rows run end to end so you see the real output and what it really cost. The agent then states the most the full list could cost and waits for your go-ahead.

  4. 4

    Run the email chain for that channel

    credits

    Each row walks a fixed chain of providers, low-cost ones first, and stops at the first hit, so a row found early never reaches the dearer providers. A work address is checked against the employer on the row before it is accepted.

  5. 5

    Look up mobiles only where you asked

    credits

    A mobile is a separate lookup at a higher rate than an email, and a less reliable match. It runs on the rows you name and never by default.

  6. 6

    Verify deliverability last

    credits

    Addresses are checked once they have been found, so nothing is spent verifying a guess. Undeliverable ones are marked, and catch-all addresses that pass the check are kept.

  7. 7

    Hand the file back

    free

    A copy of your file with the added columns, your original left untouched. Every row carries a status: found, not found, skipped or no usable identifier, plus the provider that supplied the value and what that row cost.

What a run costs

Credits are spent per record the play actually works, and a lookup that finds nothing usually costs nothing. The two figures are the run where the first provider answers and the run where every lookup walks its full chain.

recordsif the first provider answersif every lookup walks the chain
25$11110 credits$19190 credits
100$42420 credits$70700 credits
500$2082080 credits$3443440 credits
1,000$4164160 credits$6876870 credits

Free before anything is charged

  • Read the file and pick the channel
  • Check what each row can be matched on
  • Hand the file back

What moves the number

  • The channel. This play buys personal email, because these are candidates, and a work inbox is the wrong place to approach one. A personal address costs more to find than a work one.
  • Coverage on personal email. The chain stops at the first provider that answers, and only that provider bills.
  • How many records survive the free filters. Everything dropped before the paid steps costs nothing.
  • Providers you connect with your own key. Those calls bill your account, not your credits.

An estimate, not a quote, priced at the volume credit rate. Your agent sizes the run against your own workspace and tells you what it will cost before it spends anything.

Contact details are three lookups, not one

Recruiters ask for them by name: personal email, work email, mobile. They are right to, because each is a separate lookup with its own providers, its own rate and its own odds of a hit. Buy all three on every row and you pay for mobiles you never dial and for work addresses you should not use on a candidate.

You have already done the hard part. The names are in a job board export, last year's shortlist or a delegate sheet. This play does not source or score anyone. It asks which channel you need and for whom, fills those columns, and tells you what it will cost before it runs.

What you get back

A copy of your file, same rows, same order, with the columns you asked for added. Next to each value: the provider it came from, whether it was verified, and what that row cost. Your original file is not edited.

Rows that came back empty say why. No usable identifier, nothing found, or skipped because you already held the detail are three different answers, and only one of them means the person is hard to reach.

Nothing is sent, and nothing is loaded into a sequencer or a CRM.

Variations worth knowing

Mobiles only. If the list already has emails and you want to dial, say so. The mobile lookup runs on its own, on the rows you name. It is the dearest of the three, so give it your top twenty, not the sheet.

A second pass on work emails. On a client list, rows the main chain missed can go through BetterContact, which checks several sources in one job. You approve it separately, and it returns work addresses only, so it is never run on candidates.

Only verify. If the file already has addresses of unknown age, skip the search and run the deliverability check alone.

Send it somewhere next. The same session can stage an outreach sequence or fill the gaps in your CRM, each with its own approval.

Where this goes wrong

Thin identifiers. A first name and an employer spelled three ways is not a match. Those rows are marked as unmatchable, not guessed at, because a wrong mobile is worse than an empty cell.

A mixed list. Candidates and hiring managers in one sheet need different channels. Split the file, or add a column that says which is which.

Old employers. A work address is checked against the company on the row. If the person left that company three years ago, good hits get rejected. Refresh the employer first with clean and refresh your database.

A spending cap mid-run. If your workspace reaches its cap, the remaining rows are marked as not attempted, which is different from not found. Run it again later: rows already paid for are kept.

Questions

Why does it ask whether these are candidates or client contacts?

Because the answer decides the channel. If you are approaching someone about leaving their job, you write to their personal email or LinkedIn, not an inbox their employer owns. If you are pitching a company, the work email is the right address. The two channels use different provider chains, so the question also decides what gets searched and what you pay for.

Do I pay for rows that come back empty?

On the candidate chain, no. A row where no personal email is found costs nothing, and an address on the person's own employer domain is not accepted as personal or charged. On the work-email chain the first providers bill only on a hit, and one provider late in that chain charges a small lookup fee even when it finds nothing. Verification is billed per address checked, whatever the verdict. The pilot shows what each row was really charged, and the figure you approve is a worst case.

Why are personal email, work email and mobile treated as three things?

Because the providers sell them as three separate lookups at three different rates, and mobile is the dearest and the least reliable of the three. Asking for all of them on every row to be safe is the most expensive way to run a list. Ask for the channel you will use this week, and add the others for the people who turn out to matter.

How many of my rows will it find?

Nobody can promise that honestly. Coverage is a property of the person, not of how hard anyone looks. Someone with a full public profile at an established employer is far easier to find than a bare profile or someone at a five-person firm, who often returns nothing from any provider. The five-row pilot is a small read on your own list, and a LinkedIn URL on the row improves the match more than anything else you can add.

Is it all right to hold personal emails and mobiles for these people?

That is your decision and your responsibility, not something the play decides for you. Personal email and mobile are personal data, so under GDPR and similar rules you need a lawful basis for holding them and you need to honour opt-outs. The file records where each value came from, which helps if anyone asks. Tell the agent which column marks do-not-contact and those rows are dropped before anything is spent. Nothing is sent by this play.