Uncheck

Guides

Switching subscription apps on Shopify with active subscribers

Published

This page is for a store that already has subscribers and is about to move them to another subscription app, or to Shopify Subscriptions.

It covers what a subscription contract holds, what to have in hand before the current app is uninstalled, where the saved payment method lives, what to ask the app you are moving to, and in which order to proceed. The facts on this page come from Shopify's documentation, listed at the end.

What a subscription contract holds

Shopify's documentation describes a subscription contract as "the agreement between a customer and a merchant over a specific term for recurring purchases".

The contract is created when a customer buys a product attached to a plan with recurring policies (Shopify names that plan a selling plan) and, once created, is handed to your subscription app through a webhook.

At each renewal, the app asks Shopify to charge the customer (Shopify calls that request a billing attempt), and a new order is created when the charge goes through.

The part that matters when you switch is ownership. Shopify's documentation speaks of contracts "owned by" an app, and states that "48 hours after a user uninstalls a subscription app, any subscription contracts that are owned by that app and that haven't been terminated are cancelled", whether their status is active, paused or failed.

The rest of this page follows from that sentence: the export and the checked import come before the uninstall.

What to have in hand before you uninstall

Shopify's developer documentation for apps that migrate contracts says a subscription contract includes "the variant, the plan, the payment method, and the billing and shipping addresses"; its worked example goes further.

Read from the merchant's side, that example is the export to obtain from the current app, in whatever format it comes. Anything missing from it is a question for the current app's support while the app is still installed.

  • Customer and status: which customer the contract belongs to, and whether it is active, paused or failed at the moment of the export.
  • Next billing date and currency.
  • Payment method: which saved method the contract charges (the next section covers where it lives).
  • Billing policy: the interval, the number of intervals, and any minimum number of cycles.
  • Delivery policy, shipping address and shipping price.
  • Per line: the variant, the quantity, the plan it was sold under (its identifier and its name, for example "Subscribe and save"), and the current price.
  • Discounts: the discount applied per cycle on the line, and any discount with a number of cycles still remaining.
  • Custom attributes on the line, when the app uses them.

If the destination is Shopify Subscriptions, the Help Center's eligibility page sets a condition on the store itself: "To use the Shopify Subscriptions app, your store must use one of the following payment gateways: Shopify Payments, PayPal Express, Authorize.net, Adyen, or Stripe."

The Help Center then describes a CSV import "from an eligible third-party subscription app from the Shopify App Store, or from the Shopify Subscriptions app on another store".

The import page sets the shape of that file: 10 MB at most, every column present for the import to work, and no editing or overwriting of existing contracts through it, since duplicates are ignored on import.

That file follows Shopify's own contract CSV rather than the old app's export as it comes: the Help Center's troubleshooting page for that import asks to "make sure the columns in your CSV file match the required columns in the correct order", wants the next billing date written as YYYY-MM-DDTHH:MM:SSZ, and checks that the payment method identifier on a row matches the customer on the same row.

The import page also states that data can't be imported directly from your third-party app, and that if that app isn't integrated with Shopify Checkout, its contracts can't be imported. Which apps count as eligible is a question for the current app's support.

In the other direction, Shopify Subscriptions exports its contracts from Apps > Subscriptions > Contracts > Export, "for your records or to import into another Shopify store" running the same app.

Where the payment method lives

A contract carries a payment method, and that field decides whether subscribers will be charged as before or will have to act. Shopify's developer documentation describes two situations for an app that imports contracts.

Either the method is already "vaulted in Shopify for use with subscriptions or a card-on-file", and the imported contract can point to it; or it isn't, and the app can "direct customers to customer accounts to add a new payment method".

For Shopify Subscriptions, the Help Center describes that path from the customer's side: signing in to the customer account from the store's menu, an option that "works only when you've activated customer accounts", then Edit and, under Payment methods, Add "to add a new credit card, debit card, or digital wallet".

Shopify's developer documentation also describes "a set of tools to import pay-as-you-go contracts into Shopify without the need to migrate credit cards directly", covers a short list of payment gateways by name, and notes that from one of them only credit card payment methods can be migrated.

Which situation applies depends on where the current app kept the method, in Shopify or with a gateway, and that is the answer worth getting in writing before any date is set.

What to ask the app you are moving to

The same developer documentation gives the vocabulary for this conversation. Ask the destination app how it takes contracts in, whether through the CSV import of Shopify Subscriptions, through an import of its own, or by hand, and which of the fields above it reads.

