关于 get-qualified-leads-from-luma
该营销 Skill 搜索 Luma 活动并收集参与者与主办方,再按 ICP 评估线索。它将结果整理到 Google Sheets,并可通过 Slack 提醒团队查看重点线索。
主要功能
- 01按主题、地点搜索 Luma 活动
- 02收集并去重参与者资料
- 03按 ICP 批量评估线索
- 04将结果写入 Google Sheets
- 05通过 Slack 发送重点线索提醒
适用场景
- 01从近期行业活动中寻找潜在客户
- 02按既有 ICP 提示词筛选活动参与者
- 03汇总合格线索并通知销售团队
MCP 相关
工作流说明使用 Rube MCP 搜索 Google Sheets 和 Slack 工具,以写入表格并发送提醒。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gooseworks-ai/ goose-skills --skill get-qualified-leads-from-luma安装后在 Claude Code 中输入/get-qualified-leads-from-luma确认已加载。
附带文件skill.meta.json
详细介绍
从 Luma 活动中获取合格潜在客户
按主题和地点搜索 Luma 活动,提取所有参会者和主办方,根据你的 ICP 对他们进行筛选,将结果导出到 Google Sheet,并通过 Slack 向你发送包含优质潜在客户的提醒。
这是一个 5 步工作流,将 luma-event-attendees、lead-qualification、Google Sheets 输出和 Slack 提醒串联起来。
步骤 0:明确搜索参数
开始前,确保你已明确回答以下问题。如果用户的提示已经涵盖这些问题,则直接进入下一步。否则,请提问:
- 地点 — 活动应位于哪里?(例如,“San Francisco”“New York”“London”)
- 主题/关键词 — 活动主题是什么?建议提供 3-5 个关键词变体,以尽可能扩大覆盖范围。例如,如果用户说“growth marketing”,还可以建议:“GTM”“demand gen”“startup growth”“growth hacking”“marketing leadership”
- 时间范围 — 活动需要有多新?(例如,“过去 2 周”“过去 1 个月”“本季度”)。如果用户未指定,默认使用过去 30 天。Luma 搜索可能返回数月甚至数年前的活动,因此务必确认时间范围,避免结果过时。
- 筛选提示词 — 用户是否在
skills/lead-qualification/qualification-prompts/中已有筛选提示词?如果没有,用户的 ICP 大致是什么?(可以使用lead-qualification的 intake 模式来创建一个) - Slack 频道/ webhook — 应将提醒发送到哪里?Webhook URL 还是 Slack 频道名称?
- Slack 提醒中应包含多少个优质潜在客户?(默认:5 个)
以编号列表的形式列出这些问题。用户可以一次性回答。
步骤 1:搜索 Luma 并提取参会者
使用 luma-event-attendees skill,采用多个关键词变体来尽可能扩大覆盖范围。
并行执行搜索
生成 3-5 个结合用户主题和地点的关键词变体。并行运行所有搜索:
# Run each search variation in parallel
python3 skills/luma-event-attendees/scripts/scrape_event.py --search "AI San Francisco" --output /tmp/luma_search_1.csv
python3 skills/luma-event-attendees/scripts/scrape_event.py --search "Growth Marketing San Francisco" --output /tmp/luma_search_2.csv
python3 skills/luma-event-attendees/scripts/scrape_event.py --search "GTM San Francisco" --output /tmp/luma_search_3.csv
按时间范围筛选
收集结果后,使用 event_date 列筛除超出用户指定时间范围的活动。Luma 搜索会返回所有时间段的活动,因此这一步对于避免潜在客户信息过时至关重要。如果未指定时间范围,默认使用过去 30 天。
去重
按姓名(不区分大小写)合并并去重。妥善处理 None 姓名 — 跳过没有姓名的条目。
将去重后的结果保存为 CSV:
/tmp/luma_all_attendees.csv
向用户报告:
- 去重前的结果总数
- 去重后的独立人员数量
- 拥有 LinkedIn 个人资料的人数
- 涵盖的活动数量
步骤 2:将参会者数据保存为 CSV
整个工作流都使用 CSV;Google Sheets 只在最后(步骤 4)创建,因为处理中途将大型数据集写入 Sheets 速度慢且容易出错。
步骤 1 生成的 CSV(/tmp/luma_all_attendees.csv)是工作文件。列应包括:
| name | event_role | bio | title | company | linkedin_url | twitter_url | instagram_url | website_url | username | event_name | event_date | event_url |
|---|
步骤 3:筛选潜在客户
使用 lead-qualification skill(模式 2:复用提示词)筛选所有参会者。
准备批次
- 从用户指定的文件中读取筛选提示词(例如,
skills/lead-qualification/qualification-prompts/ai-event-attendees-gtm.md) - 将参会者拆分为多个批次,每批约 15-20 位潜在客户
- 对每位潜在客户,包含:id(行号)、name、event_role、bio、title、company、linkedin_url、event_name
并行执行筛选
使用 Task 工具和 sonnet 模型子 Agent 同时启动所有批次:
Task: "Qualify leads batch 1/N"
- Include the full qualification prompt text
- Include the batch of leads as JSON
- Ask for output as JSON array: [{id, name, qualified, confidence, reasoning}]
Task: "Qualify leads batch 2/N"
... (launch ALL at once)
合并结果
- 收集所有批次的结果
- 合并为一个 JSON 数组,并保留原始 ID
- 按置信度对符合条件的潜在客户排序(High 优先,其次是 Medium,最后是 Low)
- 保存结果:
/tmp/all_qual_results.json— 全部 195 条结果/tmp/qualified_leads.json— 仅包含符合条件的潜在客户,并按置信度排序
向用户报告:
- 处理的潜在客户总数
- 符合条件的数量和百分比
- 按置信度等级划分的数量(High / Medium / Low)
- 主要的不符合条件原因
第 4 步:创建包含结果的 Google Sheet
现在创建包含所有数据的 Google Sheet,包括原始参会者数据和筛选结果。
使用 Rube MCP 操作 Google Sheets
- 使用
RUBE_SEARCH_TOOLS查找 Google Sheets 工具(搜索 "google sheet create") - 创建一个名为:
Luma Leads - [Topic] - [Date]的新工作表 - 工作表 1("All Attendees"): 写入所有参会者行,保留原始列,并添加:
Qualified— Yes / NoConfidence— High / Medium / LowReasoning— 2-3 句说明
- 工作表 2("Qualified Leads"): 仅包含符合条件的潜在客户,并按置信度排序
大型数据集的写入策略
对于大型数据集,Google Sheets API 可能运行较慢。请采用以下方法:
- 先写入标题行
- 使用批量更新操作,每次写入 50 行
- 如果某个数据块写入失败,重试一次后再继续
备用方案
如果 Rube/Sheets 不可用,请保存为 CSV:
/tmp/luma_qualified_leads_[date].csv
向用户提供 Google Sheet 链接(或 CSV 路径)。
第 5 步:发送 Slack 提醒
发送格式化的 Slack 消息,其中包含排名靠前的 N 个符合条件的潜在客户(默认:5 个,或用户指定的数量)。
如果用户提供了 webhook URL
使用 Python 的 urllib.request 向 webhook 发送 POST 请求:
import json
import urllib.request
message = {
"blocks": [
{"type": "header", "text": {"type": "plain_text", "text": "Top N Qualified Leads from [Topic] Events"}},
{"type": "section", "text": {"type": "mrkdwn", "text": "_From X attendees across Y events, Z qualified (P%). Here are the top N:_"}},
# For each lead:
{"type": "section", "text": {"type": "mrkdwn", "text": "*1. Name* [Confidence]\n LinkedIn: url\n Bio: ...\n Why: reasoning"}},
{"type": "divider"},
# Link to spreadsheet at the bottom
{"type": "section", "text": {"type": "mrkdwn", "text": "<sheet_url|View full spreadsheet> (X attendees, Y qualified)"}}
]
}
req = urllib.request.Request(webhook_url, data=json.dumps(message).encode(), headers={"Content-Type": "application/json"})
urllib.request.urlopen(req)
如果用户希望通过 Rube MCP 使用 Slack
使用 RUBE_SEARCH_TOOLS 查找 Slack 工具,然后通过 SLACK_SEND_MESSAGE 或类似工具发送。
消息格式
Slack 提醒中应为每个排名靠前的潜在客户包含:
- 姓名和置信度等级
- LinkedIn URL(可点击)
- 简介 — 一句话总结
- 原因 — 符合条件的理由(如有需要,截短至约 150 个字符)
最后附上完整 Google Sheet 的链接。
费用估算
| 组成部分 | 费用 |
|---|---|
| Luma 抓取器(Apify) | 固定订阅费 $29/mo |
| LinkedIn 信息补充(可选) | 每 100 个潜在客户约 ~$0.03 |
| Google Sheets | 免费(通过 Rube/Composio) |
| LLM 筛选 | 每次运行约 ~$0.10-0.30(取决于批次大小) |
| Slack webhook | 免费 |
典型运行: 在 3-5 种搜索条件下处理约 200 名参会者,基本只需支付 Apify 订阅费和几美分的 LLM 令牌费用。
示例提示词
使用现有提示词快速运行:
"从 SF 的 AI 和增长活动中寻找符合条件的潜在客户。使用 ai-event-attendees-gtm 筛选提示词。通过 Slack webhook 发送排名前 5 的结果:https://hooks.slack.com/..."
完整说明:
"在 New York 搜索创业公司、SaaS 和 AI 活动。提取所有参会者。根据我们的 Series A 创始人 ICP 筛选他们。将所有内容放入 Google Sheet,并通过 Slack 给我发送排名前 10 的结果。"
简略请求(会触发澄清问题):
"帮我从 SF 科技活动中寻找潜在客户"
故障排除
未设置 Apify 令牌
export APIFY_API_TOKEN="your_token"
# Or check skills/luma-event-attendees/.env
未找到参会者
部分 Luma 活动已禁用 show_guest_list。Apify 抓取器仍可获取精选嘉宾,但并非所有活动都能提供完整的参会者名单。
Google Sheets 写入速度慢
大型数据集出现这种情况是正常的。该技能会按每批 50 行写入。如果速度太慢或写入失败,结果始终会以 CSV 格式保存在 /tmp/ 中。
Slack webhook 返回错误
请确认 webhook URL 正确,并且 Slack 应用仍已安装在工作区中。使用简单的 curl 命令进行测试:
curl -X POST -H 'Content-Type: application/json' -d '{"text":"test"}' YOUR_WEBHOOK_URL