Skip to content
PlaybooksJune 2, 20265 min read

Migrating from Rivo to Charm: a self-serve walkthrough

Export your Rivo Points Logs, run a dry-run preview in Charm, import balances with one click, reconcile, and roll back if anything looks off. A practical playbook with zero customer emails fired.

Migrating from Rivo to Charm: a self-serve walkthrough

If you're moving off Rivo — usually because the per-order fees add up, or memberships and the dev toolkit sit behind a higher tier — Charm has a built-in Rivo migration preset. You don't email anyone a spreadsheet and wait. You upload your Rivo export, preview exactly what will change, and promote it when it looks right. Nothing fires a customer email along the way.

The short version

  1. Export Points Logs from Rivo (2 min)
  2. Install Charm → Settings → Data migration → pick the Rivo preset (3 min)
  3. Upload the export — Charm runs a dry-run and shows you the resulting balances (auto)
  4. Review the reconciliation, then import (email-silent)
  5. Flip the storefront surfaces on, send one comms email
  6. Changed your mind? Revert restores the pre-import state in one click

The full version follows.

Before you start

  • Admin access to both apps — to export from Rivo and install Charm.
  • The migration tools are on every plan, Free included: the Rivo preset, a dry-run, reconciliation, and revert. Pro and Plus add dedicated migration assistance if you'd rather we drive.
  • Your reward structure — point value, tier thresholds, earning rules. Jot it on one sheet so recreating it in Charm is mechanical.

Step 1: Export Points Logs from Rivo

In Rivo admin, export your Points Logs. This is the file Charm's preset is built around.

One thing worth understanding: the Points Logs file is a transaction ledger, not a balance snapshot. Each row is a signed change — an earn is a positive Points Difference, a redemption or a revoke is a negative one. Charm derives each customer's current balance by grouping on Shopify Customer ID and summing the signed differences, so revoked and redeemed points net out correctly. You don't have to massage the file — just export it whole and hand it over.

If you also ran store-credit or outstanding rewards in Rivo, export the Balance Redemptions file too. Charm auto-detects which file you've uploaded by its header and maps issued redemptions into Charm's unused-rewards table (a percentage reward becomes a discount, a fixed one a free-product reward).

Step 2: Pick the Rivo preset

Install Charm, then go to Settings → Data migration and choose Rivo from the platform picker. The preset knows the Points Logs column shape, so there's no field-mapping step.

While you're in Charm, set the same point value as Rivo (e.g. 1 point per $1) and recreate your earning rules and tier thresholds. Leave the storefront widget off for now — you'll switch it on at cutover.

Step 3: Upload and read the dry-run

Drop the export in. Charm runs a dry-run automatically — no data is written yet. You get:

  • The derived balance per customer, from the signed-ledger sum
  • Totals to sanity-check against Rivo — net points, customer count, lifetime earned, lifetime redeemed, store-credit net
  • A flagged list of anything that needs a decision — e.g. a customer whose signed sum goes negative (Charm clamps balances at zero and flags it), or an email that doesn't match a current Shopify customer

As a reference for scale: a real Rivo Points Logs export we tested carried 380,129 net points across 3,139 customers (≈451,121 earned, ≈70,992 redeemed) — the dry-run reproduced those totals exactly, which is the check that tells you the import is faithful before you commit.

Step 4: Import (nothing emails your customers)

When the preview looks right, run the import. The single most important property here: it is email-silent by construction. Migrated balances are written directly to the ledger — they never pass through the points engine, so no "welcome" email, no "you earned points" email, and no Shopify Flow runs fire for the back-filled history. Importing 3,000 customers does not blast 3,000 inboxes.

Migrated customers are tagged (migratedFrom: rivo) so they're excluded from your member-growth and earning analytics — your post-migration charts reflect real activity, not the import spike. Enrollment date is taken from each customer's earliest Rivo activity, not today, so the cohort history stays honest.

Step 5: Cutover

The goal is to swap the customer-facing experience without anyone seeing both programs at once.

  1. In Charm → Visibility → Storefront widget → on
  2. In Charm → Visibility → Customer account hub → on
  3. In your Shopify theme editor → remove the Rivo app block
  4. Uninstall Rivo (their data is retained on their side for a grace window if you ever need it)
  5. Send one comms email (template below)

Customer-facing downtime: zero. The widgets swap inside one render cycle.

Step 6: Roll back if needed

This is the safety net most migrations don't give you. Charm snapshots every customer's pre-import balance at the moment you import. If something looks wrong, Revert restores those balances, removes the job's ledger rows and any customers the job created, and marks the job reverted. It's an immediate-undo for the import itself — use it within the cutover window before new activity accumulates on top.

The comms email

Keep it short and reassuring.

Subject: Your rewards just got a small upgrade

Hey {first_name},

Quick note: we've moved our rewards program to a new app called Charm. Nothing changes for you — your points balance ({balance}) and tier ({tier_name}) carried over exactly as they were, and any reward codes you had are still valid.

You'll see a new (and frankly nicer) rewards page in your account: [link to your loyalty hub].

If anything looks off, just reply.

— {your name}

Send it once, the morning of cutover.

A couple of Rivo-specific notes

  • VIP tier isn't in Points Logs. Rivo's Points Logs file has no tier column, so a customer's current tier isn't carried by that file alone. Two options: export Rivo's VIP Tier Logs as well, or let Charm assign tiers from the migrated balance against your new thresholds. Either way, tiers settle on the customer's next earning event regardless.
  • Per-order fees stop the day you switch. Charm prices by order band with no per-order surcharge, so the "every extra order costs me $0.15" math disappears at cutover.

Ready? Install Charm, open Settings → Data migration, and pick the Rivo preset. Want a second pair of eyes first? Email team@appfleece.com — we'll look at your Rivo setup before you touch anything.

Comparing more broadly? See Charm vs Rivo for a side-by-side.