A light editorial control plane moves separate gift card balance cohorts through a reconciliation gate into a verified Shopify liability register.
Journal
Shopify Migration & Strategy · 9 min read

Shopify gift card migration: reconcile every balance before cutover

At 09:00 on launch day, the old platform shows 4,218 active gift cards. The migration file contains 4,147 rows, several currencies, duplicate last-four values, and no reliable way to contact every person holding a physical card. Importing the file is not the decision. The decision is how the store will keep every valid customer promise redeemable exactly once.

Shopify treats gift cards as currency-like value. Cards are redeemable only in the store that issued them, Shopify does not natively transfer them between stores, and the standard export exposes only the final four code characters. A migration therefore needs a liability register, a route for each cohort, a controlled change window, and proof from real redemption paths before the old system closes.

Treat each balance as value, identity, and liability

A gift card row can represent prepaid customer funds, a no-payment goodwill issue, a refund, or a legacy store-credit balance. Those instruments may share a monetary amount while having different owners, expiry rules, accounting treatment, channels, and customer expectations. Converting them all into the same Shopify object can simplify the file while changing the promise.

Source cohortPromise to preserveMain migration riskDecision owner
Sold digital gift cardRemaining value, code access, currency, expiryWrong balance or duplicate redemptionFinance and ecommerce operations
Sold physical cardCard remains usable without known recipient identityNo safe reissue destinationRetail operations
Goodwill or promotion cardApproved value and eligibilityUnfunded or over-broad valueSupport and finance
Refund creditValue and refund traceBroken link to the original transactionFinance and support
Legacy store creditAccount-bound value and customer identityChanging it into a bearer-style cardFinance, legal, and customer accounts

Shopify distinguishes gift cards from customer store credit. Store credit is attached to a customer account and has its own permissions, currency, expiry, and B2B behavior. Do not convert one instrument into the other merely because both can fund a purchase. First document the commercial promise and obtain accounting or legal review for any change in expiry, transferability, tax treatment, or holder rights.

The migration control is simple to state: no cohort is ready until the team can name the value holder, source of truth, target instrument, redemption route, and closure evidence.

Build a currency-separated liability register

Start with one immutable source extract and retain its timestamp, row count, and file hash. Record balances in their issued currencies rather than converting them for convenience. A correct aggregate can conceal a missing high-value card, a duplicated small card, or an invalid currency route. Reconcile every cohort and currency independently.

A gift card migration liability register groups source records by instrument, currency, balance, code availability, target route, and exception status before a reconciliation total.
The liability register keeps monetary value, code custody, customer identity, target route, and unresolved exceptions visible in one control. Example labels show structure, not merchant results.
Register fieldWhy it mattersAcceptance rule
Source record ID and statusPrevents a row from being created twiceUnique, stable, and traceable to the extract
Issued and current balanceSeparates original value from remaining liabilityNon-negative and expressed in source currency
Full-code availabilityDetermines preserve, reissue, or coexistence routeNever inferred from masked data
Purchaser, recipient, or holder pathDetermines safe delivery and support lookupKnown, unknown, or intentionally unassigned
Target object and target IDCreates an auditable source-to-target mapOne approved target per eligible source record
Exception code and ownerKeeps mismatches out of silent manual fixesNamed owner, action, due point, and evidence

Full codes need stricter custody than ordinary migration columns. Limit access, avoid pasting them into tickets or general spreadsheets, encrypt files at rest and in transfer, and remove temporary copies after the approved retention point. Shopify returns a created code at creation time, then masks it in ordinary administration. The mapping and customer-delivery design must be decided before a batch is created.

Choose one migration route for each cohort

Shopify's current GraphQL Admin API can create a gift card with an optional code, specified value, expiry, customer, recipient, and note. That capability does not make code preservation the default. The source must provide the full code, the code format and uniqueness must pass a target test, the app needs the correct gift-card scope, and the security team must approve how codes are handled.

RouteUse whenControlRollback or exit
Preserve codeThe full source code is available and target creation accepts itPilot collisions, balance, expiry, currency, and both channelsStop the batch before source deactivation
Reissue new codeA reachable holder can receive a replacement securelyMap old record to new ID, control notification, and prevent double usePause delivery and keep the old card redeemable
Temporary coexistencePhysical cards or unknown holders cannot be reissued safelyValidate old card in the source, then honor it through a controlled support or POS pathExtend the source window while exceptions resolve
Manual exceptionA record is disputed, malformed, expired, or legally sensitiveQuarantine it with a named finance or legal decisionNo target value until approval is recorded

Do not treat the last four characters as a unique customer key. Different codes can share the same suffix, and physical cards are often held by someone other than the purchaser. If only masked data survives, the safer route is usually controlled reissue to a verified holder or temporary coexistence, not guessing the missing code or automatically attaching value to the purchaser account.

Freeze writes, create value, then replay the delta

A long migration can be wrong even when every imported row matches its original export. Customers may redeem cards, staff may issue refunds, and support may create new value after the extract. Set a source watermark, define which system accepts writes during each phase, and record every later credit, debit, issue, expiry edit, cancellation, and reactivation decision as a delta.

