A customer list from an old store, a newsletter tool or a spreadsheet rarely uses Shopify's headers. It says first_name, postcode and marketing_opt_in. Shopify's customer CSV says First Name, Default Address Zip and Accepts Email Marketing. This guide lists the rules Shopify publishes for that file, then walks one synthetic export through the mapping.
What Shopify asks of a customer CSV
From Shopify's Help Center (sources at the end of this section):
- The first line holds the column headers. Headers aren't case sensitive.
- The Email column is required and must be present, but a value in it can be blank.
- Accepts Email Marketing, Accepts SMS Marketing, Accepts WhatsApp Marketing and Tax Exempt take only
yesorno. - Default Address Province Code and Default Address Country Code take codes, not names: the two-letter state or province code and the ISO Alpha-2 country code, such as
TXandUS. - Tags is a comma-separated list in one cell, wrapped in quotation marks when it has more than one tag.
- The file must be UTF-8 and 15 MB or smaller. Split a bigger list into several files.
- Total Spent and Total Orders aren't imported, order information can't be imported with a customer CSV, and customer passwords can't be migrated.
- Customers with duplicate email addresses or phone numbers are skipped and aren't tagged. Shopify imports only the last profile with that email or phone.
On marketing consent, Shopify says to set each consent column from that contact's history for that channel. Enter no for anyone who unsubscribed, never opted in, marked your emails as spam, or whose address bounced.
Shopify sources, read November 1, 2026: Importing and exporting customer lists · Solving customer CSV file errors
Pick the target headers
Shopify's customer CSV template uses these columns: First Name, Last Name, Email, Accepts Email Marketing, Default Address Company, Default Address Address1, Default Address Address2, Default Address City, Default Address Province Code, Default Address Country Code, Default Address Zip, Default Address Phone, Phone, Accepts SMS Marketing, Accepts WhatsApp Marketing, Total Spent, Total Orders, Note, Tax Exempt, Tags.
Only list targets your export can fill, and always include Email. MapMyCSV won't build the full CSV until every target column has a source, so a target with no matching data blocks the download. Skip Total Spent and Total Orders too, since Shopify doesn't import them.
Worked example: an old store's customer export
Two synthetic files you can run in the free preview. Not customer data.
- customers-export-sample.csv: 5 customers with the headers
first_name,last_name,email,marketing_opt_in,company,address_1,city,state,postcode,country,phone,tags,total_spent. - shopify-customers-headers.csv: one header row with 12 of Shopify's column names,
First Name,Last Name,Email,Accepts Email Marketing,Default Address Company,Default Address Address1,Default Address City,Default Address Province Code,Default Address Country Code,Default Address Zip,Phone,Tags.
- Open the free preview. Drop
customers-export-sample.csvon Input A. - Open
shopify-customers-headers.csvand paste its one line into Input B. - Read the column mapping before you read the rows.
| Shopify header | Source picked | Shown as | What to do |
|---|---|---|---|
First Name | first_name | 100% match | Keep |
Last Name | last_name | 100% match | Keep |
Email | email | 100% match | Keep |
Accepts Email Marketing | marketing_opt_in | 20% match | Keep. The values are already yes or no |
Default Address Company | company | 91% match | Keep. One row is blank |
Default Address Address1 | address_1 | 53% match | Keep |
Default Address City | city | 53% match | Keep |
Default Address Province Code | none | no match | Choose state. The values are two-letter codes |
Default Address Country Code | country | 45% match | Keep. The values are two-letter codes |
Default Address Zip | none | no match | Choose postcode |
Phone | phone | 100% match | Keep. One row is blank |
Tags | tags | 100% match | Keep. One row is blank |
The percentage scores the header labels, not the values. marketing_opt_in shares only one word with Accepts Email Marketing, so it scores low even though it's the right column. Check the values before you trust a low score or a high one. state and postcode share no words with Shopify's names, so you pick them from the dropdown and they show as manual. total_spent has no target, so it's left out of the mapped file.
With the two picks made, the five mapped rows are:
First Name,Last Name,Email,Accepts Email Marketing,Default Address Company,Default Address Address1,Default Address City,Default Address Province Code,Default Address Country Code,Default Address Zip,Phone,Tags
Maya,Ortiz,maya.ortiz@example.com,yes,Harbor Freightworks,1200 S Lamar Blvd,Austin,TX,US,78704,+15125550142,"wholesale,vip"
Dev,Raman,dev.raman@example.org,no,"Raman, Patel & Co",45 Elm St,Boston,MA,US,02134,+16175550199,retail
Jo,Lindqvist,jo@example.net,yes,,88 Harbord St,Toronto,ON,CA,M5S 1G6,,retail
Sam,Okafor,sam.okafor@example.com,no,Bright Path Tutoring,9 Pine Rd,Portland,ME,US,04101,+12075550123,
Priya,Shah,priya.shah@example.com,yes,Northwind Dental,310 Congress Ave,Austin,TX,US,78701,+15125550110,vip
The preview says "2 rows need attention before you import". Every target column is checked for blanks, so read each flag against Shopify's rules:
- Jo Lindqvist has no company and no phone. Shopify describes the company column as "if applicable", and the two sample customers in its template are one with an email and a phone number and one with an email and a shipping address. Leave these blank or fill them from your records.
- Sam Okafor has no tags. A blank Tags cell just means the customer gets no tags.
Things the preview doesn't flag:
- Tags with a comma stay in one cell.
wholesale,vipcomes out quoted, which is how Shopify expects a list of tags. So doesRaman, Patel & Co. - Codes come through as written. This export already uses
TX,ON,USandCA. If yours saysTexasorUnited States, MapMyCSV copies that too, and Shopify reports the country, region, state or province as not valid. Fix those values in the source first. - Leading zeros stay.
02134and04101come through as text, and the CanadianM5S 1G6keeps its space. Some spreadsheet apps strip leading zeros if you open and re-save the file, so import the file as downloaded.
What MapMyCSV doesn't do here
- It doesn't connect to Shopify or run the import. You download the mapped CSV and import it under Customers in your Shopify admin.
- It doesn't convert values.
TRUE,1orsubscribedin a consent column, or a full state name, comes out exactly as it went in. Shopify's consent columns take onlyyesorno. - It doesn't remove duplicate rows. Shopify skips customers with a duplicate email address or phone number, so check for those before you import.
- It doesn't bring over order history or passwords. Shopify doesn't import either from a customer CSV.
- Line endings: the downloaded CSV is UTF-8 with Windows-style (CRLF) line endings. If Shopify says your CSV is in the wrong format, its troubleshooting page says to save the file as UTF-8 with LF line endings.
- Dates: any target header with the word "date" in it is written as YYYY-MM-DD, and slash dates are read month first. That includes a date metafield column such as
customer.metafields.facts.birth_date. This example maps no dates. If you map one, check it first. The dates and leading zeros guide covers how.
Before importing a full list, import the first few rows and open those customers in Shopify. Check the name, address and consent landed in the right fields, then import the rest. The general CSV column mapping guide has a longer review sequence.
Questions
Which column does a Shopify customer CSV need?
Email. Shopify says the Email column is required and must be present, but the value can be blank. If the column is missing, the import gives an error. Headers aren't case sensitive.
Can I import order history or total spent with my customers?
No. Shopify doesn't import the Total Spent and Total Orders columns, and order information can't be imported with a customer CSV.
What goes in the Accepts Email Marketing column?
Only yes or no. The same applies to Accepts SMS Marketing, Accepts WhatsApp Marketing and Tax Exempt. Shopify says to enter no for contacts who unsubscribed, never opted in, marked your emails as spam, or whose address bounced.
What happens to duplicate emails in a Shopify customer import?
Shopify skips customers with duplicate email addresses or phone numbers, doesn't tag them, and imports only the last profile with that email or phone. Remove or fix duplicates before you import.