Importing products

Bring your catalog into Meisei from a spreadsheet when your store isn't on Shopify, or when you'd rather not connect it yet. Import products before anything else, because reviews, orders and wishlists all attach to a product.

Import your products

  1. Export your products from your current platform as a CSV file, then arrange the columns to match the list under For developers below. Each product is one row, and each of its variants (size, color) is a row of its own.

  2. Open Products, choose Import from the actions menu, and pick your file.

    The Import products dialog with a file chosen

  3. Start the import. It runs in the background, so you can leave the page.

  4. Check Settings → Imports when it finishes. Open the job to see anything that was skipped, with the row number and the reason.

    A finished products import listing the products it created

Good to know

  • Importing the same file again is safe. Meisei recognizes each product by its URL handle and updates it in place rather than adding a copy, so you can fix a few rows and upload the whole file again.
  • Send whole products. A product's variant rows are treated as its full set. A variant that Meisei already has and your file leaves out is removed.
  • A bad row never stops the import. Rows Meisei can't place are skipped and listed on the job. Everything else is imported. Fix the listed rows and import again.

If something isn't working

Message on the jobWhat to do
"This row has no product row before it."A variant row has to come after its product's row. Add the product row above it, or fill in its product column.
"No site with the slug ..."The externalIds column names a store you don't have. It's your store's name as it was when you added it under Settings → Branding, in lowercase with dashes for spaces.

See Imports and exports for the messages every import can show.

  • The whole import failed. The file isn't a CSV or its header row wasn't recognized. A file bigger than your plan allows doesn't fail. See Imports and exports.

Next steps

For developers

One row per record: a row is either a product or one of its variants, and every variant row names its product in product, so rows can be in any order. Files in the older format (variant rows following their product row with no product column) still import: a variant row with a blank product belongs to the product above it.

ColumnRequiredDescription
variantNotrue on a variant row. Blank for a product row.
productNoOn a variant row, the slug of its product. Ignored on product rows.
slugYesThe product's or variant's URL handle (the Shopify handle). Importing a slug again updates it.
titleYesDisplay name.
imageUrlNoURL of the main image.
metadataNoA JSON object of your own key/value pairs. A key with a custom field has to fit it.
descriptionNoLong-form description. Product rows only.
urlNoURL of the product page on your storefront. Product rows only.
tagsNoComma-separated tag names; unknown tags are created. Product rows only.
externalIdNoThe record's ID in your own system or store. A known ID finds the record first.
externalIdsNoComma-separated site:id pairs, for a record with a different ID on each of several sites.
priceCentsNoPrice in the smallest currency unit (1999 for $19.99). Variant rows only.
currencyCodeNoISO 4217 code for priceCents, such as USD. Variant rows only.
availableNotrue or false for whether the variant can be bought. Blank keeps the stored value. Variant rows.
brandNoThe product's brand. Blank keeps the stored value. Product rows only.
gtinNoThe 8, 12, 13 or 14 digits under the variant's barcode. Blank keeps the stored value. Variant rows.
mpnNoThe variant's manufacturer part number. Blank keeps the stored value. Variant rows.
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

Where two rows claim the same product slug and disagree, the first non-empty value in the file wins and the ignored row is reported. A blank cell means "not specified" and never overwrites what another row said. A stored variant the file omits is removed. The same import is available as POST /import-jobs.