Lemon Squeezy
Merchant of record for digital products and SaaS. Handles all sales tax, VAT, and compliance — but takes a 5% cut.
Payment services compared — with real fees, hidden costs, and known gotchas. Each entry includes integration code and tax handling details.
Every payment service is assessed on: fee transparency, tax handling (who handles sales tax/VAT?), payout speed, integration complexity, and merchant of record status.
Quick recommendation:
| I need… | Use this | Starting price | Watch out for |
|---|---|---|---|
| Maximum flexibility + control | Stripe | 2.9% + $0.30 per txn | You handle tax collection/remittance |
| SaaS with no tax headaches | Lemon Squeezy | 5% + $0.50 per txn | Higher fees than Stripe |
| EU SaaS with VAT handling | Paddle | 5% + $0.50 per txn | Slower payouts; they own the customer relationship |
| Mobile app subscriptions | RevenueCat | Free up to $2.5K MTR | App Store/Play Store fees still apply (15-30%) |
| Service | Free Tier | Catches | Permanent? |
|---|---|---|---|
| Stripe | No monthly fee, pay per transaction | 2.9% + $0.30 per transaction | Yes |
| Lemon Squeezy | No monthly fee, pay per transaction | 5% + $0.50 per transaction (higher cut) | Yes |
| Paddle | No monthly fee, pay per transaction | 5% + $0.50 per transaction | Yes |
| RevenueCat | Free up to $2,500 MTR | $12/month after free tier | Yes |
npm install stripe
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
const session = await stripe.checkout.sessions.create({
line_items: [{ price: 'price_xxx', quantity: 1 }],
mode: 'subscription',
success_url: 'https://yourapp.com/success',
cancel_url: 'https://yourapp.com/cancel',
});
// Redirect user to session.url
npm install @lemonsqueezy/lemonsqueezy.js
import { lemonSqueezySetup, createCheckout } from '@lemonsqueezy/lemonsqueezy.js';
lemonSqueezySetup({ apiKey: process.env.LEMON_SQUEEZY_API_KEY });
const { data } = await createCheckout(storeId, variantId, {
checkoutData: { email: '[email protected]' },
});
// Redirect user to data.data.attributes.url
Full integration guides on each service page.
Choose Stripe if you want maximum flexibility, the best API/docs, and can handle tax collection yourself (or use Stripe Tax). Choose Lemon Squeezy if you’re selling digital products/SaaS and want a merchant of record that handles all sales tax, VAT, and compliance for you — but pay a higher fee (5% vs 2.9%).
A merchant of record (MoR) is the legal entity that sells to the customer. Stripe: YOU are the MoR — you handle taxes, refunds, disputes. Lemon Squeezy/Paddle: THEY are the MoR — they handle taxes and compliance, but they own the customer relationship and take a higher fee.
Lemon Squeezy and Paddle handle all sales tax and VAT automatically as merchants of record. Stripe requires you to enable Stripe Tax ($0.50 per transaction) or use a third-party tax service. RevenueCat relies on App Store/Play Store for tax handling.
Merchant of record for digital products and SaaS. Handles all sales tax, VAT, and compliance — but takes a 5% cut.
Merchant of record for SaaS. Handles tax, compliance, and billing globally — strong in EU market but slower payouts.
In-app subscription management for mobile apps. Handles Apple App Store and Google Play billing complexity — free up to $2,500 MTR.
The most popular payment API. Maximum flexibility, best documentation, global coverage — but you're responsible for tax collection and compliance.