---
title: "Import and Export Products"
description: "Export products to CSV, edit them in a spreadsheet, and import them back: the columns, how rows match, new variants, and the review sheet."
url: https://www.skusavvy.com/docs/guides/products/import-and-export
lastUpdated: 2026-11-13
---

# Import and Export Products

## Import and Export Products

You can export your products to a CSV file, edit it in a spreadsheet, and import it back to update many products at once. The import also creates variants and products from rows whose SKU is new. Both use the same columns, so an exported file imports back unchanged.

Importing products needs both the **Create Product** and **Update Product** rights, because one import can do both.

#### Import or Bulk Edit?

Both change many products at once, but in different ways, so pick the one that matches your change.

- **Bulk Edit** sets one value on every variant that matches the product table's filters, such as a weight of 1 lb on every Apparel product. It needs no file.
- **Import** gives each row its own value, such as a different price for each SKU, and can create new variants and products.

## Export Your Products

To get a file to edit, start from an export. It has every column the import reads, and a **Variant ID** on each row, so each row updates exactly the variant it came from.

1. Open **Products** and set any filters, such as status, type or tags. The export has only the variants the table shows, so filter first to export part of your catalog.
2. Click the **Export products** button (the CSV icon) at the top of the list.
3. Under **Fields**, turn off any columns you do not need. Every field is on by default, so the file imports back with every column.
4. Click **Export**.

With **Instant download** on, the file downloads to this computer as it is built, while the tab stays open. Otherwise the export runs in the background: you can leave the page, and the file is listed in **Exports** when it is ready.

The file has one row per variant, and deleted variants are left out. Prices and costs are written as plain decimal amounts, such as 24.990.

## Columns in the File

Each column updates one field. A blank cell keeps the current value, so an import never clears a field, and a column you leave out or do not map changes nothing. To update only prices, import a file with a **SKU** and a **Price** column.

Some fields are saved on the product or the inventory item, not the variant. A product field applies to all of its variants, and an item field applies to every variant that shares the item (see Shared Items and Pooled SKUs below).

| Column | Saved on | What it takes |
| --- | --- | --- |
| Variant ID | Variant | Finds the one variant to update. A row needs a Variant ID or a SKU. |
| SKU | Variant | Without a Variant ID, finds every variant with this SKU. A SKU no variant has creates a variant. With a Variant ID, it must be that variant’s SKU. |
| Product ID | Product | New variants only: adds the variant to this product. Takes precedence over Product name. |
| Product name | Product | New variants only, and required for them when there is no Product ID. Rows with the same new name become one product. |
| Option 1 name, Option 2 name, Option 3 name | Product | New products only, such as Size or Color. |
| Option 1 value, Option 2 value, Option 3 value | Variant | New variants only, such as Small or Black. |
| Status | Product | Active, Archived, Draft or Unlisted, in any letter case. |
| Type | Product | Any text, such as Apparel. |
| Price | Variant | A money amount, such as 24.99. |
| Backorderable | Variant | Yes, No, True or False. |
| Weight | Inventory item | A number of zero or more. |
| Weight unit | Inventory item | g, kg, lb or oz. |
| Length, Width, Height | Inventory item | Numbers of zero or more. |
| Length unit | Inventory item | cm, ft, in, m or mm. |
| HS code | Inventory item | The item’s tariff code, such as 6109.10. |
| Country of origin | Inventory item | A two-letter country code, such as US. |
| Customs description | Inventory item | Text for customs forms, such as Cotton t-shirt. |
| Perishable | Inventory item | Yes, No, True or False. |
| Shippable | Inventory item | No for items that are not physical, such as gift cards. Packing them takes no stock. |
| Serial tracking | Inventory item | Yes requires a serial number for each unit. No turns serial numbers off. |
| Default landed cost | Inventory item | A money amount, such as 6.50. |
| Barcode | Inventory item | Added to the item, and its other barcodes are kept. The format is read from the value (UPC, EAN), or else your default barcode format. |

## How Rows Find Your Products

Each row finds the variants it updates in one of two ways.

- **Variant ID**: updates that one variant. If the row also has a SKU, it must be the variant’s SKU, because the import does not rename SKUs.
- **SKU** without a Variant ID: updates every variant with that SKU. SKUs match in any letter case, and spaces around them are ignored.

Each Variant ID, and each SKU without a Variant ID, can be on one row only. Two rows for the same variant would leave it unclear which value to keep, so the import stops at the second one.

#### New SKUs Create Variants

A row whose SKU no variant has creates a new variant. Give it a **Product name** or a **Product ID**, so the import knows which product the variant belongs to.

- With a **Product ID**, the variant joins that product.
- With a **Product name** that matches one of your SKUSavvy products, the variant joins it. A name that matches no product creates a new product, and every row with that name becomes one of its variants.
- A new product with more than one variant needs an **Option 1 name**, because a product without options has only one variant. Rows of one product can leave the option names blank, but must not disagree.

New variants cannot join a product that comes from Shopify. Add them in Shopify instead, and they sync to SKUSavvy. Products that the import creates stay in SKUSavvy and are not created in Shopify.

#### Update Only

To update existing variants with no risk of creating new ones, turn on **Update only** when you map the columns. Rows with a new SKU are then skipped and listed on the review, so you can check them for typos. Update only also hides the columns that only new variants use.

The import never moves a variant to another product, renames a SKU, or deletes anything. Make those changes on the product or variant page.

## Shared Items and Pooled SKUs

Weight, dimensions, the customs fields, perishable, shippable, serial tracking, default landed cost and barcodes are saved on the inventory item. When several variants share one item, such as variants pooled by SKU, a change on one row applies to all of them.

