Cold email personalization

01What is it?
When to Use Writing cold outreach, sales prospecting, or outbound B2B emails Personalizing email openers from prospect research signals Building multi-touch follow-up sequences Reviewing or scoring email drafts. It stands out by giving email marketing a defined shape, so the agent asks for better context and returns a more usable result.
02Inputs
Context for email marketing: your goals, audience, constraints, and any source material the skill asks for.
03Output
A ready-to-use result for email marketing: the analysis, copy, or recommendations the agent produces.
Install-only

Install as a package

Installs this one skill package for your coding agent, including any supporting files that skill ships with — not every skill in the repository. Read the tutorial.

Terminal
$ npx skills add gtmagents/gtm-agents --skill cold-email-personalization

Skill instructions

The instruction file for this skill. The skill also includes other files you need to install to use it.

SKILL.md

Cold Email Personalization

When to Use

  • Writing cold outreach, sales prospecting, or outbound B2B emails
  • Personalizing email openers from prospect research signals
  • Building multi-touch follow-up sequences
  • Reviewing or scoring email drafts before sending

Workflow

  1. Map the ICP — Complete ICP & Objection Mapping (assets/icp-objection-mapping.md). Gate: persona, top 3 objections, and desired next step are defined.
  2. Research signals — Follow the Research Playbook (assets/research-playbook.md) to find custom signals from the last 90 days. Gate: at least 2 verified signals per prospect.
  3. Choose campaign path — Pick Custom Signal, Creative Idea, Whole Offer, or Fallback from Campaign Types (assets/campaign-types.md).
  4. Draft the email — Apply Email Structure (assets/email-structure.md) rules: plain text, 60-120 words, one CTA. Use Variable Schema (assets/variable-schema.md) for merge fields.
  5. QA and score — Run the QA Checklist (assets/qa-checklist.md), then score with the Scoring Rubric (assets/scoring-rubric.md). Gate: score >= 80 and 3:1 recipient-to-sender ratio.
  6. Build sequence — Add follow-ups per Follow-Up Strategy (assets/follow-up-strategy.md), rotating value props each touch.

Principles

  • Message-market fit over cleverness — Show you understand the prospect's situation immediately.
  • Research is the personalization — Custom signals prove homework; never fabricate facts.
  • One job per email — Single sharp question or CTA; earn a reply, not a meeting.
  • Two personalization paths — Path A: custom signal research. Path B: whole-offer strategy. See Creative Ideas (assets/creative-ideas.md) for Path B tactics.

Example

Signal found: Prospect's company posted a VP Sales hire on LinkedIn 2 weeks ago.

Subject: {{first_name}}, growing the sales team?

Body: Hi {{first_name}}, saw {{company}} just brought on a new VP Sales — congrats. Specifically, it looks like you're scaling outbound to {{customer_type}}. We helped [similar company] ramp 3 new reps to quota 40% faster by templatizing their top performer's research workflow. Worth a 15-min look?

Why it works: Uses a verified, recent signal in the first line; ties it to a specific, relevant outcome; single clear CTA.

References


Supporting file: assets/campaign-types.md

Campaign Types

1. Custom Signal Campaign

When: You have strong research data (case studies, pricing insights, reviews, hiring).

Structure:

  • Subject: 2-4 words, intriguing.
  • First line: Custom signal with {{variable}}.
  • Body: Value prop + case study proof.
  • CTA: Low-effort question.

2. Creative Ideas Campaign

When: You can generate specific, credible ideas for them.

Requirements:

  • Define 3-5 specific features/capabilities.
  • Generate 3 bullet point ideas, each using ONE feature.

Structure:

{{First name}} – I was back on your site today and had some marketing ideas for you.

{{Creative Ideas}}
• Idea 1: [Specific action using Feature X]—would help with [their pain]
• Idea 2: [Specific action using Feature Y]—could improve [their goal]
• Idea 3: [Specific action using Feature Z]—might address [their challenge]

But of course, I wrote this without knowing anything about your current bottlenecks.

