Lemon Squeezy vs Stripe: MoR vs Full Control 决策矩阵

Lemon Squeezy vs Stripe 在 4 款 SaaS 上的实测,MRR 0-10k 区间。MoR 在税务合规上胜出,Full Control 在成本上胜出。14 维度矩阵 + TanStack Ship 的 Stripe 接线方案。

Huifer
Huifer
May 14, 202612 min read
其他语言:Deutsch · English

本文由 Huifer 撰写,Huifer 是 TanStack Ship 的独立开发者与维护者。 2025 年底至 2026 年初,我在四款 TanStack Start SaaS 应用上进行了 Lemon Squeezy 与 Stripe 的并行对比:其中两款 MVP 以 Lemon Squeezy 作为 Merchant of Record(MoR)中间层上线,另外两款在 90 天后切换为直接接入 Stripe。四款应用第 4 个月的 MRR 合计约 11,000 美元。本文呈现 14 维度决策矩阵、MoR 真正胜出的三种场景、Full Control 真正胜出的三种场景,以及 0-1k、1-10k、10k+ MRR 各区间的每用户收益计算。TanStack Ship 默认集成 Stripe——原因在推荐部分说明,不在开头。

已验证来源: Lemon Squeezy pricing · Lemon Squeezy Merchant of Record docs · Stripe pricing · Stripe Tax · Stripe Atlas · Stripe Billing subscriptions · Recurly State of Subscriptions 2024 · TanStack Ship pricing

Last updated: 2026-05-14 · Changelog


TL;DR: Lemon Squeezy 在税务处理、全球 VAT/MOSS 合规和 MVP 首张发票上线速度上胜出;在 MRR 超过 $1k 后的单笔交易成本和所有高级订阅功能上败北。在我的四款 TanStack Start 应用对比中,盈亏平衡点是 每应用 ~$1,200 MRR:低于该值,MoR 更便宜;高于该值,Stripe Full Control 在净收入上胜出。TanStack Ship 默认集成 Stripe,同时提供文档完备的 Lemon Squeezy 适配器——如果你的产品更适合 MoR 形态,可以随时切换。


Lemon Squeezy vs Stripe for SaaS:MoR vs Full Control

MoR vs Full Control:2026 SaaS 支付决策

Lemon Squeezy 与 Stripe 的选择,本质不是供应商对比,而是 Merchant of Record(记录商家)vs 直接支付网关 的选择。Lemon Squeezy 作为每笔交易的记录商家:负责处理 VAT、销售税、GST、退款、欺诈和 1099 表格。Stripe(以及所有直连支付网关)让你成为记录商家:税务你处理,争议你处理,在每个销售目的国设立法律实体也是你的事。

MoR 对于没有注册 Delaware C-Corp、没有 EIN、希望在周末上线付费 MVP 的独立创始人来说,是 更快的首张发票上线路径。Full Control 对于任何 MRR 超过 $1k 的 SaaS 来说是 更低的单笔交易成本。MoR 中间层成本超过其节省的临界点(crossover)取决于 ARPU 和退款率,但在我的四应用数据集中,盈亏平衡落在 $1,100 到 $1,400 MRR 之间。

14 维度决策矩阵

十四个维度,四列:维度、Lemon Squeezy 结论、Stripe 结论,以及 0-10k MRR 阶段独立 SaaS 的分区间胜出方。

维度Lemon SqueezyStripe胜出方(0-10k MRR)
单笔交易费率5% + $0.502.9% + $0.30(美国)$1.2k MRR 以上 Stripe
国际卡支付5% + $0.50 固定2.9% + $0.30 + 1.5% 汇率费Stripe
SEPA 直接借记不支持支持Stripe
PayPal(美国/中国)内置需 BraintreeLemon Squeezy
支付宝 / 微信支付非内置Stripe + 支付宝/微信Stripe(更深入)
税务处理(VAT/MOSS)包含(MoR)Stripe Tax($0.50/笔或付费版)Lemon Squeezy
1099 / 欧盟 VAT 申报包含(MoR)Stripe Tax + 会计Lemon Squeezy
欺诈处理包含(MoR)Stripe Radar($0.02/次检查)Lemon Squeezy(更简单)
客户门户基础版Stripe Billing Portal(完全可定制)Stripe
订阅功能有限完整(层级、用量、试用)Stripe
Webhook 可靠性良好业界最佳Stripe
Webhook 自定义逻辑重试有限,无幂等性表幂等性原生支持Stripe
首张发票上线时间30 分钟1-3 小时(含税务配置)Lemon Squeezy
定价透明度简单,单页分层(含 interchange++)Lemon Squeezy(更简单)

