What’s the Shopify maximum import limit? (Updated on 15 Dec, 2017)

Searching For Maximum - 100'000 - progress - 4 hours remaining

With this exercise our goal is to find the Shopify maximum points. (Updated on Dec 15, 2017 with new speed improvements)

We will start with basic thing – by importing 100k Products, and move up from there.

Day 1: 100’000 Products Import

Before we started, it was estimating 2d 7h min to complete, which would be the time of single-stream import.

But we will have 10 streams importing in parallel, so let’s see where this takes us.

Shopify maximum import speed

Few minutes later the estimated time dropped to just 7h 9 min, because all the 10 parallel imports are working like crazy!
We are moving at the speed of 0.264 seconds per Product, which is basically 3.79 Products per second, or 227 Products per minute, or 13k Products per hour.

It’s done! Our Shopify store now has 100’691 Products!

Searching For Maximum - 100'000 - done


What next?

You make a guess! ūüėČ

OK, look! Pressing “Import” button now…

Big Import of Collections, Customers, Discounts - before start

Alright, the weekend has passed, and I admit, we had some bumps – we had wrongly formed Discounts import table which was failing. So we decided to cancel the import, fixed the table, and imported again. We want the “finding maximums” kind of results here.

Here they are:

As you can see, the first kind of maximum is found. That is – we have hit the Shopify limit of 5000 Smart Collections.

Other than that, 10k+ Custom Collections, 100k+ Customers, 20k+ Discounts. Not bad at all, Shopify! Very not bad at all!


Should we continue?

Off course, we should, and we will…

Tune into our Twitter account @excelify_io for further tests and updates.

How to migrate customers to your new Shopify store and activate their new accounts with MailChimp?

Send campaign

When you are migrating your store to Shopify, you definitely want to take your customers with you. You need to migrate them and invite each customer to activate their accounts. This is how you do it with Bulk Import Export with Excel app:

  1. Import list of customers to Shopify.
  2. Export those new customers from Shopify by generating Activation URLs.
  3. Import list of customers with their activation URLs to MailChimp (or any other mass mailing service).
  4. Send out e-mail campaign to new customers from MailChimp with nice invitation to activate their accounts.


It may look complicated, but trust me, when you will do it once, and understand the system, this will take you not more then 15 minutes to set up everything.


1. Import list of customers to Shopify

If you are migrating customers from your old Shopify store to new Shopify store, then you just use this same app in both stores: export from old, and import into new one.

If you migrate your customers from another platform, they still should have the capability to export customers to some file. Exported file will be different for each platform, but usually there are such fields as: email, first name, last name, phone number, company name, address, shipping address, billing address, etc.

For example, let’s take this export from some other platform:

Customers' export

Prepare data file for the import. App needs particular format for importing customers’ data. It can be found in the template. You need to transfer data from your export file into import file or edit exported file to mach that template.

  • Columns ID,¬†State,¬†Accepts Marketing, Updated At, Total Spent, Total Orders, Last Order Name, Note, Verified Email, Tax Exempt, Tags,¬†Address ID¬†can be left blank or deleted to make things more simple.
  • If you have several addresses for one customer, for example, shipping address and billing address, you should provide them in different rows. Add another row and fill in¬†Email¬†column with the customers email, and second (third, forth, etc.) address.
  • Address Is Default shiuld¬†be filled with¬†TRUE,¬†if there is more then 1 address for the customer. One of the addresses will be default.
  • Created At¬†can be filled with date_registered or todays date.
  • remember to name the sheet “Customers”
  • Here is example of my file:¬†Import file

Import customers with the app.

Imported customers

Yuhuuu! Customers are imported!!!

At this moment we just imported customers’ data into Shopify store. If customer would like to login, he or she does not have the password. And actually, how the customer will know about the new store? We need to notify our customers about our brand new marketplace and ask them to activate their accounts. Let’s do that!


Export list of customers from Shopify with generated Activation links.

Shopify provides the functionality to send account invite for non-active customers. Open any customer data we just imported and see Send account invite right under the customer name: Account invite

