In brief
- WooCommerce Subscriptions never holds card numbers; the saved payment method is a token at the payment gateway, and WooCommerce stores only the reference to it.4
- Shopify can attach an existing saved payment method to a Shopify customer from four processors: Stripe (credit cards only), Braintree (credit cards and Apple Pay only), Authorize.net (customer profiles) and PayPal Express (billing agreements).1
- For Stripe the identifier is the Stripe customer ID (cus_…), which the WooCommerce Stripe gateway stores as _stripe_customer_id; for PayPal it is a billing agreement ID, and the merchant must be approved for PayPal reference transactions.15
- Shopify's own Subscriptions app is free, imports existing contracts from a CSV, and requires Shopify Payments, PayPal Express, Authorize.net, Adyen or, for select merchants, Stripe. It does not work with bundles or draft orders.23
- Done correctly, subscribers keep their price, schedule and next billing date, and are not asked to enter a card again.
How a WooCommerce subscription is actually stored
A WooCommerce subscription looks like one record in the admin, but it is split across two systems. WooCommerce holds the contract: the products, the price, the billing period and interval, the next payment date and the customer's addresses. The payment gateway holds the saved payment method. WooCommerce's documentation describes automatic renewals as charges the gateway processes against stored payment information, and lists more than 40 gateway extensions that support it.4
That split is the whole migration problem. A product export, a customer export and an order export together still do not contain anything that can charge a card. What can charge a card is the pair of identifiers that points at the gateway's vault, and those have to be re-attached to the matching customer on Shopify.
What transfers, by gateway
Shopify documents four processors whose saved payment methods can be attached to a Shopify customer through the Admin API.1
| Gateway on WooCommerce | What Shopify accepts | Identifier needed | Conditions |
|---|---|---|---|
| Stripe | Credit cards | Stripe customer ID (cus_…), optionally a payment method ID | Customised charge flows are not supported. If Shopify Payments is the primary gateway, Stripe is connected as a secondary, legacy gateway.1 |
| Braintree | Credit cards and Apple Pay | Braintree customer ID and payment method token | PayPal, Google Pay and other methods held in Braintree are not supported.1 |
| Authorize.net | Customer profiles | Customer profile ID and customer payment profile ID | Authorize.net stays connected on Shopify.1 |
| PayPal | Billing agreements | Billing agreement ID (starts with B-) | The merchant must be approved by PayPal for reference transactions.1 |
| Any other gateway | Not documented | None | Customers add a payment method again on Shopify. |
Every migrated customer record must include an email address, first name and last name.1 The mutations are customerPaymentMethodRemoteCreate for Stripe, Braintree and Authorize.net, and customerPaymentMethodPaypalBillingAgreementCreate for PayPal.
Stay on the same gateway account
A Stripe customer ID only means something inside the Stripe account that created it. Connect that same Stripe, Braintree or Authorize.net account to Shopify. If you also want to change processor, do it as a separate project after the migration, through the processors' own vault-transfer process.
Where the identifiers live in WooCommerce
The official WooCommerce Subscriptions importer and exporter documents exactly which meta fields make a subscription billable, which is also the list of fields you need to take with you.5
| Gateway | Meta key on the subscription | Example value |
|---|---|---|
| Stripe | _stripe_customer_id | cus_… |
| Stripe, specific card | _stripe_source_id | card_…, src_… or pm_… |
| PayPal reference transactions | _paypal_subscription_id | Billing agreement ID |
The exporter in the same tool writes subscriptions to a CSV, can filter by status, payment method and customer, and can include the payment tokens.5 For other gateways, the key names come from that gateway's extension; export one subscription first and inspect its meta before planning the rest.
The contract data to carry over
The WooCommerce Subscriptions REST API exposes every subscription at /wp-json/wc/v3/subscriptions.6 These are the fields that define what the customer agreed to:
| WooCommerce field | What it becomes on Shopify |
|---|---|
status | Contract status: active, paused or cancelled. Migrate active and on-hold; leave cancelled and expired as history. |
billing_period, billing_interval | Billing and delivery frequency, for example every 1 month. |
next_payment_date_gmt | Next billing date. This is the field that must be exact. |
line_items, total | Contract lines, mapped to Shopify variant IDs, at the price the subscriber pays today. |
shipping_lines, shipping | Delivery method, delivery price and address. |
coupon_lines | Recurring discounts, rebuilt as a contract discount or folded into the line price. |
customer_id, billing | The Shopify customer, matched by email. |
payment_method, meta_data | Which gateway, and the identifiers from the table above. |
Grandfathered prices
Long-running subscribers often pay an old price. Migrate the price on the contract, not the product's current price, or the first Shopify renewal silently raises what loyal customers pay.
Choosing the Shopify side
Shopify has no subscription feature in the core admin; subscriptions are run by an app on top of Shopify's subscription contracts and checkout. Shopify's own Subscriptions app is free3 and covers the common cases: weekly, monthly or yearly auto-billing, subscribe-and-save discounts, customer self-service to skip, pause or cancel, and CSV import and export of contracts.23
Its documented requirements and limits decide whether it fits:2
- Gateway: Shopify Payments, PayPal Express, Authorize.net, Adyen or Stripe, with Stripe limited to select merchants.
- Not compatible with bundles, so a WooCommerce subscription box built with a bundle plugin needs a different model or a different app.
- No draft orders, and the order edits API does not support subscriptions.
- Gift cards apply to the first payment only.
- Theme: an Online Store 2.0 theme with sections and blocks.
Stores with build-a-box products, prepaid plans, complex dunning rules or a large subscriber base usually choose a dedicated subscription app instead. The payment method migration described above works the same way in either case, because it happens at the Shopify customer level, not inside the app.
A cutover plan that avoids double charges
- Export and classify. Count subscriptions by status and by gateway. The gateway split tells you how many subscribers transfer silently and how many will need to add a payment method.
- Import customers and products first. Contracts reference Shopify customer and variant IDs, so they come last. Shopify's own migration order is products, then customers, then orders.7
- Attach payment methods. Connect the same gateway account to Shopify and create the remote payment methods. Verify a sample in the Shopify admin: each customer should show a saved payment method.
- Import contracts with their real next billing date.
- Pick a quiet window. Choose a cutover moment with the fewest renewals due, and migrate subscriptions due in the next 48 hours last or by hand.
- Stop WooCommerce from billing. Put WooCommerce subscriptions on hold or switch them to manual renewal at the same moment Shopify contracts go live. Two systems holding the same token will both charge it.
- Tell subscribers what changes. The charge descriptor, the account page and the emails change. One short email before the first Shopify renewal prevents chargebacks from people who do not recognise it.
- Watch the first renewal cycle. Compare successful renewals against WooCommerce's previous cycle and follow up on failures within the first days.
What does not transfer
- Payment methods at unsupported gateways. Anything outside the four documented processors means the customer adds a card again.1
- PayPal without reference transactions. Shopify needs a billing agreement and PayPal's approval for reference transactions; subscriptions billed by PayPal's own recurring profiles do not qualify.1
- Wallets inside Braintree. PayPal and Google Pay methods stored in Braintree are excluded.1
- Renewal order history as subscription history. Past renewals migrate as ordinary orders; the new contract starts its own billing history.
- Plugin-specific behaviour such as synchronised renewal dates, sign-up fees and proration rules. Each needs a decision, not a field mapping.
Subscriptions are handled inside our migration, not left for afterwards.
- Subscribers counted by gateway before you commit
- Saved payment methods attached, no card re-entry where the gateway allows it
- Next billing dates and grandfathered prices preserved
- WooCommerce billing stopped at the same moment
- First renewal cycle monitored
- Preview before you pay
Frequently asked questions
Will my subscribers have to enter their card again after moving to Shopify?
Not if they pay through Stripe, Braintree, Authorize.net or a PayPal billing agreement. Shopify can attach those existing saved payment methods to the migrated customer. Subscribers on other gateways need to add a payment method again.
Can Stripe subscriptions be migrated from WooCommerce to Shopify?
Yes, for credit cards. Shopify needs the Stripe customer ID, which the WooCommerce Stripe gateway stores in the _stripe_customer_id meta field, and the same Stripe account connected to the Shopify store. Customised charge flows are not supported.
Is there a free subscription app on Shopify?
Yes. Shopify's own Subscriptions app is free, supports weekly, monthly and yearly billing with discounts, and can import existing subscription contracts from a CSV file. It is not compatible with bundles or draft orders.
How do I avoid charging subscribers twice during the migration?
Put the WooCommerce subscriptions on hold, or switch them to manual renewal, at the same moment the Shopify contracts go live, and schedule the cutover for a window with few renewals due. Both systems hold a reference to the same saved payment method, so whichever is active will charge it.
Do subscribers keep their old price?
They do if the contract is migrated with the price the subscriber pays today rather than the product's current price. This has to be done deliberately, because a contract built from the product catalog picks up the current price.
Can PayPal subscriptions move to Shopify?
Only PayPal billing agreements, and only when the merchant is approved by PayPal for reference transactions. Subscriptions that PayPal bills through its own recurring profiles cannot be attached to a Shopify customer.
Sources
- Shopify. Migrate customer information, developer documentation: supported processors, identifiers, mutations and limitations.
- Shopify. Shopify Subscriptions app: eligibility and considerations, Shopify Help Center.
- Shopify. Shopify Subscriptions, Shopify App Store listing: price and features.
- WooCommerce. Subscription payment methods and gateways.
- WooCommerce. WooCommerce Subscriptions Importer and Exporter: payment method meta fields and CSV columns.
- WooCommerce. Subscriptions REST API reference.
- Shopify. Migrating to Shopify: considerations: import order for products, customers and orders.
Mufatech Studio migrates stores to Shopify. Figures are quoted from the linked documentation as of September 2026 and can change; check the source before acting on a limit or a price.