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 FieldSourceExample 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 contactUnique opener based on research

Data Source: Clay MCP to Merge Field Mapping

Pull enrichment data and map it to merge fields:

  1. Call find-and-enrich-company with the company domain

    • Maps to: {{company}}, {{company_size}}, {{funding_stage}}, {{industry}}
  2. Call find-and-enrich-contacts-at-company with the contact name

    • Maps to: {{role}}, {{tech_stack}}, {{social_handle}}
  3. Call ask-question-about-accounts with targeted queries

    • "What recent news or achievements does this company have?" maps to {{recent_achievement}}
    • "Who are mutual connections?" maps to {{mutual_connection}}
  4. 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:

  1. Contact: Name, company, score, tier
  2. Tone: Which tone mode was applied
  3. Depth: L1, L2, or L3
  4. Subject Line: Personalized email subject (if channel is email)
  5. Message Body: Full personalized message text
  6. Merge Fields Used: List of fields that were populated vs. fell back to defaults
  7. 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-PatternWhy It FailsWhat to Do Instead
"Hope this finds you well"Generic opener, signals mass emailLead with a specific observation about them
"I'd love to pick your brain"One-sided value extractionOffer value first, then ask
"Just circling back"Passive-aggressive, adds no new informationAdd new context or value in each follow-up
"As a fellow [X]"Fake familiarity if not actually sharedOnly reference real mutual attributes
"Quick question"Subject line clickbait, erodes trustWrite a subject that reflects actual content
"I know you're busy, but..."Self-defeating opener, assumes rejectionBe direct and confident
Exclamation marks in subjectSpam trigger and reads as desperateUse periods or no punctuation
ALL CAPS in subjectSpam filter triggerSentence case only
More than 150 words in cold emailToo long, won't get readKeep to 80-120 words max for initial outreach
Sending without opt-out footerLegal and ethical violationAlways append opt-out line