← all playbooks

Fill the missing emails and mobiles in your CRM

The records you chose, with their empty email, mobile or LinkedIn fields filled in and nothing that was already there overwritten. Alongside them, a change log listing every field that was written and where the value came from.

use when
your ATS or CRM is full of people you cannot reach because the email, mobile or LinkedIn field is empty
starts from
Your database

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 fill in the missing contact details in my <CRM_NAME>.

Count before you spend. Across <SEGMENT, E.G. ONE DESK OR A SKILL TAG>,
how many records have no email, no mobile, no LinkedIn URL? Show me the
counts first and I will pick where to start.

For the segment I pick:
- These are <CANDIDATES_OR_CLIENT_CONTACTS>. Personal email and mobile for
  candidates, work email for client contacts. Never a candidate's work email.
- Fill only the empty fields: <FIELDS_TO_FILL>. Never overwrite a value that
  is already there. If you find a different one, list it separately.
- Skip anyone marked <DO_NOT_CONTACT_FIELD_OR_STATUS>.

Run five rows first and tell me what the full run costs before you do the
rest.

Show me what you would change before you write anything: record, field,
value, source. Write only after I say so, one record first, then the rest,
and give me a log of every change.

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

What you need first

  • A connected ATS or recruitment CRM
  • A segment to start with, such as one desk, one skill tag, or everyone added since a date
  • A decision per segment: candidates get personal email and mobile, client contacts get work email
  • 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

    Count the gaps

    free

    The agent reads your records and counts how many have no email, no mobile or no LinkedIn URL, broken down by segment. It is a read of your own system, so it costs nothing.

  2. 2

    Pick a segment

    free

    You choose where to start: one desk, one skill tag, everyone added since a date. The whole database at once is rarely worth it, because much of it is people you will never call.

  3. 3

    Set the channel and the skip rules

    free

    Candidates get personal email and mobile, client contacts get work email. Records your CRM marks as do-not-contact or off-limits are dropped here, before anything is spent on them.

  4. 4

    Pilot five records and price the run

    credits

    Five records run end to end so you see real output and real cost. The agent then states the most the segment could cost and waits for your go-ahead.

  5. 5

    Look up only the empty fields

    credits

    Each record walks the provider chain for its channel and stops at the first hit. A field that already holds a value is never looked up, so you do not pay for data you have.

  6. 6

    Verify before anything is written

    credits

    Found addresses are checked for deliverability, so a dead address never lands in your CRM looking like a fresh one.

  7. 7

    Show the proposed changes

    free

    A table of record, field, proposed value and source. Where the agent found a value that differs from one you already hold, it is listed separately and the record is left alone.

  8. 8

    Write back, paced, with a log

    free

    One record first, so you can open it in your CRM and check it, then the rest at a pace your CRM's API limits allow. Every write is logged against the record id, so any change can be traced and reversed by hand.

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$12120 credits$20200 credits
100$43430 credits$72720 credits
500$2092090 credits$3463460 credits
1,000$4174170 credits$6886880 credits

Free before anything is charged

  • Count the gaps
  • Pick a segment
  • Set the channel and the skip rules
  • Show the proposed changes
  • Write back, paced, with a log

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.

The gap nobody has time to close

Every database has them. A strong candidate with good notes and no mobile. A client contact with a name, a job title and no email. Each is a record you paid to create and cannot use, and nobody fixes them, because it is one lookup at a time and there is always a live role that matters more.

The usual workaround is an export, an enrichment tool and a re-import. That round trip is where duplicate records and overwritten fields come from. This play works on the record where it lives. It reads what is empty, looks up only that, and writes only into empty fields, after you have seen the list of changes.

What you get back

The records in your segment, updated in place, plus a change log as a file: record id, field, the value written, the provider it came from, whether it was verified, and what it cost.

Two shorter lists come with it. Records where nothing was found, so you know the gap was tried and is real. And records where the found value differs from the one you hold, left untouched for you to decide.

Variations worth knowing

Client contacts instead of candidates. The same play on the other channel. Hiring managers get work email, and each address is checked against the employer on the record before it is accepted.

A file instead of write-back. If you would rather nothing wrote to your CRM, stop at the proposed changes and take them as a CSV keyed on your record id.

Add the LinkedIn URL. A record with an email, or a name and an employer, can often be resolved to a profile. Do it early, because a LinkedIn URL is the strongest key for every later lookup.

Refresh before you fill. If the segment is old, run clean and refresh your database first, so lookups run against where people work today.

Where this goes wrong

A stale employer on the record. Work-email lookups lean on the current employer, and a found address is checked against it. If the record still shows a company the person left, good answers are rejected.

Thin records. A name with no employer and no LinkedIn URL cannot be matched. Those are listed as unmatchable, not guessed at.

API access on your CRM plan. Some systems open their API only on higher plans. Recruit CRM is one: on a lower plan every call is refused even with a valid key. The play says so and falls back to a file.

Rate limits. Your CRM caps API calls per minute and the agent stays under that cap, so a large write-back is slow by design.

Custom fields that fail silently. JobAdder can accept a custom-field write and not save it. The agent reads the record back to confirm, which is one more reason to check the first record yourself.

Questions

Will it overwrite what is already in my CRM?

No. Only empty fields are filled, and a found value that disagrees with yours goes on a separate list for you to judge. One system needs extra care: JobAdder replaces the whole record on an update instead of patching one field. So the agent reads the full record, merges the value in, writes the full record back, and reads it again to confirm nothing was blanked. That is also why the first write is always a single record you can inspect.

Which CRMs can it write back to?

Recruit CRM, Loxo, JobAdder, Recruiterflow and Atlas connect from the dashboard and each has an update method for people records. Bullhorn and Vincere have one too, Vincere for candidate records only, but they are not self-serve connections yet, so they work only where the workspace has already been set up for them. For anything else, or if you would simply prefer it, the play stops at a file keyed on your record id and you import it yourself.

What does it cost?

Counting, choosing a segment, the change list and the write-back are free, because they run against the CRM seat you already pay for. The cost is the lookups. They are billed by what is found and by field type, with mobile the dearest. The agent gives you the figure for your segment after the five-record pilot and before the run.

Should I run it on the whole database?

Rarely. How findable someone is depends on the person, and it drops as a record ages: people change jobs, and a record with a name and an employer from years ago is a weak match. Start with the segment you are about to work. A later run picks up where this one stopped, and values already paid for are kept.

We hold these records under GDPR. Does adding personal contact data change anything?

It can, and it is your call to make, not the agent's. Personal emails and mobiles are personal data, so you need a lawful basis for adding them, and records past your retention period should be removed by you, not topped up. Leave those out of the segment. The change log records the source of every value, which helps with an access request. The agent skips any record your CRM marks as do-not-contact.