Most SaaS kits let you swap Stripe for a merchant of record such as Lemon Squeezy, Polar, Paddle, Creem or Dodo, which then handles VAT and sales tax. You still create products, map IDs, register a webhook and handle renewal events yourself. tiun removes the webhook as well, because sign-in, billing and access live in one system.
Merchant of record support by kit
Kit | Lemon Squeezy | Polar | Paddle | Creem | Dodo |
|---|---|---|---|---|---|
ShipFast | Yes | Not shown in docs | Not shown in docs | Not shown in docs | Not shown in docs |
supastarter | Yes | Yes | Not checked | Yes | Yes |
Makerkit | Yes | Not checked | Yes | Not checked | Not checked |
TurboStarter | Yes | Yes | Not checked | Not checked | Yes |
OpenSaaS | Yes | Yes | Not checked | Not checked | Not checked |
Not checked means the pairing fell outside our 12 October 2026 check, so confirm it in the kit's own docs before you buy. For the kits themselves, see our roundup of SaaS boilerplates.
Lemon Squeezy is the only provider every kit above supports. It is also moving its users to Stripe Managed Payments, which is covered further down.
Kits added merchant of record options because of tax
With Stripe as your processor, you are the seller. Stripe moves the money, and VAT, sales tax and the registrations behind them stay with you. A merchant of record becomes the seller instead, so it takes on VAT and sales tax for each sale. The difference is set out in payment processor vs merchant of record.
The trade is price. OpenSaaS says so plainly in its payments docs: Stripe has the cheaper fees, while Lemon Squeezy and Polar act as merchant of record and charge more for it. The fee table further down shows how much more.
Kits now present this choice as a dropdown or a config value. Choosing a provider settles who files the tax. Your app still has to learn when someone pays, renews, misses a payment or leaves, and that part is code that each kit covers to a different degree.
Steps every pairing makes you do
Whichever kit and provider you combine, setup follows the same pattern.
Step | What you do |
|---|---|
Products | Create each product and price in the provider's dashboard |
IDs | Copy the product or variant IDs into environment variables so the kit can map them to plans |
API key | Generate a key in the provider's dashboard and add it to your environment |
Webhook | Register your app's webhook URL with the provider and store its signing secret |
Test and live | Create the products and IDs again for live mode, and keep the test set and the live set apart |
None of this takes long on the first day. The cost shows up later, when a price changes, a plan is added or a live ID points at a product that only exists in test mode. Each of those changes touches the provider's dashboard, your environment variables and the kit's config, and they have to agree with each other. For everything else a kit leaves you beyond payments, see what you still build after buying a SaaS boilerplate.
Pairing by pairing
The table lists what each kit's own docs say its webhook handler covers, and the limits those docs state.
Kit and provider | Webhook events handled | Documented limits | Source |
|---|---|---|---|
ShipFast + Lemon Squeezy | 2: order created, subscription cancelled | Renewals, past due, plan changes, refunds and expiry left to you | ShipFast payments docs |
supastarter + Lemon Squeezy | Select all events | One currency per store | supastarter docs |
supastarter + Polar | 5: order created, subscription created, updated, cancelled, revoked | A product per plan and per interval | supastarter docs |
supastarter + Creem | 11 | None stated | supastarter docs |
supastarter + Dodo | 9 | Live mode tied to production build | supastarter docs |
Makerkit + Lemon Squeezy | 4 | One line item per plan; no mixing flat, metered and per-seat | Makerkit docs |
Makerkit + Paddle | Not documented on page | No metered subscriptions | Makerkit docs |
TurboStarter + Lemon Squeezy | 4 | Discounts duplicated in config | TurboStarter docs |
TurboStarter + Polar | 4 | A product per pricing option | TurboStarter docs |
TurboStarter + Dodo | 12 | Product model does not map to one product with several prices | TurboStarter docs |
OpenSaaS + Lemon Squeezy | 4 | Delete unused provider code yourself | OpenSaaS docs |
OpenSaaS + Polar | 2: order paid, subscription updated | Separate sandbox and production organisations | OpenSaaS docs |
The spread is wide. ShipFast's Lemon Squeezy sample handles two events, while TurboStarter's Dodo integration handles twelve, and supastarter asks you to select every Lemon Squeezy event when you register the webhook. A higher count means the kit has written more of the handling for you. It also means more provider-specific code inside your app, which matters if you later change provider.
Makerkit's Paddle page does not list the events it handles, so read the handler code before you rely on it. Some pairings also carry setup conditions: supastarter ties Dodo's live mode to the production build, and OpenSaaS needs separate sandbox and production organisations for Polar.
Work you still own after setup
The wider implementation work is covered in our guide to adding auth and billing to a SaaS.
Renewals, failed payments and refunds
ShipFast's sample handler covers order created and subscription cancelled. Its docs leave renewals, past due states, plan changes, refunds and expiry to you. With only the sample handler in place, nothing in your app reacts when a renewal payment fails or a customer is refunded. Each of those cases needs a handler that updates the user's access in your database, plus a test run against the provider's test mode.
Cancelled and revoked on Polar
supastarter's Polar integration handles subscription cancelled and subscription revoked as separate events. Your access logic has to decide what each one means for the user and when their access ends. Read Polar's own definitions of the two events before you write that logic, because the kit passes the decision to you.
Lemon Squeezy's currency and plan shape
supastarter's docs note one currency per Lemon Squeezy store. Makerkit's docs note one line item per plan, with no mixing of flat, metered and per-seat pricing inside a plan. If you want a base fee plus seats, design for that before you pick this pairing. TurboStarter's Lemon Squeezy integration also needs discounts set up twice, once with the provider and again in the kit's config.
Metered billing on Paddle
Makerkit's Paddle integration does not support metered subscriptions. If you charge by usage, that rules the pairing out on Makerkit.
A product per interval
supastarter with Polar needs a product for each plan and each billing interval, so a plan sold monthly and yearly becomes two products. TurboStarter with Polar needs a product for each pricing option. TurboStarter's Dodo docs note that Dodo's product model does not map to one product with several prices. Each extra product is one more ID in your environment variables and one more place for test and live settings to drift apart.
Test and live drift
Every pairing keeps separate test and live IDs, so every product exists twice and the live copy has to match the plan in your config. Before launch, check that each live ID resolves to the right product in live mode. OpenSaaS also asks you to delete the code for providers you do not use, which is worth doing early so dead handlers do not linger next to the live one.
Lemon Squeezy is moving to Stripe Managed Payments
Lemon Squeezy belongs to Stripe. Its own update says the goal is to give users an easy way to migrate to Stripe Managed Payments. The update states no deadline.
Stripe's docs set out what Stripe Managed Payments supports today.
Stripe Managed Payments | Per Stripe's docs |
|---|---|
Fee | Stripe's fees plus 3.5%, and 0.7% for Billing on subscriptions |
Not supported | Connect, Elements, and subscriptions created outside Checkout or Payment Links |
At checkout | Customers see Link as the merchant |
Who can sell | Sellers in the US, Canada, 30 European countries, Australia, Hong Kong, Japan and Singapore |
ShipFast's docs show Lemon Squeezy as the only merchant of record option. If you built on that pairing and later move to Stripe Managed Payments, your subscriptions need to run through Checkout or Payment Links, a custom form built on Elements will not carry over, and your customers will see Link named as the merchant. You will also be wiring a different provider's events, so the Lemon Squeezy handler does not move across as it is. If you sell from a country outside Stripe's list, Stripe Managed Payments is not open to you. The full cost picture is in what Stripe Managed Payments costs.
If you are starting a kit project today and want Lemon Squeezy, read its migration update first and decide whether you would rather wire Stripe Managed Payments, or another provider, from the start.
Check before you pick Paddle
Paddle reviews your domain before you can sell. Its restricted categories include content generation. If your app produces text, images or other generated output, read Paddle's list and get through the review before you build billing around it. On Makerkit, usage-priced apps also meet the lack of metered subscriptions on Paddle, so an AI product charging per generation has more than one reason to check this pairing early.
Fees by provider
Provider | Rate | Extras | Source |
|---|---|---|---|
Paddle | 5% + 50c | All-inclusive; FX margin up to 1.5% at payout | Paddle pricing |
Polar | Starter 5% + 50c; Pro $20 a month, 3.8% + 40c | +1.5% non-US cards | Polar pricing |
Lemon Squeezy | 5% + 50c | +0.5% subscriptions, +1.5% international, +1.5% PayPal | Lemon Squeezy fees |
Creem | 3.9% + 40c | No international card fee stated; tax in 50+ countries (Creem's claim) | Creem pricing |
Dodo Payments | 4% + 40c US | +0.5% subscriptions, +1.5% international | Dodo pricing |
Stripe Managed Payments | Stripe fees + 3.5% | +0.7% Billing for subscriptions | Stripe docs |
tiun | 2.9% + $0.30 | +0.5% subscriptions, 1.5% payout fee | tiun pricing |
Read the extras column against your own customers. Paddle's rate is all-inclusive, with an FX margin of up to 1.5% at payout. Lemon Squeezy and Dodo each add 0.5% on subscriptions and 1.5% on international payments, so an international subscription costs two percentage points above the headline rate, and Lemon Squeezy adds a further 1.5% for PayPal. Polar adds 1.5% for non-US cards. Its plans changed on 27 May 2026, so comparisons written before then may quote old rates.
Creem states no international card fee and says it handles tax in more than 50 countries. Both are Creem's own claims. Stripe Managed Payments sits on top of Stripe's standard fees rather than replacing them. tiun charges 2.9% + $0.30, adds 0.5% on subscriptions and takes 1.5% when it pays you out. For a ranking by fit rather than by price, see the best merchant of record for EU SaaS.
Or skip the wiring
Every pairing above leaves you two systems to keep in step: the kit's auth and database on one side, the provider's products and events on the other, joined by a webhook. tiun is a merchant of record that also handles sign-in and access, so there is no renewal webhook to write and no product IDs to sync with a separate auth system. When a payment renews or fails, access changes in the system that took the payment.
That is the case for tiun over buying a kit: you reach a paid product faster because the billing, entitlement, webhook and tax work a kit leaves you is already done. tiun is not a database. Keep Supabase, Firebase or whatever your app already uses for its data, and use tiun for the part between a visitor and a paying, signed-in customer. If you are still deciding whether a kit is worth buying at all, start with our starter kit vs backend comparison.
tiun has limits you should weigh before choosing it. Sign-in is by email and a one-time code, with no passwords, no social login and no SSO. New users also add a phone number, and the code arrives by SMS with email as the fallback. Some people will not want to give a phone number to try a product, and if your audience expects Google sign-in or SSO, tiun does not offer either. Users can be signed in during checkout, which removes a separate sign-up step. There are no organisations, so if you sell to teams who share one account, tiun does not fit yet. The 1.5% payout fee sits on top of the transaction fee, and it belongs in any cost comparison.
Price tiun against Polar and Paddle before you decide, using your own mix of subscriptions, countries and payout currency.
Frequently asked questions
Can I use Lemon Squeezy with ShipFast?
Yes. ShipFast's payments docs show Lemon Squeezy as its merchant of record option. The sample webhook handles order created and subscription cancelled, and leaves renewals, past due states, plan changes, refunds and expiry to you. Lemon Squeezy is moving its users to Stripe Managed Payments, so read its update before you start.
Which SaaS boilerplates support Polar?
Of the kits we checked, supastarter, TurboStarter and OpenSaaS document Polar. supastarter handles five Polar events and needs a product per plan and per interval. TurboStarter handles four and needs a product per pricing option. OpenSaaS handles two and needs separate sandbox and production organisations. ShipFast's docs show only Lemon Squeezy.
What happens to Lemon Squeezy users now that Stripe owns it?
Lemon Squeezy says its goal is to give users an easy way to migrate to Stripe Managed Payments, and it states no deadline. Stripe Managed Payments adds 3.5% to Stripe's fees, does not support Connect or Elements or subscriptions created outside Checkout or Payment Links, and shows customers Link as the merchant.
Do I still need webhooks with a merchant of record?
With every kit pairing in our check, yes. The merchant of record handles tax, but your app learns about payments, renewals and cancellations through a webhook you register and handle. Polar and Paddle both work this way. tiun is the exception, because sign-in, billing and access sit in one system, so there is no renewal webhook to write.
Which merchant of record is cheapest for a SaaS?
It depends on where your customers are and whether you sell subscriptions. On headline rates, Polar Pro is 3.8% + 40c plus $20 a month, Creem 3.9% + 40c, Dodo 4% + 40c in the US, and Paddle, Polar Starter and Lemon Squeezy 5% + 50c. Lemon Squeezy and Dodo add 0.5% for subscriptions and 1.5% for international payments, while Paddle is all-inclusive. tiun is 2.9% + $0.30, plus 0.5% on subscriptions and a 1.5% payout fee.