Import and export
Create or update products in bulk with a CSV file.
Export and import are on the Products page: the Export products and Import products buttons. Both run in the background and notify you when done.
File format
- Format: CSV.
- Encoding: UTF-8.
- Columns: the Shopify product CSV columns (listed below). Aeolian exports and Shopify exports import without changes.
- Header row: first row, column names. Matched by name, not position. Surrounding spaces are ignored. Column order does not matter on import.
- Export line endings: CRLF. Every field is quoted.
Export offers two encodings:
| Option | What it does |
|---|---|
| Plain CSV | UTF-8, no byte order mark. Use for re-import or other tools. |
| CSV for Excel, Numbers, and Google Sheets | UTF-8 with a leading byte order mark so Excel reads it as UTF-8 instead of corrupting accented and special characters. |
If editing in Excel, save as "CSV UTF-8" before importing.
Columns
| Column | Format / values | Notes |
|---|---|---|
| Handle | Text (slug) | Required. Rows with the same Handle form one product. Rows with no Handle are skipped. |
| Title | Text | Product name. |
| Body (HTML) | HTML | Description. |
| Tags | Comma-separated | Example: apparel, new |
| Published | TRUE or FALSE | Storefront visibility. |
| Status | active or draft | |
| Option1 Name | Text | Option name, for example Size. |
| Option1 Value | Text | This variant's value, for example S. |
| Variant Price | Decimal | |
| Variant Compare At Price | Decimal | Optional. Shows as a discount. |
| Variant Cost Per Item | Decimal | Optional. Not shown to customers. |
| Variant Charge Tax | TRUE or FALSE | |
| Variant Inventory Qty | Integer | |
| Variant Stock Status | instock, outofstock, preorder, or untracked | |
| Image Src | URL | Product image. |
| Variant Image | URL | Image for this variant. |
| SEO Title | Text | |
| SEO Description | Text |
Products with more than one option add Option2 Name / Option2 Value, Option3, and so on. Exports include as many option columns as the product with the most options requires.
Row layout
- One Handle = one product. A product can span multiple rows.
- One row per variant. Same Handle, one
OptionN Valueset per row. - Product-level columns (Title, Body (HTML), Tags, Published, Status, SEO Title, SEO Description) are read from the first row of each Handle. Leave them blank on later rows.
- Extra images: one extra row per image, with only Handle and Image Src filled in.
A 3-size t-shirt with 2 extra photos is one Handle across 5 rows: 3 variant rows plus 2 image rows.
Export
Steps:
1. Open the Products page.
2. Click Export products (or press E).
3. Choose scope: current page, selected products, or all products.
4. Choose encoding: Plain CSV, or CSV for Excel, Numbers, and Google Sheets.
5. Click Export. A download link arrives by notification and email.
Import
Steps:
1. Open the Products page.
2. Click Import products (or press I).
3. Choose the source: Aeolian / Shopify, or WooCommerce.
4. Optional: click Download template for a valid starter file.
5. Upload a .csv file (drag and drop, or click). Only .csv is accepted.
6. Set Duplicate slugs handling (below).
7. Click Upload and preview, then confirm.
Duplicate slugs
When a Handle matches an existing product:
| Option | Behavior |
|---|---|
| Extend | Append -1, -2, etc. to the new slug. Existing product kept, new one added alongside. |
| Override | Replace the existing product with the matching slug. |
To bulk-edit existing products: export, edit, import with Override.
Failed rows
If any rows fail, Aeolian produces a report listing each failed row and the reason. Fix those rows and re-import. Only the failed rows need to go back in.
Imports count toward the daily caps in Limits and caps.
WooCommerce
Select WooCommerce as the source. Aeolian reads a WooCommerce product export directly. Progress and the failed-row report work the same as a CSV import.