A six-stage gift card migration cutover moves from source freeze through cohort routing, target creation, delta replay, redemption tests, and evidence-based closure.
The cutover gate separates snapshot creation from delta replay and keeps the source redemption path available until target behavior is proven.
  1. Approve cohorts, route rules, code custody, notification policy, exception owners, and per-currency acceptance totals.
  2. Take the source snapshot, record the exact watermark, and begin a write-ahead delta log for every later balance event.
  3. Create a small target pilot without notifying customers; save source-to-target IDs and every returned user error.
  4. Reconcile pilot balances and test redemption before expanding in bounded batches with a stop threshold.
  5. Replay the delta through idempotent operations so the same event cannot change a target balance twice.
  6. Open the approved target route, monitor both systems, resolve exceptions, then close the source only after sign-off.

Reconcile this invariant separately for every currency and cohort: eligible source liability after the final delta equals verified target liability plus approved source-retained liability plus documented exceptions.

Prove redemption behavior, not record creation

A successful API response proves that Shopify accepted a record. It does not prove that the intended holder received the code, the card is redeemable in the intended market, the POS recognizes it, a partial redemption leaves the right balance, or a refund returns value correctly. Use a controlled test cohort and inspect both customer behavior and finance records.

TestExpected evidenceStop condition
Online full redemptionCorrect card accepted once and order records the paymentWrong currency, rejection, or remaining balance
Partial and mixed tenderResidual balance and other payment allocation agreeNegative, rounded, or unexplained residual
Shopify POS redemptionSame approved cohort works at intended retail locationsChannel mismatch or staff workaround
Refund after redemptionValue returns through the approved instrument and amountNew untracked liability or blocked reload
Duplicate event replaySecond delivery produces no second credit or debitBalance changes twice
Customer support lookupStaff can resolve a holder with permitted evidenceFull-code exposure or ambiguous match

Include expiry and deactivation edge cases. Shopify documents deactivation as permanent, and a deactivated card cannot be re-enabled or reloaded. A refund may also behave differently depending on the payment route. These are reasons to test exact journeys with finance and support, not to generalize from one successful purchase.

Close the old system only with a signed liability receipt

The source can close when the team can explain every eligible record, every balance delta, every target object, every retained balance, and every exception. Keep the receipt versioned with the source and target timestamps, counts, balance totals, currency, batch IDs, test evidence, owners, and approval. This is the evidence finance and support will need when a holder returns months later.

  • Every eligible source record has one approved target, retained-source, or exception state.
  • Counts and balances reconcile independently for each currency, cohort, and status.
  • Post-snapshot events were replayed once and the delta log is closed at a named watermark.
  • Online, POS, partial redemption, refund, duplicate replay, and support journeys passed.
  • Customer communications match the chosen route and expose no full codes outside the approved channel.
  • Finance, ecommerce operations, retail, support, and the migration owner signed the closure receipt.

Start this week with a read-only source extract and a ten-record cohort sample: one active digital card, one partially redeemed card, one physical card, one refund balance, one goodwill issue, one expired record, one deactivated record, one unknown holder, and two currencies if the store uses them. Do not create target value yet. Success is a complete route and evidence rule for each record. Stop if code custody, currency, holder identity, or liability ownership remains unclear.

Frequently asked questions

Can gift cards be transferred directly from another platform to Shopify?
Not through a native store-to-store transfer. Shopify lists migration apps and the GiftCard API as bulk options, while its Help Center states that cards are redeemable only in the issuing store and do not move natively between Shopify stores. Choose a preserve-code, reissue, coexistence, or exception route for each cohort, then verify balances and redemption before closing the source.
Can we keep the same gift card codes during a Shopify migration?
Sometimes, but only after a controlled test. Shopify's current gift-card creation mutation accepts an optional code, yet preservation still depends on having the complete source code, compatible formatting, no collision, correct API access, secure handling, and a valid target currency. Pilot a small cohort first. If any condition fails, use secure reissue or temporary coexistence instead of guessing.
What if the old platform exports only the last four code characters?
Do not reconstruct or match a full code from the suffix. Last-four values can collide, and the purchaser might not be the current holder. Keep the old redemption route available, reissue to a holder only after approved verification, or quarantine the record for support review. Record the full remaining liability even when the migration route is unresolved.
Should legacy store credit become a Shopify gift card?
Not automatically. Shopify store credit is attached to customer accounts and has different permissions, currency, expiry, and B2B behavior from gift cards. Preserve the original commercial promise first. Finance and legal owners should approve any change in transferability, expiry, holder rights, tax treatment, or funding before the migration team chooses the target object.
When should customers be notified about replacement gift cards?
Notify only after the target cohort has passed creation, balance, redemption, and delivery tests. Stage messages in bounded batches, use the approved secure delivery method, and include the old-card treatment, activation point, support route, and relevant expiry information. Pause the batch if delivery fails, customers receive duplicate value, or support cannot reconcile a reported balance.
How long should the old gift card system remain available?
Keep it available until every eligible balance is target-mapped, source-retained, or formally excepted; the final delta is replayed; representative online, POS, refund, and duplicate-use tests pass; and the closure receipt is signed. Unknown physical-card holders or unavailable full codes may justify a longer coexistence window. Legal requirements and contractual retention rules can require more.

Sources

Manish Vasaniya, Shopify Expert, Migration, CRO & AI Commerce Specialist
About the author
Manish Vasaniya
Shopify Expert, Migration, CRO & AI Commerce Specialist

Manish Vasaniya helps ecommerce founders and teams migrate to Shopify, improve conversion, and manage the long-term evolution of complex storefronts. His work connects commerce strategy, UX, engineering, analytics, integrations, and practical AI adoption, giving brands a technical and commercially grounded path from platform decision to post-launch growth.

Shopify migrationGift card operationsCommerce reconciliationCutover control