If it's interesting, we could hop on a call and I'd be happy to share what's working in the {{industry}} industry.

3. Whole Offer Campaign

When: Limited data availability or self-selecting offer.

Structure:

  • Subject: Describes the pain/outcome.
  • Preview text: Completes the offer.
  • Body: Explain the offer, light personalization.
  • CTA: Simple yes/no.

4. Fallback Campaign ("Let Me Know If...")

When: You're not 100% sure they're the right person.

Structure:

{{First name}} – let me know if {{employee_1}} or {{employee_2}} would be better to speak about {{specific_problem}}.

[Rest of email]

Why it works: Shows research (employee names) and gives an easy out.


Supporting file: assets/creative-ideas.md

Creative Ideas Campaign Generation

What Is This?

The Creative Ideas campaign shows 3 specific ideas of how you'd help THEIR company.

  • Shows > Tells: Demonstrates capability.
  • Tailored: Not a template.
  • Low commitment: Just evaluating ideas.

The Critical Constraint: Feature-Box Your Ideas

The Problem: Unconstrained AI hallucinates capabilities. The Solution: Define 3-5 specific features you ACTUALLY offer, then generate ideas using ONLY those features.

Step 1: Define Your Constraint Box

List 3-5 specific features/capabilities. Example (Marketing Agency):

  1. Paid social ads
  2. SEO content creation
  3. Email marketing automation

Step 2: Research Their Company (5-7 min)

Look for:

  • What they sell
  • Current approach
  • Gaps/opportunities
  • Competitor landscape

Step 3: Generate Ideas (One Per Feature)

Formula: [Action verb] + [Feature from constraint box] + [Specific to their company] + [Why it would help]

Example:

• Paid social campaign targeting sales leaders using LinkedIn's "job function" targeting—would help with reaching decision-makers directly.

Step 4: Format the Email

Subject: "Marketing ideas", "Quick ideas" Opening: "I was back on your site today and had some ideas..." Ideas: 3 bullet points. Disclaimer: "But of course, I wrote this without knowing anything about your current bottlenecks..." CTA: "If it's interesting, we could hop on a call..."

Quality Check

  • ✅ Each idea uses ONE feature from your constraint box?
  • ✅ Each idea is specific to THEIR company?
  • ✅ Each idea explains the benefit?
  • ✅ Disclaimer included?

Supporting file: assets/email-structure.md

Email Structure & Strategy

Subject Line Strategy

Approach A: 2-4 Words (Intrigue)

Best when using custom research signals.

  • "Partnership?"
  • "Quick question"
  • "Competitor insights"
  • "Saw your post"

Test: Can a colleague send this? If yes, good.

Approach B: Whole Offer in Subject + Preview

Best when data is limited or offer is self-selecting.

  • Subject: "Ever chase renters to pay on time?"
  • Preview: "We built a platform that rewards renters for paying on time..."

Email Body Structure

Target: 50-90 words.

Line 1: Situation Recognition (1 sentence)

Describe THEIR exact situation. Be direct.

  • ✅ "Saw you posted about {{ai_generation}}—seems like it was {{days_ago}} days since the one before that."
  • ❌ "I hope this email finds you well!"

Line 2: Value Prop + Proof (1-2 sentences MAX)

What you do + metric. No fluff.

  • ✅ "We helped companies like Lemlist double down on social with our scheduling tool."
  • ✅ "We've attributed a 4.7x increase in upgrades after adding product videos."

Optional: The "Specifically" Line

"Specifically, it looks like you're trying to sell to {{customer_type}}, and we can help with that."

Line 3: Low-Effort CTA (1 sentence)

Binary question or simple offer.

  • ✅ "Worth a look?"
  • ✅ "Could I send you access?"

How to Make Emails Punchier

The Cutting Process

  1. Delete fluff: "I hope this finds you well", "I wanted to reach out", "innovative solutions".
  2. Compress sentences: Replace clauses with periods. "We built a platform that can do X" → "We do X".
  3. Cut adjectives: Keep only data-backed adjectives ("4.7x", "Series B").

