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.
Required Columns
| Column | Required | Example | Notes |
|---|---|---|---|
name | Yes | Classic Cotton T-Shirt | Product name. Maximum 255 characters. |
price | Yes | 1200 | Selling price. Must be greater than 0. |
inventory_quantity | Yes | 48 | Whole number. Must be 0 or greater. |
category_slugs | Yes | apparel | Use ` |
Optional Columns
| Column | Example | Notes |
|---|---|---|
sku | TSHIRT-001 | Used to detect existing products when using update mode. |
slug | classic-cotton-tshirt | If omitted, eshopOS can generate one from the name. |
barcode | 616110000001 | Store barcode or product code. |
brand | eshopOS Basics | Product brand. |
description | Soft cotton tee for daily wear | Plain product description. |
compare_price | 1500 | Optional previous or crossed-out price. |
min_stock_threshold | 8 | Whole number used for low-stock alerts. |
published | true | Accepts true, false, yes, no, 1, 0, published, or unpublished. |
status | active | Must be active, draft, or archived. Defaults to active. |
tags | `new | featured` |
images | `https://example.com/front.jpg | https://example.com/back.jpg` |
image_1, image_2 | https://example.com/front.jpg | Alternative image URL columns. |
video_urls | https://youtube.com/watch?v=... | Video URLs only. Up to 10. |
description_images | https://example.com/detail.jpg | Extra description image URLs. Up to 20. |
seo_title | Classic cotton T-shirt | Optional SEO title. |
seo_description | Soft cotton T-shirt with stock tracking | Optional SEO description. |
spec_color | Black | Any column beginning with spec_ becomes a product specification. |
variant_options | `Color=Black | White;Size=S |
variant_skus | `TEE-BLK-S | TEE-BLK-M |
variant_prices | `1200 | 1200 |
variant_compare_prices | `1500 | 1500 |
variant_inventory_quantities | `12 | 12 |
variant_image_urls | `https://example.com/black-s.jpg | ...` |
variant_statuses | `active | active |
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.jpgclassic-cotton-tshirt-front.pngrow-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 header | Imported as |
|---|---|
product_name, title | name |
handle | slug |
stock, quantity, inventory | inventory_quantity |
category, categories | category_slugs |
image, image_url, image_urls | images |
video, video_url | video_urls |
seo_desc | seo_description |
variant_option_values | variant_options |
variant_sku | variant_skus |
variant_barcode | variant_barcodes |
variant_price | variant_prices |
variant_compare_price | variant_compare_prices |
variant_inventory, variant_stock, variant_inventory_quantity | variant_inventory_quantities |
variant_image, variant_images, variant_image_url | variant_image_urls |
variant_status | variant_statuses |
Import Modes
| Mode | Use When | Behavior |
|---|---|---|
| Create only | You are adding new products. | Rows with SKUs that already exist are rejected. |
| Update by SKU | You 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
Recommended Workflow
- Download the sample CSV.
- Replace the sample rows with real products.
- Use
|for multiple categories, tags, images, videos, and variant column values. - Add
description,spec_columns, andvariant_optionswhere needed. - Upload the file in the dashboard.
- Click Validate file.
- Fix invalid rows, create missing categories, and match local images if needed.
- Click Import products when all rows are valid.