Preparing a Lead List for Reply.io, Woodpecker or Saleshandy
To prepare a lead list for Reply.io, Woodpecker or Saleshandy, tidy the CSV columns your templates use, remove duplicates and suppressed contacts, verify every email shortly before sending, and import only valid addresses into the main sequence, with catch-all addresses in a separate low-volume one. The tools differ in details, but the list preparation is the same.
Step 1: Fix the columns before anything else
Personalisation breaks when columns are messy. Before import:
| Column | Clean-up |
|---|---|
| One address per cell, lowercase, no spaces or trailing commas | |
| First name | Proper capitalisation; no "JOHN" or "john smith" in the first-name field |
| Company | Remove Inc., LLC and similar if your template reads "at {Company}" |
| Custom first line | Check no cell is blank, or set a fallback in the template |
| Time zone or country | Useful for send windows in each tool |
The split full name tool separates first and last names, and the CSV import formatter helps reshape columns for import.
Step 2: Dedupe against everything
- Within the file. Use the duplicate email remover.
- Against your account. Export existing contacts from the tool and subtract them with compare two email lists, so nobody gets two sequences at once.
- Against your suppression list. Unsubscribes, previous bounces, customers and anyone who asked not to be contacted. See how to build a suppression list.
Step 3: Verify the emails
Verify close to the send date. If the campaign will take weeks to work through, verify each batch before it goes in.
Sort the results:
| Result | Where it goes |
|---|---|
| Valid | Main sequence |
| Catch-all | Separate sequence, lower daily volume, later start |
| Risky (role, disposable) | Usually leave out of cold outreach |
| Unknown | Re-check in a day or two |
| Invalid | Suppression list |
Some of these tools have built-in or add-on verification; check what your plan includes. Verifying before import means dead contacts never enter the account, and you decide how catch-all addresses are treated instead of a default setting.
Step 4: Set sending limits before importing
A clean list can still cause trouble if one mailbox sends too much. Before turning the sequence on:
- Set a conservative daily limit per mailbox. See cold emails per day per inbox.
- Spread the campaign across several warmed mailboxes if you have them.
- Turn on the tool's bounce protection if it has one, and set your own pause rule; see when to pause a campaign for bounces.
Step 5: Import and check the mapping
After upload, open a few contacts and preview the first email for each. Look for:
- Blank variables showing as empty space or raw placeholder text.
- Names in the wrong field.
- Contacts flagged by the tool as already existing.
Fix problems in the CSV and re-import rather than editing contacts one by one.
Step 6: Watch the first day
Send the first day's batch and check bounces and replies before scaling. If bounces appear, read the messages with the bounce message analyzer. "User unknown" means list problems; policy or reputation messages mean sending problems.
The same steps for other tools
If you also use Instantly, lemlist or Smartlead, the dedicated guides cover their import formats: Instantly CSV upload, lemlist CSV import and Smartlead list verification. For lists coming from Apollo, see Apollo export to sequencer.
Pre-import checklist
- Columns cleaned and match template variables
- Deduped within file, against account and against suppression list
- All emails verified; valid in main sequence, catch-all separate
- Daily limits and bounce pause set
- Preview checked on several contacts
- First day's bounces reviewed before scaling
Splitting a big list across mailboxes
If a list is larger than your mailboxes can send in a reasonable time, split it rather than pushing volume up. The email list splitter cuts a CSV into equal parts, which you can assign to separate campaigns or mailboxes. Keep each part's verification date, and re-check any part that waits more than a few weeks before sending.
Keep a master list across tools
Teams often run more than one sequencer, or several workspaces in one tool. Keep a single master list of everyone contacted, with the date and tool, and dedupe each new import against it. This prevents the same prospect getting two sequences from two colleagues, which is a fast route to complaints.
Verify before you import
Upload the CSV on the verify page; your personalisation columns stay in the download, so the valid file is ready to import. You get 100 free email checks when you sign in with Google, no card.
Common questions
Do Reply.io, Woodpecker and Saleshandy verify emails on import?
Some of these tools offer built-in or add-on verification, and features change. Check your plan. Verifying before import still helps, because you control how catch-all and unknown addresses are handled and you avoid importing dead contacts at all.
What columns should my CSV have for a cold email tool?
At minimum an email column. Most sequences also use first name, company and one or two custom fields such as a personalised first line. Keep column headers simple and consistent with the variables in your templates.
How do I avoid emailing the same person twice across campaigns?
Dedupe the new file against contacts already in your account and against your suppression list before importing. Most tools also warn about existing contacts, but do not rely on that alone across multiple accounts or workspaces.
Should I import catch-all emails?
Import them into a separate sequence with lower daily volume, and only after the valid segment has gone out cleanly. If bounces rise, stop that segment first.
Check your list before you send
Real mailbox checks over SMTP, and nothing is sent to the address. Sign in with Google and your first 100 email checks are free, no card. Plans for bigger lists are on the pricing page.