Migration workflow
The Stripe-to-Stripe subscription handoff, gate by gate, from source account review to verified source cancellation.
SubPorter runs the handoff as three steps. Each step bundles the mechanical work into one action, and every money-moving gate inside it waits behind a check that has to pass first, so you can see exactly what will happen before it touches a customer's card.
Step 1 — Plan
Connect the source account read-only. You paste a restricted key that can only read. SubPorter then scans in one pass:
- Source inventory. Every active subscription, plus the products, prices, and billing meters each one depends on. Nothing in the source account changes.
- Migration plan. Each subscription is classified before any scheduling begins. Clean candidates go to auto-migrate; renewal-timing risk, missing payment details, duplicate customer emails, unusual tax or discount setup, existing schedules, and unsupported shapes are held for review.
- Catalog dry run. The exact products and prices SubPorter would recreate in the destination, previewed without writing.
Decide the flagged rows. Every flagged subscription gets an explicit decision from the source owner — include it in this migration, or keep it outside the packet. The customer copy list is generated from these decisions, so nothing moves that a person didn't approve. One flag worth calling out: if two or more customer records share one email address and each has active subscriptions, SubPorter flags all of them, because that is the one shape an email-based mapping cannot resolve on its own — and migrating both risks billing the same person twice.
Everything in this step is free. The plan is the product you evaluate before paying.
Step 2 — Copy
Unlock live writes. The one-time fee is charged here, after you have seen exactly what will move and decided every flagged row.
Connect the destination account. The destination owner pastes a restricted write key. SubPorter immediately recreates the catalog — products, prices, billing meters — while you work through the customer copy.
Copy customers with Stripe. Customer records and saved cards move through Stripe's own Customer Data Copy, never through SubPorter. SubPorter generates the partial-copy CSV from your decided list and walks both owners through Stripe's Dashboard flow: the sender uploads the CSV and addresses the copy to the destination account, the recipient authorizes it, and Stripe runs the copy (most finish within hours; Stripe quotes up to 72 for large books).
Verify the copy. One action confirms the result: every copied customer is found in the destination, mapped source-to-destination with recorded evidence, default payment methods are repaired where the copy dropped them, and destination tax behavior is previewed. Any missing, ambiguous, or duplicate mapping blocks the next step until it is fixed and re-verified.
Step 3 — Migrate
Add the cancellation key. Cutover uses a separate, narrow source key that can only write subscriptions. Until this moment, SubPorter's source access has been read-only — and this key is checked against the same source account before it is accepted.
Create and verify schedules. Destination subscription schedules are created in safe chunks, each anchored to the subscription's existing renewal date. The source keeps billing through this phase, so a destination problem never leaves a customer unbilled. Then every schedule is retrieved and checked against the plan — customer, start date, items, quantities, collection method, tax, status. Any mismatch blocks cutover.
Retire the source. Only after verification passes, and only after an explicit acknowledgement, does SubPorter set the migrated source subscriptions to cancel at period end. Current service periods stay intact. This is the only write SubPorter ever makes to the source account.
Final packet. The run ends with a packet for founders, buyers, finance, and operators: what moved, what was reviewed and kept outside, what was verified, and which source subscriptions were set to cancel and when — so the handoff does not depend on memory or chat history.