How to personalise cold email at scale without faking it
Real personalisation uses something true about the recipient that you can explain: a page on their site, a recent announcement, the role they hold. Automation can insert that detail, but it cannot discover it for you without a source. Merge tags alone are not personalisation, and fake familiarity is worse than plain honesty.
The three levels that actually exist
Segment personalisation changes the message per group. Field personalisation inserts a name or company. Observation personalisation references something specific you checked.
Only the third reads as a human wrote it. The first two are fine as scaffolding, but they will not carry a message on their own.
Where the observation comes from
A public page, a job posting, a press release, a product change. All of these are checkable, and each supports one sentence. If you cannot name the source, you do not have an observation.
Keep the source in the data next to the contact so a colleague can verify it before sending.
The shortcuts that fail
Complimenting a company's website in general terms reads as a template. Inserting a city name is not personalisation. Inventing a shared connection is the fastest way to be marked as spam.
The safer pattern is one true detail plus one honest question. It scales because the detail comes from data, not from imagination.
A data shape that makes it possible
You need one observation column, one source column, and a rule that a row without an observation is not sent. That last rule is what stops personalisation from decaying into merge tags at volume.
Keep the observation short. A sentence is enough; a paragraph of research will not survive the recipient's two-second scan.
Reviewing at volume without reading everything
Read a random sample by hand every batch, and count how many would pass as individual notes. If the share falls, the template is drifting, not the data.
This is cheaper than reviewing every message and more honest than claiming all of them were checked.
A template that survives volume
Write the template as sentences with one slot for the observation, and make the slot long enough to be specific. If the slot is a word, it will read like mail merge.
Train the person or model filling the slot on three good examples and three bad ones. Examples do more than instructions.
Then review a sample every batch. Templates drift quietly, and the sample is how you catch it.
Where the line is
Personalisation becomes manipulation when it implies knowledge you do not have: a shared contact, an event you did not attend, a problem you invented.
The safe test is whether the recipient could ask where you got the detail and be satisfied with the answer. If not, cut it.
What good looks like after a month
Every row carries an observation and a source, and a sampled batch reads like individual notes.
The rows without observations were never sent, which is why the reply rate did not fall as volume rose.
The review that keeps quality honest
At the end of each batch, read ten at random and mark each as individual, templated or invented. Count them. The invented ones must be zero.
That tally is the only quality metric that predicts how the next batch will be received, and it takes less time than fixing the consequences.
What to do when the data has no detail
Leave the row out of the batch. A message with no observation is not a slightly worse message; it is the one that teaches a recipient to ignore the next four.
If that removes most of a segment, the segment was never ready. Choose a category where public detail exists, and the work becomes possible again.
Levels of personalisation
| Level | Source needed | How it reads |
|---|---|---|
| Segment | None | Relevant but generic |
| Field merge | None | Obviously templated |
| Observation | A public source | Written by a person |
| Fake familiarity | Invented | Spam |
No level guarantees a reply.
Scaling without lying
- One observation field in your data
- Source recorded per row
- Template uses the observation, not adjectives
- One question at the end
- Review a random sample by hand
- Remove rows with no observation
- Stop on reply
A worked example, hypothetical
A team collects one observable fact per company, such as a hiring page for a role their product supports, and writes one sentence around it.
They review a random ten before sending and discard three that read as generic. The remaining messages look like individual notes because each contains something only that company could receive.
- 1.Collect the fact
- 2.Store the source
- 3.Write one sentence
- 4.Review ten by hand
What this will not do
- Automated observation collection can be wrong; verify before sending.
- Personalisation raises relevance, not consent.
- At very high volume, review becomes the bottleneck.
Questions people ask about this
Is first-name personalisation worth it?
As a courtesy, yes. As personalisation, no. It does not tell the recipient you know anything about their work.
How many observations can one person write a day?
Fewer than you think. That is why teams keep batches small and review a sample rather than pretending every message was hand-checked.
Does personalisation improve deliverability?
Indirectly. Relevant mail gets replies, and replies improve how receivers treat your domain. The mechanism is engagement, not the merge tag.
Can AI write the observation?
It can draft from a source you supply, but you must still check it. An invented detail is worse than no personalisation at all.
What if a company has no public information?
Skip it. A row without an observation is a row that will read as bulk mail.