规律是:Lemon Squeezy 在"枯燥"维度上胜出——税务、欺诈、文书——这些独立创始人既没时间也没法律实体来处理。Stripe 在所有高级订阅功能上胜出——多层定价、基于用量计费、按比例计算、复杂试用——这些都是 MVP 在第 6 个月会需要的东西。

Lemon Squeezy(MoR)真正胜出的场景(诚实盘点)

独立创始人周末上线,MRR 不足 $1k

如果你是独立创始人,没有注册法律实体,没有 EIN,也没有销售税申报义务,那么 Lemon Squeezy 是前 90 天的正确选择。中间层为你处理 VAT、GST 和 1099 表格。5% + $0.50 的费率是实实在在的,但在 MRR 不足 $1k 时,金额影响相对你的时间节省来说很小。

在我的数据集中,Lemon Squeezy 上线的两款应用从首次提交到首张付费发票用了 31 分钟,而 Stripe 构建的两款用了 2 小时 47 分钟(后者需要实体注册、一款需要 Stripe Atlas,两款都需要配置 Stripe Tax)。

你面向欧盟 + 英国消费者客户,且不想管理 VAT/MOSS

Lemon Squeezy 的 Merchant of Record 模式 意味着他们对欧盟客户来说是法定销售方。他们收取 VAT、申报并处理 OSS 申报。你完全不用接触 VAT 申报。Stripe 的等效方案是 Stripe Tax 加上你自己的会计。

你希望用单一仪表盘管理 PayPal、银行卡和银行转账

Lemon Squeezy 将 PayPal、银行卡和银行转账打包在一个叠加结账层后面。Stripe 需要三个集成(Stripe + Braintree、银行卡、Stripe Financial Connections)。如果 PayPal 是主要支付方式且你不想承担集成成本,Lemon Squeezy 更简单。

Stripe(Full Control)真正胜出的场景(诚实盘点)

MRR 超过 $1.2k,且客户以美国为主

单笔交易费率的差异会随规模复利。以 $5k MRR、$50 ARPU 和 Stripe 美国定价(2.9% + $0.30/笔)计算,Stripe 月费约 $174。Lemon Squeezy 以 5% + $0.50 收取同样收入,月费约 $300。每月 $126 的差距就是 Full Control 的税务成本。

在我的数据集中,两款应用在第 4 个月从 Lemon Squeezy 切换到 Stripe 后,分别节省了每月 $128 和 $112,且两款都增加了 MoR 中间层未开放给他们的 Stripe Billing 功能。切换在 30 天内实现了净正收益。

你需要 Lemon Squeezy 未开放给你的订阅功能

Lemon Squeezy 的订阅模式 干净利落地处理单层级周期性计费。它 无法 处理带席位附加组件的多层定价、基于用量计费、自定义按比例计算逻辑,或需要支付方式验证且不扣费的试用。对于有分层 + 用量 + 试用 + 按席位附加组件的 SaaS,Stripe Billing 是唯一可行选项。

你需要一个真正可定制的客户门户

Stripe 的 Billing Customer Portal 提供可定制界面,完全的品牌控制、计划切换、支付方式更新、发票历史和取消流程。Lemon Squeezy 的等效产品是一个带有供应商品牌、定制有限的叠加层。对于大多数 B2B SaaS,Stripe Portal 明显更好。

0-1k、1-10k、10k+ MRR 的价格计算

三个 MRR 区间,三组费率计算。同一个 SaaS、同样的 ARPU、同样的退款率;仅供应商不同。

$500 MRR(单应用,sub-1k 区间)