Then ask what it does with a contract that is paused or failed at the time of import, and what next billing date it assigns: the export holds a status and a date for that subscriber, and the new app either keeps them or resets them.

The same goes for a discount with cycles still remaining, and for a per-cycle discount, which can arrive as a lower price or as a discount.

Ask what the app does to make the first renewal happen after the import; Shopify's developer documentation states that apps "need to create billing attempts to trigger the billing schedule of a contract", and that each attempt carries "a unique key generated by the client to avoid duplicate payments".

From the migration guide Shopify wrote for apps moving onto its checkout: "subscriptions that include bundles of different products aren't supported".

On the merchant's side, the Help Center's eligibility page says the same of bundles: "Bundles aren't compatible with the Shopify Subscriptions app."

The order of operations

The order below is what the statements quoted on this page imply once read together. The app you are moving to may have a procedure of its own, and that procedure takes precedence.

  1. Produce the export from the current app while it is still installed and billing, and check it against the list above, field by field.
  2. Get the two written answers described above: from the current app, where the payment method lives; from the destination app, how it imports and what it resets.
  3. Pause billing in the current app before the import starts. Shopify's developer documentation, addressing the app that migrates, "strongly recommend[s]" pausing "any billing in your current application while migrating customer payment methods and contracts", because pausing "helps you avoid double-billing a contract". Ask the current app how billing is paused on its side.
  4. Import into the destination app, then compare the imported contracts with the export: count, status, next billing date, payment method and the discounts still running.
  5. Watch the first renewal on the new app. When a billing attempt succeeds, Shopify creates an order; that order is the sign that the schedule has resumed. The next billing dates of the contracts that were paused or failed are worth a second look at that point.
  6. Uninstall the current app last, once the imported contracts have been checked and, when the schedule allows it, renewed once. The contracts it still owns are cancelled at the end of the window described above, whatever their status.

Sources

  • Shopify, "About subscription contracts", https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts (read September 26, 2026).
  • Shopify, "Migrating existing subscription contracts to Shopify", https://shopify.dev/docs/apps/build/purchase-options/subscriptions/migrate-to-subscriptions-api/migrate-subscription-contracts (read September 26, 2026), written for app developers.
  • Shopify, "Migrate customer information to Shopify", https://shopify.dev/docs/apps/build/purchase-options/subscriptions/migrate-to-subscriptions-api/migrate-customer-information (read September 26, 2026), written for app developers.
  • Shopify, "Subscriptions API migration guide", https://shopify.dev/docs/apps/build/purchase-options/subscriptions/migrate-to-subscriptions-api (read September 26, 2026), written for app developers.
  • Shopify Help Center, "Importing and exporting a contract CSV", https://help.shopify.com/en/manual/products/purchase-options/subscriptions/shopify-subscriptions/import-export/importing-and-exporting (read September 26, 2026).
  • Shopify Help Center, "Troubleshooting common contract CSV import issues", https://help.shopify.com/en/manual/products/purchase-options/subscriptions/shopify-subscriptions/import-export/common-issues (read September 26, 2026).
  • Shopify Help Center, "Shopify Subscriptions app eligibility considerations", https://help.shopify.com/en/manual/products/purchase-options/subscriptions/shopify-subscriptions/considerations (read September 26, 2026).
  • Shopify Help Center, "Shopify Subscriptions customer experience", https://help.shopify.com/en/manual/products/purchase-options/subscriptions/shopify-subscriptions/customer-experience (read September 26, 2026).

Questions

Will active subscriptions stay if I uninstall and reinstall the app? Shopify states that 48 hours after an uninstall, the contracts the app still owns are cancelled, whether they were active, paused or failed.

Shopify's documentation, as quoted above, doesn't address a reinstall, so ask the app's support before using an uninstall as a fix, and produce the export first either way.

What happens to subscribers whose last payment failed on the old app? In the import format Shopify documents for apps, a contract carries a status and a next billing date, so those subscribers are in the export with both.

Whether the destination app keeps that status and date or resets them is its choice; ask before the import.

Do saved cards move with the subscriptions? It depends on where the current app kept them. Shopify's developer documentation lets an imported contract reuse a payment method already vaulted in Shopify; otherwise the app can direct the customer to their account to add a new one.

For contracts held with a payment gateway, that documentation covers a short list of gateways by name, with a limit to credit card methods for one of them. The answer to get in writing from both apps is where the card lives today.