How to personalise cold email at scale with AI
How-to guide Updated 12 July 2026
How do you personalise cold email at scale with AI?
Give Claude access to HotHawk, create a custom variable for the detail you want to personalise on, and let it research and fill that field for every lead. Reference the field as a merge token in your copy, and each lead gets an opener written around their own data when the email sends.
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
Add a custom field called top_competitor to my leads.
Claude callsmcp__hothawk__crm_custom_variables_createname "top_competitor" assignedEntityType leadThe field is created on every lead in the workspace, empty and ready to fill.
-
2
You ask Claude
Research each lead's main competitor and fill in top_competitor for the whole list.
Claude callsmcp__hothawk__crm_leads_updateleadId per lead top_competitor the value it findsClaude works down the list, writes a competitor for each lead, and saves it back. Now every lead carries a detail that is true only for them.
-
3
You ask Claude
In step one, open by mentioning their competitor.
Claude callsmcp__hothawk__campaign_steps_updatestepId step 1 body uses {{top_competitor}}The merge token drops each lead's own competitor into their email at send time. One template, a different first line for everyone.
Why mail merge was never really personalisation
Dropping a first name into a template does not fool anyone in 2026. Every tool does it, every inbox has seen it, and a "Hi {{first_name}}, I loved what you are doing at {{company}}" opener reads as exactly what it is. The reader can feel the template underneath.
Real personalisation needs a fact that is true for one person and no one else. Finding that fact for five thousand leads by hand is why nobody does it. That research is the bottleneck, and it is the exact job a model is good at.
The custom variable is the join
HotHawk lets you add your own fields to leads, called custom variables. That field is the bridge between the research and the copy. Claude fills the field per lead with crm_leads_update, and your template pulls it in as a merge token. You write one email; the reader gets a line that only makes sense for them.
Because the value is stored on the lead, it works everywhere the lead does: this campaign, the next one, a follow up months later. You research once and reuse it.
Keep a human on the copy
A word of caution learned the hard way. Let Claude fill facts, not opinions. "Their top competitor is Acme" is safe. "They are clearly struggling with churn" is a guess that can misfire and read as creepy or plain wrong. Have it write what it can verify, then skim a sample before you launch.
Done that way, personalisation and volume stop fighting each other. You send at real scale across your warmed mailbox pool, and every email still says something worth reading. When the replies come in, label them and follow up from 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_custom_variables_createCreate the field you want to personalise on -
mcp__hothawk__crm_leads_updateWrite a per-lead value into that field -
mcp__hothawk__campaign_steps_updateReference the field as a merge token in your copy
Frequently asked
Is this different from normal mail merge?
Mail merge slots in a value you already have, like a first name. Here Claude creates the value first: it researches each lead and writes the detail, then merges it. The personal part is the research behind the value, and that is the part Claude does for you.
What can I personalise on?
Anything you can describe and Claude can find or infer: a competitor, a recent hire, the tech they run, a line from their site. You create one custom variable per detail, and reference each as a merge token in the copy.
Does personalising at scale hurt deliverability?
The opposite, when the detail is real. Generic blasts get filtered and ignored. Emails that reference something true about the reader get read and answered. HotHawk still rotates mailboxes and runs warmup underneath, whoever wrote the copy.
Can Claude write the whole opener, not just fill a field?
Yes. You can have it draft a full first line per lead and store that as the variable, then merge the finished sentence. The field can hold a word or a whole paragraph.
Do I need to write code for this?
No. It is all plain language through the MCP server. If you would rather run it as a batch job over thousands of leads, the same actions are in the REST API.