Quick Compression Tactics

  • Kill intro phrases: Just start with the point.
  • Use em dashes: "Saw your post—noticed it was..."
  • Delete "that" and "which": "We pull everyone engaging..."
  • Active voice always.
  • Numbers > words: "30 days" not "thirty days".
  • Abbreviate where clear: "vs.", "CRO".

The 50-Word Challenge

Can you say it in 50 words without losing the situation, value prop, proof, or CTA? Usually, yes.


Supporting file: assets/examples.md

Real Campaign Examples

Example 1: Pricing Page Insight (Product Video)

Context: Targeting SaaS founders. Scraped pricing page to find upgrade paths. Subject: Starter vs. Professional

{{First_name}}—had a question about Starter vs. Pro.

Seemed like Starter is for platform access, Pro is for API integrations with CRM.

Do you have a product video showing how easy those integrations are and how much more sales leaders get if they upgrade?

We've attributed 4.7x increase in upgrades after adding product videos.

Worth a chat?

Why it works:

  • Specific observation (Starter vs Pro).
  • Metric proof (4.7x).
  • Low-effort CTA.

Example 2: Vanta Engagement Alerts

Context: Targeting sales/marketing. Subject: Quick question

{{First_name}}—do you get alerts when prospects engage with Vanta's posts?

We pull everyone engaging with any LinkedIn company page, filter by your ICP titles, and send alerts.

Just confirm Vanta works as an example and I'll send you their last 10 posts' engagers.

Why it works:

  • Immediate relevance.
  • Value-exchange (confirm -> get data).

Example 3: LinkedIn Consistency (Taplio)

Context: Noticed gap in posting. Subject: saw your post

{{first_name}} – Saw one of your recent LinkedIn posts about {{ai_generation}}.

Seems like the last time you posted was {{number_of_days}} days before that though.

With {{number_of_followers}} followers I figured building your brand on LinkedIn might be a priority for you.

LinkedIn's own guidelines stress the importance of consistently creating content. Creators are using our platform to brainstorm and schedule all from one place.

Could I show you how it works sometime?

Why it works:

  • Data point (days between posts).
  • Follower count adds credibility.

Example 4: Whole Offer Strategy (Property Management)

Context: Reaching out about late rent. Subject: Ever chase renters for rent?

{{First_name}},

We reward renters for paying on time so you increase NOI.

Renters who pay on time get Starbucks gift cards they can spend at {{nearest_mall}}.

If we could increase on-time payments, would that be useful?

Why it works:

  • Subject + preview = entire offer.
  • Self-selecting.
  • Light AI touch (nearest mall).

Example 5: Creative Ideas (Follow-Up)

Context: Email 2, generating ideas.

{{First Name}} – I was back on your site today and had some marketing ideas for you.

{{Creative Ideas}}
• Paid social campaign targeting [specific audience] using [specific platform feature]
• SEO content series around [keyword cluster] based on competitor gaps
• Email nurture sequence for [customer segment] that addresses [specific pain]

But of course, I wrote this without knowing anything about your current bottlenecks and goals.

If it's interesting, we could hop on a call and I'd be happy to share what's working in the {{industry}} industry.

Why it works:

  • Creative ideas campaign.
  • Humble disclaimer.
  • Value-exchange CTA.

Supporting file: assets/follow-up-strategy.md

Follow-Up Email Sequences

Philosophy

  • Email 1 (Day 0): Full campaign (Custom signal / Whole offer).
  • Email 2 (Day 3-4): Threaded. Rotate value prop.
  • Email 3 (Day 7-8): New thread. Different angle. Drop AI?
  • Email 4 (Day 11-12): Final. Redirect or Resource offer.

The "3 Offers" Framework

  1. Save time (efficiency)
  2. Save money (ROI)
  3. Make money (revenue)

Strategy: If Email 1 was "Save Time", Email 2 should be "Make Money".

Email 2: Rotate Value Prop (Threaded)

