Skip to main content

Cold Email Icebreaker

The Cold Email Icebreaker agent generates highly personalized 7-email cold outreach sequences for a specific contact using deep research on the person and their company.

Overview

Agent ID: cold-email-icebreaker

Output: Self-contained HTML document with complete 7-email sequence, research summary, and personalization tags.

Execution Time: 30-60 seconds (extensive research phase)

Accepts: LinkedIn URL or email address

Sample Output

See it in action: Josh Aborwitz Email Sequence

This sample shows a complete 7-email sequence with person insights, company context, icebreaker hooks, and anti-AI detection guidelines.

Value Proposition

Creates cold email sequences that actually get responses by:

  1. Deep personalization from contact research (posts, career history, interests)
  2. Company-specific hooks (not generic value props)
  3. Human-sounding copy that avoids AI tells
  4. Full 7-email sequence with varied approaches

Quick Start

1. Start an Email Sequence Generation

curl -X POST "https://phoenix.hginsights.com/api/agents/v1/agents/cold-email-icebreaker/runs" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"contactIdentifier": "https://linkedin.com/in/username"
},
"params": {
"campaignGoal": "meeting",
"productContext": "Sales intelligence platform",
"tonePreference": "conversational"
}
}'

Response:

{
"run_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued"
}

2. Poll for Completion

curl "https://phoenix.hginsights.com/api/agents/v1/runs/{run_id}" \
-H "Authorization: Bearer YOUR_API_KEY"

3. Retrieve the HTML Sequence

curl "https://phoenix.hginsights.com/api/agents/v1/runs/{run_id}/artifacts" \
-H "Authorization: Bearer YOUR_API_KEY"

Input Parameters

Required: Contact Identifier

FieldTypeDescription
contactIdentifierstringLinkedIn URL (e.g., https://linkedin.com/in/username) OR email address

Optional: Context Parameters

FieldTypeDefaultDescription
senderContextobject{}Info about sender (name, title, company, mutualConnections)
campaignGoalstringmeetingGoal: meeting, reply, or referral
productContextstring-What you're selling (for relevance)
tonePreferencestringconversationalTone: formal, conversational, bold, or casual

Example with Full Context

{
"input": {
"contactIdentifier": "https://linkedin.com/in/sarahchen-revops"
},
"params": {
"senderContext": {
"name": "Alex",
"title": "Account Executive",
"company": "HG Insights",
"mutualConnections": ["Mike at Gong"]
},
"campaignGoal": "meeting",
"productContext": "Sales intelligence data to improve pipeline quality",
"tonePreference": "conversational"
}
}

7-Email Sequence Structure

EmailPurposeDayLength
1Icebreaker - Personal hook, establish relevance150-80 words
2Value - One specific pain point you solve360-100 words
3Social proof - Brief case study or name drop650-80 words
4Different angle - New hook or approach1060-100 words
5Quick bump - Short, casual follow-up1430-50 words
6Resource share - Offer something valuable, no ask1850-80 words
7Breakup - Respectful close, leave door open2340-60 words

HTML Output

The agent produces a self-contained HTML document that includes:

  1. Contact Header - Name, title, company, LinkedIn URL, email
  2. Research Summary - Person insights and company insights
  3. Icebreaker Hooks - Best personalization opportunities identified
  4. 7-Email Cards - Each with:
    • Subject line
    • Email body
    • Personalization tags used
    • Word count and CTA type
  5. Sequence Strategy - Primary hook, backup angles, best send times
  6. Do Not Say List - AI tells specific to this prospect

Anti-AI Detection

The agent follows strict guidelines to avoid AI-sounding copy:

Banned Phrases

  • "I hope this email finds you well"
  • "I wanted to reach out"
  • "I came across your profile/company"
  • "Revolutionary/game-changing/cutting-edge"
  • "Please let me know if you're interested"

Human-Sounding Patterns

  • Start mid-thought sometimes
  • Use "you" more than "I" or "we"
  • One ask per email, max
  • Vary sentence structure and length
  • End with questions, not statements

Personalization Depth Levels

LevelExampleQuality
None"Companies like yours..."Bad
Surface"I see you're at Acme"Weak
Company"With your EMEA expansion..."Okay
Personal"Your post about pipeline quality..."Good
Specific"When you said 'quality > quantity' last week..."Best

Use Cases

AE Outbound Prospecting

Generate personalized sequences for high-value prospects before cold outreach.

BDR High-Volume Prospecting

Create varied, personalized emails that avoid the spam folder and AI detection.

Account-Based Marketing

Develop multi-touch sequences tailored to specific accounts and personas.

Re-engagement Campaigns

Create fresh approaches for prospects who've gone cold.

Error Handling

ScenarioBehavior
LinkedIn URL invalidReturns HTML error page with format guidance
Contact not foundProceeds with web search only, notes limited personalization
No personalization foundFlags as "low personalization risk," uses company-level hooks
Company unknownProceeds with contact-only personalization

MCP Tools Used

ToolPurpose
contact_searchFind contact from LinkedIn URL or email
contact_enrichGet full profile (career history, skills)
web_searchFind posts, talks, articles by the person
company_firmographicCompany context (size, industry)
company_technographicTech stack for relevance (optional)

Example: Python Integration

import requests
import time

API_KEY = "phx_your_api_key_here"
BASE_URL = "https://phoenix.hginsights.com/api/agents"

headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}

def generate_cold_email_sequence(
contact_identifier: str,
product_context: str = None,
campaign_goal: str = "meeting"
) -> str:
"""Generate a 7-email cold outreach sequence."""

# 1. Start the run
payload = {
"input": {"contactIdentifier": contact_identifier},
"params": {"campaignGoal": campaign_goal}
}
if product_context:
payload["params"]["productContext"] = product_context

response = requests.post(
f"{BASE_URL}/v1/agents/cold-email-icebreaker/runs",
headers=headers,
json=payload
)
response.raise_for_status()
run_id = response.json()["run_id"]
print(f"Started run: {run_id}")

# 2. Poll for completion
while True:
status_response = requests.get(
f"{BASE_URL}/v1/runs/{run_id}",
headers=headers
)
status = status_response.json()

print(f"Status: {status['status']}")

if status["status"] == "succeeded":
break
elif status["status"] == "failed":
raise Exception(f"Run failed: {status.get('error')}")

time.sleep(5)

# 3. Get artifacts
artifacts_response = requests.get(
f"{BASE_URL}/v1/runs/{run_id}/artifacts",
headers=headers
)
artifacts = artifacts_response.json()["artifacts"]

html_artifact = next(a for a in artifacts if a["artifact_type"] == "html")
return html_artifact["url"]

# Usage
sequence_url = generate_cold_email_sequence(
"https://linkedin.com/in/username",
"Sales intelligence platform"
)
print(f"Sequence available at: {sequence_url}")

Best Practices

  1. Provide product context - Helps the agent tailor messaging to your specific solution
  2. Include sender context - Mutual connections and sender info improve personalization
  3. Review and customize - Use the sequence as a starting point, add your personal touch
  4. Test different tones - Try bold for senior executives, casual for peers
  5. Use the "Do Not Say" list - These phrases will trigger spam filters and AI detection

Next Steps