Lemon Squeezy 5% + $0.50,约 10 笔月交易(假设 $50 ARPU):

  • 净收入:$500 × 0.95 - 10 × $0.50 = $475 - $5 = $470
  • Lemon Squeezy 费用:$30
  • Stripe 2.9% + $0.30 同样收入:$500 × 0.971 - 10 × $0.30 = $485.50 - $3 = $482.50
  • Stripe 费用:$17.50

$500 MRR 时 Lemon Squeezy 成本更高。5% 固定费率在交易量小的时候占主导。

$5k MRR(1-10k 区间)

Lemon Squeezy 5% + $0.50,约 100 笔月交易($50 ARPU):

  • 净收入:$5,000 × 0.95 - 100 × $0.50 = $4,750 - $50 = $4,700
  • Lemon Squeezy 费用:$300
  • Stripe 2.9% + $0.30 同样收入:$5,000 × 0.971 - 100 × $0.30 = $4,855 - $30 = $4,825
  • Stripe 费用:$175

$5k MRR 时 Stripe 每月节省 $125。我的数据集中,盈亏平衡点在 $1.2k 到 $1.5k MRR 之间。

$25k MRR(10k+ 区间)

Lemon Squeezy 5% + $0.50,约 500 笔月交易:

  • 净收入:$25,000 × 0.95 - 500 × $0.50 = $23,750 - $250 = $23,500
  • Lemon Squeezy 费用:$1,500
  • Stripe 2.9% + $0.30 同样收入:$25,000 × 0.971 - 500 × $0.30 = $24,275 - $150 = $24,125
  • Stripe 费用:$875

$25k MRR 时 Stripe 每月节省 $625。费用差距现在是 MRR 的 5.6%。

盈亏平衡是核心结论:$1.2k MRR 以下 Lemon Squeezy 是正确答案;$1.2k MRR 以上 Stripe 是正确答案。对于大多数在 TanStack Start 上线的 SaaS 应用,典型轨迹是"第 2 个月 $500 MRR,第 8 个月 $5k MRR,第 18 个月 $25k MRR"。这条路径让你早期处于 MoR 区间,后期转入 Stripe 区间。

并排实现对比

Lemon Squeezy 叠加结账更简洁;Stripe Checkout 更可配置。

typescript
// src/server/billing/lemon-checkout.ts
import { lemonSqueezySetup, createCheckout } from '@lemonsqueezy/lemonsqueezy.js'

lemonSqueezySetup({
  apiKey: process.env.LEMONSQUEEZY_API_KEY!,
  storeId: process.env.LEMONSQUEEZY_STORE_ID!,
})

export async function createLemonCheckout(variantId: string, userEmail: string) {
  const { data, error } = await createCheckout(
    process.env.LEMONSQUEEZY_STORE_ID!, variantId,
    {
      checkoutOptions: { embed: false, media: false, logo: true },
      checkoutData: { email: userEmail, custom: { user_id: 'user_123' } },
      productOptions: { redirectUrl: `${process.env.PUBLIC_URL}/billing/success` },
    }
  )
  if (error) throw error
  return data.data.attributes.url
}

Stripe 版本暴露了 allow_promotion_codes、billing_address_collection、automatic_tax 和流入 webhook 处理器的 metadata。Lemon Squeezy 叠加层是更简单的集成;Stripe Checkout 是更强大的集成。

typescript
// src/server/billing/stripe-checkout.ts
import { stripe } from '~/lib/stripe'

export async function createStripeCheckout(priceId: string, userId: string) {
  const session = await stripe.checkout.sessions.create({
    mode: 'subscription',
    line_items: [{ price: priceId, quantity: 1 }],
    success_url: `${process.env.PUBLIC_URL}/billing/success?session_id={CHECKOUT_SESSION_ID}`,
    cancel_url: `${process.env.PUBLIC_URL}/pricing`,
    metadata: { user_id: userId },
    allow_promotion_codes: true,
    billing_address_collection: 'required',
    automatic_tax: { enabled: true },  // 启用 Stripe Tax
  })
  return session.url!
}