Subject: NONE (threads to Email 1). Templates:

  • Creative Ideas: "Had some ideas for you..."
  • Stats/Data Hook: "Our system combines 40 databases..."
  • Industry Insights: "Seeing changes in the {{industry}} environment..."

Email 3: New Thread, Different Angle

Subject: NEW subject line. Strategy: Consider dropping AI personalization. Go direct. Templates:

  • Expertise Hook: "We've helped hundreds of customers..."
  • Whole Offer (Reset): Direct problem → solution → proof.
  • Case Study Deep Dive: Story format.

Email 4: Final Email

Strategy: Redirect or Resource. Path A (Redirect): "Let me know if {{employee_1}} or {{employee_2}} would be better..." Path B (Resources): "If you're busy, we have resources on [topic]..." Path C (Value Bomb): "I pulled these contacts for you..."

Sequence Summary

EmailTimingSubjectStrategy
1Day 0NewCustom signal / Whole offer
2Day 3-4ThreadRotate value prop / Creative ideas
3Day 7-8NewDrop AI / Case study
4Day 11-12Thread/NewRedirect / Resources

Supporting file: assets/icp-objection-mapping.md

ICP & Objection Mapping: Role-Play Before You Write

The Exercise

Before writing ANY cold email campaign, spend 15 minutes role-playing as your skeptical ICP. Why: You'll write defensively, focus on THEIR world, and understand what they ACTUALLY care about.

Step 1: Put Yourself in Their Shoes

Questions to Answer

  1. How are they doing this now? (Current solution, daily routine)
  2. Why would they switch? (What's broken, what's the "last straw")
  3. What's their switching cost? (Time, money, political risk)
  4. What objections will they have? (Budget, "we have X", "too busy")

Step 2: Map Role → What They Actually Care About

The Truth: Unless they're the CEO, they want to:

  1. Do their job well enough to avoid criticism.
  2. Go home on time.
  3. Look smart to their boss.

Your job: Connect your offer to THEIR personal wins.

Mapping Template

Role: [e.g., VP Sales]
Responsible for: [KPIs]
Success looks like: [Promotions, praise]
Failure looks like: [Missing targets, burnout]
Current solution: [Manual process, annoying tools]
Our solution offers:
- Business win: [Company ROI]
- Personal win: [They look like a hero, less stress]
Top 3 objections:
1. [Objection] → Preempt by: [Response]

Step 3: Preempt Objections in Your Email

Technique 1: "Poke the Bear" Questions

Frame opener as a question acknowledging current state. Instead of: "We help companies automate outbound" Try: "Have you figured out how to scale outbound without adding headcount, or is that still manual?"

Technique 2: Risk Reversal

"You only pay when it's successfully taken down" or "No upfront commitment".

Technique 3: Situational Social Proof

Instead of: "We work with Stripe" Try: "Most fintech teams hit this problem around month 3..."

Technique 4: Personal Benefit

"Not only a big win for the company, but you'd personally benefit from [specific thing]."

Step 4: Test Your Email Against the Map

  1. Does it acknowledge their current state?
  2. Does it address their #1 objection preemptively?
  3. Does it offer a personal win?
  4. Is the switching cost clear?
  5. Would I reply to this if I were them?

Supporting file: assets/qa-checklist.md

QA Checklist: Ship-Ready Email Standards

1. Personalization Quality

  • ✅ First line references a specific signal (Custom research, AI insight, or Whole-offer).
  • ✅ No hallucinations (Every fact verifiable).
  • ✅ Variables properly formatted ({{double_braces}}).

2. Banned Phrases (Delete These)

  • ❌ "I hope this email finds you well"
  • ❌ "I wanted to reach out"
  • ❌ "We help companies..." (unless followed by proof)
  • ❌ "Can I get 15 minutes?"

3. Recipient:Sender Ratio

  • Count sentences about THEM vs US.
  • Target ratio: 3:1 minimum.

4. Length & Punchiness Check

  • Target: 50-90 words.
  • The 20-Second Rule: Read aloud. If >20s, cut.
  • Cut fluff: "I was wondering if", "innovative solution".

