Knowledge
Stripe Billing Migration Toolkit: Moving Between Accounts
How Stripe’s Billing migration toolkit moves subscriptions to another Stripe account: the CSV, the 24-hour hold, and the steps it leaves you to do.
· Simon Liang
The Stripe Billing migration toolkit is a Dashboard tool that creates subscriptions in Stripe Billing from a CSV file, including from another Stripe account. It is free. It moves subscriptions. It does not move the catalog or retire the old subscriptions.
This guide covers the Stripe-to-Stripe case: what the toolkit does, the steps it leaves to you, and where a mistake costs the most. If you are moving from a third-party billing system, Stripe's toolkit documentation covers that path. If the Stripe account stays with the same legal entity and you only need to change the owner, transferring account ownership is simpler.
What the toolkit does
Open the Stripe Dashboard, go to Subscriptions, then Migrations. Download the CSV template, fill in one row per subscription, and upload it. The file can be up to 120 MB. Stripe validates the format, which can take a few hours for large files. You review the result, then start the migration.
The toolkit creates one subscription schedule per row. Each schedule stays in a scheduled state for 24 hours before going live. In a sandbox, the wait is 1 hour. The start_date in your CSV must be at least 24 hours in the future.
You can cancel a migration in the toolkit for 10 hours after you schedule it. After that, the cancel option is disabled. You would need the API or have to cancel each subscription one by one. You cannot update scheduled subscriptions using the toolkit. Customers cannot cancel scheduled subscriptions from the customer portal; they can only cancel live ones.
For large migrations, divide the subscriptions into batches and start with a small batch. You can also run a test migration in a sandbox first.
A Stripe-to-Stripe move, step by step with the toolkit
The steps to migrate subscriptions from one Stripe account to another are the same as migrating from a third-party system. But a Stripe-to-Stripe move has extra preparation before the CSV.
1. Copy customers and payment methods
Use Stripe's Customer Data Copy to move customers and saved payment methods to the destination account. Customer IDs stay the same after the copy. Payment method IDs change. The copy does not move products, prices, billing meters, subscriptions, or subscription schedules.
If you are migrating from Stripe to Stripe, you can skip the payments import that third-party moves require.
2. Recreate the catalog
Every product and price must exist in the destination account before you upload the CSV. The toolkit requires the destination account's IDs. You must input price IDs, coupon IDs, and tax rate IDs from the destination account, not the source account. The toolkit returns an error if you use source account IDs.
3. Map the CSV columns
Export the subscriptions from the source account and map each column to the toolkit's template:
start_date: the source subscription's Current Period End. This is when the destination subscription goes live.price: the matching price ID in the destination account.billing_cycle_anchor: carry over from the source subscription.proration_behavior: set to match your intent.metadata.old_Stripe_sub_id: the source subscription ID, so you can trace the move later.
4. Check default payment methods
By default, Stripe blocks any charge_automatically subscription in the CSV where the customer has no default payment method. If you override this, the subscriptions import, but their invoices fail to collect at billing time. Verify every copied customer's default payment method before you upload.
5. Upload, review, and wait
Upload the CSV. Review the validation results. Start the migration. Each schedule sits in a scheduled state for 24 hours before it goes live. Track the progress in the Dashboard under Subscriptions, then Migrations.
6. Cancel the old subscriptions
The toolkit does not cancel the source subscriptions for you. After the new subscriptions go live, cancel the old subscriptions before they charge so you do not double-bill. If a subscription's billing date is close to the migration, schedule the new subscription to start after the last charge from the old one.
For the full order of steps with Stripe field names and verification checks, read the runbook to migrate Stripe subscriptions to another account.
Where toolkit migrations go wrong
Each failure below traces to a documented Stripe constraint.
Double charge. The old subscription is not cancelled before it charges, and both accounts bill the same customer for the same period. This is the most common problem when the cancel step is done by hand. See how to prevent double billing during a Stripe account transfer.
Renewal before the schedule goes live. A source subscription renews before the 24-hour scheduled window ends. The customer pays in the old account, and pays again when the new schedule starts.
Missing default payment method. The customer copy dropped the invoice default. The destination subscription's first invoice fails to collect.
Coupon lost. The toolkit supports only one coupon per subscription. And if a schedule has a billing cycle anchor in the future with proration_behavior set to none, updating it unsets the coupon.
Multiple phases not supported. The toolkit does not support adding multiple phases to a subscription in the CSV.
Cancel window missed. The 10-hour window to cancel a migration in the toolkit closes before someone notices a wrong price or a mapping error.
What the toolkit leaves to you
The toolkit creates the destination schedules. Everything around them is yours:
- Recreate the catalog with matching products, prices, and billing meters
- Map source IDs to destination IDs in the CSV
- Decide the edge cases: subscriptions renewing soon, coupons, trials, past due, existing schedules, manual tax rates, invoice-billed subscriptions
- Verify each schedule after it is created
- Cancel the old subscriptions at the right moment
- Keep records of what moved
Your application, database, webhooks, and API keys stay your job no matter which path you choose.
When to use the toolkit on its own, and when to use SubPorter
The toolkit on its own fits an engineer with Stripe Billing experience and the time to build and verify the CSV. It is free, and it gives full control over every row.
SubPorter runs the same Stripe-to-Stripe move as a migration project. It recreates the catalog, verifies the copied customers and their default payment methods, starts each schedule at the subscription's current period end, holds subscriptions renewing within 48 hours, and unlocks the cancel step only after every schedule is verified. It produces migration records: the customer map, the schedule map, and a CSV for Stripe's Billing migration toolkit.
SubPorter uses three restricted keys: a read-only key on the source, a write key on the destination, and a narrow cancellation key that can only set subscriptions to cancel at period end. The source account stays read-only until the destination is verified.
$99 for up to 100 subscriptions, $199 above 100. One-time, not based on MRR. For all the alternatives, see the comparison of migration options.
Scan your source account for free
Creating the project, the scan, the plan, and the decisions are free. Start a migration project and see what needs to move, or check the pricing.
Frequently Asked Questions
Is the Stripe Billing migration toolkit free?
- Yes. Stripe does not charge for the toolkit or for Customer Data Copy. Your cost is the engineering time to recreate the catalog, map the CSV columns, verify the schedules, and cancel the source subscriptions at the right moment.
Can the toolkit move subscriptions between two Stripe accounts?
- Yes. The steps are the same as importing from a third-party system. Copy the customers with Stripe’s Customer Data Copy first, recreate the products and prices in the destination account, then upload a CSV with the destination account’s IDs.
Does the toolkit copy products and prices?
- No. The toolkit creates subscriptions from a CSV. Every product, price, coupon, and tax rate must already exist in the destination account, and the CSV must use the destination account’s IDs. Source account IDs cause an error.
How long until migrated subscriptions go live, and can I undo it?
- Each subscription schedule stays in a scheduled state for 24 hours before going live. You can cancel a migration in the toolkit for 10 hours after scheduling. After 10 hours, the cancel option is disabled.
Does the toolkit cancel the old subscriptions?
- No. After the new subscriptions go live, you must cancel the old subscriptions before they charge. If you do not, both accounts bill the customer for the same period.