以下情境为教学假设,人物与数字不代表经核实的真实案例。
卖生意的人最先问的通常是「谁出价最高」。这个问题问早了。买方不是一个群体,而是三种完全不同的算法:战略买方算协同,财务买方算现金流,个人买家算「买下这份工作值不值」。三种算法给出的价格、现金比例、交割条件和交割后的生活都不一样。把三类买方放在同一张表里,才会发现最高报价和最适合的报价经常不是同一个。
Tidecast 是一个适合观察买方差异的资产:一人开发的买断制游戏,年净得 138,171 美元,SDE 121,171 美元,整体出售锚是 1.8× 年收入 = 248,708 美元;Steam 占销量 80%,收入随季节波动,Q4 占全年销量 38%。LedgerLite 是另一种资产:260 家付费客户的 B2B 订阅,ARR 240,240 美元,SDE 130,240 美元,战略买方锚是 3.2× ARR = 768,768 美元。Nord Studio 只做一段对照:两人服务工作室,年收入 154,320 美元,SDE 34,320 美元,买方数量少,价格从 4.5× SDE 下调到 3.0× SDE = 102,960 美元。
这一节不推荐任何买方,也不预测真实报价。所有倍数、现金比例、概率与费用都是教学假设,用来说明三类买方的算法如何把同一个资产算成三个价格。真实的交易价格由尽调、谈判和市场当时的需求决定,不由任何一张表决定。
三类买方:三种算法
战略买方买的不是一门独立生意,而是拼图的一块。它已经有一个客户群、一条渠道或一套产品,收购的目的是让目标资产与现有业务产生它自己算得出来的协同:交叉销售、补齐产品线、获得客户、拿走技术团队。协同越具体,愿意付的溢价越高;但协同也意味着整合,整合意味着卖方的产品可能被并入、被改名、被停掉,团队可能被拆散。战略买方因此最常见的要求是创始人留任一段时间、签竞业、接受 earn-out,并把客户迁移写进交割条件。
财务买方买的是一段可预测的现金流。它通常没有现成的渠道可以叠加,所以不会为「协同」付钱;它算的是买入价格、杠杆、现金回收期和退出倍数。财务买方最在意三件事:收入是否可持续、利润率是否真实、管理层是否能被替换或至少被留住。对订阅生意,财务买方会反复看流失率、净收入留存和客户集中度;对买断制游戏,它会反复看销量分布、平台依赖和续作成本。财务买方愿意付的价格通常低于战略买方,但它对产品的干预也少,因为它买的就是这台还能继续印钞的机器。
个人买家买的是一份工作。他往往自己就是开发者或小团队,买下资产后自己运营,不写协同故事,也不做杠杆收购。他的出价参照系不是估值倍数,而是「这份资产一年能给我多少钱,比我重新做一份工作强多少」。个人买家的价格通常最低,但流程最快:没有投委会,没有层层尽调,常常是全现金、几周交割。对卖家来说,个人买家给的是确定性和速度;对买家来说,他承担的是平台风险、技术债和创始人离开后的空档。
| 维度 | 战略买方 | 财务买方 | 个人买家 |
|---|---|---|---|
| 动机 | 协同:客户、渠道、产品、技术 | 现金流与杠杆 | 买一份工作 |
| 出价逻辑 | 收入或 ARR 倍数,愿为协同付溢价 | SDE 或 EBITDA 倍数,要求可预测 | 按 SDE 或收入打折,参照自己的工资 |
| 风险偏好 | 能吸收整合风险,但要求留任与 earn-out | 风险偏好低,要求干净报表与低集中度 | 预算有限,能接受平台与技术债 |
| 对卖方的要求 | 团队留任、竞业、客户迁移、产品并入 | 管理层可替换、收入可预测、数据完整 | 快速交割、过渡支持、账号可转 |
| 典型节奏 | 3–6 个月 | 3–6 个月,尽调更细 | 4–8 周 |
| 价格倾向 | 最高 | 中间 | 最低 |
| 交割后产品 | 可能并入或停掉 | 通常保留 | 通常保留 |
这张表只描述倾向,不描述必然。战略买方不一定出价最高:如果协同只存在于买方的 PPT 里,它会在尽调后把价格压回财务买方的水平。个人买家也不一定最便宜:如果资产正好是他想做但做不出来的产品,他可能愿意付接近财务买方的价格。判断买方类型,不能只看它自我介绍,要看它把哪一件事写进了意向书:协同写进整合计划,财务写进现金流模型,个人写进过渡支持清单。
Nord Studio 说明买方数量本身会影响价格。它的年收入 154,320 美元,SDE 只有 34,320 美元,服务收入占 72.7%,前 3 家客户占 48%,两位合伙人各 50%。战略买方对服务收入兴趣有限,财务买方要求管理层可替换,个人买家很难接住两位合伙人的客户关系;所以它的标准锚 4.5× SDE = 154,440 美元在真实谈判里被下调到 3.0× SDE = 102,960 美元。买方少不是因为没有价值,而是因为能接住这门生意的人少。
用两个锚算三个价格区间
估值倍数不是一个点,而是一个区间。同样的资产,战略买方可能给 1.6–2.0× 收入,财务买方可能给 1.2–1.6×,个人买家可能给 0.7–1.1×。这些区间是教学假设,不是市场报价;它们的用途是让「三类买方」从概念变成可计算的现金流。区间中位数用来和案例锚对齐:Tidecast 的 1.8× 收入 = 248,708 美元,LedgerLite 的 3.2× ARR = 768,768 美元。
先看 Tidecast。它的年净得是 138,171 美元,SDE 是 121,171 美元。战略买方按 1.6–2.0× 收入出价,中位 1.8× 正好落在案例锚 248,708 美元;财务买方按 1.2–1.6×,中位 1.4× 是 193,439 美元;个人买家按 0.7–1.1×,中位 0.9× 是 124,354 美元。个人买家的中位价接近一年 SDE,这不是巧合:他买的是一份可以自己经营的工作,价格自然向「一年利润」靠拢。
再看 LedgerLite。它的 ARR 是 240,240 美元,战略买方按 2.8–3.6× ARR 出价,中位 3.2× 正好是案例锚 768,768 美元;财务买方按 2.4–3.0×,中位 2.7× 是 648,648 美元;个人买家按 1.2–1.8×,中位 1.5× 是 360,360 美元。LedgerLite 的个人买家价看起来仍然不低,是因为订阅收入的可持续性比买断制游戏好;但相对战略买方的 768,768 美元,仍然只有 46.9%。
| 案例 | 买方 | 倍数基数与区间 | 低 | 中位 | 高 | 交割日现金(中位) | 递延部分(中位) |
|---|---|---|---|---|---|---|---|
| Tidecast | 战略 | 1.6–2.0× 收入 | 221,074 | 248,708 | 276,342 | 149,224 | 99,483 |
| Tidecast | 财务 | 1.2–1.6× 收入 | 165,805 | 193,439 | 221,074 | 96,720 | 96,720 |
| Tidecast | 个人 | 0.7–1.1× 收入 | 96,720 | 124,354 | 151,988 | 124,354 | 0 |
| LedgerLite | 战略 | 2.8–3.6× ARR | 672,672 | 768,768 | 864,864 | 461,261 | 307,507 |
| LedgerLite | 财务 | 2.4–3.0× ARR | 576,576 | 648,648 | 720,720 | 324,324 | 324,324 |
| LedgerLite | 个人 | 1.2–1.8× ARR | 288,288 | 360,360 | 432,432 | 360,360 | 0 |
表中金额四舍五入到整数美元,分项相加可能有 1 美元误差;精确值以代码的分单位计算为准。表里的「交割日现金」不是「现金部分」。战略买方的条款按教学假设设为现金 70% + earn-out 30%,另有成交价 10% 的托管。托管从现金部分扣出,所以交割日可动用的是 60%,另外 10% 在托管账户里等 12 个月;30% 的 earn-out 则要等业绩条件。Tidecast 战略买方的 248,708 美元中,交割日拿到 149,224 美元,递延部分是 74,612 美元 earn-out 加 24,871 美元托管,合计 99,483 美元。LedgerLite 战略买方的 768,768 美元中,交割日拿到 461,261 美元,递延 230,630 美元 earn-out 加 76,877 美元托管,合计 307,507 美元。这个拆分与案例事实表的 70/30 现金与 earn-out、10% 托管口径一致。
财务买方的条款更保守:教学假设为现金 60% + earn-out 40%,同样扣 10% 托管,所以交割日只有 50%。Tidecast 财务买方中位价 193,439 美元,交割日现金 96,720 美元;LedgerLite 财务买方中位价 648,648 美元,交割日现金 324,324 美元。个人买家则是 100% 现金、无 earn-out、无托管:Tidecast 124,354 美元,LedgerLite 360,360 美元。价格从高到低是战略、财务、个人;交割日现金占报价的比例从低到高是战略、财务、个人。这就是三类买方最核心的交换:价格与确定性反向。
倍数区间的宽窄也有信息。Tidecast 的个人买家区间是 0.7–1.1×,高低相差 57%;LedgerLite 的战略区间是 2.8–3.6×,高低相差 29%。资产越依赖单一平台、单一创始人或单一产品,区间越宽,因为买方对同一个风险的定价分歧越大。Tidecast 的 80% Steam 依赖让个人买家和财务买方都会在区间下限附近出价;LedgerLite 的订阅收入让战略买方的区间更窄,因为协同价值更容易被双方算出来。倍数的区间不是精度,而是分歧的度量。
出价高不等于最合适
把 headline 价格、交割日现金和风险调整后的期望值放在一起,三类买方的排序会变。风险调整用两个教学假设:战略买方的 earn-out 全额支付概率 70%,财务买方 60%,个人买家没有 earn-out;托管在 12 个月后无索赔返还的概率统一按 90% 计。这些概率不是预测,只是把「递延的钱可能拿不到」这件事变成数字。
| 案例 | 买方 | 报价 | 交割日现金 | 期望递延 | 风险调整后 | 占报价 |
|---|---|---|---|---|---|---|
| Tidecast | 战略 | 248,708 | 149,224 | 74,613 | 223,837 | 90.0% |
| Tidecast | 财务 | 193,439 | 96,720 | 63,835 | 160,555 | 83.0% |
| Tidecast | 个人 | 124,354 | 124,354 | 0 | 124,354 | 100.0% |
| LedgerLite | 战略 | 768,768 | 461,261 | 230,630 | 691,891 | 90.0% |
| LedgerLite | 财务 | 648,648 | 324,324 | 214,054 | 538,378 | 83.0% |
| LedgerLite | 个人 | 360,360 | 360,360 | 0 | 360,360 | 100.0% |
先解释「期望递延」这一列。Tidecast 战略买方的递延是 99,483 美元,其中 earn-out 74,612 美元按 70% 计,托管 24,871 美元按 90% 计,期望值 52,229 + 22,384 = 74,613 美元;加上交割日 149,224 美元,得到 223,837 美元。财务买方的递延是 96,720 美元,earn-out 77,376 美元按 60% 计,托管 19,344 美元按 90% 计,期望 46,425 + 17,410 = 63,835 美元;加上交割日 96,720 美元,得到 160,555 美元。这两行是教学假设下的期望值,不是对任何真实买方付款意愿的预测。LedgerLite 的两行同理。
风险调整后,战略买方仍然是绝对值最高的:Tidecast 223,837 美元对个人买家 124,354 美元,LedgerLite 691,891 美元对个人买家 360,360 美元。如果卖家的唯一目标是最大化期望现金,战略买方胜出。但「最合适」不止一个目标。战略买方要求创始人留任 6–12 个月、签竞业、配合客户迁移,产品可能被并入买方路线图;个人买家要求 4–8 周交割和一段过渡支持,产品通常保留原来的名字和用户。对不想再管产品的卖家,战略买方的留任义务可能比多出来的约 99,000 美元更贵;对想保住用户社区的卖家,个人买家的低价可能更接近他真正想要的结果。
还有一层时间成本。战略买方的 3–6 个月流程、尽调和整合,会把卖家的注意力从产品上拿走;个人买家的 4–8 周流程对业务的打扰小得多。第 4.3 节会把这段时间折算成机会成本。把时间成本加进去,战略买方的期望值优势会缩小;如果交易拖到 9 个月,缩小得更多。价格是分子,时间和确定性是分母,只看分子会高估战略买方。
最后是「合适」的定义。合适的买方不是出价最高的,而是满足三个条件的:价格在卖家的底线之上、交割后卖家能接受自己的生活、买方有能力接住资产。战略买方有能力接住产品,但可能不想要原团队;财务买方有能力接住现金流,但可能要求创始人继续留任;个人买家有能力接住产品,但可能没有足够的运营资金。三类买方都能给出一个价格,只有一类能给出卖家愿意接受的生活。这个问题没有统一答案,但可以用一张表把三类买方的价格、现金、时间和义务并排放在一起,而不是只比较 headline。
写成代码:buyers.ts
下面的 buyers.ts 把三类买方、倍数区间、现金比例、earn-out 和托管写成一个函数。quoteBid 不判断报价是否合理,只做三件事:按收入或 SDE 算出价格区间、把中位价拆成交割日现金与递延部分、把价格换算成 SDE 倍数,方便跨基数比较。它要求现金与 earn-out 加起来正好 100%,托管必须从现金部分扣出;这两个约束能挡住大多数「看起来很高、实际拿不到」的报价。
代码里的 basis 允许 revenue 或 sde。对 Tidecast,战略买方按收入出价,个人买家也可以按 SDE 出价(例如 0.9–1.1× SDE),代码两种基数都支持;对 LedgerLite,战略买方按 ARR 出价,ARR 在代码里就是年收入。正文表格为了与案例锚对齐,统一用收入基数。lowMultipleOfSdeBps 和 highMultipleOfSdeBps 把任何基数的报价都翻译成 SDE 倍数,这样 248,708 美元和 768,768 美元才能放在同一把尺子上比较。
// file: src/capital/buyers.ts
// tier: L1
// verify: node --test test/capital/buyers.test.ts
import { type Cents } from "../core/money.ts";
import { type Bps, applyRate, divide } from "../core/rate.ts";
import { type Result, fail, ok } from "../core/result.ts";
export type BuyerKind = "strategic" | "financial" | "individual";
export type BidBasis = "revenue" | "sde";
export const BUYER_ORDER: BuyerKind[] = [
"strategic",
"financial",
"individual",
];
export type BidInput = {
buyer: BuyerKind;
annualRevenueCents: Cents;
annualSdeCents: Cents;
basis: BidBasis;
lowMultipleBps: Bps;
highMultipleBps: Bps;
cashBps: Bps;
earnOutBps: Bps;
escrowBps: Bps;
};
export type Bid = {
buyer: BuyerKind;
basis: BidBasis;
lowCents: Cents;
highCents: Cents;
midCents: Cents;
cashAtCloseCents: Cents;
earnOutCents: Cents;
escrowCents: Cents;
deferredCents: Cents;
lowMultipleOfSdeBps: Bps;
highMultipleOfSdeBps: Bps;
};
function validBid(input: BidInput): string | null {
if (!BUYER_ORDER.includes(input.buyer)) {
return "unknown buyer kind";
}
if (input.basis !== "revenue" && input.basis !== "sde") {
return "bid basis must be revenue or sde";
}
if (
!Number.isInteger(input.annualRevenueCents) ||
input.annualRevenueCents <= 0
) {
return "annual revenue must be a positive integer amount in cents";
}
if (!Number.isInteger(input.annualSdeCents) || input.annualSdeCents <= 0) {
return "annual SDE must be a positive integer amount in cents";
}
if (!Number.isInteger(input.lowMultipleBps) || input.lowMultipleBps <= 0) {
return "low multiple must be a positive integer in basis points";
}
if (
!Number.isInteger(input.highMultipleBps) ||
input.highMultipleBps < input.lowMultipleBps
) {
return "high multiple must be an integer no lower than the low multiple";
}
if (
!Number.isInteger(input.cashBps) ||
input.cashBps < 0 ||
input.cashBps > 10000
) {
return "cash share must be between 0 and 100%";
}
if (
!Number.isInteger(input.earnOutBps) ||
input.earnOutBps < 0 ||
input.earnOutBps > 10000
) {
return "earn-out share must be between 0 and 100%";
}
if (input.cashBps + input.earnOutBps !== 10000) {
return "cash and earn-out shares must add up to 100%";
}
if (
!Number.isInteger(input.escrowBps) ||
input.escrowBps < 0 ||
input.escrowBps > input.cashBps
) {
return "escrow must be carved out of the cash share";
}
return null;
}
/**
* A headline price is the midpoint of a teaching multiple range, not a bid.
* Cash at close is what the seller can spend the month after closing; earn-out
* and escrow are deferred and may never be paid in full. The function keeps the
* three components separate so two offers with the same headline can still be
* compared on cash and risk.
*/
export function quoteBid(input: BidInput): Result<Bid> {
const error = validBid(input);
if (error) {
return fail(error);
}
const anchorCents =
input.basis === "revenue" ? input.annualRevenueCents : input.annualSdeCents;
const lowCents = applyRate(anchorCents, input.lowMultipleBps);
const highCents = applyRate(anchorCents, input.highMultipleBps);
const midMultipleBps = Math.round(
(input.lowMultipleBps + input.highMultipleBps) / 2,
);
const midCents = applyRate(anchorCents, midMultipleBps);
const earnOutCents = applyRate(midCents, input.earnOutBps);
const escrowCents = applyRate(midCents, input.escrowBps);
const cashAtCloseCents = midCents - earnOutCents - escrowCents;
return ok({
buyer: input.buyer,
basis: input.basis,
lowCents,
highCents,
midCents,
cashAtCloseCents,
earnOutCents,
escrowCents,
deferredCents: earnOutCents + escrowCents,
lowMultipleOfSdeBps: divide(lowCents, input.annualSdeCents),
highMultipleOfSdeBps: divide(highCents, input.annualSdeCents),
});
}
把 Tidecast 代进去:战略买方 1.6–2.0× 收入,中位 248,708 美元,交割日现金 149,224 美元,递延 99,483 美元;财务买方 1.2–1.6×,中位 193,439 美元,交割日现金 96,720 美元;个人买家 0.7–1.1×,中位 124,354 美元,全部现金。LedgerLite 的结果同样落在案例锚上:战略买方 2.8–3.6× ARR,中位 768,768 美元;财务买方 2.4–3.0×,中位 648,648 美元;个人买家 1.2–1.8×,中位 360,360 美元。代码给出的 SDE 倍数可以交叉验证:Tidecast 战略买方的下限 22,107,360 美分是 1.8245× SDE,上限 27,634,200 美分是 2.2806× SDE;LedgerLite 的下限 67,267,200 美分是 5.1649× SDE,上限 86,486,400 美分是 6.6405× SDE。
这段代码不把「三类买方」写死成固定倍数。倍数、现金比例和托管都是输入,读者可以换成自己谈到的条款。它固定的是结构:价格必须能拆成现金、earn-out 和托管,三部分必须能加回总价;任何一部分没有数字,报价就不可比较。估值倍数的经济含义见 11.1 收入、SDE 与 EBITDA 倍数 ,下一章会把倍数区间展开成完整的估值方法。
小结
- 战略买方买协同,愿意付溢价,但要求留任、整合和 earn-out;财务买方买现金流,要求可预测、可替换管理层;个人买家买一份工作,出价低但流程快、通常全现金。
- Tidecast 的 1.8× 收入 = 248,708 美元适合做战略买方的中位锚;1.6–2.0× 区间对应 221,074–276,342 美元。
- LedgerLite 的 3.2× ARR = 768,768 美元适合做战略买方的中位锚;2.8–3.6× 区间对应 672,672–864,864 美元。
- 三类买方的中位价:Tidecast 战略 248,708、财务 193,439、个人 124,354 美元;LedgerLite 战略 768,768、财务 648,648、个人 360,360 美元。
- 战略买方按 70% 现金 + 30% earn-out + 10% 托管,交割日可动用 60%;财务买方按 60% 现金 + 40% earn-out + 10% 托管,交割日可动用 50%;个人买家 100% 现金。
- 风险调整后战略买方仍是绝对值最高,但个人买家的 100% 现金和速度可能更符合卖家的真实目标;出价最高不等于最合适。
- 倍数区间越宽,说明买方对同一个风险的分歧越大;Tidecast 的个人区间 0.7–1.1× 比 LedgerLite 的战略区间 2.8–3.6× 更宽。
- 合适的买方要同时满足:价格在底线之上、卖家能接受交割后的生活、买方有能力接住资产。
阅读导航:上一节:3.3 董事会、观察员与信息权 · 下一节:4.2 买方如何看独立开发者资产 。
常见错误与边界
- 只比较 headline 价格。 248,708 美元的报价可能只有 149,224 美元在交割日到手,124,354 美元的全现金报价反而更确定;要把现金、earn-out 和托管拆开。
- 把战略买方当成必然最高价。 协同只存在于买方的 PPT 里时,尽调后价格会回到财务买方水平;溢价要用整合计划和留任条款兑现。
- 把财务买方当成「没战略」。 财务买方不付协同溢价,但它对现金流的要求更细;收入不稳定时,它的价格可能比个人买家还低。
- 把个人买家当成「捡便宜」。 个人买家预算有限,但决策快、全现金;对需要速度的卖家,低价高确定性可能优于高价长流程。
- 忽略托管的时间价值。 10% 托管在 12 个月后才返还,期间不计息或按约定计息;把它当成交割日现金会高估到手金额。
- 把 earn-out 当成确定收入。 earn-out 依赖交割后的业绩,卖方往往还要继续投入;概率假设必须写进自己的模型,不能按 100% 算。
- 用同一组倍数套所有买方。 战略、财务、个人买家的基数和区间不同;用 3.2× ARR 去要求个人买家,只会把可成交的买家全部排除。
- 忽略买方接住资产的能力。 个人买家可能没有运营资金,财务买方可能没有渠道,战略买方可能只想拿走客户;价格之外还要看交割后资产能不能活。
- 把区间中位数当成报价。 中位数是教学锚,真实报价在区间内由尽调、谈判和竞争决定;不要拿中位数去和买方争论。
- 忘记交易成本。 3–6 个月的流程、律师费、尽调配合和创始人时间都要从价格里扣;第 4.3 节会给出量化。
本节的边界是「买方类型与价格区间」:只比较战略、财务、个人三类买方的动机、出价逻辑和现金结构,不展开估值方法、尽调清单和交易合同。所有倍数、现金比例、支付概率与费用都是教学假设,不构成投资、税务或法律建议;真实交易应由专业人员参与。估值倍数的完整口径见 11.1 收入、SDE 与 EBITDA 倍数 ,卷二末的评审与卷三交接问题见 13.3 卷二评审与进入卷三 。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。