5. CTA Quality

  • Low-effort reply test: Can they reply in 5 words or less?
  • Value-exchange: "...so I can show you [example]"
  • Bad: "Let me know your thoughts", "Schedule 15 mins".

6. Tone & Clarity

  • ✅ Reads naturally aloud.
  • ✅ Helpful, confident, conversational.
  • ✅ Clear value proposition.

7. Punctuation & Formatting

  • ✅ Em dashes consistent ("—").
  • ✅ No double spaces.
  • ✅ Plain text (no bold/italics).

8. Subject Line Check

  • ✅ 2-4 words ("Partnership?", "Quick question") OR Whole offer.
  • ❌ No "Quick question about your infrastructure" (too long/salesy).

9. Case Study Check

  • ✅ Specific metric ("4.7x increase").
  • ✅ Timeframe ("within 90 days").
  • ✅ Customer type ("Series B SaaS").

10. The "Would I Reply?" Test

Ask honestly:

  1. Do they understand MY situation?
  2. Is there a non-obvious insight?
  3. Is it low-effort to reply?
  4. Is there a reason to engage NOW?

If NO to any → Rewrite.


Supporting file: assets/research-playbook.md

Research Playbook: Finding Custom Signals

The Research Mindset

Bad research: "Let me find their role and company size so I can plug them into my template." Good research: "What is happening in their world RIGHT NOW that makes my solution urgent?"

The best cold emails feel like you've been watching their company for weeks. Signals must be:

  1. Specific (not "you're growing" but "you hired 12 SDRs in Q4")
  2. Recent (last 90 days ideally)
  3. Directionally aligned with the pain your product solves

Before Research: Define Your Perfect Signal

Complete this sentence for every campaign:

"The ideal prospect would show evidence of [specific behavior/change/problem] because it means they're experiencing [pain] right now."

Research Priority (10 Minutes Max)

Tier 1: Case Studies (3 min) - START HERE

Where to look:

  • Company website → /customers, /case-studies
  • Blog → search for "case study"
  • Press page

What to extract:

  • Customer type/industry
  • Problem solved
  • Specific metric/outcome
  • Timeframe

Variables: {{case_study_company}}, {{case_study_result}}, {{case_study_metric}}

Tier 2: Custom Signals (6-7 min) - THE DIFFERENTIATOR

Hunt for campaign-specific signals using tools.

Tool 1: Claygent (AI Web Scraper)

  • Use for: Pricing pages, case studies, news summaries.
  • Workflow: "Find pricing page" → Scrape → "Summarize difference between Starter and Pro".

Tool 2: ZenRows (Full Page Scraper)

  • Use for: Full text of pricing, about, blog pages.
  • Why: Gets nuance that summaries miss.

Tool 3: Serper (Google Search API)

  • Use for: Google Reviews, news mentions.
  • Workflow: Search company → Get CID → Get reviews → Extract negative review details.

Tool 4: SimilarWeb (Competitor Intelligence)

  • Use for: Traffic data, keyword overlap.
  • Workflow: Compare domain to competitor → "Saw {{competitor}} is taking your keywords..."

Tool 5: LinkedIn

  • Use for: Recent posts, hiring activity, tenure.
  • Workflow: Check recent posts (topic, date), hiring (roles, count).

Tier 3: Standard Variables (3-4 min) - BACKUP

  • LinkedIn basics: Role, tenure.
  • Company site: Blog topics, press.
  • Hiring page: Open roles.

Signal Freshness Rules

Signal TypeFresh Until
Funding news90 days
LinkedIn posts30 days
Hiring activity60 days
G2 reviews90 days
Negative review180 days

The "So What?" Test

Before using a signal, ask:

  1. Is it recent?
  2. Does it connect to MY offer?
  3. Would THEY care that I noticed?
  4. Can I tie it to a specific pain?

When to Skip

If after 10 minutes you find no Tier 1/2 signals and can't tie anything to your offer:

  • Skip or mark for later.
  • OR use Whole Offer strategy if targeting is solid.

