payments · tutorial · webhooks

Next.js LemonSqueezy: Delete VAT Homework in 1 Switch

Merchant-of-record billing without the tax paperwork: LemonSqueezy behind the same provider interface, one env switch. Setup inside.

A worker on his knees picking lemons in an orchard in the San Fernando Valley, around 1900
A worker on his knees picking lemons in an orchard in the San Fernando Valley, around 1900 · Photo: Widney, public domain, via Wikimedia Commons

Your first global sale comes with homework

A customer in Berlin buys your $199 lifetime deal.

Congratulations.

You now owe German VAT homework.

Registration.

Collection.

Remittance.

Records.

Then France. Then a US state with opinions about digital goods.

Stripe processes the card beautifully and leaves the tax entirely to you. For US-only sellers, that is fine. For everyone selling worldwide from day one, the first global month becomes a compliance project wearing a revenue costume.

A merchant of record is the other answer. LemonSqueezy sells on your behalf, handles VAT and GST worldwide, and pays you out.

You trade a fee margin for weekends back.

Direct processor or merchant of record

Concern Stripe, direct LemonSqueezy, MoR
Card processing Excellent, global Excellent, global
VAT, GST, sales tax You register, file and remit Them, handled everywhere
Payout shape Rolling, about two days Check the current schedule
Fee level A lower percentage Higher, the tax service is inside
Webhook control The full event firehose Curated order events
Lock-in Your tax setup everywhere Switchable through one interface

Three details decide it for indies.

Tax registration has no minimum. One €199 sale to the EU can trigger obligations no solo founder has time to learn. A merchant of record turns unknown unknowns into a line on the fee.

Payout timing matters at small scale. Rolling payouts fund ads and servers weekly. Slower merchant-of-record payouts need a cash buffer. Price the float honestly before you switch.

Webhooks are simpler, not weaker. Order created. Refunded. Subscription updated. Fewer event types cover the indie surface fully, and less firehose means less code.

Neither rail is "better". Stripe wins on control and payout speed. LemonSqueezy wins on freedom from tax offices.

What to do

Flip one setting. Add the provider's keys.

Set LemonSqueezy as the active provider. Add your store details and webhook signing secret to your production settings.

The switch is deployment config, not a code change. Staging can run one provider and production another. Nothing in the app has to know.

Verify every webhook. Record every order once.

Each incoming event is checked against its signature before anything is written. An unsigned or tampered request is rejected, and nothing is saved.

Each order is stored under a reference that includes the provider's name, so a Stripe event and a LemonSqueezy event never collide. The price comes from your own product row, never from what a request claims.

The same event arriving twice records one order.

Grant access through the same paid-access check.

A successful LemonSqueezy order and a Stripe payment grant access through the same switch on the user. Removing access works the same way.

Access logic never branches on the provider.

The rail-switch drill

Check Action Pass looks like
Signature enforced Send an unsigned test request Rejected, nothing written
Order once Replay the same event twice One order recorded
Switch works Change the setting on staging Checkout and webhook both work
Payout reconciles Compare payouts to orders monthly Totals match to the cent

Rehearse the switch on staging before tax season forces it. Ten minutes that de-risks the quarter where global sales outrun your tolerance for paperwork.

The other column

Higher fees and slower payouts fund the tax service. At small revenue that difference is real money, and slower cash flow takes a buffer.

The kit does not reconcile payouts for you, so the monthly comparison is a manual habit.

Know this first

LemonSqueezy costs more than Stripe and pays out on its own schedule. It does not remove income tax or bookkeeping.

BoringPush runs one provider at a time.

Why BoringPush is the way to do this

VAT, off your plate.

LemonSqueezy is a merchant of record. BoringPush wires it behind the same interface as Stripe. One setting switches it on.

Every event is verified. Every order records once.

FAQ

Is LemonSqueezy enough for EU VAT?

That is the merchant-of-record promise: LemonSqueezy is the seller, so VAT collection and remittance sit with them. Verify the current terms for your product type, because digital-goods rules shift. You still handle income tax on your payouts.

A merchant of record removes the VAT registration spiral. It does not remove accountants.

How do subscription upgrades and prorations work?

Proration is calculated on LemonSqueezy's side. Test the upgrade, downgrade and cancel paths on staging in test mode before you offer them, because billing state machines deserve rehearsals, not hopes.

Can I run Stripe and LemonSqueezy at the same time?

One provider is active at a time, selected by a setting. Running two in parallel for different products or regions is possible with extra work on your side, and BoringPush does not route between them for you.

What happens to webhooks during a switch?

Keep both providers' signing secrets configured through the transition week so late events from the old provider still verify. Switches are additive until proven, and destructive never.

Do I still need the drill if I start here?

Yes, adapted. Signature rejection, replay protection and amount-from-the-product-row threaten every provider identically. Run the checklist for each one you operate.

When is Dodo the better merchant of record?

For founders selling mostly one-time lifetime deals with global and India coverage. LemonSqueezy is mature on subscriptions, while Dodo leans toward one-time global checkout. Same interface and same access check, so pick by catalog shape and switch by quarter.

Keep reading

+ all the boring stuff (analytics, auth, SQLite ↔ Supabase, full marketplace, webhooks)

The Agent-First Shipping Kit

Command from your phone.

Built so autonomous AI agents build what you want without breaking what's already paying you.

$199

Get BoringPush

One-time payment · Lifetime updates · Unlimited projects.

Keep reading