计费周期
如何在月付和年付间选择,及如何给年付折扣定价以最大化现金流和留存。
为什么
计费周期决策是现金流与转化的权衡。年付给你 12 个月现金前置(改善跑道并降催收开销 12 倍)并锁用户一年(降流失 20-40% 因年中不能不问就取消)。代价是结账转化打击 — 348 美元/年感觉比 29 美元/月多即使一样,所以须给折扣(通常免 2 个月,348 → 290)让年付成显然之选。正确设计是两者都展示,默认年付并高亮节省 ,月付给批不下来年付的用户(企业采购常见)。最差是仅月付,钱留桌上且每 30 天给用户一个易出口。
何时使用
上线时,及有足够数据测年付 vs 月付流失差时。若年付流失不比月付低至少 30%,年付折扣太小。
如何做
1. 设月价为锚(29 美元/月),年价算为月价 10 倍(免 2 个月)— 290 美元/年,显示"$24/月 年付" 2. 定价页展示开关(月付 | 年付)默认选年付,节省("省 58 美元/年")绿色 3. Stripe 中同 Product 建两个 Price:一个 interval=month,一个 interval=year 且 unit_amount 为月 10/12 4. 用户选周期时传对应 price_id 到结账 — 不在 app 算折扣,让 Stripe 为唯一真相 5. 周期中切换(月→年)用 stripe.subscriptions.update 开 proration — Stripe 抵未用月时间并收年按比例 6. 年续费前 14 天发续费提醒 — 忘取消被续费的年付用户是拒付第一来源 7. 跟踪年付采纳率(目标 > 新订阅 60%);低于 40% 则增折扣到免 3 个月 8. 企业给多年(2-3 年)承诺再折 10-15% — 锁收入降销售周期压力
示例
# Stripe:一个产品两个价格
const product = await stripe.products.create({ name: "Pro" });
const monthly = await stripe.prices.create({
product: product.id, unit_amount: 2900, currency: "usd",
recurring: { interval: "month" },
});
const annual = await stripe.prices.create({
product: product.id, unit_amount: 29000, currency: "usd", # 10 倍月 = 免 2 个月
recurring: { interval: "year" },
});
# 定价页开关
<label class="toggle">
<input type="checkbox" checked={isAnnual} onChange={toggle} />
年付 — 省 58 美元/年
</label>
<p>{isAnnual ? "$24/月 年付" : "$29/月"}</p>
# 周期中升级 月→年
await stripe.subscriptions.update(sub.id, {
items: [{ id: sub.items.data[0].id, price: annual.id }],
proration_behavior: "create_prorations",
});常见问题
- ⚠在 app 而非 Stripe 算年付折扣 — 你显示 290 但 Stripe 收 348 因 price_id 指错 Price。始终让 Stripe 价格为唯一真相。
- ⚠年续费前不发续费提醒 — 用户忘订阅被续 290 美元并发拒付。14 天提醒邮件砍此类拒付 90%。
- ⚠定价页默认月付 — 用户选默认,默认月付把年付现金流留桌上。默认年付并高亮节省。
最佳实践
- ✓给 2 个月年付折扣(10 倍月)— 这是年付感觉明显划算又不让太多收入的甜点,多数成功 SaaS 用此。
- ✓年付节省同时显示百分比和绝对额 — "省 17%(58 美元/年)"胜过单独,因部分用户锚百分比部分锚美元。
- ✓年付降月付的用户问为何(一题调研)— 答案 通常"价格"或"对产品不确定",两者可修。