Email Personalisation at Scale: The Techniques That Actually Work
Practical email personalisation at scale: token discipline, dynamic content blocks, and company-level signals that lift cold email reply rates.
Most "personalised" cold email is theatre. You drop a first name in the greeting, mention the company name once, and call it custom. Prospects learned to ignore that pattern years ago. Real personalisation answers a different question: does this email prove the sender knows something specific about me or my company that they could not have known by accident? You can manufacture that proof at scale, across thousands of contacts, without writing each message by hand. The trick is building the right data layer first, then letting templates do the assembly.
This guide covers the techniques that move reply rates: token discipline, dynamic content blocks, and company-level signals. Cold outreach reply rates typically land in the 1-5% range, and the gap between the bottom and top of that band is almost always relevance, not volume.
Start With Data, Not Copy
Personalisation is a data problem disguised as a writing problem. Before you touch a line of copy, decide which fields you can reliably populate for every contact. A token is only useful if it is filled in for 90%+ of rows; a half-empty column ruins trust the moment a `{{trigger}}` renders blank.
Build a personalisation schema with three tiers:
When you pull contacts through LinkedIn profile search with country targeting, you capture tier 1 and most of tier 2 in the same pass. That is the cheapest personalisation you will ever get, because it costs no extra research time per contact.
Token Discipline: The Rules That Stop Embarrassment
Tokens fail in predictable ways. A few rules prevent the classic "Hi {firstName}" disaster:
Run a 20-row spot check before any send: export the merged output and read it as a human. If a line reads awkwardly when its optional token is empty, that line should be a conditional block, not a token.
Dynamic Content Blocks: Personalise the Argument, Not Just the Noun
Swapping nouns is weak. Swapping the argument is strong. Dynamic content blocks let one template hold several versions of a sentence or paragraph, and the right one renders based on a field value.
Two patterns carry most of the weight:
Conditional snippets
Insert or remove a whole sentence based on a signal:
Segment-specific value props
Your pitch should change by who is reading it. A founder cares about pipeline; a RevOps lead cares about data hygiene; a recruiter cares about candidate volume. Write three short value sentences and map them to the seniority or function field. The contact never sees the other two.
This is where most of the lift lives. The contact reads one tight, relevant paragraph and assumes it was written for them, because functionally it was.
Company-Level Signals That Scale
Per-contact research does not scale. Per-company research does, because one signal covers every contact at that company. Spend your enrichment budget here. High-signal, low-effort company attributes:
Write one signal-based opener per company, reuse it across every contact there, and you get research-grade relevance at list-grade speed.
Templates: Build a Library, Not a Blast
Treat templates like code. One mega-template with twelve nested conditionals is unmaintainable. Instead:
Keep the email short. Personalisation buys attention; a 250-word wall of text spends it. Aim for 50-90 words in the first touch so the personalised line is impossible to miss.
Test What Personalisation Is Actually Earning You
Personalisation has a cost in time and data, so prove it pays. Run controlled comparisons:
Hold everything else constant: same sender, same send window, same list quality. Run from a domain you control through your own SMTP or Resend so deliverability stays consistent and your results reflect copy, not infrastructure noise.
Putting It Together: A Practical Next Step
You do not need a perfect system to start. You need one good data layer and a handful of disciplined templates.
Personalisation at scale is not about writing more. It is about structuring data so that one well-built template feels handwritten to every reader. Get the data layer right, and the copy almost writes itself.