Skip to main content

Product Import

Use product import when a store has many products and manual entry would be too slow.

The importer accepts .csv and .xlsx files. Excel files use the same columns as CSV files, and the importer reads the first sheet.

Download a sample CSV

Required Columns

ColumnRequiredExampleNotes
nameYesClassic Cotton T-ShirtProduct name. Maximum 255 characters.
priceYes1200Selling price. Must be greater than 0.
inventory_quantityYes48Whole number. Must be 0 or greater.
category_slugsYesapparelUse `

Optional Columns

ColumnExampleNotes
skuTSHIRT-001Used to detect existing products when using update mode.
slugclassic-cotton-tshirtIf omitted, eshopOS can generate one from the name.
barcode616110000001Store barcode or product code.
brandeshopOS BasicsProduct brand.
descriptionSoft cotton tee for daily wearPlain product description.
compare_price1500Optional previous or crossed-out price.
min_stock_threshold8Whole number used for low-stock alerts.
publishedtrueAccepts true, false, yes, no, 1, 0, published, or unpublished.
statusactiveMust be active, draft, or archived. Defaults to active.
tags`newfeatured`
images`https://example.com/front.jpghttps://example.com/back.jpg`
image_1, image_2https://example.com/front.jpgAlternative image URL columns.
video_urlshttps://youtube.com/watch?v=...Video URLs only. Up to 10.
description_imageshttps://example.com/detail.jpgExtra description image URLs. Up to 20.
seo_titleClassic cotton T-shirtOptional SEO title.
seo_descriptionSoft cotton T-shirt with stock trackingOptional SEO description.
spec_colorBlackAny column beginning with spec_ becomes a product specification.
variant_options`Color=BlackWhite;Size=S
variant_skus`TEE-BLK-STEE-BLK-M
variant_prices`12001200
variant_compare_prices`15001500
variant_inventory_quantities`1212
variant_image_urls`https://example.com/black-s.jpg...`
variant_statuses`activeactive

Image Support

Product import supports image URLs in the file and local image matching after validation.

Use public http or https image URLs, or an existing relative path that starts with /. For local image files, validate the import first, then upload images in the Match product images section.

Local image matching uses the filename. Name files by product sku, slug, product name, or row number:

  • TSHIRT-001.jpg
  • classic-cotton-tshirt-front.png
  • row-2.jpg

For several images in one field, use |:

images
https://example.com/front.jpg|https://example.com/back.jpg

If a row has no image, choose one policy before validation:

  • Draft if missing imports that product unpublished.
  • Import anyway allows products without photos.
  • Require images blocks rows without image URLs or matched image files.

Descriptions And Details

Use description for the product description. Use description_images for images that belong inside the description area. Use spec_ columns for structured details, such as spec_color, spec_material, or spec_weight.

Variants

Use variant_options to create combinations. This example creates four variants in order: Black/S, Black/M, White/S, White/M.

variant_options,variant_skus,variant_prices,variant_inventory_quantities
Color=Black|White;Size=S|M,TEE-BLK-S|TEE-BLK-M|TEE-WHT-S|TEE-WHT-M,1200|1200|1200|1200,12|12|12|12

When a parallel variant column is used, it must contain the same number of values as the combinations created by variant_options. If variant_skus is empty, eshopOS generates variant SKUs.

Header Aliases

The importer normalizes common header names:

Your headerImported as
product_name, titlename
handleslug
stock, quantity, inventoryinventory_quantity
category, categoriescategory_slugs
image, image_url, image_urlsimages
video, video_urlvideo_urls
seo_descseo_description
variant_option_valuesvariant_options
variant_skuvariant_skus
variant_barcodevariant_barcodes
variant_pricevariant_prices
variant_compare_pricevariant_compare_prices
variant_inventory, variant_stock, variant_inventory_quantityvariant_inventory_quantities
variant_image, variant_images, variant_image_urlvariant_image_urls
variant_statusvariant_statuses

Import Modes

ModeUse WhenBehavior
Create onlyYou are adding new products.Rows with SKUs that already exist are rejected.
Update by SKUYou want to update existing products and add new ones.Matching SKUs are updated. New SKUs are created.

Limits

  • Maximum rows per file: 2000
  • Maximum category slugs per product: 10
  • Maximum image URLs per product: 10
  • Maximum video URLs per product: 10
  • Maximum tags per product: 20
  • Maximum specifications per product: 50
  • Maximum variants per product: 1000
  1. Download the sample CSV.
  2. Replace the sample rows with real products.
  3. Use | for multiple categories, tags, images, videos, and variant column values.
  4. Add description, spec_ columns, and variant_options where needed.
  5. Upload the file in the dashboard.
  6. Click Validate file.
  7. Fix invalid rows, create missing categories, and match local images if needed.
  8. Click Import products when all rows are valid.