> 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/analytics-data-and-account/bulk-import-credit-csv.md).

# Bulk import credit (CSV)

{% hint style="info" %}
**Plan:** bulk import is a plan-gated feature; check your plan's feature list. It is also blocked entirely on development stores.
{% endhint %}

{% embed url="<https://dollarlabs.neetorecord.com/watch/5556c4b90df71d34cc86>" %}

*This article's section starts at 0:00 in the video.*

When you're done, you'll have credited (or debited) store credit for a whole list of customers from one CSV file. It's the tool for migrations, compensation batches, and B2B credit. This article is the full contract: the exact file format, how jobs run, and how errors are handled.

## Prerequisites

* A plan that includes bulk import (see [Plans, usage & overage billing](/dollarback-store-credit/analytics-data-and-account/plans-usage-and-overage-billing.md)).
* A live store; imports are blocked on development stores.
* Your customers already exist in Shopify; the import matches rows to existing customers, it doesn't create them.

## The CSV format

| Header              | Required                  | Notes                                                                                                                            |
| ------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `Amount`            | Yes                       | Positive number. Quoted fields and thousand separators are handled: `"8,260.90"` parses fine.                                    |
| `Currency`          | Yes                       | The currency code for the row's amount.                                                                                          |
| `Email`             | One of Email / CustomerId | Matches the Shopify customer by email.                                                                                           |
| `CustomerId`        | One of Email / CustomerId | Matches by Shopify customer ID. **When both are present, CustomerId wins**: a wrong ID fails the row even if the email is right. |
| `CompanyLocationId` | B2B mode only             | Required on every row when the job runs in B2B mode; the credit attaches to the company location instead of a customer.          |

Additional constraints:

* **File size:** 5 MB maximum. Split larger files into multiple jobs.
* **Amounts are always positive.** Whether the job credits or debits is set on the job, not per row.
* **Duplicates are not deduped.** Two rows for the same customer credit that customer twice. Clean your file before importing.

## Run an import

1. Open **DollarBack admin → Bulk import**.
2. In the **Upload CSV File** section, click **Choose CSV File** and select your file.
3. Set **Action Type**: **Credit** or **Debit**.
4. For credits, set **Expiry Days**: how many days until the imported credit expires. `0` (the default) means never expires. The field is disabled for debits; expiry applies to credits only.
5. Choose your toggles:
   * **Notify Customers**, "Send notification email to customers": each credited customer gets the store-credit-credited email.
   * **Send to Integrations**, "Send event integrations": emits the credited/debited events to Klaviyo, Omnisend, and Shopify Flow, exactly as an organic credit would.
   * **B2B Mode**, "Apply store credit to a company location. CSV must include a CompanyLocationId column." See [B2B store credit](/dollarback-store-credit/analytics-data-and-account/b2b-store-credit.md).
6. Click **Import CSV**.

{% hint style="warning" %}
Think before enabling **Notify Customers** on a large migration import: every row sends an email. For silent migrations, leave it off.
{% endhint %}

## How jobs run

A job moves through: **pending → processing → completed / failed / stopped**.

* **Rows commit individually**, in small batches. There is no all-or-nothing transaction: a job that fails halfway has still applied everything it processed.
* **Stop Import** halts the job but **keeps all rows already processed**. Don't re-run the same file after a stop; the processed customers would be credited again.
* **There is no automatic per-row retry.** A failed row stays failed until you fix it and import a corrected file containing only those rows.
* **Unknown customers don't kill the job.** A row whose Email/CustomerId matches no customer is logged as "Customer not found" and processing continues with the next row.

## Read the job log

Each job in the history keeps a downloadable log with one entry per row:

| Log column     | Contents                                                   |
| -------------- | ---------------------------------------------------------- |
| Customer ID    | The row's resolved (or attempted) customer ID.             |
| Customer Email | The row's email.                                           |
| Action Type    | Credit or debit.                                           |
| Amount         | The row's amount.                                          |
| Currency       | The row's currency.                                        |
| Status         | Whether the row succeeded or failed.                       |
| Message        | The per-row reason on failure (e.g. "Customer not found"). |
| Timestamp      | When the row was processed.                                |

## Verify it works

Run a tiny test file first: two or three rows including yourself. After the job completes, check the customers' balances, then confirm the rows also appear in **Analytics → Activity**, under the **Credits earned** view. Remember that imports count toward outstanding liability but are excluded from the Overview's **Cashback issued** card and all campaign figures; see [Understand your analytics](/dollarback-store-credit/analytics-data-and-account/understand-your-analytics.md).

## Common issues

* Rows failed with "Customer not found", the upload was rejected, or a job stopped early: see [My bulk import failed](/dollarback-store-credit/troubleshooting-and-faq/bulk-import-failed.md) for the full diagnosis checklist.
* A customer was credited twice: the file contained two rows for them, or the same file was imported twice; duplicates are not deduped.
* The page says bulk import isn't available: plan gate or development store; see the hint at the top.

## Related articles

* [My bulk import failed](/dollarback-store-credit/troubleshooting-and-faq/bulk-import-failed.md)
* [B2B store credit](/dollarback-store-credit/analytics-data-and-account/b2b-store-credit.md)
* [Migrating from another loyalty app](/dollarback-store-credit/getting-started/migrating-from-another-loyalty-app.md)
* [Export balances & reports](/dollarback-store-credit/analytics-data-and-account/export-balances-and-reports.md)
