What’s newFind any order, customer, product or setting with one admin search. See all features

How-to › Product setup

How to Import Products from a CSV

Add dozens of products at once from a spreadsheet. Make one product by hand, export it as your template, copy its row for each new product and import. 10 parts.

Quick links

Where to find it:WP Admin › EasyCart › Products › Products › Import

Before you start

How it works

One product by hand, one export as a template, then a spreadsheet does the rest.

How it works

One product by hand, then a spreadsheet does the rest

What you need. WP EasyCart and a spreadsheet program, such as Excel, Numbers or Google Sheets. CSV import and export are in the free plugin.

The idea. You make one product by hand, set up the way you want the rest. You export it. That file is your template: every column is already named and formatted correctly. You copy its row once for each new product, change what is different, and import the file. Fifty products take about as long as typing fifty lines.

The one rule. A row with a product_id of 0 adds a new product. A row with a real product ID updates that product. Get this right and nothing else can go badly wrong.

Nothing is written until you confirm. The store reads your file first, shows how many products it will add and update, lists any problem rows and waits for you.

Do it

Five steps

Make a product, export it, add your rows, import and check.

Step 1. Make one product by hand

Products › Add product

Go to EasyCart › Products and press Add product. The Add a product page opens. Say what you are selling, or press Skip the questions for just the name, price, photos and description. Fill them in, add a photo, and press Create product.

Open it from the products list and set it up the way most of your products will be: the same categories, weight, tax, shipping and option sets. Everything you set here is copied to every product you make from it, so a few extra minutes now saves editing each product later.

A new store with no products? You can start from a file instead. In the products list, press Import and choose A spreadsheet ( CSV ). Under No file yet?, Download a starter template gives the columns a new store needs and two example products, already set to show in your store. Replace the examples with your products and go to step 4. The steps below work the same way with it.

Step 2. Export it as your template

Tick it, then Export › Export selected

In the products list, tick the product you just made. Press Export in the header. The Import & export products panel opens on its Export tab. Press Export selected. A CSV file downloads with one row: your product.

The same tab has Export all, for every product in the store. The Help tab has the starter template and Download every column, the full header row with one example product. Your own export is the better template once you have a product, because it already holds your settings.

The Import & export products panel, Export tab.
The Import & export products panel, Export tab.

💡 Note: Keep the file you exported. It is your backup if an import goes wrong.

Step 3. Add a row for each new product

Copy the row, then change what is different

Open the file in your spreadsheet. Row 1 is the column names. Leave it alone. Row 2 is your product. Copy row 2 into the rows below it, one row for each new product. Then, in each new row:

1. Set product_id to 0. This makes it a new product.
2. Give model_number (the SKU) a value no other product has.
3. Change title, price and description.
4. Put the new picture’s address in image1 (see below).
5. Clear the post_id cell. The store makes each new product its own page.

Pictures. Upload your pictures to Media › Add New first. Click a picture in the Media Library and press Copy URL to clipboard, then paste it into that product’s image1 cell. image1 to image5 take a picture’s full web address, and the store shows it from there. If product_images has a value in your template, such as ml:123, clear it in the new rows, because a value there replaces image1.

Categories. categories holds category IDs, separated by commas, such as 4,7. The template’s value carries over. To use other categories, take their IDs from the ID column of the Categories list.

Leave every other column as it is. Save the file as CSV (comma separated), not as a workbook.

⚠️ Careful: Every new row needs product_id 0 and its own SKU. A row that still has the template’s product_id overwrites your template instead of adding a product.

Step 4. Import it, and read the preview

Import › A spreadsheet ( CSV )

Back in EasyCart › Products, press Import and choose A spreadsheet ( CSV ). The panel opens on its Import tab. Drop the file in or choose it. The store checks it at once and shows a preview.

Read the counts. The preview shows how many rows are new products, how many are updates and how many are problem rows. Adding 40 products? It should say 40 new products and 1 update (your template row, which changes nothing). Delete the template row from the file if you prefer.

Fix anything listed. Problems that stop the import are shown at the top, such as a column name that is misspelled, with a suggestion. Rows that will be skipped are listed with the reason, such as a SKU used twice.

Press Import with the number on it. A progress bar counts the rows, so keep the window open. At the end you see how many were added, updated and skipped, with the reason for each skipped row.

The Import tab: drop a CSV, or download a starter template under No file yet?
The Import tab: drop a CSV, or download a starter template under No file yet?
The products list’s Import button: WooCommerce, Square and A spreadsheet ( CSV ).
The products list’s Import button: WooCommerce, Square and A spreadsheet ( CSV ).

💡 Note: Try five rows first. Import them, check them, then run the whole file.

Step 5. Check a few products

Open three and look

Refresh the products list and open two or three of the new products.