Click on Send account invite and you will get the form for email: 

I filled it in with information I want to provide to the customer. Click on Review email: Review email

Click Send notification and you will get the email with activation link. You can test this and activate account. Activation email


Clicking on Activate your account will bring you to the Activation page: Activation page


Doing like that you can send Activation email to one customer at a time. And if you have 100 or 1000, or even more customers?


We will save time and send activation emails in bulk.

We need to get Activation URLs for all customers for that.

To get this data, lets export customers customers with Bulk Import Export with Excel app. Check Activation URLs when exporting:

You will get Activation URLs in the Export file. Exported file

There are a lot of columns, but we will need only 4 of them Email, First Name, Last Name and Activation Account URL. So, I will delete all other columns:  File for import


Create the list of customers in MailChimp.

There is a service MailChimp, that allows to send notifications, campaigns, newsletters etc. to lists of customers. As we want to send Account activation emails to several customers at a time, let’s first create the list of customers.


Login (or register) into MailChimp service.

Click on Lists -> [Create List]¬†and fill in list data. I called my list “Migrated customers”:Create list

Click Save.

Of course, we will not add customers to the list manually ūüôā We will import the date from the Excel we exported from the Shopify earlier (the one with Activation URLs). Click Imports subscribers:¬†¬†Import customersWill import from xlsx file:¬†Import from xlsx¬† There are 3 mandatory fields: Email Address, First Name, Last Name. We will need one more field: Activation URL (as we need to invite customers to activate their accounts in our new shop).¬†Import

Now we need to open the exported Excel, copy all data and paste it to the MailChimp form:Import into MailChimp

Press Next.

Now we need to help MailChimp to understand what data about customers we want to import.

Imported customers


In the column names select appropriate title and press Save. Do it for Email Address, First Name and Last Name columns. For Activation URL column you need to add New column name. I will call it Activation URL.Imported columns

Press Next.

Import contacts

Import contacts.

Now we have all customers’ data imported:¬†¬†¬†Customer contacts

We will do one more thing. Go to the Lists. Open Migrated Customers list. Click Settings -> List fields and *| MERGE |* tags

List settings

Here we will change tags for the First name field and for the Activation URL field. Set NAME and URL accordingly. Press Save Changes. We will need this when creating Activation email.

List field tags


For the testing purposes I will create one more List and call it Test Customer. This list will contain only one customer with my own email. I will copy real Activation URL (from the Excel) and also add field tags as in the previous step. With this list I will test, if email is sent as I wanted it to be and if Activation URL is working correctly.

Test Customer


Create the campaign in MailChimp for sending Activation emails and send.

Now we need to create a New campaign in the MailChimp with what we will send the information to our customers and invite them to activate accounts. Click Campaigns -> [Create Campaign]

Create New Campaign

Choose Create an Email (as we will send the Campaign via email).

Name your campaignCampaign name

Choose the list of customers –¬†Migrated customers¬†Campaign listFill in Campaign info:¬†Campaign info

Pay attention to the checkbox¬†Personalize the ‘To” field. I Check it and put field tag *|NAME|* *|LNAME|* ¬†in recipient name. Remember, we added these tags earlier, when creating the list? So, now each customer will get the personalized email, with his/her First name and Last name as the recipient.

Click Next.

MailChimp provides a lot of templates for email campaigns. I will choose “Make an Announcement” template

Choose template

There will be prepared boxes that you need to modify and deleted what you do not need. Imagine how do you want the email to look like. Do you need any images? What text will you put there and attract your customer and make him/her interested to activate account.

Editing Campaign

When you have approximate idea, click on the appropriate box and modify it.

I have added the Logo. Then I edited the box with the text. Edit Activation email

I deleted boxes with images and all other except the button.

I edited the button as follow: Edit Activation button

In the Web address (URL) field I put URL tag that we added, when creating the list. This button will take each customer to his/her own Account activation page, as it will take his/her particular Activation URL from the list.

Press Save and Close.

Now we can test it with test email. Go Preview and Test -> Send a test email.

