Bring your whole catalogue into Live-cart in one upload. A CSV (comma-separated values) file is a simple spreadsheet you can export from Excel, Google Sheets, or another store. Follow the columns below and your products, variants, photos, prices and stock come in automatically.
Download the CSV templateHow it works
The file has one row per variant. Rows that share the same Handle are grouped into a single product — that’s how a product with sizes or colours is described. Product-level fields (Title, Description) come from the first row that has them, so the rows after it only need their variant details: Variant, SKU, Price, Quantity.
A row becomes a variant only when it has a Variant or a SKU. A row with just a Handle and an Image adds a photo to the product — nothing else. For a simple product with no options, use a single row (plus photo rows if it has several photos) and leave Variant empty.
Importing takes two steps. Check the file shows exactly what will happen — how many products will be added and updated, and what needs your attention. Nothing in your catalogue changes until you press Import.
The columns
The first line of the file must be the header row with these column names. Column order and upper or lower case don’t matter, and columns you don’t need can be left out. Columns with other names are not read — the check lists them. If a column name appears twice, only the first of them is read — except Image: photos are taken from every Image column. The check lists repeated columns too.
An export from another store uses its own column names — rename them before uploading, or prices, stock, photos and variants won’t be read. For a Shopify export: Variant Price → Price, Variant Inventory Qty → Quantity, Variant SKU → SKU, Option1 Value → Variant, Image Src → Image, Body (HTML) → Description.
| Column | Required | What it does |
|---|---|---|
| Handle | Required | A unique code for the product, e.g. cotton-tee, up to 255 characters. Every row with the same Handle belongs to one product, and the next import uses it to find and update that product. Rows without a Handle are skipped. |
| Title | Optional | Product name, up to 160 characters. Taken from the first row that has one; leave it blank on the other rows. With no title at all, the Handle is used instead. |
| Description | Optional | Product description, up to 20,000 characters. Also taken from the first row that has one. Plain text or simple HTML: paragraphs (<p> or <div>), line breaks (<br>), bold and italics, lists, links, subheadings. A plain line break typed inside the cell is not kept — the text runs into one paragraph — so use tags for those. Any other markup (scripts, styles, embedded images) is removed. |
| Image | Optional | Image URL for the product gallery. Images from all of the product’s rows are gathered in order; duplicates are ignored. One cell may hold several links separated by a space or a comma, and the file may have several Image columns — all of them are read. |
| Variant | Optional | The variant name (e.g. “S”, “Red”), up to 200 characters. A row with a Variant or a SKU is a variant; a row with neither only adds a photo. |
| SKU | Optional | Your stock code for this variant, up to 120 characters. It is how a re-import recognises the same variant, so keep it unchanged. |
| Price | Optional | Price in UAH (e.g. 499, 499.90 or 1 250). The first Price among the product’s rows is the product price: a variant row with an empty Price takes it. |
| Quantity | Optional | Units of this variant in stock. A whole number; an empty cell means 0. |
| Variant Image | Optional | An image URL shown when this specific variant is selected. If the cell holds several links, the first is the variant’s photo and the rest join the product gallery. |
| Tags | Optional | Labels for filtering the catalogue, comma-separated in one cell: Linen,Dresses. Tags from all of the product’s rows are combined. Up to 50 per product. |
Example
A T-shirt with three sizes and an extra photo, followed by a simple mug with no variants:
- The three tee rows with a Variant become one product with variants S, M and L.
- M has no price, so it takes the first row’s price — 499. L has its own price of 549.
- The fourth tee row has neither a Variant nor a SKU — it’s a photo row: tee-back.jpg joins the gallery and no variant is created.
- The tags “Cotton” and “T-shirts” are wrapped in quotes because there’s a comma between them. Excel and Google Sheets add the quotes for you.
- The mug has no variant name, so it’s a single-variant product (SKU MUG).
Several photos per product
Many stores export a product like this: the first row carries all the details and the first photo, and every further photo sits on its own row with only the Handle and Image filled in. Live-cart reads those rows as photos: a row with no Variant and no SKU adds a photo and never creates a variant.
| Handle | Title | Image | SKU | Price | Quantity |
|---|---|---|---|---|---|
| bag | Leather bag | https://…/bag-1.jpg | BAG-1 | 1250 | 5 |
| bag | — | https://…/bag-2.jpg | — | — | — |
| bag | — | https://…/bag-3.jpg | — | — | — |
- The result: one product with one variant at ₴1,250 with 5 in stock, and three photos in its gallery. A dash in the table means an empty cell.
- A row that repeats a variant’s SKU with an empty Price works the same way: it merges into that variant and doesn’t wipe its price or stock. When several rows describe one variant, each cell keeps its first filled-in value; if the rows disagree, the check tells you.
- A photo row has no price or stock of its own. Its Price isn’t used when it differs from the product’s price, and its Quantity isn’t used when it differs from the product’s stock or when the product has variants (the stock belongs to them). The check points it out. If the row really is a separate variant, give it a name in the Variant column.
- Rows with the same Variant name and no SKU are one variant. If they really are different variants (say, size S in two colours, with the colour in another column), give each its own name — “S red”, “S blue” — or its own SKU. Otherwise they are merged and the second row’s stock is not counted; if both rows have a quantity, the check warns you.
- A row with only a SKU and no Variant merges into the variant that has that SKU. If several variants share that SKU (for example, the model’s article number is on every size), there’s no telling which one the row belongs to, so it is read as a product-level row: its Price can become the product price if it is the first price among the rows, and its Quantity isn’t used — the check points it out. A row with only a name is read the same way when several variants with different SKUs have that name.
- A Variant Image on a photo row also joins the product’s gallery. So do a variant’s extra photos: the second and later links in its Variant Image cell, or a different photo on a repeated row of the same variant.
If rows like these were once imported as extra ₴0 variants, upload the same file again and choose Update them from the import: variants that aren’t in the file are removed and the product’s price is right again. The unnamed ₴0 offers those variants left in the Live Feed go with them. A product you have already edited by hand is not changed by an import — remove its extra variants in the product card, and if the product is in the Live Feed, remove it from the feed and add it again.
Prices & stock
- The product price is the first Price filled in among that Handle’s rows. A variant row with an empty Price takes it, so a shared price only needs to be written once. A variant with its own price keeps it.
- In the catalogue, a product shows the lowest of its variants’ prices.
- A product with no Variant and no SKU gets one variant carrying the product’s price and stock — the first Price and Quantity filled in.
- Stock is not inherited: a variant with an empty Quantity is imported with 0 in stock.
- With no price anywhere, the product imports at 0 — and the check warns you.
Price formats we read
| Written as | Meaning |
|---|---|
| 499 · 499.90 · 499,90 | Hryvnias; kopiykas after a dot or a comma, at most two digits. In a file whose columns are separated by commas, a price with a comma must be in quotes: "499,90". |
| 1 250 · 1 250,50 | A space between thousands, including the non-breaking space Excel writes. |
| 1,250.50 · 1.250,50 · 1,250,000 | A thousands separator, when there are kopiykas or more than one group. |
| ₴499 · 499 грн · 499 UAH | A hryvnia mark before or after the number. |
We don’t guess a price that could be read two ways: a wrong price on a live stream is worse than a product that isn’t there yet. These are refused:
- 1,250 and 1.250 — that could be ₴1,250 or ₴1.25. Write 1250, 1 250 or 1250.00.
- Another currency ($10, 10 USD, €5), a negative number, a form like 1e3, more than two decimal places, or more than ₴10,000,000.
A quantity is a whole number from 0 to 100,000,000: 12, 12.0, 1 000 or 1 000,00 (how Excel writes a number with two decimal places). Separate thousands with a space (12 000) or not at all (12000): 1,000 and 12.000 are refused, as are 2.5 and −1.
A product with such a price or quantity is not imported: the check lists it under “These will NOT be imported”, and the rest of the file imports as usual. Fix the cell and upload the file again.
File format, Excel & Google Sheets
Columns may be separated by commas, semicolons or tabs — we work it out from the header row. The encoding should preferably be UTF-8.
Excel
- Save as the type whose name starts with “CSV UTF-8” (File → Save As, the file type list). An Excel set to Ukrainian separates columns with semicolons and writes kopiykas after a comma (499,90) — that’s fine, it’s exactly what we read.
- Plain “CSV” is saved in the Windows code page. On Windows set up for Ukrainian that’s Windows-1251: we read it and the check warns you to make sure the names look right. On any other setup Excel replaces Ukrainian letters with “?” as it saves — they are lost for good and no check can notice. It also has no ₴ sign or emoji. So always choose “CSV UTF-8”.
- If the template opens as one column or with garbled letters, open it via Data → From Text/CSV and choose UTF-8 and the Comma delimiter — or open it in Google Sheets.
- Format the Variant and SKU columns as Text before filling them in. Otherwise Excel turns a 3/4 size into a date, drops leading zeros from SKUs and writes long codes as 1.23E+12.
Google Sheets
File → Download, .csv. Google Sheets always saves UTF-8 with commas, so there is nothing to set up. Before filling in, set the Variant and SKU columns to Format → Number → Plain text — otherwise Sheets drops leading zeros from SKUs and turns a 3/4 size into a date.
Quotes
If a value contains the separator (a comma or semicolon) or a line break, it is wrapped in double quotes: "Sofa, grey", "499,90". Spreadsheets do this for you; you only need to remember it when editing the file in a text editor.
A row with more values than the header has columns is not imported — the check lists the product under “These will NOT be imported”. Usually it’s an unquoted 499,90 in a comma-separated file: it splits into two cells and everything after it shifts. Put such a value in quotes, or save the file with semicolons between columns. If a row is shorter than the header (its empty trailing cells weren’t written), the extra cell may stay inside the header’s width and the shift goes unnoticed — so the quotes are always needed.
Re-importing & updates
Import the same file again — with the same Handle values — and Live-cart matches each row to the product it created before, instead of making duplicates. When you run an import you choose what happens to products that already exist:
Update them from the import
Existing products are refreshed with the data in your file. Products you edited by hand are protected and left as-is.
Leave them untouched
Only brand-new products are added. Everything already in your catalogue is left exactly as it is.
What an update changes
- Title, description, prices, stock and tags become what the file says.
- Variants no longer in the file are removed — the file describes the product completely. Past orders for those variants are not affected.
- Photos are replaced by the file’s set, in the file’s order. If the file has no photo for a product, its current photos are removed — the check warns you first.
- A variant is recognised by its SKU (by its SKU and name together when several variants share a SKU), and a variant without a SKU by its name. In a product with several variants, a changed SKU means a different variant: the old one is removed and a new one created.
- A variant is kept — along with its links to orders and the Live Feed — when only the way we recognise it has changed: its SKU became shared by several variants or stopped being shared, or it’s a variant without a SKU from an earlier import, when such variants were recognised by their row number. A product with a single variant can have its SKU added or changed and still keep the same variant.
- A product already in the Live Feed keeps the offers it was added with — prices and variants in the stream don’t change on their own. Remove it from the feed and add it again to show the updated product. The exception is the unnamed ₴0 offers left by extra photo-row variants: the update removes them along with those variants.
- Products you edited by hand — in the product card, or in the Live Feed when adding them to a stream — are protected: the import doesn’t overwrite them, and the check lists them separately.
- A product in Recently deleted is brought back into the catalogue — the check tells you.
CSV products are only ever matched against other CSV imports, so a Handle can never clash with a product imported from Shopify or another source.
Limits
- Files up to 25 MB and 100,000 rows. Split a bigger catalogue into several files and import them one at a time.
- Field lengths match the product form: title up to 160 characters, variant name 200, SKU 120, description 20,000 (after markup is cleaned). Handle up to 255. A product with a longer value is not imported, and the check lists it.
- Per product, as in the product form: up to 50 photos (extra ones are left out, with a warning) and 100 variants. More than 100 variants under one Handle is almost always several products sharing a Handle by mistake, so that product is not imported and the check lists it.
- Image links must be full addresses starting with http:// or https://. Anything else (a path on your computer, a bare file name) is left out, and the check warns you. The photo is shown from that address, so it must stay reachable.
- Your plan’s product limit. New products beyond it are not added — the check names which ones. Existing products still update. A product the import brings back from Recently deleted also counts towards the limit.
- One import runs at a time. A checked file waits a day for you to confirm it; after that, upload it again.
- If an import is interrupted (for example while Live-cart is being updated), it is marked as failed. Products already saved stay — upload the same file again: re-importing never duplicates anything.
Tips
- Keep the Handle and SKU stable between imports — they’re how updates find the right product and variant.
- Start from the template: it already has a product with sizes, a photo row and a product with several photos.
- Read the check before you press Import: it changes nothing in your catalogue and shows everything the import will do.
- Prices are in UAH. Other currencies are refused.
Didn’t solve it?
Write to us and we’ll work through your case with you.