Getting started

Importing your customer list from a CSV

3 min read · Updated 2026

Most shops import their starting customer list from a CSV — exported from a POS, an old marketing tool, or a spreadsheet you've been keeping by hand. Here is what we need, what's optional, and how we handle the messy parts.

The minimum viable file 2 columns

We accept any CSV with two columns: name and email. That's the floor. Even with nothing else, the customer database loads, segments work, and you can start sending alerts.

If your file has only an email and no name, we'll fall back to using the email's local part (everything before the @) as a display name. You can rename anyone later from the customer detail page.

Optional columns that unlock more

  • phone — required for SMS sends. International format (+1 …) preferred, but we attempt to normalize US-style 10-digit numbers automatically.
  • opted_inyes/no/1/0. Defaults to yes if the column is missing. Always be sure you have a lawful basis to import as opted-in.
  • last_purchase_date — any ISO-ish date (YYYY-MM-DD, MM/DD/YYYY). Feeds the tier scoring and the lapsed-customer math.
  • lifetime_spend — a dollar amount, with or without the $ sign. Drives Gold / Silver / Bronze tier placement on day one.
  • tags — comma-separated. We split them and create any tag that doesn't exist yet.
  • source — free text. Used as a filterable segment ("Show me everyone we got from the Holiday 2025 newsletter.").

How we handle duplicates

If two rows in your CSV share the same email, we merge them at import time — the later row's non-empty fields win. If your CSV contains an email that already exists in your account, the import updates the existing customer instead of creating a duplicate. We never delete anything on import.

If you want to replace a customer's data rather than merge, delete them first from Customers, then run the import.

What happens after upload

You get a preview screen with the first 25 rows and which columns matched. Confirm and we run the import in the background — usually a few seconds for under 5,000 rows, a minute or two for larger files. Tier scoring runs once at the end. You'll get an in-app notification when it's done.

If anything fails to parse — a malformed date, an unusable email — we skip that row and surface the line number in the import report. The rest of the file still loads.

Ready to try it?

Set up Restock Notify in ten minutes.

Start free →