关于 portfolio-deal-linker
portfolio-deal-linker 是用于将 HubSpot 成交记录关联到相关技能和自动化操作的技能,面向需要追踪销售贡献与职业成果的用户。它汇总收入影响、节省时间等指标,并生成周期性影响报告。
主要功能
- 01检测新关闭的成交记录
- 02将成交归因到技能与自动化
- 03计算收入、周期和自动化指标
- 04更新作品集与周报
- 05生成月度影响报告
适用场景
- 01追踪技能对成交的贡献
- 02整理月度收入影响与节省时间
- 03为绩效评审或职业转型准备证据
MCP 相关
使用 Epiphan CRM MCP、Apollo MCP 和 Gmail MCP 查询成交、联系人、序列及邮件记录,为归因提供依据。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scientiacapital/ skills --skill portfolio-deal-linker安装后在 Claude Code 中输入/portfolio-deal-linker确认已加载。
附带文件config.json
详细介绍
<quick_start> 每日自动运行(CST 上午 7 点): 检查上次运行后成交的交易 → 归因到技能/行动 → 更新业绩组合
按需运行: “portfolio update” → 立即运行完整归因扫描 “what did I influence this month” → 生成月度影响报告 “gtme evidence” → 按面试/评审场景整理业绩组合
触发短语:
- “portfolio update” / “deal closed”
- “link deal to portfolio” / “gtme evidence”
- “what did I influence” / “career evidence”
- “transition tracker” / “show my impact” </quick_start>
<success_criteria>
- 每笔已赢单的交易都在 24 小时内归因到源头技能/工作流
- 追踪受影响的收入,并提供清晰的归因链
- 每周汇总节省的时间指标(消除手动工作的技能)
- 整理业绩组合证据,以支持转任 VP BD 的叙述
- 自动生成月度高管摘要
- Tim 参与过的交易绝不漏记归因 </success_criteria>
架构
SCHEDULED (7am CST) ATTRIBUTION PORTFOLIO UPDATE
──────────────────────────────────────────────────────────────────────────────
HubSpot: recently closed → Match deal to skill that → Update portfolio.jsonl
deals (won + lost) → originated/influenced it → Update weekly digest
→ Calculate metrics → Update GTME narrative
→ Compare to manual baseline → Career evidence file
阶段 1:检测新近成交的交易
使用 hubspot_search_deals 和以下筛选条件:
dealstageIN ('closedwon', 'closedlost')closedate>= 上次运行时间戳(存储在~/.claude/portfolio/last-run.json)- 排除渠道交易(
is_channel = true)以及由 AE ID '82625923'、'423155215'、'190030668'(Lex Evans、Ron Epstein、Phillip Sandler)负责的交易
对于每笔交易,提取以下字段:
| 字段 | 用途 |
|---|---|
dealname | 识别交易 |
amount | 收入归因 |
closedate | 计算周期时间 |
createdate | 管道速度 |
dealstage | 赢单或输单 |
hubspot_owner_id | 仅限 Tim 的交易 |
| 关联联系人 | 参与沟通的对象 |
| 关联公司 | 公司匹配 |
| 交易备注/活动 | 归因信号 |
阶段 2:技能归因引擎
对于每笔已成交的交易,确定有哪些技能/自动化促成了交易:
归因信号
| 信号 | 归因技能 | 检测方式 |
|---|---|---|
| 联系人通过 Apollo 序列导入 | prospect-research-to-cadence | Apollo emailer_campaigns_search — 检查联系人是否在某个序列中 |
| 已生成 MEDDIC 电话准备资料 | meddic-call-prep-auto | 检查该公司是否出现在电话准备日志中 |
| 动量分析器标记了交易 | deal-momentum-analyzer | 检查交易是否出现在 RED/YELLOW 行动中 |
| 通过 Apollo 丰富了联系人信息 | prospect-research-to-cadence | 比较 Apollo 联系人创建日期和交易创建日期 |
| 已起草外联邮件 | prospect-research-to-cadence | 检查 Gmail 中该联系人的邮件草稿历史 |
| 存在活动历史记录 | meddic-call-prep-auto | 使用 ask_agent — 查询该公司的活动时间线 |
| 手动开发客户(无自动化匹配) | Tim(手动) | 回退方案 — 仍计入业绩组合 |
归因模型
PRIMARY attribution (100% credit):
→ Skill that ORIGINATED the deal (first touch)
ASSIST attribution (shared credit):
→ Skills that INFLUENCED the deal (middle touches)
→ E.g., prospect-research found the contact, meddic-call-prep prepped the demo,
deal-momentum flagged it when stalling
RECOVERY attribution:
→ If deal-momentum-analyzer flagged deal as RED/YELLOW
AND deal subsequently closed-won
→ This is "recovered revenue" — strongest GTME evidence
阶段 3:计算业绩组合指标
单笔交易指标
| 指标 | 公式 | 重要性 |
|---|---|---|
| 周期时间 | closedate - createdate | 管道速度 |
| 收入 | amount | 直接影响 |
| 成交成本 | 根据技能使用成本估算 | 效率 |
| 自动化触点 | 技能归因数量 | 杠杆作用 |
| 手动与自动化 | 交易生命周期中自动化的百分比 | 转型证据 |
GTME 定位指标
| 指标 | 叙述 | VP BD 相关性 |
|---|---|---|
| 每月影响的收入 | “我通过自动化工作流影响了 $X 的销售管道” | 收入责任 |
| 每月节省的小时数 | “构建了每月节省 30+ 小时人工工作的系统” | 运营杠杆 |
| 每条潜在客户成本 | “将每条合格潜在客户的成本从 $X 降至 $Y” | 单位经济效益 |
| 挽回率 | “通过自动化检测,挽回了每月 $18K 的停滞销售管道” | 销售管道管理 |
| 自动化覆盖率 | “现在 80% 以上的交易都会使用至少一个自动化工作流” | 系统思维 |
阶段 4:更新业绩档案文件
4a. 追加到 portfolio.jsonl
{
"date": "2026-03-15",
"deal_id": "hs_12345",
"deal_name": "Baylor University",
"amount": 45000,
"outcome": "closedwon",
"cycle_days": 32,
"primary_skill": "prospect-research-to-cadence",
"assist_skills": ["meddic-call-prep-auto", "deal-momentum-analyzer"],
"recovered": true,
"recovery_skill": "deal-momentum-analyzer",
"automation_touches": 5,
"manual_touches": 3,
"automation_pct": 0.625
}
4b. 更新每周摘要
将交易及归因详情追加到现有的 portfolio-artifact 每周摘要中。
4c. 生成每月 GTME 成果报告
╔══════════════════════════════════════════════════════════════╗
║ GTME PORTFOLIO — [Month Year] ║
║ Tim Kipper | BDR → VP Business Development ║
╠══════════════════════════════════════════════════════════════╣
HEADLINE METRICS:
┌─────────────────────────────────────────────────────────────┐
│ Revenue Influenced: $[XXX,XXX] (XX deals) │
│ Pipeline Recovered: $[XX,XXX] (X deals saved from stall) │
│ Time Saved: [XX] hours ([X] min/day × [XX] days) │
│ Automation Coverage: [XX]% (deals with skill touch) │
│ Cost per Deal: $[X.XX] (automation cost / deals) │
└─────────────────────────────────────────────────────────────┘
SKILL ATTRIBUTION BREAKDOWN:
| Skill | Deals Influenced | Revenue | Time Saved |
|-------|-----------------|---------|------------|
| prospect-research-to-cadence | XX | $XX,XXX | XX hrs |
| meddic-call-prep-auto | XX | $XX,XXX | XX hrs |
| deal-momentum-analyzer | XX (recovered) | $XX,XXX | XX hrs |
TOP DEALS (with attribution chain):
1. [Deal] — $XX,XXX | Won
Chain: Apollo enrich → sequence load → call prep → demo → close
Skills: PRC → MCA → DMA
VP BD TRANSITION NARRATIVE:
"In [Month], I influenced $[X] in revenue through automated GTM systems
I designed and built. These systems saved [X] hours of manual work,
recovered $[X] in stalled pipeline, and achieved [X]% automation
coverage across the deal lifecycle. This demonstrates [operational
leverage / systems thinking / revenue ownership] at VP BD scale."
╚══════════════════════════════════════════════════════════════╝
阶段 4:薪酬计划达成情况跟踪器
根据 Tim 的 2026 年 BDR 薪酬计划目标计算每日进度。
本月目标
始终从下方的月度目标查询表中解析当前月份的目标(切勿硬编码月份)。自 2026 年 6 月起,Tim 按全额配额执行:每月 24 笔交易、$714K 销售管道;下半年收入目标逐月提高。超额目标 = 达到目标的 126% 以上(1.5 倍加速系数)。每日运行率 = 月度目标 / 当月工作日数。
计算逻辑
- 在 HubSpot 中查询本月创建且 Tim 为所有者(87486452)或协作者的交易
- 对
amount求和,计算生成的销售管道 - 对
dealstage= 'closedwon' 的交易的amount求和,计算收入 - 计算:
- 销售管道达成率 % = 销售管道总额 / 月度目标 × 100
- 收入达成率 % = 已签约成交总额 / 月度目标 × 100
- 交易数量达成率 % = 创建的交易数 / 月度目标 × 100
- 加速系数区间:<100% = 基础档,100-110% = 1.0x,111-125% = 1.25x,126%+ = 1.5x
- 剩余天数 = 本月剩余工作日
- 所需每日运行率 = (目标 - 已完成) / 剩余天数
输出格式(追加到每日报告)
📊 COMP PLAN TRACKER — {Month YYYY} ({Phase from lookup table})
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Pipeline: $XXX,XXX / ${month pipeline target} (XX% — Zone: BASE/1.0x/1.25x/1.5x)
Revenue: $XX,XXX / ${month revenue target} (XX% — Zone: BASE/1.0x/1.25x/1.5x)
Deals: X / {month deal target} (XX%)
Days left: X business days
Gap to stretch: $XXX,XXX pipeline | $XX,XXX revenue | X deals
Daily run rate needed: $X,XXX pipeline | $X,XXX revenue
月度目标查询表(供未来月份使用)
| 月份 | 交易数 | 销售管道 | 收入 | 阶段 |
|---|---|---|---|---|
| March | 12 | $357K | $125K | Ramp 50% |
| April | 16 | $464K | $163K | Ramp 65% |
| May | 20 | $607K | $212K | Ramp 85% |
| June | 24 | $714K | $250K | Full (H1) |
| July | 24 | $714K | $475K | Full (H2) |
| August | 24 | $714K | $475K | Full (H2) |
| September | 24 | $714K | $500K | Full (H2) |
| October | 24 | $714K | $525K | Full (H2) |
| November | 24 | $714K | $550K | Full (H2) |
| December | 24 | $714K | $600K | Full (H2) |
根据当前月份动态选择目标。
<scheduled_automation>
每日 CST 上午 7 点运行
计划: 每天 CST 上午 7:00(UTC 13:00)运行,工作日 任务名称: "portfolio-deal-linker-daily" 流程:
- 检查 HubSpot 中自上次运行以来已成交的交易
- 将每笔交易归因于源技能
- 计算单笔交易和汇总指标
- 追加到 portfolio.jsonl
- 如有新签约成交,更新每周摘要
- 如为月末,生成月度报告
与 EOD 集成: 当 Tim 说“EOD”时,附上今日成交交易的业绩归因摘要。 </scheduled_automation>
## 必需的 MCP 工具 - **Epiphan CRM MCP:** hubspot_search_deals、hubspot_get_deal、hubspot_search_contacts、hubspot_get_company、ask_agent(用于归因的活动历史记录) - **Apollo MCP:** apollo_emailer_campaigns_search(检查序列加入历史记录) - **Gmail MCP:** search_threads(检查用于归因的草稿/已发送历史记录)引用的同级技能
portfolio-artifact-skill— 基础指标采集、每周摘要格式、执行摘要模板deal-momentum-analyzer-skill— 恢复归因(标记为 RED/YELLOW 且最终赢单的交易)prospect-research-to-cadence-skill— 线索来源归因(加入 Apollo 序列)meddic-call-prep-auto-skill— 影响归因(为交易生成通话准备材料)hubspot-revops-skill— HubSpot 查询模式、交易阶段定义
输出结果旁文件
作为最后一步,写入 ~/.claude/skill-analytics/last-outcome-portfolio-deal-linker.json:
{"ts":"[UTC ISO8601]","skill":"portfolio-deal-linker","version":"1.0.0","variant":"default",
"status":"[success|partial|error]","runtime_ms":[estimated ms from start],
"metrics":{"deals_linked":[n],"skills_attributed":[n],"revenue_tracked_usd":[n]},
"error":null,"session_id":"[YYYY-MM-DD]"}
如果部分阶段失败但仍生成了结果,请使用状态 "partial"。只有未生成任何输出时才使用 "error"。