Tom Sailors
Brief · Anonymized case study

Recharge to Shopify Subscriptions Migration

I'd build this in four steps: export the active Recharge subscriptions with their billing dates and trial state, recreate each subscription in Shopify with exact timing preserved, track which customers migrated cleanly and flag failures, then re-route the customer into the right Klaviyo segments so their renewal notifications stay in sync with the new system.

A subscription-focused DTC merchant was migrating from Recharge to native Shopify Subscriptions and needed to preserve billing dates, trial state, and customer segmentation across 4,000 active subscribers without disrupting their next scheduled charge.
Four pieces
Migration

Recharge Data Export

Exports active Recharge subscriptions with billing dates, trial state, and customer ID in a format the developer can load into the new system.

Recharge API + backend service
Subscriptions

Subscription Creator

Creates a native Shopify Subscription for each migrated subscriber, preserving their billing date and trial end date so the next charge fires on time.

Admin API mutation + backend service
Operations

Migration Status Tracker

Logs every subscription creation, flags failures or mismatches, and gives you a live dashboard so you know which customers migrated cleanly and which need manual follow-up.

Backend service + admin dashboard
Admin GraphQL explorer graphql
query VerifyMigration($customerId: ID!) {
  customer(id: $customerId) {
    id
    email
    subscriptionContracts(first: 10) {
      edges {
        node {
          id
          status
          nextBillingDate
          createdAt
          lines(first: 5) {
            edges {
              node {
                id
                title
              }
            }
          }
        }
      }
    }
  }
}

Variables:
{
  "customerId": "gid://shopify/Customer/12345"
}
Removed sortKey argument (not supported on subscriptionContracts connection) and trialEndsAt field (doesn't exist on SubscriptionContract). Kept the core query shape: customer, subscriptionContracts, status, nextBillingDate, createdAt, and line items for audit.
Customer Service

Klaviyo Flow Bridge

Re-enrolls each migrated subscriber into the correct Klaviyo segment and re-triggers subscription renewal flows so notifications stay in sync with Shopify Subscriptions.

Klaviyo API + Flow trigger
Shopify Flow editor: When → Then flow
Trigger: Shopify subscription created
Condition: customer.tags contains 'Recharge:Migrated'
Action 1: Add profile to Klaviyo list: "Shopify Subscriptions"
Action 2: Set profile property subscription_platform = "native"
Action 3: Add profile to Klaviyo segment: based on product and billing frequency (e.g., "Monthly Box Subscribers")
Action 4: Trigger Klaviyo flow: "Subscription Welcome (Shopify)" with customer ID + next billing date
Action 5: Remove profile from list: "Recharge Subscribers" (optional, keeps history)
Tag each customer as 'Recharge:Migrated' during subscription creation so Flow can route them. Adjust segment logic based on your product bundle structure.

Got a similar problem?

Sketch your build in 30 seconds — voice, type, or attach a screenshot.

Sketch the build →