All guides

Import customers into Shopify: one row per email, UTF-8, and tags in quotes

Shopify reads a customer CSV in its own template, saved as UTF-8, and by Shopify’s help it treats two rows with the same email address or phone number as one customer: it imports the last and skips the others, without asking which one you meant. On a list merged from two systems, that can throw away the complete record and keep the sparse one. Choosing the survivor yourself, first, is the part of the import no one tells you about.

What Shopify’s import expects

By Shopify’s help: a UTF-8 file under 15 MB, headings from its customer template — download the current one from the import dialog, since the list has changed over time — tags written as one quoted value such as "vip,wholesale", and at most one row per email address and per phone number. A row sharing either with another is skipped, and only the last of them is imported.

The Total Spent and Total Orders columns of an export are not read back in on import, so a list round-tripped from another store arrives without them whatever you do.

Choose which copy survives

The button opens the duplicate remover set up for Shopify: comparing on the Email column, ignoring capitals and stray spaces, and keeping the most complete copy of each customer. In the sample, Grace appears twice — a full row with her phone and a note first, and a sparse one later with a trailing space. Shopify would keep the later, sparse row; the remover keeps the full one, and lists the other so you can see it go.

The remover counts two blank cells as equal, so compare on Email only when every row has an address; a list of phone-only customers needs a different approach.

Shared phone numbers and tags

Two customers can share a phone number — a household, a shop — and Shopify will still import only one of them. Do not remove duplicates on the phone column: those are two people, and every customer without a phone would count as the same. Sort by Phone instead, so shared numbers sit side by side — in the sample, Priya and Linus — and clear the number on all but one in the editor. Shopify’s help suggests adding such numbers to the profiles after the import, or merging the profiles there.

Every file written here quotes a value containing a comma, so a tag list stays one value; if a list was assembled by hand and some rows have gained columns, the health check lists exactly those rows.

When the import fails on encoding

Three symptoms, three causes. Shopify refusing the file with Illegal quoting is, by Shopify’s help on common import errors, a quote mark or comma that is not UTF-8 — usually a file Excel saved as plain CSV (Comma delimited), which writes the Windows code page, so a curly quote in a note becomes a byte Shopify cannot read. Names that arrive as José where José was meant are different: the file was UTF-8, Excel opened it as something else, and it was saved again with the wrong letters in it. Question marks where letters should be mean the letters were dropped when the file was saved.

The first is the one this page can fix. The delimiter fixer reads the bytes as what they are and writes a UTF-8 copy: José stays José, a curly quote stays a curly quote that Shopify can now read, and a quoted tag list stays one value. The other two the fixer does not repair. José saved into a file is now its text; each wrong pair still encodes the right letter, so the damage can in principle be undone, but no tool here applies that repair yet. A question mark is a letter that is gone for good. For both, the sure fix is the original export: export it again, and if it has to pass through Excel, save it with CSV UTF-8 (Comma delimited) rather than plain CSV; Google Sheets writes UTF-8 on download.

A stray quote mark of the ordinary kind — one opened and never closed — gives the same Illegal quoting error, and no change of encoding fixes it. The health check names it: it reports the row where a quote mark opens and never closes, which is where to look in the editor.

The sample file

First Name,Last Name,Email,Phone,Tags,Note
Ada,Fictional,ada@example.com,+15555550101,"vip,wholesale",First order in store
Grace,Example,Grace@example.com,+15555550102,"newsletter,returning",Moved to the new address
Omar,Pretend,omar@example.com,,newsletter,
Priya,Sample,priya@example.com,+15555550104,wholesale,
Linus,Notreal,linus@example.com,+15555550104,,Shares a phone with Priya
Grace,Example,grace@example.com ,,newsletter,

Obviously made-up data, small enough to read. Download it and drop it on the tool to see the fix before trying your own file.

Questions

Why were some of my customers skipped?
Almost always a shared email address or phone number. Shopify imports the last row sharing either and skips the rest, so find and resolve the shared ones here before you import.
Which duplicate does Shopify keep?
The last one in the file, by Shopify’s help. The remover here lets you keep the most complete one instead, whichever position it is in.
How do I write several tags for one customer?
As one quoted value with commas between the tags, like "vip,wholesale". Files written here quote such a value automatically, and the health check finds rows where an unquoted list broke the columns.
Shopify says my file is not UTF-8 — what now?
Run it through the delimiter fixer here: it reads the encoding the file is really in and writes a clean UTF-8 copy, accented names intact.
What does Illegal quoting mean in a Shopify import?
By Shopify’s help on common import errors, a quote mark or comma that is not UTF-8, typically from a file Excel saved as plain CSV. Rewrite it as UTF-8 with the delimiter fixer; if the error stays, the health check reports the row where a quote mark opens and never closes.
Why did names import as José instead of José?
The file was opened in Excel as the wrong encoding and saved again, so the wrong letters are now its text. The letters are still encoded in those pairs, but no tool here undoes that yet; re-export from the source and save as CSV UTF-8 (Comma delimited).
Is there a size limit?
Shopify’s help gives 15 MB per customer file. A larger list can be cut into pieces with the first-and-last-rows tool, each keeping the heading row.
Do my customers’ details leave my computer while I prepare the file?
No. Duplicates are resolved and the encoding fixed inside this page on your own device; Shopify receives the file only when you import it there.