How to bulk import and clean a lead list
How-to guide Updated 12 July 2026
How do you bulk import and clean a lead list with AI?
Hand Claude your CSV and tell it what to bin: duplicates, empty emails, role addresses, whatever your rules are. It cleans the file, imports only the rows worth keeping through the HotHawk MCP server, reports what it dropped, and drops the clean leads into a fresh list ready for a campaign.
No credit card required.
Before you start
You need a HotHawk account and the HotHawk MCP server connected to Claude. It takes a couple of minutes and no code. Full setup is on the MCP server page.
Step by step
-
1
You ask Claude
Import the 2,300 leads from this CSV, but drop the duplicates and anything without a work email.
Claude callsmcp__hothawk__crm_leads_bulk_createleads cleaned rows source your CSV skipDuplicates trueClaude reads the file, spots the repeats and the empty or role-based addresses, and imports only the rows worth keeping. It tells you how many it dropped and why.
-
2
You ask Claude
How many did you skip, and what got binned?
Claude callsmcp__hothawk__crm_leads_bulk_createreport import summary skipped counts by reasonYou get the tidy-up in plain numbers: 140 duplicates, 60 with no email, a handful of obvious junk. Nothing vanishes silently, so you can trust what went in.
-
3
You ask Claude
Put the clean ones in a new list called Fintech Founders.
Claude callsmcp__hothawk__crm_lists_createname "Fintech Founders" leads the imported rowsThe list is created and the clean leads sit in it, ready to point a campaign at. One import, one sorted list, no spreadsheet left open.
A dirty list is a sending problem, not an admin one
Most people treat cleaning a lead list as tidy-up work, the boring bit before the real job. It is the opposite. The state of your list decides how your mailboxes get treated. Send to a pile of dead addresses and you bounce. Bounce enough and providers stop trusting the inbox you sent from, which drags down every campaign after it, even the clean ones.
So the clean-up is the sending strategy. A list with no duplicates, no broken emails and no info@ catch-alls is the single cheapest thing you can do to protect your reputation. It is also the most skipped, because doing it by hand in a spreadsheet is dull and slow.
Let Claude do the boring pass
This is the exact shape of work a model is good at. You give it the file and your rules in a sentence, and it works down every row: matching duplicates, flagging the empties, spotting the role addresses that never reach a human. It imports the survivors with crm_leads_bulk_create and hands you a plain summary of what it binned.
The summary matters as much as the import. You see 140 duplicates gone, 60 with no email, a dozen bits of junk, so you know what went in and why. Nothing disappears quietly. Your original file is untouched; the clean version is what reaches HotHawk.
Put the clean leads somewhere useful
A clean import is only half the job if the leads scatter into one big undifferentiated pool. So the last step puts them in a named list with crm_lists_create, ready to point a campaign at. Fintech founders in one list, agency owners in another, whatever the file was.
From here the leads sit inside HotHawk, ready for the rotation and warmup that guard every send. But none of that machinery saves you from a bounce rate you imported yourself, which is why the clean list you just built matters more than the protections around it. Next you can segment it further or launch straight into a campaign, both a sentence away in the same chat.
The HotHawk tools behind this
Every action here is a real endpoint. Claude reaches it over the MCP server, and you can hit the same endpoints directly from the REST API if you would rather build it into your own stack.
-
mcp__hothawk__crm_leads_bulk_createImport a batch of leads and skip the duplicates -
mcp__hothawk__crm_lists_createCreate the list the clean leads go into
Frequently asked
What counts as a lead worth dropping?
The usual culprits: exact duplicates, rows with no email or a broken one, and role addresses like info@ or sales@ that never reach a person. You can tell Claude your own rules too, such as binning free webmail domains or anything missing a company name.
Why bother cleaning before I import?
Because a messy list hurts your sending. Bounces off dead addresses and duplicate hits to the same person are exactly what mailbox providers watch for. Cleaning first keeps your bounce rate low, which protects the reputation of every mailbox you send from.
Can I see what got skipped before it commits?
Yes. Ask Claude to show the summary first: how many duplicates, how many missing emails, what it plans to drop. You approve, then it imports. Nothing is deleted from your file, only left out of the import.
How big a list can I import at once?
Thousands of rows in one go. For very large files it is worth having Claude clean and import in batches so you can eyeball each summary. The same bulk endpoint sits in the REST API if you want to run it as a scheduled job.
Do I need to write code to do this?
No. You hand Claude the CSV and describe the tidy-up in plain language. It does the rest through the MCP server. The REST API is only there if you would rather wire imports straight into your own stack.