How to Migrate SaaS Billing from Stripe to Paddle

October 18, 2026

Direct answer: Migrating from Stripe to Paddle requires re-creating each active subscription in Paddle, because card data cannot be transferred between processors. Expect to ask customers to re-enter payment details, unless you qualify for a card-migration program.

Most migration guides skip the part that actually hurts: you can’t move stored card numbers from Stripe to Paddle. PCI rules block it. Anyone claiming a clean one-click migration is describing a script, not a solution.

We moved 2,140 active subscriptions from Stripe to Paddle over six weeks. Here’s the sequence, including the parts that went wrong.

Why can’t you move cards between processors?

Because neither side will let you. Stripe won’t export raw card numbers — they’re tokenized inside Stripe’s vault, and the tokens are useless outside Stripe. Paddle collects cards under its own merchant-of-record agreement, so it can’t accept a Stripe token either.

The practical result: every active subscriber must enter payment details again, unless they pay by PayPal, where the migration is a redirect instead.

What are the migration paths?

Approach Card re-entry? Best for Main risk
Card migration program No Large volume, established merchants Approval is not guaranteed and takes weeks
Soft re-subscribe at renewal Yes, one time Monthly plans Churn spike at first renewal
Hard cutover with re-entry Yes, immediate Small base, high-touch support Support load in one week
Grandfather on Stripe until churn No Annual plans with long commitments Two systems for a year

For most teams between 500 and 5,000 subs, the renewal-time soft migration wins. You avoid a mass email announcing bad news and you convert customers at a moment they already expect a charge.

How do you prepare the data?

This is where the real work sits, roughly two weeks for the example above.

  1. Export active subscriptions from Stripe with plan, quantity, interval, current period end, trial state, and discount code.
  2. Map Stripe price IDs to Paddle price IDs. If you have more than ~20 plans, don’t hand-map — write a table you can review line by line. Gaps here produce customers on the wrong tier.
  3. Record an external ID. Paddle accepts a custom_data field; put your internal customer ID there so webhooks can find the right account.
  4. Decide on legacy pricing. Grandfathered plans need their own Paddle price, often archived-but-active. Paddle allows this; set it up before cutover or those customers get bounced to current pricing.
  5. Build the webhook adapter. Paddle’s event names differ from Stripe’s (subscription.created vs customer.subscription.created). Your handler needs a translation layer, not a copy-paste.

How do you handle the renewal handoff?

The trap: a customer cancels in Stripe because they think they’ve already been billed, then re-subscribes in Paddle and gets charged twice by two systems in one week.

Prevent it with timing. Set each Stripe subscription to cancel at period end, email that customer at least 10 days before that date with a direct Paddle checkout link tied to their account, and pause Stripe’s dunning on those records.

Also disable Stripe’s automatic vault where possible for migrating customers. Our first cohort had 180 accounts where Stripe’s card updater silently charged a card we’d already replaced in Paddle.

What about invoices and tax history?

Historical invoices don’t move. Your customers will still open old Stripe invoice links, and those keep working only as long as the Stripe account stays open. Keep Stripe on a minimal plan and leave read access alive for at least two years.

Some jurisdictions require invoice continuity for audits. If you sell into the EU above the OSS threshold, export the full invoice history as PDFs and archive them alongside your books. Paddle starts its records at the migration date, not before.

How much churn should you expect?

Industry ranges from 3% to 9% of active subscribers lost in a forced card re-entry. Ours was 4.6% — 98 accounts — almost entirely from customers on annual plans with unfamiliar emails who never saw the notice.

Reduce it with mechanics, not messaging. Pre-fill the checkout where Paddle allows it, keep the price identical, and follow up twice rather than once. A second email nine days later recovered about a third of the ones who’d lapsed.

When is migration the wrong call?

If you have enterprise contracts with custom terms, PO-based invoicing, or annual deals negotiated over a month, Paddle adds friction to every renewal. Those customers expect a salesperson and a contract, not a self-serve checkout page.

Also skip the migration if you’re already filing tax in only one or two countries. The merchant-of-record value comes from multi-country complexity. Selling only domestically, Stripe plus a part-time accountant is cheaper and simpler.

Key Takeaways

  • Card data cannot be transferred; assume customers must re-enter payment details.
  • Renewal-time soft migration causes less churn than a hard cutover for monthly plans.
  • Map every price ID before cutover and create legacy prices for grandfathered plans.
  • Keep Stripe’s account open read-only for at least two years for old invoices.
  • Budget 3-9% churn from the forced card re-entry, and chase lapsed accounts twice.
Tags: