Marketing

Using an LLM to Personalize Cold Email at Scale

Antonio Evans11 min read

A side-by-side scene: on the left, a spreadsheet-like table with rows of prospect data (company, role, trigger event, notes); arrows lead from two highlighted rows into a simple rectangular AI model icon in the center.
Key points

Key points

  1. 1Feed each prospect into the model as structured JSON built only from fields you can verify, then ask for a single specific first line.
  2. 2Signal-based personalization that references funding, hiring or leadership changes reaches response rates far above generic blasts, according to published cold email benchmarks.
  3. 3A banned-phrase filter plus a human reviewer catches the flattery, invented details and template smell that models default to.
  4. 4Compliance and deliverability duties (accurate headers, opt-out handling, domain warm-up) stay with your team regardless of who or what writes the copy.

Start with the data, not the prompt

The most common failure in AI cold email is a prompt with nothing to personalize against. A request like "write a cold email for a VP of sales" gives the model no company facts, no role context and no product detail, so it returns the same generic opener the prospect has deleted a hundred times. Writers who document this workflow describe the output as predictable: lines like "I hope this finds you well" or "I noticed you are the VP of sales at [Company]". They note that 61% of decision makers describe cold outreach as irrelevant, and nearly half call out generic, impersonal messaging as the reason they ignore it, per Hunter's state of cold email research cited in the Novoslo workflow guide.

The fix is upstream. Before you touch a prompt, decide which fields earn a place in the prospect record. A practical schema has five slots:

FieldWhy it earns a slotExample valueVerified by
Company factGives the model something concrete to reference"Careers page lists a data-operations role"Careers page, checked on the day of the pull
RoleSets the persona and what the person is measured on"VP of Marketing"LinkedIn or company site
Trigger eventSupply the "why now"Funding round, leadership change, hiring surgePress release or filing
Mutual connectionWarmth that survives a filterShared former employerCRM or LinkedIn
Product usage signalRelevance for existing users"Used the CSV import three times"Product analytics

The distinction between a fact and a guess matters more than the size of the record. Datablist's guide to first lines is blunt about this: a company name alone does not establish funding stage, growth rate or buying intent, so those traits should not enter the copy until evidence is collected. Their example is worth memorizing. "Your careers page lists a data-operations role" gives you something concrete to discuss, while "I love your incredible growth" can sound researched while saying nothing you can support, as the Datablist first-lines guide explains.

A useful decision rule: if you cannot paste the source URL next to the field value in the spreadsheet, the field does not go into the prompt. Empty is better than invented, because an empty slot tells the model to skip that angle, while an invented one puts a false claim in front of a stranger who knows their own company better than you do.

Why signal-based personalization outperforms surface details

The benchmark case for this work is not "personalization" in general but signal-based personalization: outreach timed to a trigger event that proves relevance. Autobound's cold email guide aggregates benchmark reports from Instantly, Belkins, Martal and Backlinko and reports that the average cold email reply rate sits at 3.43%, per Autobound's cold email guide. Emails that reference specific buying signals such as funding rounds, leadership changes or hiring surges reach response rates of 15 to 25%, roughly a fivefold improvement.

Two details in that data change how you should design the pipeline. First, campaign size matters independently of copy: Belkins found campaigns of 50 recipients or fewer average 5.8% response rates against 2.1% for larger, less-targeted lists, again per the Autobound guide. An LLM makes it cheap to write ten thousand first lines, but it does not make ten thousand prospects a good idea. Second, the gains come from reaching the right person at the right moment with proof you understand their situation, not from better adjectives. That means the trigger field carries more weight than any style instruction in your prompt.

Worked example with round numbers. Suppose you send 500 emails. At the published generic average of 3.43%, you get about 17 replies. At 18% (the figure the guide attributes to advanced signal-specific personalization), you get 90. If 15% of replies convert to booked meetings, which is the assumption in Instantly's own worked model, that is roughly 2.6 meetings versus 13.5, per Instantly's cold email strategy guide. The same send volume, the same model, a different data pipeline. That gap is the business case for the workflow in the rest of this article.

