> For the complete documentation index, see [llms.txt](https://help.dollarlabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.dollarlabs.io/dollarback-store-credit/getting-started/migrating-from-another-loyalty-app.md).

# Migrating from another loyalty app

{% hint style="info" %}
**Plan:** Bulk import is plan-gated; check that your plan includes **Bulk import** before you start.
{% endhint %}

Moving from another loyalty app means carrying your customers' balances with you. The path: export balances from the old app, reshape them into DollarBack's CSV format, import with notifications off, then spot-check before you announce anything.

## Prerequisites

* A plan that includes bulk import ([Choose a plan and start your trial](/dollarback-store-credit/getting-started/choose-a-plan-and-start-your-trial.md))
* Balance export access in your old loyalty app
* Not a development store (bulk import is blocked on development stores)

## Step 1: Export balances from the old app

Most loyalty apps offer a CSV export of customer balances (sometimes called points, credits, or wallet balances). Export it *last thing* before switching. Any earning that happens in the old app after the export won't carry over.

{% hint style="warning" %}
If the old app uses **points** rather than currency, decide your conversion rate now (say, 100 points = $1) and convert every row. DollarBack imports currency amounts, not points.
{% endhint %}

## Step 2: Map the columns

Reshape the export into DollarBack's format. Required headers:

| Column                  | Required     | Notes                                                                                                                     |
| ----------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------- |
| `Amount`                | Yes          | Positive number, in currency (convert points first). Quoted values and thousand separators like `"8,260.90"` are handled. |
| `Currency`              | Yes          | e.g. `USD`                                                                                                                |
| `Email` or `CustomerId` | At least one | `CustomerId` (the Shopify customer ID) wins when both are present. Email must match the customer's email in Shopify.      |

Keep the file under **5 MB**; split large migrations into multiple files if needed.

{% hint style="warning" %}
Duplicate rows are **not** deduped: two rows for the same customer credit them twice. Deduplicate in your spreadsheet before uploading.
{% endhint %}

## Step 3: Import with notifications off

1. Open **DollarBack admin → Bulk import** (*"Bulk credit or debit customers by uploading a CSV file"*).
2. Set **Action Type** to **Credit**.
3. Set **Expiry Days**: `0` means the migrated credit never expires; enter a number of days if you want migrated balances to expire.
4. Turn **Notify Customers** **off**. A migration shouldn't blast every customer with a "you just earned credit" email. Announce the switch on your own schedule instead.
5. Optionally turn **Send to Integrations** off too, so the import doesn't trigger Klaviyo/Omnisend/Flow events for every row.
6. Upload the CSV and click **Import CSV**.
7. Watch the job move from pending → processing → completed. Rows commit in small batches; stopping a job keeps everything already processed.

Unknown customers log **"Customer not found"** and the job continues; those rows are skipped, not fatal. Full field-by-field details are in [Bulk import credit (CSV)](/dollarback-store-credit/analytics-data-and-account/bulk-import-credit-csv.md).

## Step 4: Spot-check balances

1. Download the job's log. It lists every row with customer ID, email, action, amount, currency, status, and message.
2. Filter for anything that isn't a success. "Customer not found" rows usually mean the customer hasn't been migrated into Shopify yet, or the email differs. Fix and re-import *only those rows*.
3. Pick five to ten known customers and compare their DollarBack balance against the old app's export: check the credit log in **DollarBack admin → Analytics**, or sign in to the storefront as a test customer and open the widget.
4. Confirm the totals: the credited sum in Analytics should match your CSV's column total (bulk imports are included in the overview cards).

## Verify it works

Place a test order with a migrated customer account: at checkout, store credit appears as a payment option with the migrated balance available to spend.

## Common issues

* **The job failed or many rows errored** → [My bulk import failed](/dollarback-store-credit/troubleshooting-and-faq/bulk-import-failed.md)
* **"Customer not found" on rows you expected to work**: the customer doesn't exist in Shopify yet, or the email doesn't match; import customers into Shopify first.
* **A customer was credited twice**: duplicate rows in the CSV; use **Action Type: Debit** with a correction file to remove the excess.
* **Balances imported but not offered at checkout** → [Store credit isn't available at checkout](/dollarback-store-credit/troubleshooting-and-faq/store-credit-isnt-available-at-checkout.md)

## Related articles

* [Bulk import credit (CSV)](/dollarback-store-credit/analytics-data-and-account/bulk-import-credit-csv.md)
* [Quick start: launch your first cashback program](/dollarback-store-credit/getting-started/quick-start-launch-your-first-cashback-program.md)
* [Credit expiry and reminders](/dollarback-store-credit/spending-store-credit-and-rewards/credit-expiry-and-reminders.md)
* [Export balances and reports](/dollarback-store-credit/analytics-data-and-account/export-balances-and-reports.md)
