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.
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.
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.
scheduled_at date for every upcoming charge. This is the billing-date source; nothing else in the export set carries it.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.
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.
The failure mode is double-billing: a contract active in both systems when a charge date arrives. The order that prevents it:
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.
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.
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 →