Note what the numbers do not say. They do not say every AI-written line will hit 18%, because the benchmarks describe campaigns with real signal data and human judgment behind them. They say where to spend your effort: sourcing verifiable triggers and keeping lists small beats tuning prompt adjectives.

Format the prompt as a grounded task, not a wish

Feed the model one prospect record at a time as JSON, not a paragraph of background. JSON does three things prose does not: it separates fields the model must not blend, it makes missing data visible, and it keeps the output comparable across prospects so you can measure which field drives replies.

A prompt structure that works:

You write one first line for a cold email.

Rules:
- Exactly one sentence, 25 words or fewer.
- Reference exactly one verifiable detail from the record.
- Do not praise the company. No "love what you're building", "impressive growth", "big fan".
- Do not state a problem you cannot support from the record.
- If no field supports a specific line, return NO_OPENER.

Examples:
Record: {"company_fact": "careers page lists a data-operations role", "role": "VP Marketing"}
Line: Your careers page lists a data-operations role. Is that team owning CRM hygiene or just the reporting on top of it?

Record: {"company_fact": null, "role": "VP Marketing"}
Line: NO_OPENER

Prospect record:
{...}

Three mechanisms are doing the work. The field-level rule ("reference exactly one verifiable detail") stops the model stacking three facts into a paragraph of research theater. The explicit banned list of praise phrases attacks the failure mode that makes AI copy recognizable. The NO_OPENER escape hatch gives the model a legal way to decline, which matters because a model with no permissible refusal will invent something. Datablist makes the same point from the human side: keep the observation specific and leave room for the recipient to tell you whether the problem exists, rather than turning research into a diagnosis you cannot support, per their first-lines guide.

The example lines in the prompt act as a compass. Without worked examples, models drift toward whatever opener pattern dominates their training data. With them, you are showing the shape you want: a fact from the record, then a question or implication the reader can answer from their own experience. The Novoslo guide to prompting Claude for this task lands on the same design, arguing that the model is capable of first lines that sound like you spent twenty minutes researching a prospect, and that the difference comes from controlling the inputs rather than writing a cleverer instruction, per the Novoslo guide.

Keep the model's job narrow. Ask it for one first line, not the whole email, at least until you trust the pipeline. The rest of the message (the reason for writing, the ask, the opt-out) is where you want your own words, for reasons the compliance section covers.

Run the output through a filter and a human

An LLM at temperature zero still varies, and a phrase filter plus reviewer map cleanly onto the two failure modes: style and truth.

Banned-phrase filter. Maintain a list of strings that get an automatic reject, not a rewrite: "I hope this finds you well", "I noticed you", "big fan", "love what you", "impressive", "revolutionary", "game-changing", "quick question", "circle back", "reaching out". Run it as a plain substring or regex check before anything reaches a human. The filter is cheap and catches the majority of low-effort output, which means your reviewers spend their attention on lines that passed the smell test. Update the list whenever a reviewer rejects the same phrase twice.

Grounding check. Programmatically confirm that at least one distinctive substring from the prospect record appears in the generated line. If the record says "careers page lists a data-operations role" and the line mentions "data-operations", it is anchored to evidence. If the line says "your recent expansion into Europe" and no record field mentions Europe, the model has confabulated. This check is crude, but it catches the failure that matters most, because a fabricated detail is the one error a prospect will notice and remember.

Human review. A reviewer reads each line and makes one of three calls: approve, edit or reject. Track which field each approved line referenced. After a few hundred reviews you will know whether your trigger events or your company facts carry the replies, and you can retire the fields that never survive.

