outreach-sequencer
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseOutreach 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:
| Variable | Source | Example |
|---|---|---|
| Name field (split) | "Jane" |
| Company field | "Acme Corp" |
| Title field | "CTO" |
| Shared connections/background | "Stanford" |
| Why reaching out now | "saw your Series A" |
| What you offer them | "AI-powered analytics" |
| Their likely challenge | "scaling engineering team" |
每条消息都会基于DuckDB中的潜在客户资料数据生成。可使用以下变量:
| 变量 | 来源 | 示例 |
|---|---|---|
| 姓名字段(拆分后) | "Jane" |
| 公司字段 | "Acme Corp" |
| 职位字段 | "CTO" |
| 共同人脉/背景 | "Stanford" |
| 本次联系的契机 | "获悉你们完成了A轮融资" |
| 你能提供的价值 | "AI-powered analytics" |
| 他们可能面临的挑战 | "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 DuckDB1. 从DuckDB读取潜在客户资料
2. 识别个性化切入点:
- 共同背景(学校、公司、所在地)
- 公司近期新闻(必要时可通过网页搜索获取)
- 职位相关的痛点
3. 为当前序列步骤选择对应的消息模板
4. 生成个性化消息
5. 将消息及状态存储到DuckDBExecution
执行方式
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.aiFor 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:
| Field | Values | Notes |
|---|---|---|
| Outreach Status | Queued, Sent, Replied, Converted, Bounced, Opted Out | Main status |
| Sequence Step | 1, 2, 3, 4 | Current step in sequence |
| Last Outreach | date | When last message was sent |
| Next Outreach | date | When next step is due |
| Outreach Channel | LinkedIn, Email, Both | Active channel |
| Reply Received | boolean | True if they responded |
| Thread ID | text | Gmail 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%)