Send test email

Provide the email, where you want to send test and click [Send Test].

Here is mine Test email

Looks goof to me. Activation button will not work here, as this is just a test. But I would like to test, if the button will work in the real email, so I will send this Campaign to my Test Customer list (remember, I have created one?)

I will click Next Choose test list

Here I will change the list. Click on [Edit]  for the List and choose Test Customer list Test customer

Click Next -> Next -> Next. And then click Send!

MailChimp will as you one again Send campaign

Click Send Now!

And now wait for the email ūüôā

I have got mine Test campaign email

Now I see there Name and Last name. And [Activate Now]  button will take me to the Activate Account page Activate Account Page


Now we should send Activation emails to the real customers.

Go Campaigns. For the New Store Account Activation campaign choose ReplicateReplicate campaign

Choose Migrated Customers list Choose list

Click Next, Next, Send.

You will be asked again if you want to send. There should be 4 subscribers (in my case). Click [Send Now].

And we are done!

Metafields import

Speed:¬†Metafields import speed doesn’t depend on Metafield count anymore. Even for 100 Metafields per item, it will import as quickly as with no Metafields.

Delete: You can delete Metafields for items just by clearing values in that Metafield column, and importing.

Set type:¬†Metafield can have “string” or “integer” type, which is now auto-detected from Excel cell type, and set correctly when you do the import.

Read more: Metafields template documentation

How to maximize Shopify bulk import speed?

Shopify import speed

There are different ways how you can gain maximum import speed when loading data to your Shopify store. Some are faster than others.

I will describe two basic import scenarios – one for importing with the goal to create new items, the other – with the goal to update existing items.

By “items” I mean: Products, Collections, Customers, Discounts, and so on.

While Shopify CSV file import is also quite fast, the following instructions apply to¬†“Bulk Import Export Update with Excel” Shopify app and its Excel file format for importing and exporting data.

Overall import logic

A bit of background logic, how importing to Shopify happens.

At first, an item is identified by “ID” column value. ID is the Shopify internal identifier for an item. You can’t assign them by yourself – you can only get them out by exporting existing items.

If the ID column value is empty or such ID doesn‚Äôt exist – then it tries to find the existing item by “Handle” value. In Discounts case the handle is the “Code” column value; in Customers case that is an “Email”, but for the sake of common terminology – app will refer to them as “Handle” in all those cases.

If it finds existing item by ID or by Handle, then it will update that item by changing only fields you provided in the import, and leaving other fields as they were. If it will not find such item, then it will create New.

So if you really want the fastest possible import speed, here’s what you do in each scenario.

Fastest import of New items

Keep the ID column empty, or remove it entirely from the import file.

Then it will not even try to find existing by ID, it will only check if item with such Handle exists – that is needed to determine if it needs to create New or do the Update of existing.

If your store is relatively small, import speed by Handle will be the same as by ID.

Fastest Update of existing items

First – help the app to identify existing items quickly

Shopify import upadte by ID

Have the ID column with ID values from the export file.

If you have ID for each item, and if item with such ID actually exists, then it will be the fastest way to update them – it will do one single “push”, and that’s it.

You don’t have to have ID – you can have just the Handle. Then it will find by Handle – it will be roughly two times slower, but still ok.

You will have the slowest speed if you have IDs which don’t exist. Because Then it will try to update by ID, which it will not find, then it will need to search by Handle, and then do the update. So it will be three times slower.

So – whenever you can, update by ID, the correct one.

Second – import only fields you need to update

Shopify import speed - delete unneeded columns

When you import your data, whatever item columns you import, all of them be sent to Shopify. So to improve the speed, import only those columns, which you really need to update, and avoid importing columns, which you are sure, are already correct.

Especially big difference is made with uploading images. Every time you import an image, Shopify will re-download that image. That adds at least one second to each item import, which might not seem a big deal, but it accumulates big time – imagine if you are importing several thousands of items. So, if you know you have your images already in place, just remove image columns from the import file.

