我见过太多团队,花了钱上了一套 CRM,三个月后业务员又回去用微信收藏夹记客户。
问题不在 CRM 不好,在跳得太快。今天讲讲这条路该怎么分三段走。
一、为什么一次性上 CRM 大多失败
先讲个我亲眼见过的事。
一个十来个人的外贸团队,老板下了决心,买了套 CRM,全公司停业务培训了两天。字段设计得很细:客户行业、公司规模、决策人职位、采购周期、预算区间、下一阶段动作、预计成交时间……一共三十多个必填项。
上线第一个月,录入率还行。第二个月开始下滑。第三个月,业务员干脆把客户记在手机备忘录里,CRM 里只留一个名字和电话。
为什么?
因为业务员在跟客户聊的时候,脑子里想的是「他问的那个规格我该怎么答」。这时候让他停下来填八个字段,他的第一反应是「等会儿再填」。
等会儿,就没有然后了。
上 CRM 失败的核心原因,不是工具难用,是录入成本超过了业务员能承受的阈值。
更要命的是,很多团队把「字段填满」当成了管理目标。报表上看着很整齐,实际上填的内容全是「待定」「暂无」。这种数据比没有数据更坏,因为它会误导你。
我现在带团队的原则很明确:客户管理这件事,先解决「不丢」,再解决「管好」,最后才谈「分析」。
顺序反了,就全废了。
二、三段式过渡路径
我自己的路径走了三段时间,回头看每一步都必要,跳不过去。
第一段,Excel 阶段:先让信息有个地方放。
这一步的目标特别低,低到你不好意思说出口:只要有地方能让两个以上的人看到同一份客户信息就行。
字段就五个:客户名、国家、联系人、最近联系时间、下一动作。
不用建索引,不用做公式,甚至不用管格式对不对。这一步唯一要养成的习惯是:每次聊完客户,回到表里更新「最近联系时间」。
我当时用这个笨办法带了半年。半年后我发现,光是「最近联系时间」这一列,就让团队的响应速度上了一个台阶。因为谁都知道再不回就露馅了。
第二段,标签阶段:把信息变成能筛的东西。
Excel 填满之后,新的问题来了:表有两百行,你想看「哪些客户是巴西的、问过价格、还没报价的」,得一行一行翻。
这时候就该上标签了。标签的作用不是分类,是可筛选。
我把标签限制在五个维度(下一节细说),每个维度下不超过八个值。这个限制是刻意的,放开就会炸。
第三段,CRM 阶段:把动作变成流程。
到这一步再上 CRM,你会发现事情顺多了。因为客户数据已经在表里、标签已经打好了,迁移进来是现成的。
而且这时候你对「自己到底需要什么字段」已经清楚了,不会再照抄别人那三十个必填项。
我现在的状态是:主数据在一个轻量工具里,标签和阶段都在,业务员每天要动的字段不超过五个。这个量级他们能坚持下来。
值得说一句,很多会话工具本身就在做这件事。比如我团队用的 WADesk,客户的聊天记录、标签、备注就挂在同一个会话旁边,业务员不用切系统,聊完顺手就标一下。这种「不离开工作现场」的设计,是能不能坚持用下去的关键。
三段走完,路径其实是这样一张表。我把它列出来,是为了让想跳步的人看清楚自己会付出什么。
| 阶段 | 承载方式 | 优点 | 代价 | 什么时候该往下走 |
|---|---|---|---|---|
| 起步 | 记事本、微信收藏、手机备忘录 | 零成本,随手就记 | 只有自己看得见,人一走就断 | 有第二个人要接手客户时 |
| 第一段 | Excel | 多人可见,改起来快 | 容易烂,重复、漏填没人管 | 表超过 100 行、开始筛不动时 |
| 第二段 | Excel + 标签 | 能筛能分组 | 标签一旦没规矩就爆炸 | 标签超过三十个、开始互相打架时 |
| 第三段 | 轻量 CRM 或会话工具 | 有流程、能统计、能交接 | 有学习成本,需要有人管事 | 团队超过三个人、开始考核时 |
注意最上面那一行。我们外贸人一开始基本都躺在这一行,而且躺得挺舒服。问题是这一行的天花板极低——你自己记得住五十个客户,记不住两百个;你记得住,你的同事也拿不到。
往下走不是升级,是不得不走。我上面写的每一格「什么时候该往下走」,本质都是「再不走就要出事了」。
三、字段设计:只留用得上的
字段设计这件事,我的方法很粗暴:每一个字段都要能回答「这个字段填了之后,我会做哪个不同动作」。
回答不出来的,删掉。
按这个标准过一遍,我最后留下的字段是这样的:
| 字段 | 用途 | 是否必填 |
|---|---|---|
| 客户名 | 找得到人 | 是 |
| 国家/地区 | 决定报价币种和交期 | 是 |
| 联系人及职位 | 决定跟谁谈 | 是 |
| 最近联系时间 | 决定今天该跟谁 | 是,自动更新 |
| 当前阶段 | 决定用什么话术 | 是 |
| 下一动作及时间 | 决定明天干什么 | 是 |
| 需求简述 | 换人接手时能看懂 | 是 |
| 年采购量估计 | 决定要不要投入资源 | 否 |
八个字段,六个必填。
注意我是怎么砍掉那些花哨字段的。「客户行业」我砍了,因为填了之后我的动作没有任何变化。「决策人职位」我留下了,因为它直接决定我该说技术语言还是商务语言。
「年采购量估计」我标成非必填,因为一开始不可能知道。但它是分层的核心依据,所以留着,让人在后面慢慢补。
有一个坑要提醒:别看别的公司字段多就照抄。人家业务员多、分工细、有专人做数据,你三五个人跟着抄,一定死。
四、用脚本给客户表做体检
Excel 阶段最大的风险是表会烂掉。重复客户、字段空着、跟进断档,这些问题肉眼看不出来,攒到几百行就再也理不清了。
我现在的做法是每周跑一次体检脚本,看三个数。
importcsvimportrefromcollectionsimportdefaultdictfromdatetimeimportdatetime# 客户表体检# 为什么要在 Excel 阶段就跑这个:# 表烂掉是渐进过程,等到你看不下去的时候,已经没法手工修了# 所以宁可每周跑一次,把问题在小的时候就摁住STALE_DAYS=30# 30 天没联系,基本可以判定为「放着忘了」COMPANY_SIMILARITY_MIN=0.8# 公司名相似度阈值,用来抓同一家公司的不同写法defnorm_company(name):""" 公司名标准化,目的是让 "ABC Trading Co., Ltd." 和 "ABC Trading Ltd" 能被识别成同一家 """low=(nameor"").lower()# 去掉常见后缀和标点,保留主干low=re.sub(r"[.,\-&()]"," ",low)forsuffixin("co ltd","co","ltd","limited","llc","inc","gmbh","srl","pvt"):low=re.sub(rf"\b{suffix}\b"," ",low)returnre.sub(r"\s+"," ",low).strip()defsimilarity(a,b):""" 用字符集合的 Jaccard 相似度做粗判 不引入第三方库是因为这个场景不需要那么准, 漏判几个没关系,每周都跑,迟早会抓到 """sa,sb=set(a),set(b)ifnotsaornotsb:return0.0returnlen(sa&sb)/len(sa|sb)defhealth_check(file_path):""" 表头:company, country, contact, last_contact, stage, next_action 返回一份体检报告,不修改原表(原表要人看过再改,别让脚本自动动) """rows=[]withopen(file_path,newline="",encoding="utf-8")asf:forrowincsv.DictReader(f):rows.append({**row,"_norm":norm_company(row["company"])})report={"总数":len(rows),"疑似重复":[],"字段缺失":[],"跟进断档":[]}now=datetime.now()# 1. 疑似重复:同一家公司的不同写法,会让业务员重复开发seen=defaultdict(list)forrinrows:seen[r["_norm"]].append(r)forkey,groupinseen.items():iflen(group)>1:names=" | ".join(g["company"]forgingroup)report["疑似重复"].append(names)# 兜底再跑一遍模糊匹配,抓 "ABC Trading" 和 "ABC Trade" 这种keys=list(seen.keys())foriinrange(len(keys)):forjinrange(i+1,len(keys)):ifsimilarity(keys[i],keys[j])>=COMPANY_SIMILARITY_MIN:report["疑似重复"].append(f"{keys[i]}~{keys[j]}")forrinrows:# 2. 必填字段缺失:这些字段空着,换人接手就看不懂了missing=[cforcin("country","contact","stage","next_action")ifnot(r.get(c)or"").strip()]ifmissing:report["字段缺失"].append(f"{r['company']}: 缺{','.join(missing)}")# 3. 跟进断档:按断档天数排,最久的在最前面last=(r.get("last_contact")or"").strip()iflast:gap=(now-datetime.fromisoformat(last)).daysifgap>=STALE_DAYS:report["跟进断档"].append((gap,r["company"]))report["跟进断档"]=sorted(report["跟进断档"],reverse=True)returnreportif__name__=="__main__":rep=health_check("customers.csv")print(f"客户总数:{rep['总数']}")print(f"疑似重复:{len(rep['疑似重复'])}组")forxinrep["疑似重复"][:5]:print(f" -{x}")print(f"字段缺失:{len(rep['字段缺失'])}条")print(f"跟进断档:{len(rep['跟进断档'])}条")forgap,nameinrep["跟进断档"][:5]:print(f" -{name}: 已{gap}天没联系")这份报告我每周一早上看一遍。重点关注两项:疑似重复说明有人在重复开发同一个客户,跟进断档说明有人在漏客户。
这两件事,只要有一件在发生,你的客户管理就还没过关。
写在最后
今天就做一件事:打开你的客户表,按「这个字段填了我会做什么不同动作」这条标准,删掉三个字段。
删完再看看剩下的字段里,有没有「最近联系时间」这一列。没有就加上。
坚持两周,等你发现自己每天会先看这一列再决定先回谁,你就有资格考虑下一步了。