销售研究技能:潜在客户研究方法论
来自 Wikiprompt,自由的提示词百科全书
销售研究技能:潜在客户研究方法论 一套完整的销售研究技能,包含方法论、检查清单、信号评分,以及用于公司信息丰富、LinkedIn解析和潜在客户优先排序的Python脚本。
提示词内容收藏
🌐
---
name: sales-research
description: 此技能提供研究销售潜在客户的方法论和最佳实践。
---
# 销售研究
## 概述
此技能提供研究销售潜在客户的方法论和最佳实践。涵盖公司研究、联系人画像和信号检测,以获取可操作的情报。
## 使用方式
company-researcher 和 contact-researcher 子代理在以下情况下参考此技能:
- 研究新潜在客户
- 查找公司信息
- 对单个联系人进行画像
- 检测购买信号
## 研究方法论
### 公司研究清单
1. **基本概况**
- 公司名称、行业、规模(员工数、营收)
- 总部及主要地点
- 成立日期、发展阶段
2. **近期动态**
- 融资公告(过去12个月)
- 并购活动
- 领导层变动
- 产品发布
3. **技术栈**
- 已知技术(BuiltWith、StackShare)
- 提及工具的招聘信息
- 集成合作伙伴
4. **信号**
- 招聘信息(扩张 = 机会)
- Glassdoor 评论(痛点)
- 新闻提及(背景)
- 社交媒体活动
### 联系人研究清单
1. **职业背景**
- 当前职位及任期
- 之前任职的公司和职位
- 教育背景
2. **影响力指标**
- 汇报结构
- 决策权
- 预算所有权
3. **互动切入点**
- 近期 LinkedIn 帖子
- 发表的文章
- 演讲活动
- 共同联系人
## 资源
- `resources/signal-indicators.md` - 购买信号分类
- `resources/research-checklist.md` - 完整研究清单
## 脚本
- `scripts/company-enricher.py` - 从多个来源聚合公司数据
- `scripts/linkedin-parser.py` - 结构化 LinkedIn 个人资料数据
FILE:company-enricher.py
#!/usr/bin/env python3
"""
company-enricher.py - 从多个来源聚合公司数据
输入:
- company_name: 字符串
- domain: 字符串(可选)
输出:
- profile:
name: 字符串
industry: 字符串
size: 字符串
funding: 字符串
tech_stack: [字符串]
recent_news: [新闻条目]
依赖:
- requests, beautifulsoup4
"""
# 要求:requests, beautifulsoup4
import json
from typing import Any
from dataclasses import dataclass, asdict
from datetime import datetime
@dataclass
class NewsItem:
title: str
date: str
source: str
url: str
summary: str
@dataclass
class CompanyProfile:
name: str
domain: str
industry: str
size: str
location: str
founded: str
funding: str
tech_stack: list[str]
recent_news: list[dict]
competitors: list[str]
description: str
def search_company_info(company_name: str, domain: str = None) -> dict:
"""
搜索基本公司信息。
在生产环境中,这将调用 Clearbit、Crunchbase 等 API。
"""
# TODO: 实现实际 API 调用
# 占位返回结构
return {
"name": company_name,
"domain": domain or f"{company_name.lower().replace(' ', '')}.com",
"industry": "Technology", # 将来自 API
"size": "Unknown",
"location": "Unknown",
"founded": "Unknown",
"description": f"关于 {company_name} 的信息"
}
def search_funding_info(company_name: str) -> dict:
"""
搜索融资信息。
在生产环境中,将调用 Crunchbase、PitchBook 等。
"""
# TODO: 实现实际 API 调用
return {
"total_funding": "Unknown",
"last_round": "Unknown",
"last_round_date": "Unknown",
"investors": []
}
def search_tech_stack(domain: str) -> list[str]:
"""
检测技术栈。
在生产环境中,将调用 BuiltWith、Wappalyzer 等。
"""
# TODO: 实现实际 API 调用
return []
def search_recent_news(company_name: str, days: int = 90) -> list[dict]:
"""
搜索公司近期新闻。
在生产环境中,将调用新闻 API。
"""
# TODO: 实现实际 API 调用
return []
def main(
company_name: str,
domain: str = None
) -> dict[str, Any]:
"""
从多个来源聚合公司数据。
参数:
company_name: 要研究的公司名称
domain: 公司域名(可选,将自动推断)
返回:
包含公司概况(行业、规模、融资、技术栈、新闻)的字典
"""
# 获取基本公司信息
basic_info = search_company_info(company_name, domain)
# 获取融资信息
funding_info = search_funding_info(company_name)
# 检测技术栈
company_domain = basic_info.get("domain", domain)
tech_stack = search_tech_stack(company_domain) if company_domain else []
# 获取近期新闻
news = search_recent_news(company_name)
# 编制概况
profile = CompanyProfile(
name=basic_info["name"],
domain=basic_info["domain"],
industry=basic_info["industry"],
size=basic_info["size"],
location=basic_info["location"],
founded=basic_info["founded"],
funding=funding_info.get("total_funding", "Unknown"),
tech_stack=tech_stack,
recent_news=news,
competitors=[], # 将根据行业分析进行丰富
description=basic_info["description"]
)
return {
"profile": asdict(profile),
"funding_details": funding_info,
"enriched_at": datetime.now().isoformat(),
"sources_checked": ["company_info", "funding", "tech_stack", "news"]
}
if __name__ == "__main__":
import sys
# 示例用法
result = main(
company_name="DataFlow Systems",
domain="dataflow.io"
)
print(json.dumps(result, indent=2))
FILE:linkedin-parser.py
#!/usr/bin/env python3
"""
linkedin-parser.py - 结构化 LinkedIn 个人资料数据
输入:
- profile_url: 字符串
- 或 name + company: 字符串
输出:
- contact:
name: 字符串
title: 字符串
tenure: 字符串
previous_roles: [职位对象]
mutual_connections: [字符串]
recent_activity: [帖子摘要]
依赖:
- requests
"""
# 要求:requests
import json
from typing import Any
from dataclasses import dataclass, asdict
from datetime import datetime
@dataclass
class PreviousRole:
title: str
company: str
duration: str
description: str
@dataclass
class RecentPost:
date: str
content_preview: str
engagement: int
topic: str
@dataclass
class ContactProfile:
name: str
title: str
company: str
location: str
tenure: str
previous_roles: list[dict]
education: list[str]
mutual_connections: list[str]
recent_activity: list[dict]
profile_url: str
headline: str
def search_linkedin_profile(name: str = None, company: str = None, profile_url: str = None) -> dict:
"""
搜索 LinkedIn 个人资料信息。
在生产环境中,将使用 LinkedIn API 或 Sales Navigator。
"""
# TODO: 实现实际 LinkedIn API 集成
# 注意:LinkedIn 的 API 有严格的服务条款
return {
"found": False,
"name": name or "Unknown",
"title": "Unknown",
"company": company or "Unknown",
"location": "Unknown",
"headline": "",
"tenure": "Unknown",
"profile_url": profile_url or ""
}
def get_career_history(profile_data: dict) -> list[dict]:
"""
从个人资料中提取职业历史。
"""
# TODO: 实现职业提取
return []
def get_mutual_connections(profile_data: dict, user_network: list = None) -> list[str]:
"""
查找共同联系人。
"""
# TODO: 实现共同联系人检测
return []
def get_recent_activity(profile_data: dict, days: int = 30) -> list[dict]:
"""
获取近期帖子和活动。
"""
# TODO: 实现活动提取
return []
def main(
name: str = None,
company: str = None,
profile_url: str = None
) -> dict[str, Any]:
"""
为销售准备结构化 LinkedIn 个人资料数据。
参数:
name: 人员姓名
company: 其所在公司
profile_url: 直接 LinkedIn 个人资料 URL
返回:
包含结构化联系人概况的字典
"""
if not profile_url and not (name and company):
return {"error": "提供 profile_url 或 name + company"}
# 搜索个人资料
profile_data = search_linkedin_profile(
name=name,
company=company,
profile_url=profile_url
)
if not profile_data.get("found"):
return {
"found": False,
"name": name or "Unknown",
"company": company or "Unknown",
"message": "未找到个人资料或访问受限",
"suggestions": [
"尝试直接在 LinkedIn 上搜索",
"检查是否有其他拼写",
"验证此人是否仍在该公司工作"
]
}
# 获取职业历史
previous_roles = get_career_history(profile_data)
# 查找共同联系人
mutual_connections = get_mutual_connections(profile_data)
# 获取近期活动
recent_activity = get_recent_activity(profile_data)
# 编制联系人概况
contact = ContactProfile(
name=profile_data["name"],
title=profile_data["title"],
company=profile_data["company"],
location=profile_data["location"],
tenure=profile_data["tenure"],
previous_roles=previous_roles,
education=[], # 将从个人资料中提取
mutual_connections=mutual_connections,
recent_activity=recent_activity,
profile_url=profile_data["profile_url"],
headline=profile_data["headline"]
)
return {
"found": True,
"contact": asdict(contact),
"research_date": datetime.now().isoformat(),
"data_completeness": calculate_completeness(contact)
}
def calculate_completeness(contact: ContactProfile) -> dict:
"""计算个人资料数据的完整程度。"""
fields = {
"basic_info": bool(contact.name and contact.title and contact.company),
"career_history": len(contact.previous_roles) > 0,
"mutual_connections": len(contact.mutual_connections) > 0,
"recent_activity": len(contact.recent_activity) > 0,
"education": len(contact.education) > 0
}
complete_count = sum(fields.values())
return {
"fields": fields,
"score": f"{complete_count}/{len(fields)}",
"percentage": int((complete_count / len(fields)) * 100)
}
if __name__ == "__main__":
import sys
# 示例用法
result = main(
name="Sarah Chen",
company="DataFlow Systems"
)
print(json.dumps(result, indent=2))
FILE:priority-scorer.py
#!/usr/bin/env python3
"""
priority-scorer.py - 计算并排序潜在客户优先级
输入:
- prospects: [带有信号的潜在客户对象]
- weights: {deal_size, timing, warmth, signals}
输出:
- ranked: [带有分数和理由的潜在客户]
依赖:
- (无 - 纯 Python)
"""
import json
from typing import Any
from dataclasses import dataclass
# 默认评分权重
DEFAULT_WEIGHTS = {
"deal_size": 0.25,
"timing": 0.30,
"warmth": 0.20,
"signals": 0.25
}
# 信号分数映射
SIGNAL_SCORES = {
# 高意向信号
"recent_funding": 10,
"leadership_change": 8,
"job_postings_relevant": 9,
"expansion_news": 7,
"competitor_mention": 6,
# 中等意向信号
"general_hiring": 4,
"industry_event": 3,
"content_engagement": 3,
# 关系信号
"mutual_connection": 5,
"previous_contact": 6,
"referred_lead": 8,
# 负面信号
"recent_layoffs": -3,
"budget_freeze_mentioned": -5,
"competitor_selected": -7,
}
@dataclass
class ScoredProspect:
company: str
contact: str
call_time: str
raw_score: float
normalized_score: int
priority_rank: int
score_breakdown: dict
reasoning: str
is_followup: bool
def score_deal_size(prospect: dict) -> tuple[float, str]:
"""根据预估交易规模评分。"""
size_indicators = prospect.get("size_indicators", {})
employee_count = size_indicators.get("employees", 0)
revenue_estimate = size_indicators.get("revenue", 0)
# 基于公司规模的简单评分
if employee_count > 1000 or revenue_estimate > 100_000_000:
return 10.0, "企业级机会"
elif employee_count > 200 or revenue_estimate > 20_000_000:
return 7.0, "中端市场机会"
elif employee_count > 50:
return 5.0, "中小企业机会"
else:
return 3.0, "小型企业"
def score_timing(prospect: dict) -> tuple[float, str]:
"""根据时机信号评分。"""
timing_signals = prospect.get("timing_signals", [])
score = 5.0 # 基础分数
reasons = []
for signal in timing_signals:
if signal == "budget_cycle_q4":
score += 3
reasons.append("Q4 预算规划")
elif signal == "contract_expiring":
score += 4
reasons.append("合同即将到期")
elif signal == "active_evaluation":
score += 5
reasons.append("正在积极评估")
elif signal == "just_funded":
score += 3
reasons.append("近期获得融资")
return min(score, 10.0), "; ".join(reasons) if reasons else "标准时机"
def score_warmth(prospect: dict) -> tuple[float, str]:
"""根据关系热度评分。"""
relationship = prospect.get("relationship", {})
if relationship.get("is_followup"):
last_outcome = relationship.get("last_outcome", "neutral")
if last_outcome == "positive":
return 9.0, "热跟进(上次联系积极)"
elif last_outcome == "neutral":
return 7.0, "跟进(上次联系中性)"
else:
return 5.0, "跟进(需要重新互动)"
if relationship.get("referred"):
return 8.0, "推荐线索"
if relationship.get("mutual_connections", 0) > 0:
return 6.0, f"{relationship['mutual_connections']} 个共同联系人"
if relationship.get("inbound"):
return 7.0, "入站兴趣"
return 4.0, "冷外联"
def score_signals(prospect: dict) -> tuple[float, str]:
"""根据检测到的购买信号评分。"""
signals = prospect.get("signals", [])
total_score = 0
signal_reasons = []
for signal in signals:
signal_score = SIGNAL_SCORES.get(signal, 0)
total_score += signal_score
if signal_score > 0:
signal_reasons.append(signal.replace("_", " "))
# 归一化到 0-10 范围
normalized = min(max(total_score / 2, 0), 10)
reason = f"信号:{', '.join(signal_reasons)}" if signal_reasons else "无强信号"
return normalized, reason
def calculate_priority_score(
prospect: dict,
weights: dict = None
) -> ScoredProspect:
"""计算潜在客户的整体优先级分数。"""
weights = weights or DEFAULT_WEIGHTS
# 计算各组件分数
deal_score, deal_reason = score_deal_size(prospect)
timing_score, timing_reason = score_timing(prospect)
warmth_score, warmth_reason = score_warmth(prospect)
signal_score, signal_reason = score_signals(prospect)
# 加权总分
raw_score = (
deal_score * weights["deal_size"] +
timing_score * weights["timing"] +
warmth_score * weights["warmth"] +
signal_score * weights["signals"]
)
# 编制理由
reasons = []
if timing_score >= 8:
reasons.append(timing_reason)
if signal_score >= 7:
reasons.append(signal_reason)
if warmth_score >= 7:
reasons.append(warmth_reason)
if deal_score >= 8:
reasons.append(deal_reason)
return ScoredProspect(
company=prospect.get("company", "Unknown"),
contact=prospect.get("contact", "Unknown"),
call_time=prospect.get("call_time", "Unknown"),
raw_score=round(raw_score, 2),
normalized_score=int(raw_score * 10),
priority_rank=0, # 排序后设置
score_breakdown={
"deal_size": {"score": deal_score, "reason": deal_reason},
"timing": {"score": timing_score, "reason": timing_reason},
"warmth": {"score": warmth_score, "reason": warmth_reason},
"signals": {"score": signal_score, "reason": signal_reason}
},
reasoning="; ".join(reasons) if reasons else "标准优先级",
is_followup=prospect.get("relationship", {}).get("is_followup", False)
)
def main(
prospects: list[dict],
weights: dict = None
) -> dict[str, Any]:
"""
计算并排序潜在客户优先级。
参数:
prospects: 带有信号的潜在客户对象列表
weights: 可选的自定义评分组件权重
返回:
包含排序后潜在客户和评分详情的字典
"""
weights = weights or DEFAULT_WEIGHTS
# 对所有潜在客户评分
scored = [calculate_priority_score(p, weights) for p in prospects]
# 按原始分数降序排序
scored.sort(key=lambda x: x.raw_score, reverse=True)
# 分配排名
for i, prospect in enumerate(scored, 1):
prospect.priority_rank = i
# 转换为字典以进行 JSON 序列化
ranked = []
for s in scored:
ranked.append({
"company": s.company,
"contact": s.contact,
"call_time": s.call_time,
"priority_rank": s.priority_rank,
"score": s.normalized_score,
"reasoning": s.reasoning,
"is_followup": s.is_followup,
"breakdown": s.score_breakdown
})
return {
"ranked": ranked,
"weights_used": weights,
"total_prospects": len(prospects)
}
if __name__ == "__main__":
import sys
# 示例用法
example_prospects = [
{
"company": "DataFlow Systems",
"contact": "Sarah Chen",
"call_time": "2pm",
"size_indicators": {"employees": 200, "revenue": 25_000_000},
"timing_signals": ["just_funded", "active_evaluation"],
"signals": ["recent_funding", "job_postings_relevant"],
"relationship": {"is_followup": False, "mutual_connections": 2}
},
{
"company": "Acme Manufacturing",
"contact": "Tom Bradley",
"call_time": "10am",
"size_indicators": {"employees": 500},
"timing_signals": ["contract_expiring"],
"signals": [],
"relationship": {"is_followup": True, "last_outcome": "neutral"}
},
{
"company": "FirstRate Financial",
"contact": "Linda Thompson",
"call_time": "4pm",
"size_indicators": {"employees": 300},
"timing_signals": [],
"signals": [],
"relationship": {"is_followup": False}
}
]
result = main(prospects=example_prospects)
print(json.dumps(result, indent=2))
FILE:research-checklist.md
# 潜在客户研究清单
## 公司研究
### 基本信息
- [ ] 公司名称(验证拼写)
- [ ] 行业/垂直领域
- [ ] 总部位置
- [ ] 员工数量(LinkedIn、网站)
- [ ] 营收估算(如可用)
- [ ] 成立日期
- [ ] 融资阶段/历史
### 近期新闻(过去90天)
- [ ] 融资公告
- [ ] 收购或合并
- [ ] 领导层变动
- [ ] 产品发布
- [ ] 重大客户赢单
- [ ] 媒体报道
- [ ] 财报/财务新闻
### 数字足迹
- [ ] 网站审查
- [ ] 博客/内容主题
- [ ] 社交媒体存在
- [ ] 招聘信息(职业页面 + LinkedIn)
- [ ] 技术栈(BuiltWith、招聘信息)
### 竞争格局
- [ ] 已知竞争对手
- [ ] 市场地位
- [ ] 声称的差异化优势
- [ ] 近期竞争动态
### 痛点指标
- [ ] Glassdoor 评论(主题)
- [ ] G2/Capterra 评论(如为 B2B)
- [ ] 社交媒体投诉
- [ ] 招聘模式
## 联系人研究
### 职业概况
- [ ] 当前职位
- [ ] 任职时间
- [ ] 在公司时间
- [ ] 之前任职的公司
- [ ] 之前的职位
- [ ] 教育背景
### 决策权
- [ ] 向谁汇报
- [ ] 团队规模(如为经理)
- [ ] 预算权(推断)
- [ ] 采购参与历史
### 互动切入点
- [ ] 近期 LinkedIn 帖子
- [ ] 发表的文章
- [ ] 播客露面
- [ ] 会议演讲
- [ ] 共同联系人
- [ ] 共同兴趣/群组
### 沟通风格
- [ ] 帖子语气(正式/随意)
- [ ] 他们参与的话题
- [ ] 回复模式
## CRM 检查(如可用)
- [ ] 任何先前接触点
- [ ] 之前的商机
- [ ] 公司相关联系人
- [ ] 同事的备注
- [ ] 邮件互动历史
## 基于时间的研究深度
| 可用时间 | 研究深度 |
|----------------|----------------|
| 5 分钟 | 仅公司基本信息 + 联系人职位 |
| 15 分钟 | + 近期新闻 + LinkedIn 个人资料 |
| 30 分钟 | + 痛点信号 + 互动切入点 |
| 60 分钟 | 完整清单 + 竞争分析 |
FILE:signal-indicators.md
# 信号指标参考
## 高意向信号
### 招聘信息
- **发布 3+ 个相关职位** = 积极举措,预算已分配
- **在您的领域进行高级招聘** = 战略优先事项
- **紧急语言("ASAP"、"immediate")** = 痛点紧迫
- **提及特定工具** = 竞争对手或品类认知
### 财务事件
- **B 轮及以上融资** = 增长资本,购买力
- **IPO 准备** = 需要运营成熟度
- **宣布收购** = 集成挑战即将到来
- **营收里程碑公关** = 预算可用
### 领导层变动
- **在您的领域新任 CXO** = 90 天优先级设定
- **新任 CRO/CMO** = 可能评估技术栈
- **创始人过渡为 CEO** = 运营专业化
## 中等意向信号
### 扩张信号
- **开设新办公室** = 基础设施需求
- **国际扩张** = 本地化、合规
- **新产品发布** = 扩展挑战
- **重大客户赢单** = 交付压力
### 技术信号
- **发布 RFP** = 积极采购流程
- **提及供应商审查** = 比较购物
- **技术栈变更** = 集成机会
- **遗留系统投诉** = 现代化需求
### 内容信号
- **关于您主题的博客文章** = 自我教育
- **参加网络研讨会** = 兴趣已确认
- **下载白皮书** = 问题认知
- **会议演讲** = 思想领导力、可见性
## 低意向信号(培育)
### 一般活动
- **参加行业活动** = 市场参与者
- **一般招聘** = 公司增长
- **正面报道** = 公司健康
- **社交媒体活动** = 领导层参与
## 信号评分
| 信号类型 | 分数 | 行动 |
|-------------|-------|--------|
| 招聘信息(相关) | +3 | 优先外联 |
| 近期融资 | +3 | 在对话中提及 |
| 领导层变动 | +2 | 时机敏感机会 |
| 扩张新闻 | +2 | 增长角度 |
| 负面评论 | +2 | 痛点角度 |
| 内容互动 | +1 | 培育轨道 |
| 无信号 | 0 | 发现重点 |
用法
此提示词专为 business 设计。复制上方内容并粘贴到你常用的 AI 工具中。
为获得最佳效果,可将占位符(方括号或大写字母标示)替换为你的具体需求。
讨论
0 条评论