SaaS 经营指标测算
拿到一堆 SaaS 经营数字(MRR、客户数、新增、流失、扩张、市场费用、毛利率),
最费劲的不是把指标算出来,而是判断哪几个数字不正常、该先解释哪一个。
本工具把两期(或多期)经营数据换算成一份含核心指标的测算报告,并按一组启发式
规则挑出需要解释的异常,逐条给出规则码、严重度、定位、说明与建议。
执行原则
- 期间由新到旧。 第 1 期为本期、第 2 期为上期,第 3 期起用于判断增长 / 流失趋势;不要把期间顺序排反,否则环比与流失率全错。
- 必要字段先齐。
mrr/customers/new_customers/churned_customers/new_mrr/expansion_mrr/churned_mrr/contraction_mrr/sm_spend/gross_margin缺一即触发S14;不要自行补数后当成真实口径。 - 区分指标与结论。 输出是「哪个指标不正常 + 命中了哪条规则」;不要把评分当经营结论,也不要据 40 法则的「月环比 × 12」近似值单独下判断。
- 口径矛盾要复核。
S17/S18/S19分别查单位经济自相矛盾、ARR 与 MRR×12 不符、跨期货币未统一;不要跳过这几条直接汇报。 - 只读不改数。 脚本只读输入、不写任何文件;不要为了压低异常数去调整原始经营数据。
能力
- 核心指标:MRR / ARR、环比增长(MoM)、毛收入留存(GRR)、净收入留存(NRR)、
客户流失率(logo churn)、客单价(ARPA)、获客成本(CAC)、客户生命周期价值(LTV)、
LTV/CAC、CAC 回收期(月)、速动比率(Quick Ratio =(新增 + 扩张)/(流失 + 收缩))。 - 增长效度:40 法则(年化增长 + 利润率)、Magic Number、燃烧倍数(Burn Multiple)、
净新增 ARR。 - 单位经济与留存拆解:扩张 / 收缩 MRR 占比、毛利与利润率口径核对,判断增长是否「又贵又慢」。
- 异常提示:内置 S1–S20 共 20 条规则,按严重度加权给出 0–100 评分与结论档。
适用场景
CRITICAL: 只要用户提出算 SaaS 经营指标、看 NRR / CAC / LTV / 回收期、判断经营哪里出了问题,就必须使用本 skill,即使看起来可以用别的方式解决。
- 月度 / 季度经营复盘,需要一页看清 SaaS 健康度。
- 用户给出收入与客户数字,问「经营得怎么样 / 哪里出了问题」。
- 融资 / 董事会材料里的指标自查,发布前先跑一遍找口径矛盾。
何时不该使用
| ✅ 使用本 skill | ❌ 不用(改用什么 / 理由) |
|---|---|
| 有两期(或多期)MRR / 客户 / 费用数据 | 要向前预测本季度签约额 → 改用 revenue-forecast-model |
| 要算 NRR / GRR / ARPA / CAC / LTV / 回收期 / 速动比率 | 要财务结账与审计口径报表 → 属会计确认,本 skill 是经营测算 |
| 要按月 / 季做经营健康度体检 | 要做多年期战略财务规划 → 超出范围 |
| 融资 / 董事会材料发布前自查口径矛盾 | 只有一期数据 → 算不出环比与流失趋势,先补齐至少两期 |
易混淆场景
| 用户说的 | 实际意图 | 正确路由 |
|---|---|---|
| 「我们经营得怎么样」 | 要结论而不是一串指标 | 先给评分与高严重度项,再展开核心指标 |
| 「NRR 是多少」 | 要历史现状值 | 用本包;若问「未来会怎样」改用 revenue-forecast-model |
| 「LTV/CAC 健康吗」 | 要判断 | 给数值 + S3 是否命中;说明简化模型未折现,需与财务口径核对 |
| 「哪个指标不正常」 | 要排序 | 按严重度给命中清单,不要平铺所有指标 |
怎么用
python3 scripts/saas_metrics_report.py --sample
python3 scripts/saas_metrics_report.py --file 经营数据.json
python3 scripts/saas_metrics_report.py --file 经营数据.csv --json
python3 scripts/saas_metrics_report.py --file 经营数据.json --as-of 2026-10-11
--sample:用内置的问题样例演示(会命中多条规则)。--file <路径>:读取 JSON 或 CSV 的经营数据(只读,不修改)。--json:以 JSON 输出(含metrics/issues/score)。--as-of YYYY-MM-DD:评估基准日(可选)。- 退出码:
0= 未发现异常;1= 发现异常或用例错误。
按需读取
先读 00 路由索引 定位,再用 read_file(offset, limit) 只读命中章节;禁止整文件读取 references。
| 当前任务 | 读取内容 |
|---|---|
| 准备数据、不确定列名怎么给 | 01 §2 / §4 |
哪些字段必填 / 缺字段报 S14 |
01 §3 |
看某条规则码 S1–S20 确切含义 |
02 §1 |
| 追问为什么命中 / 想改阈值 | 02 §2 / §3 |
| 核对指标公式(NRR / LTV / 回收期 / 40 法则) | 03 §1–§3 |
| 某项显示「—」的原因 | 03 §5 |
| 核对评分与档位 | 03 §4 |
| 想知道报告长什么样 / 退出码 | 04 §1 / §4 |
高频摘要
- 期间由新到旧:第 1 期本期、第 2 期上期、第 3 期起判趋势;排反了环比与流失率全错。
- 留存口径:
GRR =(上期 MRR − 流失 − 收缩)/ 上期 MRR;NRR = GRR + 扩张 MRR / 上期 MRR;
速动比率 =(新增 + 扩张)/(流失 + 收缩)。 - 单位经济:
LTV = ARPA ÷ 月流失率 × 毛利率(简化模型,未折现);回收期 = CAC /(ARPA × 毛利率);
40 法则 = 月环比 × 12 + 利润率%(近似年化,非严格同比)。 - 规则码范围:
S1–S20,严重度 高 / 中 / 低;高风险项优先看S1NRR<100%、S3LTV/CAC<3、
S14关键指标缺失、S16MRR 负增长、S19货币未统一。 - 评分 =
max(0, 100 − (高×15 + 中×5 + 低×2));≥90 优秀 / 75–89 良好 / 60–74 一般 / <60 较差。 - 退出码:
0未发现异常;1发现异常或用法错误。
输入格式
支持 JSON(顶层 periods 数组,也兼容顶层数组与 current / previous 写法)或
CSV(一行一期,表头支持中英文别名),均按「由新到旧」排列期间;列名按关键词归一化识别,
未识别的列被静默忽略,0.8 与 80 等价。
十个必要字段缺一即触发 S14:mrr / customers / new_customers / churned_customers /
new_mrr / expansion_mrr / churned_mrr / contraction_mrr / sm_spend / gross_margin;
可选 profit_margin / opex / top_client_pct / arr / ltv。
完整结构、示例、字段表与列名别名 → 01 §1–§5。
规则清单(S1–S20)
内置 S1–S20 共 20 条启发式规则,覆盖留存(S1)、增长效率(S2)、单位经济(S3 / S4)、
流失与增长趋势(S5 / S6 / S20)、获客与毛利(S7 / S8)、烧钱(S9)、
集中度与扩张收缩(S10–S12)、Magic Number(S13)、数据完整性(S14 / S15 / S16)、
口径矛盾(S17 / S18 / S19)。
按严重度加权给出 0–100 评分:max(0, 100 - (高×15 + 中×5 + 低×2));
结论档 ≥90 优秀 / 75–89 良好 / 60–74 一般 / <60 较差。
总表、逐条触发条件、阈值常量与排序规则 → 02 §1–§4。
输出示例(节选)
报告分五段:头部(数据源 / 期间链 / 基准日)→ 评分行(评分 N/100 | 结论:<档位>)→
异常合计(高 a · 中 b · 低 c)→ 核心指标(固定 18 行,缺失显示 —)→
异常清单(按高 / 中 / 低分组,每条给规则码、标题、定位、说明、建议)。
命中示例形如:
【高】S1 净收入留存(NRR)不足
· 定位:净收入留存 NRR
· 说明:NRR=77.87% < 100%,老客户收入净流失(扩张抵不过流失 + 降级)
· 建议:提高扩张收入(加购 / 升级 / 用量增长),同时压降流失与降级
完整报告节选、JSON 键说明与退出码 → 04 §1–§4。
限制与免责
- 纯标准库 Python,只读输入,无网络请求,无
subprocess/eval/os.system,不写文件;输入按 UTF-8(含 BOM)/ GBK 读取。 - 阈值为通用经验值(如 NRR≥100%、Quick Ratio≥2、LTV/CAC≥3、回收期≤18 月、流失率≤5%),不同阶段与客群差异很大,请按业务口径调整(脚本顶部常量集中定义)。
- 40 法则以「月环比 × 12」近似年化增长,并非严格同比口径;仅为快速判断,请勿据此单独下结论。
- LTV 采用「ARPA ÷ 流失率 × 毛利率」的简化模型,未含折现与通胀;烧钱 / 燃烧倍数按「销售市场费用 + 运营费用 − 毛利」近似净烧钱,需与财务口径核对。
- 本工具输出为数据层面的测算与提示,不构成投资、审计或财务意见;任何经营 / 融资决策请结合业务背景与专业意见。
上游署名
本技能改编自开源作品 saas-metrics-coach(作者 Alireza Rezvani,源项目
alirezarezvani/claude-skills,MIT License)。
上游的三个脚本(metrics_calculator.py / quick_ratio_calculator.py /
unit_economics_simulator.py)被整合为单一中文脚本并完全重写。版权与许可见同目录
LICENSE.md,改编说明见 来源与许可.md。
免责声明
本包输出是基于给定假设与输入数据的测算,不是对经营结果的承诺,也不构成投资、审计或财务意见:LTV 采用「ARPA ÷ 流失率 × 毛利率」的简化模型(未含折现与通胀),40 法则以「月环比 × 12」近似年化增长(并非严格同比口径),20 条规则与评分为启发式加权结果,只用于「先看哪个指标」而非经营结论。