Supporting file: assets/scoring-rubric.md

Scoring Rubric (0-100)

DimensionWeightWhat's Measured
Situation Recognition25 ptsSpecific data about them?
Value Clarity25 ptsClear offer + proof?
Personalization Quality20 ptsCustom signal OR AI insight?
CTA Effort15 pts5 words or less to reply?
Punchiness10 pts50-90 words? No fluff?
Subject Line5 pts2-4 words OR whole offer?

Scoring Guide

  • 85+ = Ship it
  • 70-84 = Needs one more pass
  • <70 = Start over

Detailed Criteria

Situation Recognition (25 pts)

  • 25: References a specific, recent event (hiring, funding, post) or precise pain point.
  • 15: References general company info (industry, size).
  • 0: Generic "I hope this finds you well".

Value Clarity (25 pts)

  • 25: Clear "We help X do Y" + specific metric proof.
  • 15: Vague value prop without proof.
  • 0: Confusing or jargon-heavy.

Personalization Quality (20 pts)

  • 20: Uses custom signal (Tier 1/2) or clever whole-offer.
  • 10: Uses basic variables (Name, Company).
  • 0: Wrong variables or hallucinations.

CTA Effort (15 pts)

  • 15: Yes/No question, low friction ("Worth a look?").
  • 5: "Let me know your thoughts".
  • 0: "Can we schedule 15 mins?"

Punchiness (10 pts)

  • 10: 50-90 words, no fluff.
  • 5: 90-120 words.
  • 0: >120 words or full of filler.

Subject Line (5 pts)

  • 5: Intriguing (2-4 words) or clear offer.
  • 0: Salesy or misleading.

Supporting file: assets/variable-schema.md

Variable Schema

Core Variables (Always try to include)

  • {{first_name}}
  • {{company_name}}
  • {{role_title}}
  • {{department}}
  • {{company_domain}}
  • {{industry}}
  • {{hq_location}}

High-Signal Variables (Use when available)

  • {{tenure_years}}
  • {{recent_post_topic}}, {{recent_post_date}}
  • {{press_headline}}
  • {{event_webinar_title}}, {{event_date}}
  • {{competitor}}, {{category_competitors}}
  • {{stack_crm}}, {{stack_marketing}}, {{stack_data}}
  • {{hiring_roles}}, {{open_roles_count}}
  • {{traffic_trend}}
  • {{conversion_goal}}
  • {{kpi_at_risk}}

AI-Generated Variables (Dynamic)

  • {{ai_customer_description}}: e.g., "fitness enthusiasts who want to breathe better"
  • {{ai_customer_type}}: e.g., "VPs of Finance"
  • {{ai_generation}}: Flexible contextual generation based on website/LinkedIn

Custom Signal Variables (Campaign-specific)

  • {{g2_review_complaint}}
  • {{github_repo_found}}
  • {{security_page_outdated}}
  • {{pricing_page_insight}}
  • {{hiring_spike_dept}}
  • {{competitor_mentioned}}
  • {{negative_review}}
  • {{google_cid}}
  • {{follower_count}}

Case Study Variables

  • {{case_study_company}}
  • {{case_study_result}}
  • {{case_study_metric}}
  • {{case_study_customer_type}}
  • {{case_study_timeframe}}

Formatting Rules

  • Always show variables in {{double_braces}} in drafts.
  • Never invent facts; if unknown, omit or use broader strategy.

How do I install Cold email personalization in Cursor, Claude Code, or Codex?

Run npx skills add gtmagents/gtm-agents --skill cold-email-personalization in the project where you want it, then ask your agent for the skill by name. The --skill flag installs only Cold email personalization, not every skill in the repository.

Where does Cold email personalization come from and what license is it under?

Cold email personalization comes from the gtmagents/gtm-agents repository on GitHub. That repository has 297 GitHub stars. The skill is published under the Apache-2.0 license.

Prefer plain text? Read the Cold email personalization guide as markdown.