← all playbooks

Check an old email list before it touches your sending domain

Your list with a deliverability verdict on every address, sorted into send, hold and do not send. You know how many would have bounced before one of them reaches your sending domain.

use when
you are about to email a list you did not build this month, such as an old export, a bought list or last year's campaign
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 check every email on this list before I send to it.

The list is <FILE_PATH_OR_CAMPAIGN_NAME>. It came from
<WHERE_THE_LIST_CAME_FROM> and nobody has sent to it since <LAST_USED>.

How I want it run:
- First the free checks: duplicates, addresses that are not valid email
  syntax, and shared inboxes such as info@ or jobs@. Show me the counts.
- Drop anyone on my suppression list: <SUPPRESSION_FILE_OR_COLUMN>.
- Then a deliverability verdict on every address that is left.
- Sort the results into send, hold and do not send. Catch-all addresses
  that could not be confirmed go in hold, and so do unknowns.
- Do not look for replacement addresses. I only want the verdicts.

Run five rows first and tell me what the full run costs before you do the
rest. The check is charged per address whatever the verdict, so give me the
figure for the whole list. Wait for my go-ahead.

Give me back my list with the verdict and the group on every row. Do not
send anything, and do not change the campaign or load the list 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 an email column, or a campaign in your sequencer that has not started
  • Your suppression list, if you keep one: unsubscribes, past bounces, do-not-contact
  • A rule for the uncertain addresses: hold them back, or accept the risk
  • 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 list, wherever it sits

    free

    A file, pasted rows, or the leads already loaded into a campaign that has not started. Reading a campaign in your own sequencer costs nothing, and the agent only reads it.

  2. 2

    Run the free checks first

    free

    Duplicates, addresses that are not valid email syntax, shared inboxes such as info@, and anyone on your suppression list are taken out by plain comparison. Nothing is spent, and every address removed here is one you do not pay to check.

  3. 3

    Pilot five addresses and price the run

    credits

    Five addresses are checked so you see what a verdict looks like. The check is billed per address whatever the verdict, so the figure for the full list is a count, not a guess. The agent states it and waits for your go-ahead.

  4. 4

    Get a verdict on every address

    credits

    Each address comes back as valid, catch-all and confirmed, catch-all and unconfirmed, invalid, or unknown. A check that errors out is not charged and is not recorded as a verdict.

  5. 5

    Take a second opinion on the unclear ones

    credits

    Unknowns, and invalid verdicts on domains whose mail server is plainly working, can go to a second checker. You approve that pass separately and it runs on those rows only.

  6. 6

    Sort into send, hold and do not send

    free

    Valid and confirmed catch-all addresses go in send. Unconfirmed catch-all addresses and unknowns go in hold. Invalid addresses, and everything the free checks removed, go in do not send, each with its reason.

  7. 7

    Hand the list back

    free

    A copy of your list with the verdict and the group on every row, plus the counts per group. Your original file and your campaign are left as they were.

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
25under $19.5 creditsunder $19.5 credits
100$2.828 credits$2.828 credits
500$13130 credits$13130 credits
1,000$25250 credits$25250 credits

Free before anything is charged

  • Read the list, wherever it sits
  • Run the free checks first
  • Sort into send, hold and do not send
  • Hand the list back

What moves the number

  • 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.

A bounce costs more than the check that would have caught it

Old lists decay. People change jobs, companies close mailboxes, and a list that was good when somebody built it carries more dead addresses the longer it sits. You cannot see that by looking at it. A dead address and a live one are the same string of characters.

Your sending domain finds out the hard way. Mailbox providers judge a sender partly by how much of its mail bounces. Send an unchecked export and the bounces count against the domain, and the damage is not limited to that campaign: your later mail, including replies to live clients, starts landing in spam.

So this play finds nothing. The addresses are already on your list. It gets a verdict on each one and sorts the list into what you can send to, what you should hold, and what you should never send to.

What you get back

Your list with two columns added: the verdict and the group.

Send holds the valid addresses, including catch-all addresses the check was able to confirm. Hold contains catch-all addresses that could not be confirmed, and unknowns. Do not send contains the invalid ones, plus everything the free checks and your suppression list removed, each with its reason.

You also get the counts per group. Nothing is sent and no campaign is touched.

Variations worth knowing

The list is already in a campaign. If the leads sit in Instantly, lemlist or SendKit and the campaign has not started, the agent reads them from there with your own account connected. It reads only. Taking the failed addresses out is yours to do.

Check the sender as well. If you send through SendKit, the agent can also read the health and warm-up state of the mailbox you plan to send from.

Replace the dead ones. Not in this play. Get emails and mobiles for a list you already have finds current addresses for the rows that failed.

Then build the campaign. With a clean send group, build the outreach sequence and keep the hold group out of it.

Where this goes wrong

Treating hold as send. An unconfirmed catch-all address may bounce or may not, and nobody can tell you which. A few in a campaign is a judgement call. A list that is mostly hold is a list to leave alone.

Checking once and sending much later. A verdict describes the mailbox on the day it was checked. If the campaign slips, the check slips with it.

Deliverable is not the same as welcome. A bought list can pass every check and still draw complaints. The check says nothing about whether these people expect to hear from you.

Shared inboxes pass. An info@ address is perfectly deliverable, and nobody you want to reach reads it. That is why they are counted in the free checks and shown to you.

Questions

Why do bounces matter so much?

Because mailbox providers judge a sending domain partly on how much of its mail bounces. A sender who keeps writing to mailboxes that do not exist looks like a sender who does not know who they are writing to, and the penalty lands on the domain, not on the campaign. Your later mail, including replies to live clients, starts going to spam. Old lists carry dead addresses for an ordinary reason: people change jobs.

What do the verdicts mean, and what do I do with each?

Valid: the mailbox exists, send. Catch-all and confirmed: the domain accepts mail for any address, but the check was able to confirm this one, send. Catch-all and unconfirmed: nobody can prove the mailbox exists, so hold it, send only if you accept the risk, or reach the person on LinkedIn. Invalid: do not send, and keep the person, because it is the address that is dead and not the contact. Unknown: the check reached no verdict, so hold it and try again later or ask for a second opinion.

Do I pay for the addresses that turn out to be dead?

Yes. The verdict is what you are buying, and invalid is as much an answer as valid, so the main check is billed per verdict whatever it says. A check that errors out is not charged. That is why duplicates, broken syntax and suppressed addresses are taken out first, free. The second-opinion checkers have their own rates, and the agent states them before that pass.

Should it find a replacement for the dead addresses?

Not in this play. It does one job, so the cost is a simple count and the result is a clean yes or no on the list you have. The do not send group is a ready-made input for a lookup afterwards: work email for client contacts, personal email for candidates. Decide that once you have seen how many there are.

The list passed. Is it safe to send?

It is safe from bounces on the day it was checked. A verdict describes a mailbox, not a person's wish to hear from you, so a bought list can pass every check and still draw complaints, which hurt a sender as much as bounces do. And a verdict ages. If the list sits unused again, check it again before you send.