Copy WooCommerce products to another store: what carries over

A copy between two WooCommerce stores, checked field by field: what the import brought over, what to finish by hand, and the checks to run afterwards.

Copy WooCommerce products to another store: what carries over

You have a catalog in one WooCommerce store and you need it in another. It may be a new store for a second brand, a rebuild on a fresh install, or a client's store you are taking over. You do not want to recreate every product page by hand, and you want to know what the new store will look like once the copy is done.

WooCommerce has the receiving end built in. Its import screen, under Products → All Products → Import, turns a WooCommerce CSV into products. The file comes from the source store, through its built-in exporter if you can sign in there, or through ScrapeWoo from the store's address alone. We copied a test store with ScrapeWoo's file. Its 8 published products, 5 variations and 11 images arrived in a single run, with every column mapped automatically. Ten details are yours to set in the new store, each listed below with where to do it. Run the import while the source store is online, because the new store downloads the images from it.

How this was checked

October 15, 2026. Two stores on WooCommerce 11.2.1 and WordPress 7.1.3, with the Twenty Twenty-Five theme and no other extension, once in English and once in French. The source held nine products, five variations, twelve images and two reviews. ScrapeWoo's WooCommerce CSV was generated from its public catalog with the current exporter. The file went into an empty store through the Products → Import screen, with the column mapping it preselects. We then read both stores product by product.

The store we copied

The source catalog was built to hold what a real store holds, and a few things a copy can lose:

  • a linen apron on sale, with 12 units in stock, a weight, dimensions, two images with alt text, two categories, two tags and a custom address, natural-linen-apron. It was also featured, carried a brand and a shipping class, pointed to the tea towel as an upsell, and had two approved reviews;
  • a stoneware mug in three colors, with Color as a global attribute and a descriptive Capacity attribute, and a canvas tote in two sizes;
  • a wool throw on sale until October 25, a tea towel out of stock and a gift wrap hidden from the shop pages;
  • an external product that links to the grower's site, a grouped product made of the apron and the tea towel, and one draft.

Categories formed a small tree, Home > Kitchen, and the Textiles category had its own description and image.

Step 1: get the file from the source store

Two kinds of file work, because the destination reads WooCommerce's CSV format either way. If you can sign in to the source store, its built-in exporter writes one. The guide on exporting WooCommerce products sets that route beside the others. If the store is not yours to sign in to, or you would rather not ask, start from its address.

ScrapeWoo works from the address alone. You paste it, review the products the store publishes, keep the ones you want and choose WooCommerce CSV. No login to the store and no API key are needed.

ScrapeWoo's first step, “Connect a store”: a store URL field with the demo address atelier-nova.example and a Detect store button, with the note “No credentials required” The same “Connect a store” step, in dark mode
The first step, on our demo store: the store's public address is all ScrapeWoo asks for.

From our source, ScrapeWoo read the 8 published products and their 5 variations. The file had 34 columns and 13 rows, one per product and one per variation, in UTF-8. In it:

  • each variation row follows its parent and names the parent's SKU in Parent;
  • categories are written as paths, Home > Kitchen, so the import rebuilds the tree;
  • Color carries 1 in Attribute 1 global, and the tote's Size carries 0, as the source had them;
  • the Images cells hold the addresses of the images on the source store;
  • the kitchen set names its two products by SKU in Grouped products;
  • the seed kit carries its link and its button text in External URL and Button text;
  • the apron's brand, Atelier Nord, is in brand_ids.

The draft was not in the file. A draft is not published, and the file holds the published catalog.

Step 2: import it into the new store

In the new store, go to Products → All Products and select Import. Choose the file, leave "Update existing products" unticked for a first copy, and continue. WooCommerce's importer documentation describes the screen.

The next screen, Column mapping, pairs each column of the file with a product field. On our run it paired all 34, and none was left on "Do not import". Here are the pairs that need a second look:

Column in the file Field WooCommerce chose Why it matters
Weight, Length Weight (lbs), Length (in) The figure is read in the new store's unit. Set both stores to the same units first.
Categories Categories Missing categories are created, with the tree.
Images Images Each address is downloaded during the import.
Parent Parent Ties each variation to its product by SKU.
Grouped products Grouped products Finds each product of the group by SKU, in the file or already in the store.
Attribute 1 global Is a global attribute? Recreates Color as a store-wide attribute.

Keep the mapping as it is and run the importer. Ours ended on "Import complete! 8 products imported. 5 variations imported." No row was skipped and none failed.

What arrived in the new store

We read the new store field by field and set it beside the source. Every product came through as the type it was, with these results:

