outreach-sequencer

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Outreach Sequencer — Multi-Step Personalized Campaigns

开发信序列工具——多步骤个性化营销活动

Design, schedule, and execute multi-step outreach sequences across LinkedIn and email. Each message is personalized per lead using their profile data from DuckDB.
在LinkedIn和邮件渠道设计、排期并执行多步骤开发信序列。每条消息都会利用DuckDB中的潜在客户资料数据进行个性化定制。

Sequence Templates

序列模板

Template 1: LinkedIn Connection + Message

模板1:LinkedIn好友请求+消息

Day 0: Send LinkedIn connection request (with note)
Day 1: If accepted → Send intro message
Day 3: If no reply → Follow-up message
Day 7: If no reply → Break-up / value-add message
第0天:发送带备注的LinkedIn好友请求
第1天:如果通过请求→发送介绍消息
第3天:如果未收到回复→发送跟进消息
第7天:如果仍未回复→发送收尾/增值消息

Template 2: Cold Email Sequence

模板2:陌生开发邮件序列

Day 0: Initial cold email
Day 3: Follow-up (reply to original thread)
Day 7: Value-add email (case study, resource)
Day 14: Break-up email ("closing the loop")
第0天:发送初始陌生开发邮件
第3天:跟进邮件(回复原线程)
第7天:增值邮件(案例研究、资源)
第14天:收尾邮件(「结束跟进」)

Template 3: Multi-Channel

模板3:多渠道序列

Day 0: LinkedIn connection request
Day 2: Cold email (if not connected on LinkedIn)
Day 4: LinkedIn message (if connected) OR email follow-up
Day 7: Final touch (whichever channel they engaged on)
第0天:发送LinkedIn好友请求
第2天:如果未通过LinkedIn好友请求→发送陌生开发邮件
第4天:如果已通过好友请求→发送LinkedIn消息,否则发送邮件跟进
第7天:最终触达(选择对方有互动的渠道)

Personalization Engine

个性化引擎

Each message is generated per-lead using their DuckDB profile data. Use these variables:
VariableSourceExample
{first_name}
Name field (split)"Jane"
{company}
Company field"Acme Corp"
{title}
Title field"CTO"
{mutual}
Shared connections/background"Stanford"
{trigger}
Why reaching out now"saw your Series A"
{value_prop}
What you offer them"AI-powered analytics"
{pain_point}
Their likely challenge"scaling engineering team"
每条消息都会基于DuckDB中的潜在客户资料数据生成。可使用以下变量:
变量来源示例
{first_name}
姓名字段(拆分后)"Jane"
{company}
公司字段"Acme Corp"
{title}
职位字段"CTO"
{mutual}
共同人脉/背景"Stanford"
{trigger}
本次联系的契机"获悉你们完成了A轮融资"
{value_prop}
你能提供的价值"AI-powered analytics"
{pain_point}
他们可能面临的挑战"scaling engineering team"

Personalization Rules

个性化规则

  • Never use generic openers like "I hope this finds you well"
  • Reference something specific: recent post, company news, shared background
  • Keep LinkedIn messages under 300 chars (connection note limit)
  • Keep cold emails under 150 words (respect attention)
  • Vary language across leads — don't send identical messages to people at the same company
  • Match tone to seniority: C-suite gets concise/strategic, ICs get technical/peer-level
  • 切勿使用通用开场白,比如「希望你一切安好」
  • 引用具体内容:近期动态、公司新闻、共同背景
  • LinkedIn消息字数控制在300字符以内(好友请求备注有字数限制)
  • 陌生开发邮件字数控制在150词以内(尊重对方注意力)
  • 针对不同潜在客户调整语言——不要给同一家公司的人发送完全相同的消息
  • 根据职位层级调整语气:高管层用简洁/战略型语气,普通员工用技术/同行型语气

Message Generation Pattern

消息生成流程

1. Read lead profile from DuckDB
2. Identify personalization hooks:
   - Shared background (school, company, location)
   - Recent company news (web search if needed)
   - Role-specific pain points
3. Select message template for sequence step
4. Generate personalized message
5. Store message + status in DuckDB
1. 从DuckDB读取潜在客户资料
2. 识别个性化切入点:
   - 共同背景(学校、公司、所在地)
   - 公司近期新闻(必要时可通过网页搜索获取)
   - 职位相关的痛点
3. 为当前序列步骤选择对应的消息模板
4. 生成个性化消息
5. 将消息及状态存储到DuckDB

Execution

执行方式

LinkedIn Messages (via Browser)

LinkedIn消息(通过浏览器)

browser → open LinkedIn messaging
browser → search for recipient
browser → open conversation
browser → type personalized message
browser → send
→ Update DuckDB status: "Sent"
浏览器 → 打开LinkedIn消息页面
浏览器 → 搜索收件人
浏览器 → 打开对话窗口
浏览器 → 输入个性化消息
浏览器 → 发送
→ 更新DuckDB状态:「已发送」

Email (via gog CLI)

邮件(通过gog CLI)

bash
gog gmail send \
  --to "{email}" \
  --subject "{subject}" \
  --body "{personalized_body}" \
  --account patrick@candlefish.ai
For follow-ups (reply to thread):
bash
gog gmail reply \
  --thread-id "{thread_id}" \
  --body "{follow_up_body}"
bash
gog gmail send \
  --to "{email}" \
  --subject "{subject}" \
  --body "{personalized_body}" \
  --account patrick@candlefish.ai
跟进邮件(回复原线程):
bash
gog gmail reply \
  --thread-id "{thread_id}" \
  --body "{follow_up_body}"

Sequence Status Tracking

序列状态追踪

