borghei/cold-email
> Write and optimize B2B cold email outreach sequences that get replies, covering personalization, follow-up cadence, deliverability, and compliance. Use when writing cold outreach, prospecting/SDR emails, or building outbound sequences.
npx skills add https://github.com/borghei/Claude-Skills --skill cold-email
Production-grade B2B cold email that sounds like it came from a person, not a sequence tool.
cold email, cold outreach, prospecting email, SDR email, sales email, first-touch email, follow-up sequence, email prospecting, outbound email, sales development, sequence building, email personalization, email deliverability, CAN-SPAM, GDPR, B2B outreach, email compliance, subject lines, reply rates, breakup email
Before generating the email, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.
Step 1: Gather Context
Required information:
Step 2: Choose Framework
| Framework | Best When | Structure |
|-----------|-----------|-----------|
| Problem-First | Prospect has a visible pain point | Problem observation > Relevance > Ask |
| Trigger-Based | There is a specific event (funding, hiring, news) | Trigger reference > Connection to problem > Ask |
| Mutual Connection | Referral or shared network | Name drop > Context > Ask |
| Value-First | You have something genuinely useful to share | Insight/resource > Brief context > Ask |
| Direct Ask | Prospect is high-intent or very senior | Brief context > Direct question |
Step 3: Draft the Email
Structure:
Subject: [2-4 words, looks like an internal email]
[Opener: 1 sentence about their world — trigger, observation, or question]
[Relevance: 1-2 sentences connecting their situation to what you do]
[Proof: 1 sentence of credible evidence — specific number, named customer, result]
[Ask: 1 sentence with a single, specific, low-friction CTA]
[Sign-off]
Step 4: Validate
Step 1: Write Email 1 (Using Workflow 1)
Step 2: Plan Follow-Up Angles
Each follow-up needs a distinct angle. Plan before writing:
| Email | Day | Angle | What is New |
|-------|-----|-------|-------------|
| 1 | Day 1 | Problem-first | Initial outreach |
| 2 | Day 4 | New evidence | Case study, data point, or recent result |
| 3 | Day 9 | Different pain point | Alternative angle on their world |
| 4 | Day 16 | Industry insight | Something notable about their space |
| 5 | Day 25 | Direct question | Simple, clear ask without context |
| 6 | Day 35 | Breakup | Professional close, referral ask |
Step 3: Write Each Follow-Up
Rules for every follow-up:
Step 4: Write the Breakup Email
The breakup email closes the loop. It signals this is the last one, which paradoxically increases reply rate.
Template:
Subject: closing the loop
[Name],
Last note from me. If [specific problem] becomes a priority,
reply here and I'll pick it up.
If there's someone else at [Company] better suited for this
conversation, a name would help.
Either way — [genuine well-wish related to something specific].
[Sign-off]
Step 1: Diagnose the Problem
| Symptom | Likely Cause | Fix |
|---------|-------------|-----|
| Low open rate (< 25%) | Subject lines | Test new subject line patterns |
| Opens but no replies (< 2% reply rate) | Email body | Rewrite with stronger relevance and lower-friction CTA |
| Replies but wrong outcome | CTA mismatch | Adjust the ask |
| High bounce rate (> 5%) | List quality | Verify email addresses before sending |
| Landing in spam | Deliverability | Check SPF/DKIM/DMARC, reduce send volume, warm domain |
Step 2: Rewrite the Underperforming Element
Focus on one element at a time. Do not rewrite the entire email when only the subject line is the problem.
Step 3: Test and Measure
The moment your email sounds like marketing copy, it is deleted.
Test: Would you send this to a smart colleague at another company? If not, rewrite.
Each sentence must do one of these jobs:
If a sentence does none of these, cut it.
Generic personalization is worse than none.
The personalization must bridge to the reason for reaching out.
The opener should be about their situation, problem, or context. Not about you or your product.
Do not ask them to book a call, watch a demo, read a case study, AND reply with their timeline. Pick one.
| Audience | Length | Tone | Subject Style | What Works |
|----------|--------|------|---------------|------------|
| C-suite (CEO, CRO, CMO) | 3-4 sentences | Ultra-brief, peer-level, strategic | Short, vague, internal-looking | Big problem > relevant proof > one question |
| VP / Director | 5-7 sentences | Direct, metrics-conscious | Slightly more specific | Specific observation + clear business angle |
| Manager | 7-10 sentences | Practical, shows homework | Can be descriptive | Specific problem + practical value + easy CTA |
| Technical (Engineer, Architect) | 7-10 sentences | Precise, no fluff | Technical specificity | Exact problem > precise solution > low-friction ask |
| Founder / Solo | 5-7 sentences | Empathetic, peer-to-peer | Casual, human | Shared experience + relevant proof + conversational ask |
Rule: The higher up the org chart, the shorter your email needs to be.
The goal of a subject line is to get the email opened. Not to convey value, not to be clever. Just opened.
The best cold email subject lines look like internal emails: short, slightly vague, enough curiosity to click.
| Pattern | Example | Why It Works |
|---------|---------|-------------|
| Two or three words | "quick question" | Looks like a real email from a colleague |
| Specific trigger + question | "your TechCrunch piece" | Specific enough to not look like spam |
| Shared context | "re: Series B" | Feels like a follow-up, not cold |
| Observation | "your ATS setup" | Relevant, not salesy |
| Referral hook | "[mutual name] suggested I reach out" | Social proof front-loaded |
| Role-specific | "SDR team scaling" | Shows you know who they are |
| Email | Send Day | Gap | Notes |
|-------|----------|-----|-------|
| Email 1 | Day 1 | — | First touch |
| Email 2 | Day 4 | +3 days | New evidence angle |
| Email 3 | Day 9 | +5 days | Different pain point |
| Email 4 | Day 16 | +7 days | Industry insight |
| Email 5 | Day 25 | +9 days | Direct question |
| Breakup | Day 35 | +10 days | Close the loop |
Gaps increase over time. Persistent but not annoying.
| Angle Type | Description | Example |
|-----------|-------------|---------|
| New evidence | Case study, data point, recent result | "Since my last note, we helped [Company] reduce [metric] by [%]" |
| Different pain | Alternative problem in their world | "Setting aside [topic A] — are you dealing with [topic B]?" |
| Industry insight | Something notable about their space | "Saw [industry trend]. Most teams are responding by [approach]" |
| Direct question | Simple ask without buildup | "[Name], quick one: who handles [function] at [Company]?" |
| Reverse ask | Request for referral | "If this isn't your area, who would you point me to?" |
| Social proof | Relevant peer doing it | "[Similar company] just went through this — here's what worked" |
Tier 1: Segment-Level (Minimum)
Tier 2: Company-Level (Standard)
Tier 3: Individual-Level (Premium)
| Source | What You Find | How to Use |
|--------|--------------|-----------|
| LinkedIn profile | Role, tenure, content they share | Role-specific opener, reference their posts |
| Company blog | Priorities, culture, technology choices | Connect your solution to their stated priorities |
| Job postings | Growth areas, pain points, tech stack | "You're hiring for X, which usually means..." |
| Press/news | Funding, partnerships, launches | Trigger-based openers |
| GitHub/tech blogs | Technical decisions, stack choices | Technical relevance and credibility |
| Podcast/talks | Opinions, expertise areas | "Your point about X in [talk] resonated..." |
| Component | What | Why |
|-----------|------|-----|
| Dedicated sending domain | mail.yourdomain.com or outreach.yourdomain.com | Protects primary domain reputation |
| SPF record | DNS TXT record authorizing sending servers | Proves you are authorized to send |
| DKIM signing | Cryptographic signature on emails | Proves emails were not modified in transit |
| DMARC policy | DNS record specifying SPF/DKIM enforcement | Tells receiving servers how to handle failures |
| Domain warmup | 4-6 weeks of gradually increasing volume | Builds sender reputation with ISPs |
| Week | Daily Volume | Notes |
|------|-------------|-------|
| 1 | 10-20 | Send to engaged contacts only |
| 2 | 20-40 | Mix of warm and cold contacts |
| 3 | 40-70 | Begin cold outreach at low volume |
| 4 | 70-100 | Monitor bounce rates closely |
| 5-6 | 100-150 | Increase if bounce rate < 3% |
| 7+ | 150-200 max | Steady state for cold outreach |
Required for all commercial email to US recipients:
Required for email to EU/EEA residents:
Required for commercial electronic messages to Canadian recipients:
| Pattern | Why It Fails |
|---------|-------------|
| "I hope this email finds you well" | Instant signal that this is templated mass outreach |
| "I wanted to reach out because..." | Three words of nothing before saying anything |
| Opening with "My name is X and I work at Y" | They can see your name. Start with something useful. |
| Feature dump in email 1 | Nobody cares about features when they do not trust you yet |
| HTML templates with logos and colors | Looks like marketing, gets spam-filtered |
| Fake Re:/Fwd: subject lines | Deceptive, destroys trust |
| "Just checking in" follow-ups | Adds no value, removes credibility |
| Social proof without context | "We work with 500 companies" means nothing without relevance |
| Long-form case study in email 1 | Save it for follow-up |
| Passive CTAs ("Let me know if you're interested") | Weak. Ask a direct question or propose a specific step. |
| Multiple CTAs in one email | Creates decision paralysis. One ask per email. |
| Sending from your primary domain | Risks your entire domain reputation |
10. Segment relentlessly — A generic template sent to 1,000 people will underperform a personalized email sent to 50 who match your ideal profile.
| Symptom | Likely Cause | Fix |
|---------|-------------|-----|
| Open rate below 15% | Subject lines too long, spammy, or generic | Test 2-4 word internal-email-style subjects. Run subject_line_scorer.py. |
| Opens but reply rate below 1% | Email body lacks relevance or CTA is too high-friction | Rewrite opener about their world. Use a question CTA, not a statement. |
| Emails landing in spam (2026) | Missing SPF/DKIM/DMARC or RFC 8058 one-click unsubscribe | Gmail/Yahoo/Microsoft now reject non-compliant bulk mail. Run deliverability_checker.py. |
| Bounce rate above 3% | Unverified email list or role-based addresses | Verify every address before sending. Remove catch-alls and role accounts. |
| Spam complaint rate above 0.10% | Irrelevant targeting or too-frequent sends | Gmail enforces 0.10% threshold as of 2026. Improve targeting and reduce volume per domain. |
| Replies but wrong outcome | CTA mismatch with funnel stage | Align CTA friction to prospect readiness. C-suite wants a question; managers accept a demo link. |
| Domain blacklisted | Sending from primary domain or too-high volume | Use dedicated sending subdomains. Warm new domains 4-6 weeks. Max 100 emails/day/address. |
In Scope:
Out of Scope:
Limitations:
scripts/subject_line_scorer.py)Scores cold email subject lines on deliverability, spam risk, and open-rate potential using deterministic heuristics.
python scripts/subject_line_scorer.py "quick question"
python scripts/subject_line_scorer.py --file subjects.txt --json
scripts/deliverability_checker.py)Audits email content for spam triggers, HTML complexity, link density, and compliance against 2025-2026 Gmail/Yahoo/Microsoft requirements.
python scripts/deliverability_checker.py email.txt
python scripts/deliverability_checker.py email.txt --domain yourdomain.com --json
scripts/sequence_optimizer.py)Analyzes cold email sequence performance data against industry benchmarks. Diagnoses open rate, reply rate, bounce rate, and cadence issues.
python scripts/sequence_optimizer.py sequence_data.json
python scripts/sequence_optimizer.py --sample --json
Take borghei/cold-email from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.