Skip to content
返回变现与收入

催收管理

如何通过催收序列挽回失败的订阅支付,最大化挽回率而不疏远用户。

为什么

非自愿流失 — 订阅因卡过期或被拒失败而非用户主动取消 — 占多数 SaaS 总流失的 20-40%。这些是想继续付费但付不了的用户,好的催收序列能挽回 50-70%。经济性极佳:挽回一个 29 美元/月订阅值 348 美元 ARR,成本仅 3 封邮件和重试。错误是太早放弃(重试一次就取消)或太激进(每日邮件让用户觉得被骚扰而真取消)。正确节奏是 14 天内 3-4 次重试配智能重试时机(失败后第 3、7、14 天重试),每次带清晰"更新卡片"链接,宽限期让用户恢复期间仍能用计划。

何时使用

当你有任何订阅产品时。上线前就配好催收序列 — 已因支付失败丢用户后再加太迟。

如何做

1. 配置 Stripe Smart Retries(Billing 设置 → Smart retries)— Stripe 用 ML 选成功率最高的重试时机,比固定重试多挽回约 9%
2. 设 7-14 天宽限期,用户重试期间保留访问 — 首次失败就取消访问会杀死挽回
3. 写 3 封催收邮件:邮件 1(第 0 天,友好"你的卡被拒")、邮件 2(第 5 天,"最后通知"语气)、邮件 3(第 12 天,"订阅将在 2 天后取消")
4. 每封邮件带一键"更新卡片"链接到 Stripe 客户门户 — 别让用户登录再导航
5. 最终重试失败则取消订阅,但保留用户数据 30 天以便重新订阅不丢历史
6. 按队列(卡类型、失败原因、地区)跟踪挽回率 — "余额不足"比"过期卡"挽回差,分段告诉你干预哪
7. 高价值客户(> 500 美元/月)加人工步骤:客户成功在最终取消前亲自邮件
8. A/B 测试邮件文案和时机 — 第二次重试从第 5 天移到第 3 天可提升挽回 5-10%

示例

# Stripe 催收配置(API)
stripe.subscriptions.update("sub_123", {
  days_until_due: 14,        # 宽限期
  billing_cycle_anchor: "now",
});

# 邮件序列(Resend + React Email)
const dunningEmails = [
  { day: 0,  subject: "你的卡被拒", tone: "friendly" },
  { day: 5,  subject: "需要操作:更新你的卡", tone: "urgent" },
  { day: 12, subject: "最后通知 — 订阅 2 天后取消", tone: "final" },
];

# invoice.payment_failed webhook
async function onPaymentFailed(invoice) {
  const attempt = invoice.attempt_count;
  if (attempt === 1) await sendEmail(invoice.customer, dunningEmails[0]);
  if (attempt === 3) await sendEmail(invoice.customer, dunningEmails[1]);
  if (attempt === 4) {
    await sendEmail(invoice.customer, dunningEmails[2]);
    await scheduleCancel(invoice.subscription, { delayDays: 2 });
  }
}

常见问题

  • ⚠首次支付失败立即取消访问 — 用户卡过期且在度假;你取消访问他改订竞品。始终给宽限期。
  • ⚠用 no-reply@ 发催收邮件 — 用户回复问为何卡被拒收到退信,然后拒付。用受监控收件箱或支持工单链接。
  • ⚠不区分非自愿与自愿流失 — 流失仪表盘显示 30% 但 10 点是可挽回催收失败。分段否则优化错对象。

最佳实践

  • ✓开 Stripe Smart Retries 让 Stripe 选重试时机 — 其 ML 模型基于数十亿次重试训练,胜过任何你能设的固定节奏。
  • ✓取消后保留用户数据至少 30 天 — 回归用户发现项目被删零理由重订,你完全丢 LTV。
  • ✓把催收挽回作为与流失并列的一等指标 — "非自愿流失率"应与自愿流失同仪表盘,目标 < MRR 的 2%。