template-personalizer
Merge-field personalization engine that transforms outreach templates into tailored messages using Clay MCP enrichment data. Triggers when the user asks to personalize messages, write outreach emails, or customize templates with contact-specific details. Supports four tone modes and three depth levels, from basic name insertion to hyper-personalized hooks using recent achievements and mutual connections. Enforces anti-patterns to prevent generic slop.
Template Personalizer
Merge-field personalization engine for outreach messages.
When to Trigger
Activate this skill when the user:
- Asks to personalize messages or outreach emails
- Wants to customize templates with contact data
- Needs to write tailored cold emails, DMs, or Slack messages
- Provides a template with placeholder fields and a contact list
- Says "personalize", "merge fields", "customize template", or "tailor outreach"
Template Syntax
Use double-brace merge fields in all templates. These are the supported fields:
| Merge Field | Source | Example Value |
|---|---|---|
{{first_name}} | Contact record | "Alex" |
{{last_name}} | Contact record | "Chen" |
{{company}} | Clay enrichment | "Acme Protocol" |
{{role}} | Clay enrichment | "Head of Developer Relations" |
{{tech_stack}} | Clay enrichment | "Solidity, TypeScript, Foundry" |
{{mutual_connection}} | Clay enrichment | "Jordan from Paradigm" |
{{recent_achievement}} | Clay enrichment | "launched v2 mainnet last week" |
{{company_size}} | Clay enrichment | "50-100 employees" |
{{funding_stage}} | Clay enrichment | "Series A ($12M)" |
{{industry}} | Clay enrichment | "DeFi infrastructure" |
{{social_handle}} | Clay enrichment | "@alexchen" |
{{custom_hook}} | Generated per contact | Unique opener based on research |
Data Source: Clay MCP to Merge Field Mapping
Pull enrichment data and map it to merge fields:
-
Call
find-and-enrich-companywith the company domain- Maps to:
{{company}},{{company_size}},{{funding_stage}},{{industry}}
- Maps to:
-
Call
find-and-enrich-contacts-at-companywith the contact name- Maps to:
{{role}},{{tech_stack}},{{social_handle}}
- Maps to:
-
Call
ask-question-about-accountswith targeted queries- "What recent news or achievements does this company have?" maps to
{{recent_achievement}} - "Who are mutual connections?" maps to
{{mutual_connection}}
- "What recent news or achievements does this company have?" maps to
-
Generate
{{custom_hook}}by synthesizing the above into a one-sentence opener unique to the contact.
Tone Controls
Set the tone before generating any messages. The user specifies one of four modes:
Formal (Enterprise)
- Full sentences, proper grammar, no contractions
- Professional sign-off ("Best regards", "Looking forward to connecting")
- Title-case subject lines
- Example: "Dear Alex, I wanted to reach out regarding a potential collaboration between our organizations."
Casual (Startup)
- Contractions, conversational flow, short paragraphs
- Friendly sign-off ("Cheers", "Talk soon")
- Sentence-case subject lines
- Example: "Hey Alex, saw what you're building at Acme -- super cool stuff."
CT-Style (Crypto / 0xJitsu)
- Lowercase preference, abbreviations welcome
- Community-native language ("shipping", "based", "wagmi")
- No formal sign-off, just a call to action
- Example: "hey alex -- your v2 launch was legit. building something adjacent, think there's overlap."
Technical (Dev-Focused)
- Lead with technical specifics, reference repos or tooling
- Include concrete technical value proposition
- Minimal fluff, direct to the point
- Example: "Alex, noticed your Foundry test suite on the v2 contracts. We built a gas optimization plugin that could cut your deployment costs by 40%."
Personalization Depth Levels
L1: Basic (Name + Company)
Fields used: {{first_name}}, {{company}}
Best for: Cold leads (score < 50), high-volume outreach, initial list validation.
Hey {{first_name}},
I came across {{company}} and wanted to connect.
We help teams like yours with [value prop].
Worth a quick chat?
L2: Targeted (Role + Tech Stack + Company Size)
Fields used: {{first_name}}, {{company}}, {{role}}, {{tech_stack}}, {{company_size}}, {{funding_stage}}
Best for: Warm leads (score 50-79), mid-funnel nurture, segment-specific campaigns.
Hey {{first_name}},
As {{role}} at {{company}}, you're probably dealing with
[problem relevant to {{tech_stack}}] as you scale past
{{company_size}}.
We built [solution] specifically for {{funding_stage}}
companies in your space. [Specific benefit].
Open to a 15-min walkthrough?
L3: Hyper-Personalized (Recent News + Mutual Connections + Custom Hook)
Fields used: All fields including {{recent_achievement}}, {{mutual_connection}}, {{custom_hook}}
Best for: Hot leads (score 80+), strategic accounts, executive outreach.
{{custom_hook}}
{{first_name}}, your {{recent_achievement}} stood out --
{{mutual_connection}} actually mentioned your team when we
were discussing {{industry}} trends last week.
Given your work with {{tech_stack}}, I think there's a
natural fit with what we're building. [Highly specific
value prop tied to their achievement].
Would love to compare notes. Free Thursday afternoon?
Output Format
For each contact, output:
- Contact: Name, company, score, tier
- Tone: Which tone mode was applied
- Depth: L1, L2, or L3
- Subject Line: Personalized email subject (if channel is email)
- Message Body: Full personalized message text
- Merge Fields Used: List of fields that were populated vs. fell back to defaults
- Confidence: High/Medium/Low based on how many fields had real data vs. placeholders
If a merge field has no data from Clay, flag it and either:
- Use a graceful fallback ("your team" instead of
{{company}}) - Skip the sentence that depends on it
- Never leave raw
{{field_name}}in the output
Anti-Patterns
These are hard rules. Reject any output that contains them.
| Anti-Pattern | Why It Fails | What to Do Instead |
|---|---|---|
| "Hope this finds you well" | Generic opener, signals mass email | Lead with a specific observation about them |
| "I'd love to pick your brain" | One-sided value extraction | Offer value first, then ask |
| "Just circling back" | Passive-aggressive, adds no new information | Add new context or value in each follow-up |
| "As a fellow [X]" | Fake familiarity if not actually shared | Only reference real mutual attributes |
| "Quick question" | Subject line clickbait, erodes trust | Write a subject that reflects actual content |
| "I know you're busy, but..." | Self-defeating opener, assumes rejection | Be direct and confident |
| Exclamation marks in subject | Spam trigger and reads as desperate | Use periods or no punctuation |
| ALL CAPS in subject | Spam filter trigger | Sentence case only |
| More than 150 words in cold email | Too long, won't get read | Keep to 80-120 words max for initial outreach |
| Sending without opt-out footer | Legal and ethical violation | Always append opt-out line |