You are leaving Smile, LoyaltyLion or a home-grown scheme and every customer must keep their points. The safe order is: import balances → verify → switch the event feed → go live.
1. Freeze the old programme
Stop earning and redeeming there first, then export. A file exported while the old programme is still moving will be wrong by the time it lands.
2. Import the balances
In the admin, Import data → Balances from another app takes the old provider's member export (Smile and LoyaltyLion column names are recognised; anything else needs email and points; optional tier and referred-by columns are read too). Nothing is written until you confirm:
- Upload & preview → a preview shows how many rows match, how many would be created, and the total to be added. Customers already imported by an earlier file are skipped and counted.
- Check the total against the old provider's liability report.
- Confirm it (the button reads Confirm — add N balances; an owner or admin has to press it, and an import above your team's approval limit waits for a second approver under Approvals). Members are created as prospects (they have not agreed to your terms) and each balance lands as a single
adjustledger entry with reasonmigration_import. - If something is wrong, Undo this import reverses the whole batch through the ledger. Members it created are kept with a zero balance. If someone already spent imported points, their balance goes to zero and the rest is listed for review.
Prefer doing this from the admin rather than scripting POST /v1/members/{id}/adjust per customer: the batch imports each customer once, can be undone, and is visible to your team — and API adjustments are held to your approval limit and a daily credit cap per key.
3. Verify
A few spot checks through the API:
curl https://stickytier.com/v1/members/ref:CUST-1001 -H "Authorization: Bearer $KEY"curl https://stickytier.com/v1/tenant/liability -H "Authorization: Bearer $KEY"liability.outstanding_cents should equal the old provider's figure, allowing for anything you chose not to bring across.
4. Order history stays behind
Do not replay historical orders as order.paid events: they earn like any other order, and members would be credited twice — once by the migrated balance and once by the replay. Tiers build from real orders from go-live; if a member's old tier must survive the switch, include a tier column in the import file (matched by tier name), or set it by hand from the member's page in the admin. A tier set either way stays until someone clears it.
5. Switch the feed
Point your store's order events at StickyTier and start sending customer.* and order.*. From this moment the new programme is the only one earning.
6. Tell members
Send one email, from your own domain, explaining that points moved and where the new rewards page is. The rewards page signs them in with a link sent to their email — no passwords to migrate.