Track in DuckDB with these status fields:
FieldValuesNotes
Outreach StatusQueued, Sent, Replied, Converted, Bounced, Opted OutMain status
Sequence Step1, 2, 3, 4Current step in sequence
Last OutreachdateWhen last message was sent
Next OutreachdateWhen next step is due
Outreach ChannelLinkedIn, Email, BothActive channel
Reply ReceivedbooleanTrue if they responded
Thread IDtextGmail thread ID for email chains
sql
-- Find leads due for next sequence step
SELECT "Name", "Email", "Outreach Status", "Sequence Step", "Next Outreach"
FROM v_leads
WHERE "Outreach Status" = 'Sent'
  AND "Reply Received" = false
  AND "Next Outreach" <= CURRENT_DATE
ORDER BY "Next Outreach";
通过DuckDB的以下状态字段进行追踪:
字段可选值说明
开发信状态待发送、已发送、已回复、已转化、已退回、已退订主状态
序列步骤1、2、3、4当前所处的序列步骤
上次触达时间日期上次发送消息的时间
下次触达时间日期下一个步骤的执行时间
触达渠道LinkedIn、邮件、两者皆有使用的渠道
是否收到回复布尔值若对方回复则为真
线程ID文本邮件对话的Gmail线程ID
sql
-- 查询需要执行下一个序列步骤的潜在客户
SELECT "Name", "Email", "Outreach Status", "Sequence Step", "Next Outreach"
FROM v_leads
WHERE "Outreach Status" = 'Sent'
  AND "Reply Received" = false
  AND "Next Outreach" <= CURRENT_DATE
ORDER BY "Next Outreach";

Cron Integration

Cron集成

Set up automated sequence execution:
Schedule: Every 2 hours during business hours (9am-5pm Mon-Fri)
Action:
1. Query leads due for next step
2. For each due lead:
   a. Generate personalized message for their current step
   b. Send via appropriate channel
   c. Update status + advance step
   d. Set next outreach date
3. Report: "Sent 12 messages (8 LinkedIn, 4 email). 3 replies received."
设置自动化序列执行:
排期:工作日(周一至周五)9:00-17:00,每2小时执行一次
操作:
1. 查询需要执行下一个步骤的潜在客户
2. 针对每个符合条件的潜在客户:
   a. 为当前步骤生成个性化消息
   b. 通过合适的渠道发送
   c. 更新状态并推进到下一个步骤
   d. 设置下次触达日期
3. 生成报告:「已发送12条消息(8条LinkedIn消息,4封邮件)。收到3条回复。」

Cron Job Setup (for OpenClaw)

Cron任务配置(适用于OpenClaw)

json
{
  "name": "Outreach Sequencer",
  "schedule": { "kind": "cron", "expr": "0 9,11,13,15 * * 1-5", "tz": "America/Denver" },
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "message": "Run outreach sequence check. Query DuckDB for leads with Next Outreach <= today. Send personalized messages for their current sequence step. Update statuses. Report results.",
    "timeoutSeconds": 300
  }
}
json
{
  "name": "Outreach Sequencer",
  "schedule": { "kind": "cron", "expr": "0 9,11,13,15 * * 1-5", "tz": "America/Denver" },
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "message": "Run outreach sequence check. Query DuckDB for leads with Next Outreach <= today. Send personalized messages for their current sequence step. Update statuses. Report results.",
    "timeoutSeconds": 300
  }
}

Safety & Compliance

安全与合规

  • Daily send limits: Max 50 LinkedIn connection requests/day, 100 messages/day
  • Email limits: Max 100 cold emails/day (avoid spam flags)
  • Opt-out handling: If someone replies "not interested" / "unsubscribe", immediately set status to "Opted Out" and never contact again
  • Bounce handling: If email bounces, mark as "Bounced" and try alternate email patterns
  • CAN-SPAM compliance: Include sender identity, physical address option, and opt-out mechanism in emails
  • LinkedIn ToS: Keep connection notes professional, don't spam InMails
  • Cool-down: If a lead hasn't replied after full sequence, wait 90 days before any re-engagement
  • 每日发送限制:每日最多发送50个LinkedIn好友请求、100条消息
  • 邮件发送限制:每日最多发送100封陌生开发邮件(避免被标记为垃圾邮件)
  • 退订处理:若对方回复「不感兴趣」或「退订」,立即将状态设置为「已退订」,且不再联系
  • 退回处理:若邮件被退回,标记为「已退回」,并尝试使用其他邮箱格式发送
  • CAN-SPAM合规:邮件中需包含发件人身份、物理地址选项及退订机制
  • LinkedIn服务条款:好友请求备注需保持专业,不要发送垃圾站内信
  • 冷却期:若潜在客户在完整序列结束后仍未回复,需等待90天后方可再次尝试触达

Analytics

分析数据

After each sequence run, track:
Active Sequences: 85 leads
├── Step 1 (Initial): 20 leads
├── Step 2 (Follow-up): 35 leads
├── Step 3 (Value-add): 18 leads
├── Step 4 (Break-up): 12 leads
Outcomes:
├── Replied: 23 (27% reply rate)
├── Converted: 8 (9.4% conversion)
├── Opted Out: 3 (3.5%)
├── Bounced: 2 (2.4%)
└── No Response (completed): 15 (17.6%)
每次序列执行后,追踪以下数据:
活跃序列:85个潜在客户
├── 步骤1(初始触达):20个潜在客户
├── 步骤2(跟进):35个潜在客户
├── 步骤3(增值触达):18个潜在客户
├── 步骤4(收尾):12个潜在客户
结果:
├── 已回复:23个(回复率27%)
├── 已转化:8个(转化率9.4%)
├── 已退订:3个(占比3.5%)
├── 已退回:2个(占比2.4%)
└── 无响应(序列完成):15个(占比17.6%)