Data In the new store
Products and variations 8 products and 5 variations: 4 simple, 2 variable, 1 external, 1 grouped
Names, SKUs, descriptions Identical. The apron's bold text and bulleted list kept their formatting.
Prices Regular and sale prices identical on every product and variation: the apron at 29.00 instead of 34.00, the slate mug at 15.00
Stock 12 units on the apron, 5, 3 and 0 on the mug's colors; the tea towel and the moss mug out of stock
Categories and tags Home > Kitchen, Textiles and Garden created, each product in the same categories; both tags created
Attributes Color created as a global attribute with Moss, Sand and Slate. Capacity stayed descriptive. Size stayed an attribute of the tote alone.
Variations 5 of 5, each with its color or size, its price and its stock
Images 11 files downloaded into the new store's media library, under the same names, including the gallery image and the two variation images
Weight and dimensions 0.3 and 70 × 85 × 1 on the apron, as in the source
Brands Atelier Nord created and set on the apron
Grouped product The kitchen set holds the apron and the tea towel
External product The seed kit links to https://grower.example/seed-kit, with its button text "Buy from the grower"

The images are copies. Each one now lives at the new store's address, so the new store no longer depends on the old one for its pictures once the import is done.

Diagram of the copy: what came over from the source store (products, prices, stock, categories, attributes, variations, images, brands, grouped and external products), the ten settings to set again in the new store, and the draft that stayed behind The same diagram of the copy, in dark mode
Our copy, checked product by product on October 15, 2026.

What to set again by hand

Besides the draft, ten details were in the source and not in the new store. Four of them have no place in a WooCommerce CSV at all. The mapping screen offers no field for a product's slug, an image's alt text, a category's description or image, or a review. WooCommerce's documentation says it plainly for alt text: "The core CSV importer cannot add, edit, or update alt text for product images."

On our copy, that gave these results:

  • The apron's address changed. The new store built its slug from the name, linen-apron, and /product/natural-linen-apron/ returned a 404 there.
  • Every image arrived with an empty alt text. "Linen apron, front view" stayed in the source.
  • The Textiles category was created with its name only, without its description or its image.
  • The apron arrived with no reviews and a rating of 0, where the source showed 4.50 from two reviews.

The other six are product settings. WooCommerce's importer reads a column for each of them. The source store's built-in exporter writes most of them, so a dashboard login on the source brings them along. With a ScrapeWoo file, set them in the new store. Each row says where:

Setting In our test Where to set it
Sale end date The throw arrived at 69.00 with no end date, so the sale would never stop General tab, Schedule, next to the sale price
Featured The apron arrived not featured Catalog visibility, in the Publish box: "This is a featured product"
Hidden from the shop The gift wrap arrived visible in the shop Catalog visibility, in the Publish box
Shipping class The apron had none Shipping tab
Upsells and cross-sells The apron no longer pointed to the tea towel Linked Products tab
Default option The mug no longer preselected Sand Variations tab of the product

If the old store's pages are indexed by search engines and the new store replaces it, the slugs matter most. Either give each product its old slug back, or redirect the old addresses to the new ones.

Keep the source store online until the import is done

The new store downloads every image from the address in the file, during the import. WooCommerce's documentation says images "need to be pre-uploaded or available online to import to your store."

We emptied the new store, stopped the source, and imported the same file again. The screen answered "Import complete! 3 variations imported. Failed to import 10 products." The log gave the same reason for each failed row: "Error getting remote image", followed by the image's address and a connection error.

A row whose image cannot be downloaded is not imported at all. The three variations counted as imported were the ones with no image of their own. Their products had failed, and afterwards the store held no product and no variation.

So run the import while the old store still answers at its address. If the copy is part of a move to a new domain, import first, check the result, then switch the domain.

Checks after the import

The summary screen counts rows, not what the store kept. Check the store itself, in this order:

  1. Count the products in Products → All Products, and the variations on each variable product. Compare them with the source.
  2. Open one variable product and pick each option on its page. Each one should lead to a variation with a price.
  3. Open the media library. The images should be there, at the new store's address. Add the alt texts.
  4. Compare a few product addresses between the two stores, and decide on slugs or redirects.
  5. Go through the settings in the table above, starting with sales that have an end date.
  6. Set the category descriptions and images under Products → Categories.

If you correct the file rather than the store, import it again with "Update existing products" ticked. WooCommerce then matches rows by SKU, and every row of a ScrapeWoo file carries one. The guide on importing variable products from a CSV shows what that update run does to variations.

To start a copy from any WooCommerce store's address, paste it into ScrapeWoo. You see the products the store publishes before you export anything, and the WooCommerce CSV goes straight into the new store's import screen.

Sources

  1. WooCommerce: Product CSV Importer and Exporterwoocommerce.com

■  Read next

View all guides

Need the catalog in a file?

Paste a public WooCommerce URL. ScrapeWoo finds the catalog, lets you choose the products, and prepares a clean CSV or JSON export.