Similar principle is about “related” details for each item. For example, do you need to update Product Variant data, when you are updating the Product Tags? Probably not. If you need to just update Product Tags, then you just remove all the Variant columns (and rows), and it will not have to touch Variants at all, again, gaining a bit of speed per item. Similarly, if you don’t need to update related Products for Manual Collections (Custom Collections), just remove those columns (and rows) form import file.

The same also with Metafields.


In certain cases, the app will “pre-load” existing items from your store, to make the searching existing items faster. That’s because pre-loading is 250 times faster than identifying items one by one, so you can imagine the impact it has on overall import speed.

If you start the import and it seems like it’s not doing anything, give it a minute or two, because it decided that in total it will be quicker to pre-load your existing items, and then do the update on them.

Don’t check if items already exist

If you are absolutely sure that your import is just creating new items, and they don’t exist in Shopify, you can force the app not to load any of existing items by any of method. Just be aware that if items do exist, then there might be failed imports, errors, duplicates, or any other unexpected updates if those items exist.

Force not to check if items already exist in Shopify store


Which scenario was chosen?

You can see, how the existing item was identified, when you look in the Import Results Excel file (which you can download after import has finished).

In the “Import Comment” column you will see the following comments (in the order starting from fastest):

Update: Pushed by ID If you see this, it means you did the best job in helping the app to identify the existing item.
Update:¬†Found by ID (pre-loaded) Here the app searched for the existing item by ID in the pre-loaded items list, because it can’t push it, it needs additional data about the item to be able to do the update. You can improve this by removing columns, which you don’t need to update.
Update: Found by ID The same reason as for pre-loaded, just app decided that in this case searching items one by one is faster than pre-loading all existing.
Update:¬†Found by Handle (pre-loaded) Either you don’t have the ID, or the item with such ID doesn’t exist in this store. But it exists with the same Handle (or Code in case of Discounts, or Email in case of Customers). Also, app decided that pre-loading items will be the fastest way to find them.
Found by Handle The same reason as for pre-loaded, just app decided that in this case searching items one by one is faster than pre-loading all existing.
New The new item was created – meaning, that it didn’t find any existing item by ID or by Handle.

Summary import speed tips

  • Identify items by correct ID.
  • Remove columns and rows form import file which you don’t need to update.

What to do next?

  1. Review the “How it works?” tutorial.
  2. Install the “Bulk Import Export Update with Excel” app if you haven’t already.
  3. Upgrade to Big Plan or Enterprise Plan to give yourself to enjoy all the other benefits that come with them.

How to import several product images from one row?

So you are in this situation when you have to import several product images, but you hate to copy rows?

Here’s how you import several images per Product as one row – by separating image URLs with ; (semicolon).

Step 1: Prepare Import File With Several Product Images

Prepare your import file, where you have one row per Product, and put all your images in the same “Image Src” column, delimited by ; (semicolon).

For example:

https://i.com/image-1.jpg ; https://i.com/image-2.jpg

To change images for a Product in this way, you need at minimum the following columns in your import file:

  • ID (or Handle)
  • Image Src

Shopify import several product images separated by semicolon

Step 2: Import That Excel File With Images

Import that with Bulk Import Export Update with Excel app.

Shopify Product several images import

Step 3: View Imported Images

Shopify imported several images delimited by semicolon

Good To Know

  1. You can have up to 250 images per Product.
  2. You can add, replace and update images for products the same way.
  3. You can combine both image import methods – have them as several rows, and split by ; (semicolon) in the same cell. As visible in the example image with Product “Jumping Dog”.
  4. Remember to give name for sheet “Products”, so that it knows which sheet contains Products import.
  5. You can update many Product fields at once with the same import file – just put them as additional columns.


Where To Go From Here?

  1. Install the Bulk Import Export Update with Excel app from Shopify AppStore and try bulk update for Free on your own store.
  2. If you want to know more about this app, look the How it works? tutorial and video.
  3. Read the detailed Field Descriptions.
  4. Read other Tutorials.
  5. If you are not sure how to prepare the import file, ask our Support, we will teach you, or do that for you.