StageToolAutomatic or humanBudget
Data pullScraper, CRM, analytics exportAutomaticRun nightly
Field verificationSource URL required per fieldHuman spot check1 in 10 records
Prompt runAny chat or API modelAutomaticBatch overnight
Banned-phrase filterRegex listAutomaticInstant
Grounding checkSubstring match against recordAutomaticInstant
ReviewSpreadsheet or queueHuman20 to 40 lines per hour

The throughput number in that table is the planning constraint. A reviewer working carefully on one-sentence openers can clear a few dozen an hour, so a 5,000-prospect campaign is not a one-day review job unless you split the list across reviewers or reduce the send. That is a feature: the review step forces the list-size decision the benchmarks already recommend.

If you are running several models (a cheap one for drafting, a stronger one for rewrite passes on rejects) and coordinating them across a tool stack, the plumbing gets tedious. Quanta Inference exposes text, image, video, audio and embedding models through one OpenAI-compatible API key with prepaid US dollar pricing, which removes a separate billing and SDK setup per provider when you are A/B testing which model writes better openers.

Keep the reviewer honest: a worked review rubric

Vague instruction to reviewers produces vague approvals. Give them four questions, each with a pass condition, and require a source link for any approved line.

  1. Is the referenced detail in the record, and does the record field carry a source URL? If no, reject.
  2. Would the line still be true next month? A trigger event from a dated announcement passes; "your recent expansion" without a date does not, because you cannot verify it later.
  3. Does the line assume a problem the record does not show? "Your careers page lists a data-operations role. Is that team owning CRM hygiene?" passes. "Your CRM data is a mess" does not, per the distinction Datablist draws between a specific observation and an unsupported diagnosis.
  4. Does it survive the swap test? Replace the prospect's company with a competitor. If the line reads just as well, it was never personal, and a reader will feel that instantly.

Score ten lines per reviewer per week against these and compare approval rates. A reviewer who approves 95% of output is not reviewing; a reviewer who approves 20% is probably rejecting voice rather than substance. A reasonable band to calibrate toward is in the middle, with specific rejections.

Log every rejected line with its reason code (fabricated detail, praise, generic, grammar, other). The log becomes your prompt improvement backlog. When "fabricated detail" leads the count, add fields or tighten the NO_OPENER rule. When "generic" leads, your records are thin, not your prompt.

The guardrails that live outside the model

Two categories of obligation do not move to the model: legal compliance and deliverability. Both bite at the campaign level regardless of who wrote the sentence.

Compliance. Under the CAN-SPAM Act, every commercial message needs accurate From, To and Reply-To headers, a non-deceptive subject line, a clear identification of the message as an advertisement, a valid physical postal address, and a working opt-out that requires nothing more than an email address or a single page visit. Opt-out requests must be honored within 10 business days and the mechanism must stay functional for at least 30 days after the send, per the FTC's compliance guide. The law makes no exception for business-to-business email, and each violating message carries a civil penalty of up to $53,088, per Transcend's CAN-SPAM guide and the Usercentrics compliance guide. Liability extends to third parties: if you hire an agency or a platform to send for you, you remain responsible and must monitor their compliance, per Lewis Rice's practical tips.

An LLM drafting the body does not change any of this, and it introduces one new risk: a model asked for "a compelling subject line" will write something the email does not deliver on. Put subject lines and footers under fixed human control and let the model touch only the opener.

Deliverability. Inbox providers judge your domain, not your copy. New domains are treated as suspicious, warm-up takes months rather than days, and reputation is earned with slow, consistent, low-volume sending, per Woodpecker's guide to domain warm-up and Resend's warm-up walkthrough. Keep bounce rates low by validating addresses before the send; a benchmark of 2% or less is generally accepted as healthy, per Outfunnel's bounce rate guide. The practical implication for this workflow: a model that lets you produce openers ten times faster does not let you send ten times faster. Keep volume predictable and let the review step throttle you.