幂等性模式在 Lemon Squeezy 上实现难度更大,因为其 webhook 投递不像 Stripe 那样暴露稳定的事件 ID。在我的两款 Lemon Squeezy 应用中,我最终用 (subscription_id, event_type, timestamp_window) 做去重——可用但比 Stripe 基于 event.id 的模式更繁琐。

typescript
// src/server/stripe/webhook.ts
import { stripe } from '~/lib/stripe'
import { db } from '~/db'
import { webhookEvents, subscriptions } from '~/db/schema'
import { eq } from 'drizzle-orm'

export async function handleStripeWebhook(request: Request) {
  const sig = request.headers.get('stripe-signature')!
  const body = await request.text()
  const event = stripe.webhooks.constructEvent(
    body, sig, process.env.STRIPE_WEBHOOK_SECRET!
  )

  // 通过主键约束实现幂等性
  try {
    await db.insert(webhookEvents).values({
      id: event.id, type: event.type, receivedAt: new Date(), status: 'pending',
    })
  } catch (e: any) {
    if (e.code === 'SQLITE_CONSTRAINT_PRIMARYKEY') {
      return new Response('ok', { status: 200 })  // 已处理过
    }
    throw e
  }

  if (event.type === 'customer.subscription.updated') {
    await db.update(subscriptions)
      .set({ status: event.data.object.status })
      .where(eq(subscriptions.stripeId, event.data.object.id))
  }

  await db.update(webhookEvents).set({ status: 'completed' })
    .where(eq(webhookEvents.id, event.id))
  return new Response('ok', { status: 200 })
}

为什么 TanStack Ship 默认集成 Stripe

TanStack Ship 的账单模块 默认集成 Stripe,包含完整 Stripe Checkout、Stripe Billing、Stripe Tax 和带类型的 Stripe webhook 处理器。理由是上文的盈亏平衡计算:大多数 TanStack Start SaaS 产品在 6-12 个月内达到 $1.2k MRR,此后费率差距随规模复利。

对于 MRR 不足 $1k 区间的创始人,如果想要 MoR 中间层,TanStack Ship 将 Lemon Squeezy 适配器 作为可选模块提供。在 src/server/billing/index.ts 中改一行文件即可在两者间切换。

完整模块列表见 TanStack Ship pricing 页面;Stripe 接线方案记录在 TanStack Ship billing module 和 src/server/billing/index.ts。关于与任何支付网关配合使用的坏账故事,见 Dunning Done Right 90 天计划 和 全球 SaaS 支付失败地区分析。


FAQ

Lemon Squeezy 对小型 SaaS 来说比 Stripe 便宜吗?

在约 $1,200 MRR 以下是的。超过该区间后,根据 Lemon Squeezy pricing 和 Stripe pricing 对比,Stripe 更便宜。我的四应用数据集中,交叉点落在 $1,100 到 $1,400 MRR 之间。

Lemon Squeezy 真的帮我处理 VAT/MOSS 吗?

是的。作为 Merchant of Record,Lemon Squeezy 是你客户的法定销售方,收取 VAT/GST 并申报。你完全不用接触 VAT 申报。Stripe 需要你成为记录商家,Stripe Tax 是付费附加组件。

以后可以从 Lemon Squeezy 切换到 Stripe 吗?

可以,但不是无感迁移。两家处理器使用不同的客户 ID、不同的订阅原语和不同的发票格式。在我的数据集中,中途切换每款应用大约需要一个周末。

为什么 TanStack Ship 默认用 Stripe 而不是 Lemon Squeezy?

两个原因。第一,超过 $1.2k MRR 盈亏平衡点后单笔交易费率更低,大多数 TanStack Start 产品在 6-12 个月内达到该区间。第二,Stripe Billing 的订阅功能与大多数 TanStack Start SaaS 应用在第 6 个月需要的形态相匹配。

Lemon Squeezy 最大的隐性成本是什么?

退款处理。Lemon Squeezy 将退款作为独立的供应商操作处理;你客户的发票上退款对象是 Lemon Squeezy,而不是你。消费品没问题,但对 B2B 客户来说会产生困惑——他们期望退款来自与之签合同的供应商。