Rows for variants that share an item or a product must not set different values for the same field. If they do, the import stops with **Another row sets a different … on the same product or item**. Give those rows the same value, or leave the cell blank on all but one row.

A barcode is added to one inventory item. If a row’s SKU is on more than one item, add a **Variant ID** so the barcode has a single item. A barcode that is already on another item, or on another row of the file, stops the import, so that a scan always finds one item.

## Import the File

Nothing is saved until you confirm on the last step. If any row has an error when you confirm, nothing is saved, so you can fix the file and import it again.

1. Click the **Import products** button (the upload icon) at the top of the product list.
2. Drop your file on the page, or choose it. CSV, Excel and JSON files work, up to 5,000 rows, so split a larger file.
3. On **Align Columns**, check that each **Spreadsheet Column** is matched to the right **SKUSavvy Field**. Columns from an export match by name, and the **Example** column shows a value from your file to help you match the rest.
4. Turn on **Update only** under **Set Base Criteria** if the file must not create variants, then click **Next**.
5. Check the rows on the review sheet (below), then click **Review import**.
6. On **Review import**, check the counts and the **Rows** table, then click **Import**.

The **Review import** step runs the whole import and then undoes it, so its counts are exactly what the import will do. It shows how many products and variants the import creates and how many fields it updates. The **Rows** table lists every row of the file with its **Action**: **Create product**, **Add variant**, **Update**, **No change**, or a skip for a new SKU in update-only mode.

When the import finishes, it says how many variants it created and how many rows it updated. Open a few of the changed products to confirm the values.

## Check Rows on the Review Sheet

The review sheet shows every row of the file as SKUSavvy reads it. Check it before you import, because a wrong number format changes every price in the file.

#### Number and Money Format

Choose the number format your file uses: **1,234.56**, **1.234,56**, **1 234,56** or **1’234.56**. The sheet warns you when a column has decimal points that the chosen format would read as thousands separators, such as 24.990 read as twenty-four thousand nine hundred ninety.

Money parsing sets how prices and costs are read. **Plain** reads 24.99 as 24.99, **1/100** reads whole cents (2499), and **1/1000** reads whole thousandths (24990). Exported files use **Plain**, and currency symbols or codes around an amount, such as $ or USD, are ignored.

#### Rows With Problems

A row that cannot be imported shows its row number in red and the reason in the **Issue** column. These rows are left out of the import, so fix them in the file and upload it again unless you mean to leave them out.

Click **rows were not processed** at the top of the sheet to jump to the next of these rows. Click **Export Status** to download the file with a **ROW_STATUS** and an **ERROR_CODE** column added, so you can fix the rows in your spreadsheet.

If the import stops at a row when you click **Review import** or **Import**, the error shows at the top, and the sheet scrolls to that row and outlines it.

#### Find, Skip and Go to Rows

- **Filter rows** searches both the values in your file and the values as SKUSavvy reads them.
- Click a row number to skip that row, and the import leaves it out. Click it again to include the row.
- Click **#** at the top of the row numbers to go to a row by its number, such as the row an error names.
- Columns that are blank on every row are hidden. The bar under the heading stands for every row of the file: green rows are ready, red rows have a problem, and the outlined part is the rows on screen.

## Sync Changes to Shopify

To send your changes to linked Shopify products, turn on **Sync to Shopify** at the top of the upload page or of the **Review import** step. It pushes changes to price, backorderable, weight, HS code, country of origin and status.

Other fields, and barcodes, stay in SKUSavvy. With **Sync to Shopify** off, the import changes only SKUSavvy, so turn it off to test a file first.

## Import Errors

Find the message you see, and the fix for it.

### Why do I see "No variant has SKU …: add a product name or ID to create it"?

No variant has the row’s SKU, so the import would create one, and a new variant needs a product. Correct the SKU if it has a typo, add a Product name or Product ID, or turn on Update only to skip the row.

### Why do I see "This variant’s SKU is …. The import does not rename SKUs"?

The row has a Variant ID and a different SKU. Change the SKU on the variant page, or put the variant’s current SKU in the row.

### Why do I see "… is a Shopify product. Add its new variants in Shopify"?

The row’s SKU is new and its Product name is a product that comes from Shopify. Create the variant in Shopify, and it syncs to SKUSavvy.

### Why do I see "… has no options, so it cannot have more than one variant"?

The product the row joins has no options, so it can have only one variant. Add an option to the product first, or give the row a different Product name to create a new product.

### Why do I see "More than one product is named …"?

The new variant has no single product to join. Use the Product ID column instead of Product name for that row.

### Why do I see "Another row sets a different … on the same product or item"?

Two rows update the same product or inventory item with different values, such as two pooled variants with different weights. Give the rows the same value, or leave the cell blank on all but one row.

### Why do I see "SKU … is on … inventory items, so the barcode has no single item"?

The SKU matches variants on more than one inventory item, so the import cannot tell which item gets the barcode. Add the Variant ID of the variant whose item gets it.

### Why do I see "Barcode … is already on …"?

Another item, order, shipment or batch already has this barcode. A barcode must find one thing when it is scanned, so remove it from the row or from the other record.

### Why do I see "Unknown country code …"?

Country of origin takes a two-letter country code, such as US, CA or CN.

### Why are my imported prices 1,000 times too large or too small?

The number format or the money parsing on the review sheet does not match the file. Exported files use the 1,234.56 number format and Plain money parsing. The sheet shows a warning above the rows when the values look wrong for the setting.
