Importing products

Your catalog comes into Cascade as a CSV upload. Open Products, choose Import from the actions menu, and pick your file. The import runs in the background, so you can leave the page. Progress and any problems show up under Settings, Imports.

Products are what reviews, orders and wishlists hang off, so import them before anything else.

Columns

One row per record: a row is either a product or one of its variants, and every row says which product it belongs to.

ColumnRequiredDescription
variantNotrue on a variant row. Leave it blank for a product row.
productNoOn a variant row, the slug of the product the variant belongs to. Ignored on product rows.
slugYesThe product's or variant's URL handle. On Shopify this is the handle. Importing a slug again updates that record.
titleYesThe product's or variant's display name.
imageUrlNoURL of the main image.
metadataNoA JSON object of your own string key/value pairs.
descriptionNoThe product's long-form description. Product rows only.
urlNoURL of the product's page on your storefront. Product rows only.
tagsNoComma-separated tag names. Tags that do not exist yet are created. Product rows only.
sitesNoComma-separated site slugs the product is sold on. Leave it blank for all of your sites. Product rows only.
priceCentsNoThe variant's price in the smallest unit of its currency, so 1999 for $19.99. Variant rows only.
currencyCodeNoCurrency of priceCents, as an ISO 4217 code such as USD. Variant rows only.
availableNotrue or false for whether the variant can be bought right now. Leave it blank to keep what is already stored. Variant rows only.

A product with two variants looks like this:

product,variant,slug,title,priceCents,currencyCode
,,classic-tee,Classic T-Shirt,,
classic-tee,true,classic-tee-black,Black,1999,USD
classic-tee,true,classic-tee-white,White,1999,USD

A product with no variants is a single row with variant and product left blank.

One row per record

product is what ties a variant to its product, so no row depends on the ones above it. You can sort, filter or pivot the file in a spreadsheet and it still imports the same way.

Where two rows claim the same product slug and disagree on a value, the first non-empty value in the file wins and the row that was ignored is reported. A blank cell means "not specified" rather than "empty", so it never overwrites what another row for the same product said.

Files written in the older format, where variant rows follow their product row and carry no product column, still import unchanged: a variant row that leaves product blank belongs to the product above it.

Running it twice

Slugs make an import safe to repeat. Importing the same file again updates those products and variants in place instead of adding a second copy of each.

A product's variant rows are its full set. A variant that Cascade has stored and the file leaves out is deleted, as is a link to a site the file no longer lists, so send whole products rather than partial ones.

When a row doesn't match

An import doesn't stop at the first bad row. Rows that can't be placed are skipped, and each one is listed with its row number on the import job under Settings, Imports:

Row 3: This file has no product row for "classic-tee", so its variant rows were skipped.
Row 7: No site with the slug "outlet-store".

Fix those rows and import the file again.