The decision to consolidate three legacy loyalty systems onto a single API is usually made once — after enough broken sync events, enough engineering incidents, and enough member-visible errors that the cost of staying put becomes undeniable. The harder question is how to execute the migration without creating a new set of member-visible errors during the transition.
This guide documents the migration playbook in phases, from the data audit through the POS cutover and the post-migration validation period. It's based on the pattern that works reliably, not the fastest possible approach.
Phase 1: Data Audit and Member Record Reconciliation
Before you move any data, you need to understand what you have. A three-system loyalty environment typically means three member record stores with imperfect alignment:
- Different member ID formats across systems (email-based in system A, phone-number-based in system B, auto-incremented integer in system C)
- Partial record overlap: the same physical member exists in two or three systems with different IDs, possibly different names or email addresses
- Conflicting balance data: system A shows 1,200 points, system B shows 800 points for the same member
- Historical transaction data that can't be fully reconciled because void events didn't propagate across all three systems
The data audit has two outputs: a canonical member record mapping (which records from which systems correspond to the same physical member) and a point balance reconciliation (the authoritative balance for each member, which may require a policy decision when the systems disagree).
Balance reconciliation policy: when System A and System B disagree on a member's balance, the standard approach is to use the higher balance and log the discrepancy for audit. This is the member-friendly default — giving members the benefit of the doubt on balance disputes. It also means you're reserving against the higher liability, which is the conservative financial position. Alternatively, you can run a manual review process for discrepancies above a threshold (e.g., any discrepancy greater than 500 points gets a manual audit). For most programs, the volume of discrepancies above a meaningful threshold is manageable — it's the small discrepancies that are numerous but individually low-stakes.
Phase 2: Program Rules Mapping
The three legacy systems each have their own program rules configuration — earn rates, tier thresholds, catalog items, and burn-rate controls. Migrating to a new platform is an opportunity to audit and rationalize these rules, not just replicate them identically.
Document each system's active rules explicitly. Then identify:
- Conflicting rules: System A gives 1.5x points on all online purchases. System B (the online system) doesn't have an equivalent rule — it uses a flat 1x. Were online members getting 1.5x or 1x? The answer tells you whether the conflict was known or was silently resolving in some direction.
- Zombie rules: Rules configured in one system that were never matched by equivalent rules in another, meaning they applied only to transactions routed through a specific touchpoint. These are often the source of "why am I getting different points in-store vs. online?" member complaints.
- Deprecated rules: Rules from campaigns that ended but were never disabled. These may be silently contributing to over-accrual on certain product categories.
The rules mapping document becomes the specification for configuring the new unified platform. Every rule in the legacy estate should have an explicit disposition: replicate as-is, replicate with modification, or retire.
Phase 3: New Platform Configuration and Testing
Configure the new loyalty API with the rationalized rule set before any data migration. Then run a full test suite against the configured platform using synthetic member data:
- Standard in-store transaction: verify earn at correct rate, correct eligible subtotal calculation
- Online transaction: same verification
- BOPIS (buy online, pickup in store): verify deduplication
- Tier upgrade: verify that accumulated spend crosses the tier threshold and tier status updates correctly
- Tier downgrade: verify grace period applies and downgrade fires after grace expiry
- Redemption: verify balance deduction, eligibility check, hold/reserve and commit flow
- Void/refund: verify point reversal fires, balance restores correctly
This testing phase should run for a minimum of two weeks — long enough to catch time-dependent edge cases like tier evaluation at period boundaries.
Phase 4: Member Data Migration
Data migration from three systems to one is a batch operation that should be executed in a maintenance window (or a low-traffic period) and must be followed by a validation pass before any production traffic is routed to the new platform.
Migration sequence:
- Export from all three legacy systems: Pull complete member records, point balances, transaction history (as far back as your new platform requires for tier qualification), and tier status.
- Apply the canonical member mapping: Merge records for the same physical member across systems. Resolve balance discrepancies per the policy defined in Phase 1.
- Import to new platform: Load member records via bulk import API or direct database load, depending on the platform's migration tooling.
- Validation pass: Query a random sample of member records in the new platform and compare against source data from the legacy systems. Specifically check: member ID mapping is correct, point balance matches the reconciled value, tier status is correct, active tier period end date is correct.
The validation sample size should be statistically meaningful — for a 100,000-member program, sampling 500 records (0.5%) at random, plus 100 records specifically selected from known edge cases (members with records in all three legacy systems, members who were in mid-tier-qualification at migration time), provides reasonable coverage.
Phase 5: Parallel Run Period
The parallel run is the highest-risk phase of the migration and the most important. During the parallel run, both the legacy system stack and the new unified API process loyalty events simultaneously. Events are forwarded to both systems; member balances in both systems are updated. The purpose is to verify that the new platform is producing correct results before it becomes the system of record.
We're not saying parallel run is always required — for programs with a very clean legacy architecture or very high tolerance for a short-lived discrepancy period, a direct cutover may be acceptable. We're saying that parallel run dramatically reduces the risk of the cutover introducing member-visible errors that erode trust in the program during the very period when you're trying to demonstrate that the new platform is better.
Parallel run duration: 2–4 weeks is standard. Long enough to catch events in less common code paths (tier evaluation at period boundaries, BOPIS, high-volume promotional weekend). Short enough that you're not paying for two systems indefinitely.
During parallel run, compare balance states in both systems at the end of each day. Discrepancies above a threshold should be investigated and root-caused before proceeding to cutover. A discrepancy rate below 0.1% of events is typically acceptable; above that, the new platform's event handling needs investigation.
Phase 6: POS Cutover Sequencing
POS cutover — switching the in-store loyalty event flow from the legacy POS connector to the new unified API — is the most operationally sensitive step. It cannot be done instantly across a 100-location estate, and the sequencing matters.
Recommended cutover sequence:
- Pilot stores: 3–5 stores representing different store configurations (high-volume flagship, standard mid-volume, low-volume rural, franchised if applicable). Run pilot stores on the new API while all others remain on legacy. Monitor for 1–2 weeks.
- Wave 1: 20–25% of remaining stores. Prioritize stores with uniform POS configurations to reduce variable noise in the validation.
- Wave 2: Next 25%, incorporating stores with different POS versions.
- Wave 3: Remaining stores, including any franchised locations that required separate coordination.
Each wave should be followed by a 3–5 day monitoring period before the next wave launches. A significant member complaint volume, an unusual support ticket pattern, or a balance discrepancy spike are stop conditions — pause, diagnose, then proceed.
Phase 7: Legacy System Decommission
Once all channels (POS, e-commerce, mobile) are routing through the new unified API and the parallel run validation is complete, the legacy systems can be decommissioned. This is not an immediate step — legacy systems should be maintained in read-only mode for 60–90 days post-cutover, so their data is available for dispute resolution during the transition period.
After 60–90 days, archive the legacy data according to your data retention policy and sunset the contracts. The total migration timeline from Phase 1 through legacy decommission is typically 4–6 months for a 50–150 location retail chain — not a weekend project, but a focused operational initiative with a clear end state.