Skip to main content
Migrate Already selling? Move your customers to Keylight without re-issuing a single key.
Keylight

Migration · Lemon Squeezy

Migrating from Lemon Squeezy to Keylight

Move off Lemon Squeezy's merchant-of-record model to Stripe plus Keylight — lower fees and customer ownership, with tax handling becoming yours.

Start Free

Updated April 2026

This page is for developers currently selling through Lemon Squeezy who are considering a move to Stripe plus Keylight. The typical reason is a combination of lower processing fees and wanting to own the customer relationship directly. This guide walks through what the migration involves, what genuinely gets better, and where it adds responsibility — specifically around tax handling, which is a real tradeoff and not a detail to skip over.

Why developers move off Lemon Squeezy

Lemon Squeezy is a merchant of record. In exchange for handling VAT and sales tax remittance on your behalf, it charges a margin on top of underlying Stripe processing fees. For low-volume apps that benefit from not thinking about tax, that trade is reasonable. For apps generating consistent revenue, the gap between a merchant-of-record fee and raw Stripe fees becomes significant — and it compounds with every sale.

Beyond fees, the customer relationship sits with the platform. Customer payment data, purchase history, and email addresses live in Lemon Squeezy’s systems. If you want to migrate, remarket, or switch platforms later, you work with what the platform lets you export. See the Lemon Squeezy alternative page for a fuller breakdown of the model differences.

The common push factors are: fees that feel disproportionate to the service, wanting direct access to customer data, and not wanting a third party able to change terms or pricing on infrastructure your revenue depends on.

What changes when you switch

The upside is real: lower fees, direct access to customer data in Stripe, and no platform intermediary with leverage over your business. But the move is not free, and the most significant cost is tax handling.

Lemon Squeezy remits VAT and sales tax for you as a merchant of record. That is what the fee buys. When you switch to your own Stripe account, that responsibility transfers to you. You will need to understand where you have tax nexus, register in the relevant jurisdictions, and either configure Stripe Tax to collect and calculate correctly or work with an accountant to handle remittance.

This is a real operational responsibility, not a footnote. For developers in the EU selling to EU customers, VAT registration and remittance rules are non-trivial. Stripe Tax reduces the calculation burden significantly, but you still own the compliance. If your current Lemon Squeezy arrangement mainly appealed because you did not want to think about tax, factor this into your decision.

The other changes are straightforwardly positive: you set your own checkout, you own the customer email and payment data, and no platform can modify your pricing model or terms.

Migrating your customers and licenses

Lemon Squeezy allows you to export your customer and order data. That export is your starting point. Each customer who purchased your app needs a Keylight license key — a cryptographically signed key that your app can verify offline, tied to the same activation limit they originally purchased.

The migration flow for existing customers is one upload: export the list, then use Licenses → Import in Keylight. Include each customer’s existing key to preserve it — they keep the key they have — or leave it blank and Keylight generates one. Every imported license is tagged Migrated. Only customers whose key was generated need an email; no one is asked to repurchase. See the full migration guide.

New purchases after you switch go through Stripe checkout and Keylight automatically — a payment mints a signed key and delivers it to the customer without manual steps. Existing customers are a one-time import. Once they have activated with their new key, the migration is complete from their perspective.

The migration process, step by step

  1. Connect your Stripe account to Keylight via Stripe integration. This is the foundational step — Keylight uses your account to receive payments and trigger key issuance.
  2. Recreate your products and prices in Stripe. Mirror the tiers you sold on Lemon Squeezy: personal license, team license, any variants. Set the activation limits in Keylight to match what customers originally purchased.
  3. Import existing customers into Keylight using the customer export from Lemon Squeezy. Map each order to the appropriate license tier.
  4. Import your existing customers from Licenses → Import — include each customer’s current key to preserve it, or leave it blank to generate one. Customers who kept their key need no email.
  5. Switch your checkout and download links to point at your new Stripe-powered checkout. Update your website, app store page if relevant, and any purchase confirmation flows.
  6. Keep Lemon Squeezy live briefly for in-flight orders and refund requests while you complete the transition, then close it once the queue is clear.

The steps are sequential — Stripe must be connected before you can issue keys or take new payments. The customer import can run in parallel with recreating products.

Doing it with Keylight

Keylight connects to your own Stripe account and listens for successful payments. When a payment completes, Keylight mints a signed key automatically and delivers it to the customer — there is nothing to trigger manually. For existing customers imported during migration, you issue keys through the Keylight dashboard and send them in bulk.

On the app side, the Swift SDK activates a customer-entered key with a single call:

import KeylightSDK

// Activate a customer-entered key on this device
await licensing.activate(key: enteredKey)

switch licensing.state {
case .licensed:
    enablePaidFeatures()
case .invalid:
    // activationError carries the reason — e.g. activation limit reached
    showActivationError(licensing.activationError)
default:
    break
}

After activation, the SDK returns a signed lease the app verifies locally on every subsequent launch — no server call needed for day-to-day validation. If a customer hits their activation limit, the server rejects the request and the SDK surfaces the reason through activationError, so the app can prompt them to deactivate an old device or upgrade.

Pricing starts at $19/month with a free tier that lets you test the complete flow — key issuance, activation, and offline verification — before going live.

Frequently asked

Can I migrate from Lemon Squeezy to Keylight?+

Yes. You connect your own Stripe account, recreate your products as Stripe prices, and let Keylight issue signed license keys on payment. Existing customers come over in one import — the keys you already issued are preserved, and Keylight only generates a key for customers whose original you don't have.

What happens to tax handling when I leave Lemon Squeezy?+

Lemon Squeezy is a merchant of record, so it remits VAT and sales tax for you. Keylight is not — it uses your own Stripe account, so tax registration and remittance become your responsibility, typically via Stripe Tax or an accountant.

Do my existing customers need new license keys?+

Usually not. Keylight's bulk import preserves the keys you already issued — import the customer list from Licenses → Import and their existing keys keep working. Keylight only generates a fresh key for customers whose original you no longer have. Imported licenses are tagged Migrated.

Start licensing your app today

Drop in the Swift SDK, point it at your dashboard, and sell paid apps in under a minute. Free forever tier included.

Start Free