Tom Sailors Contact
Guide · Subscriptions

How to migrate from Recharge to Shopify Subscriptions

Published 2026-08-01 · Updated 2026-08-01

Recharge and native Shopify Subscriptions store the same three facts about a subscriber: what they buy, when they're next charged, and how they pay. A migration moves those three facts — listed here in order of difficulty. This is the process for moving active subscribers off Recharge without losing billing dates or stored payment methods.

Where you're migrating to

Two destinations, one migration. Shopify's free Subscriptions app covers standard replenishment — fixed frequency, percentage discounts — and imports contracts by CSV. A custom build on the subscription APIs handles what the app can't: tiered pricing, build-a-box, B2B payment terms, prepaid schedules. Both write the same SubscriptionContract records, so the export and cutover below are identical; the choice affects day-2 management, not the migration.

The October 14, 2026 date

Shopify requires subscribers still billed through the legacy Recharge checkout to move to Shopify checkout processing by October 14, 2026. Recharge's Existing Subscriber Migration satisfies the mandate and keeps you on Recharge. But the mandate means every subscription gets touched this year regardless — which is why the decision to leave is on the table now: the migration effort is being spent either way, and one of the two paths ends the monthly Recharge bill.

What to export from Recharge

Payment methods — the part that determines churn

Where the card is vaulted decides how hard this is. Stores on Recharge's Shopify Checkout Integration already have payment methods stored in Shopify — new contracts attach to the existing method and this section is done. Stores on the legacy Recharge checkout have cards vaulted at the gateway. Shopify imports those references with customerPaymentMethodRemoteCreate, which accepts Stripe, Braintree, Authorize.net, and PayPal billing references:

mutation ImportPaymentMethod($customerId: ID!, $remoteReference: CustomerPaymentMethodRemoteInput!) {
  customerPaymentMethodRemoteCreate(customerId: $customerId, remoteReference: $remoteReference) {
    customerPaymentMethod { id }
    userErrors { field message }
  }
}

Confirm with the gateway that the tokens are transferable before scheduling anything else — a token that can't move means that customer re-enters card details, and the re-entry rate is the churn in this project. The gateway conversation comes first, not last.

Creating the contracts

CSV path: the Shopify Subscriptions app imports contracts from a CSV. Map each row's upcoming billing date from the scheduled_at column of the Charges – Queued export, in ISO 8601 format (2026-09-02T17:00:00Z). Shopify staff describe the import path here.

API path: one mutation creates the contract with its billing date and payment method attached:

mutation CreateMigratedContract($input: SubscriptionContractAtomicCreateInput!) {
  subscriptionContractAtomicCreate(input: $input) {
    contract { id status nextBillingDate }
    userErrors { field message }
  }
}

Set nextBillingDate from scheduled_at and tag the customer (Recharge:Migrated) during creation — the tag drives verification and the notification flows below.

Cutover order

The failure mode is double-billing: a contract active in both systems when a charge date arrives. The order that prevents it:

Verification

After each batch, query every migrated customer's contracts and compare status, nextBillingDate, and line items against the Recharge export. The anonymized brief from this migration publishes the audit query and the status-tracker design — the tracker is what turns "we think it worked" into a per-subscriber record of what migrated and what needs follow-up.

Notification flows

Renewal reminders, upcoming-charge emails, and win-back flows keyed to Recharge events stop firing the moment a subscriber leaves. Re-enroll each migrated subscriber in the replacement flows — the brief's Klaviyo bridge uses Shopify Flow's subscription-created trigger and the Recharge:Migrated tag to route each subscriber into the right segment with their next billing date attached.

Migrating off Recharge?

Email Tom the subscriber count, the gateway, and whether you're on Recharge's legacy checkout or the Shopify Checkout Integration — those three facts determine the migration plan.

Email Tom →