Sequence design. Most replies come from follow-ups rather than the first email, which means the sequence, not the opener, sets your ceiling. Sources disagree on the ideal length: lemlist's data analysis argues for 4 to 9 follow-ups, per lemlist's follow-up guide; Resquared recommends starting with a three-email sequence sent every third day, per their cold outreach answer. Both agree on the operating rule that matters here: stop the sequence the moment someone replies, and have a person take over. A reply is where the arm's-length part ends.

What the pipeline gives you, and what it does not

The durable result of this workflow is not a bigger send. It is a record of which facts earn replies. Once reviewers are marking each approved opener with the field it referenced and each rejection with a reason code, the spreadsheet becomes an experiment log you can act on: retire the "mutual connection" field if it never survives, invest more in trigger sourcing if it does.

Two failure modes remain even with every guardrail in place. The first is the record that passes every check and is still boring, because the source detail was true but irrelevant to your offer. Datablist's warning applies: a first line cannot rescue an irrelevant offer or a list of people who are not a fit, per their guide. Review catches this only if someone is checking relevance, not just accuracy.

The second is scale pressure. Once leaders see 18% reply rates in a deck, the temptation is to raise volume until the review queue becomes a rubber stamp. The math that keeps you honest is simple: at published generic reply rates of 3.43%, a 10,000-message blast yields roughly 343 replies, but it also burns domain reputation and generates complaints that damage future deliverability, per Autobound's guide. Smaller, reviewer-cleared sends are the strategy the data supports.

If you are building this inside a larger outbound motion and want the drafting, filtering and review-queue plumbing assembled around your own data sources, Quanta's specialist model (describe the workflow you need and a specialist builds it with you) at Quanta is one route to a working pipeline rather than a prompt in a document.

FAQ

FAQ

How many prospects can one reviewer handle per day?

A careful reviewer clearing one-sentence openers with a source check runs at roughly 20 to 40 per hour, so a single reviewer covers a few hundred a day at most. That number, not the model's throughput, should set your campaign size. Larger lists need more reviewers or smaller sends.

Should the model write the whole email or just the first line?

Just the first line, at least at first. Compliance elements (accurate headers, ad identification, postal address, opt-out) and your core ask should stay under fixed human control. A model asked for the full email will improvise around those elements, which is exactly where the risk sits, per the FTC's CAN-SPAM guide.

What do I do when no field in the record supports a specific line?

Send nothing to that prospect yet, and treat it as a data problem. The prompt should return a NO_OPENER signal, and the record goes back to enrichment. Forcing a line from thin data produces praise or invented details, the two failure modes a filter is meant to catch.

Does a banned-phrase filter replace human review?

No. It removes the cheapest, most predictable failures before a person looks, which lets reviewers spend attention on substance. Fabricated details, false diagnoses and stale facts are context-dependent and need a human with the source record open, as the review checklist above sets out.

How does this interact with email deliverability and warm-up?

Separately and strictly. Domain reputation is built by slow, consistent, validated sending, and new domains need a warm-up period before volume, per Woodpecker's domain warm-up guide. Fast drafting does not shorten that clock, and high bounce rates (above roughly 2%, per Outfunnel) will undo the gains the personalization was meant to create.

Sources

Sources

  1. How To Write Personalized First Lines For Cold Email ...
  2. Cold Email First Lines: The Truth About What Works
  3. Cold Email Guide 2026: Best Practices & Benchmarks | Autobound
  4. Instantly Cold Email Strategy
  5. CAN-SPAM Act: A Compliance Guide for Business
  6. The CAN-SPAM Act: A complete 2026 compliance guide - Transcend.io
  7. The CAN-SPAM Act: Compliance Guide with Best Practices
  8. Practical Tips for CAN-SPAM Act Compliance | Billee Elliott McAuliffe
  9. How to Warm Up a New Domain Before Email Outreach
  10. How to warm up a domain to send emails
  11. Email Bounce Rate: What is it? How to Reduce Bounce Rate? - Outfunnel
  12. How many cold email follow-ups should you send? 4 to 9, backed by ...
  13. How many emails should a cold outreach sequence include?
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles