关于 auto-research-public
面向 Claude Code 的技能,可根据目标公司域名和客户资料生成个性化 Smartlead 营销活动。它串联公司调研、潜在客户搜索、邮件验证、文案变体和活动设置,并将状态保存在本地 JSON 文件中。
主要功能
- 01抓取公司网站内容
- 02使用 Prospeo 搜索潜在客户
- 03补全并验证邮箱
- 04生成 A/B/C 三种文案
- 05为每位潜在客户个性化内容
- 06上传并启动 Smartlead 活动
适用场景
- 01针对目标公司的潜在客户开展外联
- 02在潜在客户名单中测试多种邮件文案
- 03在本地文件中记录营销活动实验
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ growthenginenowoslawski/ coldoutboundskills --skill auto-research-public安装后在 Claude Code 中输入/auto-research-public确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/phase-enrich.tsphase-prospeo.tsphase-scrape.tsphase-upload.ts详细介绍
自动化研究(公开版)
自动化端到端营销活动启动器。输入一家目标公司的域名,大约 20 分钟后,即可获得一个已启动的 Smartlead 营销活动,并为每条潜在客户线索生成个性化内容。
这是适合初学者的版本,对应 GEX 内部的 auto-research-v2。所有状态都保存在本地 JSON 文件中;无需 Supabase 或 Trigger.dev。
你将获得
- **输入:**一家目标公司的域名 + 你的
client-profile.yaml - **输出:**一个正在运行的 Smartlead 营销活动,其中包含:
- 200-1,000 条潜在客户线索(取决于目标定位的精确程度)
- 每条线索的个性化内容:9 个自定义变量(情况、价值、CTA × 3 个变体)
- 并行测试的 A/B/C 主题 + 正文变体
- 营销活动分配至你可用的收件箱
- 发送时间安排:你所在时区的周一至周五上午 8 点至下午 5 点
前置条件
运行前:
- 存在
client-profile.yaml(如果没有,请运行/icp-onboarding) - 环境变量中设置了
SMARTLEAD_API_KEY - 环境变量中设置了
PROSPEO_API_KEY - 环境变量中设置了
MILLIONVERIFIER_API_KEY(用于电子邮件验证) - 至少有 20 个标记为 "active" 的 Smartlead 收件箱(请先运行
/smartlead-inbox-manager) - Smartlead 中至少有 1 个营销活动模板(否则脚本会新建一个)
编排流程(由 Claude Code 运行)
与其他技能不同,这项技能通过 Claude Code 对话本身进行编排:Claude 负责推理(生成 ICP、撰写文案、个性化内容),阶段脚本负责大量 API 调用。这是 GEX v2 内部采用的模式。
阶段 1:抓取目标公司信息
npx tsx scripts/phase-scrape.ts --domain=<target.com> --out=/tmp/auto/scrape.json
输出:包含 domain 和来自首页、/about、/product、/pricing、/customers 的文本内容的 JSON。
Claude 读取输出,并将简短分析写入 /tmp/auto/company-analysis.md:
- 公司做什么
- 他们可能的客户是谁
- 社会认同信号
- 潜在的外联切入点
阶段 2:Claude 生成 ICP 筛选条件
Claude 读取 /tmp/auto/scrape.json + ~/cold-email-ai-skills/profiles/<slug>/client-profile.yaml,并将 Prospeo 筛选条件写入 /tmp/auto/filters.json:
{
"job_titles": ["VP Marketing", "Head of Marketing", ...],
"seniorities": ["Vice President", "Head", "Director"],
"industries": ["Software Development", "Financial Services"],
"company_size_min": 50,
"company_size_max": 500,
"countries": ["US"],
"excluded_industries": ["Religious Institutions", "Government Administration"]
}
Claude 必须使用 ~/cold-email-ai-skills/skills/icp-onboarding/references/prospeo-industries.md 中准确的 Prospeo 行业名称。
阶段 3:Prospeo 搜索
npx tsx scripts/phase-prospeo.ts --filters-file=/tmp/auto/filters.json --max-leads=1000 --out=/tmp/auto/leads.json
输出:包含 leads 数组的 JSON。每条潜在客户线索包含:first_name、last_name、email(可能为空)、linkedin_url、job_title、company_name、company_domain、company_industry、company_headcount、company_description。
阶段 4:电子邮件瀑布查找 + 描述信息补全
npx tsx scripts/phase-enrich.ts --leads-file=/tmp/auto/leads.json --out=/tmp/auto/enriched.json
脚本会:
- 检查每条潜在客户线索是否有电子邮件;如果缺失,则调用 Prospeo 的
enrich-person端点 - 如果 company_description 内容过少(<50 个字符),则抓取 company_domain 首页
- 使用 MillionVerifier 验证每个候选电子邮件地址
- 将补全后的潜在客户线索(仅包含电子邮件有效的线索)写入输出
预期命中率:
- 零售/中小企业:约 99% 能找到电子邮件
- B2B 科技:约 65-80%
- 医疗保健/公共部门:约 25-40%
- MV 拒绝率:已找到的电子邮件中约 20-30%
阶段 5:撰写文案(Claude)
Claude 生成 3 个文案变体(A、B、C),并写入 /tmp/auto/variants.json:
[
{
"variant": "A",
"subject": "<concrete, specific, <60 chars>",
"angle": "<pain observation>",
"body_template": "Hi {{first_name}},\n\n{{situation_line_a}}\n\n{{value_line_a}}\n\n{{cta_line_a}}\n\n%signature%\n\nP.S. If this isn't relevant, just let me know and I won't reach out again."
},
{
"variant": "B",
"subject": "<different angle>",
"angle": "<compliment + transition>",
"body_template": "..."
},
{
"variant": "C",
"subject": "<third angle>",
"angle": "<question>",
"body_template": "..."
}
]
Claude 必须遵守以下规则(对输出运行 /spam-word-checker):
- 不使用 em dash(—)。请用逗号或句号。
- 不使用 "leverage"、"synergy"、"solutions"、"world-class"、"cutting-edge"。
- 正文:最多 50-90 个词。
- 主题:少于 60 个字符,内容具体,不使用标题党。
- 结尾单独一行写上
%signature%。
阶段 6:通过 Task 子 Agent 进行个性化处理
Claude 将任务分发给并行运行的 Task 子 Agent(每个变体 × 每批 20-30 条潜在客户线索)。完整模式请参阅 /personalization-subagent-pattern。
每个子 Agent 为每条潜在客户线索写入 /tmp/auto/personalization-<batch>-variant-<X>.json:
[
{
"lead_id": "...",
"situation_line": "One sentence about the company.",
"value_line": "One sentence connecting to our offer.",
"cta_soft": "One soft ask sentence."
}
]
所有子 Agent 完成后,Claude 按 lead_id 合并到 /tmp/auto/personalized.json。此时每条潜在客户线索都有 9 个个性化字段。
阶段 7:上传到 Smartlead
npx tsx scripts/phase-upload.ts \
--leads-file=/tmp/auto/personalized.json \
--variants-file=/tmp/auto/variants.json \
--domain=<target.com> \
--inboxes-tag=active \
--inbox-count=10 \
--activate
此脚本将:
- 创建一个新的 Smartlead campaign,名称为
[AUTO] <date> <target> Auto - 保存包含 campaign ID 作用域自定义变量的 3 个变体序列(
{{situation_line_a_{campaign_id}}}) - 从 Smartlead 中选择 N 个标记为 "active" 的收件箱(LRU — 最久未使用的优先)
- 按每批 100 条上传潜在客户,并将自定义字段映射到相应的个性化内容
- 设置时间安排(周一至周五,美国东部时间上午 8 点至下午 5 点)和设置(关闭跟踪、收到回复后停止)
- 激活 campaign
向 stdout 输出:{ campaignId, inboxCount, leadsUploaded }。
阶段 8:保存实验状态(本地 JSON)
写入 ~/cold-email-ai-skills/profiles/<slug>/experiments/<YYYY-MM-DD>-<target>.json:
{
"date": "2026-04-17",
"target_domain": "example.com",
"smartlead_campaign_id": 123456,
"inboxes_assigned": [...],
"icp_filters": {...},
"variants": [...],
"lead_count_uploaded": 347,
"launched_at": "2026-04-17T14:23:00Z",
"status": "launched"
}
这是你的实验日志。/experiment-design 会从这里读取数据以比较各次运行。21 天后,/positive-reply-scoring 会将结果写回此文件。
运行完整流程
要通过一条命令运行全部 8 个阶段(由 Claude 协调):
/auto-research-public --domain=<target.com>
Claude Code 会按顺序执行各个阶段,并在阶段 5(文案)和阶段 7(上传)之前暂停,供你检查。
每日/定时运行
熟悉之后,可以将其封装为 cron 任务,或使用 Claude Code 的 /loop 技能每日运行:
/loop 1d /auto-research-public --domain=$(cat /tmp/auto/next-target.txt)
你需要一种方法来每天选择下一个目标。选项:
- 维护一个
targets.txt列表,每天取出一个 - 让 Claude 根据 TAM 研究进行选择(参见
/list-builder和/list-expander) - 在竞争对手/相似公司列表中轮换
状态文件(本地 JSON,无数据库)
此技能所需的所有内容都存放在 ~/cold-email-ai-skills/profiles/<slug>/ 下:
profiles/
<business-slug>/
client-profile.yaml # from /icp-onboarding
lead-magnets.md # from /lead-magnet-brainstorm
experiments/
2026-04-16-targetco.json # per-campaign experiment log
2026-04-17-othertarget.json
scores/
123456-2026-05-07.json # from /positive-reply-scoring
收件箱分配(无需 Supabase)
GEX v2 使用 Supabase 表 auto_research_inbox_assignments 来跟踪分配给各个 campaign 的收件箱(以分散负载)。此公开版本:
- 向 Smartlead 查询标记为 "active" 的收件箱
- 获取每个收件箱的
daily_sent_count,作为“最近使用时间”的替代指标 - 按升序排序,选择前 N 个(今日发送量最少 = 最久未使用)
- 将分配记录到本地实验 JSON 中(而非数据库)
适用于少于 1000 个收件箱的情况。如果规模超过此数量,请迁移到实际的数据库。
常见问题
- Prospeo INVALID_FILTERS — 通常是“行业名称不在 256 项列表中”。请检查
/icp-onboarding中的 references/prospeo-industries.md,确认完全匹配。 - 邮箱命中率低 — 如果低于 30%,说明你的列表针对的是难以找到的人群(小众职位、小型公司)。扩大 ICP 范围,或接受相应成本。
- 子 Agent 的个性化内容重复 — 如果不同潜在客户的措辞相同,请使用多样性提示词重新运行该批次。参见
/personalization-subagent-pattern中的 references/failure-modes.md。 - 上传时 Smartlead 提示 "inbox not allowed" — 收件箱已被标记/封锁。脚本会跳过并继续。
- Campaign 卡在 0 次发送 — 检查 campaign 时间安排、收件箱预热状态(通过
/smartlead-inbox-manager list-health),并确认潜在客户确实已上传。
每次运行的成本
典型运行(1 个目标,提取 1000 条潜在客户):
- Prospeo 搜索:约 40 页 × 搜索 = 约 $0.20
- Prospeo enrich-person(为约 500 条缺少邮箱的潜在客户查找邮箱):约 $5
- MillionVerifier 验证:约 $0.50
- Smartlead 发送成本:随着发送量增加,每封邮件约 $0.001
- Claude Code Task 子 Agent:(使用你的 Claude Code 套餐,不产生额外 API 费用)
总计:每个 campaign 约 $6-10,可触达 300-500 个有效邮箱。
脚本
scripts/phase-scrape.ts— 网站抓取scripts/phase-prospeo.ts— Prospeo 分页搜索scripts/phase-enrich.ts— 邮箱瀑布查询 + 描述补充 + MillionVerifierscripts/phase-upload.ts— 创建 Smartlead campaign + 上传
参考资料
references/orchestration-checklist.md— 手动运行完整流程的分步指南references/icp-to-prospeo.md— 如何将 client-profile.yaml 转换为 Prospeo 筛选条件 JSONreferences/copy-variant-guide.md— 如何撰写 3 个不同的 A/B/C 变体
接下来做什么
等待 21 天,让营销活动积累回复数据,然后对已启动的营销活动运行 /positive-reply-scoring。
**与此同时:**通过 /cold-email-weekly-rhythm 保持每周节奏。每周一,对新营销活动运行 /email-deliverability-audit,以便及早发现基础设施问题。
**或者等待:**此技能就是自动化循环。下一步可以是“明天再次运行,但使用不同的目标域名”,也可以集成 /schedule 技能以每日运行。
相关技能
/icp-onboarding— 生成 client-profile.yaml(必需输入)/lead-magnet-brainstorm— 生成此营销活动询问的优惠/CTA/personalization-subagent-pattern— 第 6 阶段使用的扇出模式/smartlead-inbox-manager— 必须先运行,以便为收件箱添加标签并进行预热/positive-reply-scoring— 21 天后运行,为营销活动评分/experiment-design— 规划下一步尝试哪个目标