1. Are the title, price and description right?
2. Is the picture the one you meant?
3. Are the categories right?
4. Open the store in a private window and find them.

Something wrong? Fix it in the spreadsheet and import again, or see the next part. Next time, export the products you made, so each row carries its new product ID and the import updates them instead of adding them again.

Good to know

Bulk edits, columns and problems

Changing products you already have, the column formats, customers, and when it goes wrong.

Change many products at once

Export, edit, import back

The same tools edit products you already have. Tick the products, or none for everything, and export them. Change prices, titles or stock in the spreadsheet. Import the file back.

Keep the product_id column. It links each row to its product. If a spreadsheet drops it, or you clear it, every row becomes a new product and an update of 500 products becomes 500 copies. The preview catches this: if it says new products where you expected updates, stop.

Delete the columns you are not changing. Every column in the file is written to every row. Only product_id and model_number must stay. A file with just those two and price changes prices and nothing else.

Large catalogs export as several files. The size of each file is Products per export file, under Fine-tune in Settings › Products, which starts at 500. Lower it if your export times out.

The columns you will use most

And the formats for the special ones

Column names must match the export exactly, in lower case with underscores.

Everyday columns. title, description, short_description, price, list_price (the previous price, shown struck through), stock_quantity, weight and activate_in_store (1 for live, 0 for hidden). model_number keeps letters, numbers, dashes, underscores and slashes. Other punctuation is removed.

More than one picture. product_images holds a gallery as Media Library IDs, such as ml:123,ml:124. The first is the listing picture. An image’s ID is in the address of its edit screen, as post=123.

IDs. categories, manufacturer_id and option_id_1 to option_id_5 take IDs from the ID column of the Categories, Manufacturers and Option Sets lists, on a wide screen. categories replaces the product’s categories with the list you give.

Volume and role prices. price_tiers takes quantity,price pairs, and b2b_prices takes role,price pairs, for example Wholesale,8.50. Each replaces what the product has now. These are PRO features.

Variations. The CSV does not carry variation rows, meaning the SKU, price and stock for each size and color combination, and it cannot make option sets. Link sets you already have with option_id_1 to option_id_5, then set each variation on the product. With PRO, Update variations from a spreadsheet in its Options & variations section downloads them as a CSV and reads it back: variations the file leaves out are removed.

Yoast meta descriptions. While Yoast SEO is active, the export ends with a yoast_meta_description column. Edit it like any other column and the import writes it back. An empty cell removes the description.

Importing customers too

Only if you are moving accounts across

Customers have their own import. Open EasyCart › Users › Customers and press Import Customers. It works the same way: a preview, then chunks of 100 rows, with a reason for every skipped row.

A row with a user_id updates that customer. A row without one creates a customer, and needs an email that is not already in the store. Turn on Update existing by email to update a customer who already exists instead of skipping the row. A user_level column sets the role, so this is how you put a list of trade customers into a wholesale role. The role must exist, or the row is skipped.

Passwords are never imported. A new customer gets a random password and uses Forgot password to set their own.

Users › Customers, with the Import Customers button.
Users › Customers, with the Import Customers button.

If it does not work

The usual reasons an import stops or misbehaves

Everything is a new product. The product_id column is missing or all zeros. Use the IDs from your export.

A new product shows the template’s picture. Its image1 cell still has the template’s address, or product_images was not cleared.

Rows were skipped for their SKU. Two rows share a model_number, or one is already used by a product in the store. Each SKU must be new.

That is not a text CSV file. Save the sheet as CSV (comma separated), not as an Excel workbook.

A column is not a product field. It is misspelled, or has capitals or spaces. Rename it as the preview suggests.

The import stopped early. The import stops at the first blank line or the first row with no model_number. Remove blank lines. If the server stopped answering, the rows already imported are kept. Upload the file again to finish.

The file is over the upload limit. The panel says so, with your server’s limit. Split the file, or ask your host to raise it.

Prices show blank. A column that was in the file but empty overwrote the value. Import again from your original export.

Some fields did not change. A product whose details another service manages, such as a fulfillment partner or Square, keeps those fields, and the results say so.

Products from an earlier import open the wrong page. Run Diagnostics. It finds products an earlier import tied to a menu item, a page or an image, and links each back to its own product page without changing anything else.

Still stuck? Open a ticket at wpeasycart.com/my-account.

Keep going

Related panels

Product Importer

Every column and the panel in full.

Products

The products list and its bulk actions.

Categories

Category IDs for the categories column.

Option Set Manager

Option set IDs, and option sets in full.

User Accounts

Customer accounts and roles.

Ready to run your store on WP EasyCart?

Everything in this guide works with the free plugin. PRO and Premium add subscriptions, memberships, wholesale pricing and more. Try every PRO feature free for 14 days.

The WP EasyCart admin: orders and offers
Updated on November 6, 2026