《独立开发者的商业指南·资本与退出》4.1 战略买方、财务买方与个人买家

买方不是一类人,而是三种算法:战略买方看协同、财务买方看现金流、个人买家买一份工作。本节用 Tidecast 的 1.8× 收入 248,708 美元和 LedgerLite 的 3.2× ARR 768,768 美元,测算三类买方的价格区间,并拆开现金、earn-out 与托管,说明出价最高不等于最合适。

以下情境为教学假设,人物与数字不代表经核实的真实案例。

卖生意的人最先问的通常是「谁出价最高」。这个问题问早了。买方不是一个群体,而是三种完全不同的算法:战略买方算协同,财务买方算现金流,个人买家算「买下这份工作值不值」。三种算法给出的价格、现金比例、交割条件和交割后的生活都不一样。把三类买方放在同一张表里,才会发现最高报价和最适合的报价经常不是同一个。

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,074248,708276,342149,22499,483
Tidecast财务1.2–1.6× 收入165,805193,439221,07496,72096,720
Tidecast个人0.7–1.1× 收入96,720124,354151,988124,3540
LedgerLite战略2.8–3.6× ARR672,672768,768864,864461,261307,507
LedgerLite财务2.4–3.0× ARR576,576648,648720,720324,324324,324
LedgerLite个人1.2–1.8× ARR288,288360,360432,432360,3600

表中金额四舍五入到整数美元,分项相加可能有 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,708149,22474,613223,83790.0%
Tidecast财务193,43996,72063,835160,55583.0%
Tidecast个人124,354124,3540124,354100.0%
LedgerLite战略768,768461,261230,630691,89190.0%
LedgerLite财务648,648324,324214,054538,37883.0%
LedgerLite个人360,360360,3600360,360100.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 买方如何看独立开发者资产 。

常见错误与边界

  1. 只比较 headline 价格。 248,708 美元的报价可能只有 149,224 美元在交割日到手,124,354 美元的全现金报价反而更确定;要把现金、earn-out 和托管拆开。
  2. 把战略买方当成必然最高价。 协同只存在于买方的 PPT 里时,尽调后价格会回到财务买方水平;溢价要用整合计划和留任条款兑现。
  3. 把财务买方当成「没战略」。 财务买方不付协同溢价,但它对现金流的要求更细;收入不稳定时,它的价格可能比个人买家还低。
  4. 把个人买家当成「捡便宜」。 个人买家预算有限,但决策快、全现金;对需要速度的卖家,低价高确定性可能优于高价长流程。
  5. 忽略托管的时间价值。 10% 托管在 12 个月后才返还,期间不计息或按约定计息;把它当成交割日现金会高估到手金额。
  6. 把 earn-out 当成确定收入。 earn-out 依赖交割后的业绩,卖方往往还要继续投入;概率假设必须写进自己的模型,不能按 100% 算。
  7. 用同一组倍数套所有买方。 战略、财务、个人买家的基数和区间不同;用 3.2× ARR 去要求个人买家,只会把可成交的买家全部排除。
  8. 忽略买方接住资产的能力。 个人买家可能没有运营资金,财务买方可能没有渠道,战略买方可能只想拿走客户;价格之外还要看交割后资产能不能活。
  9. 把区间中位数当成报价。 中位数是教学锚,真实报价在区间内由尽调、谈判和竞争决定;不要拿中位数去和买方争论。
  10. 忘记交易成本。 3–6 个月的流程、律师费、尽调配合和创始人时间都要从价格里扣;第 4.3 节会给出量化。

本节的边界是「买方类型与价格区间」:只比较战略、财务、个人三类买方的动机、出价逻辑和现金结构,不展开估值方法、尽调清单和交易合同。所有倍数、现金比例、支付概率与费用都是教学假设,不构成投资、税务或法律建议;真实交易应由专业人员参与。估值倍数的完整口径见 11.1 收入、SDE 与 EBITDA 倍数 ,卷二末的评审与卷三交接问题见 13.3 卷二评审与进入卷三 。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《移动游戏产品的架构·商业化与发行工程》附录 C 商业化与发行评审清单
  2. 《移动游戏产品的架构·商业化与发行工程》附录 B 双案例商业化事实表
  3. 《移动游戏产品的架构·商业化与发行工程》附录 A 商业化与发行术语速查