Reference
How to write a product CSV for image batches
A batch fails for boring reasons: a header with a trailing space, a blank cell, a currency symbol in the wrong encoding. This page is the short version of what is enforced and why.
Header rules
- Exact match, no braces. A variable written
{{title}}in the design corresponds to the column headertitle. NotTitle, not{{title}}, nottitle. - One header per field. Duplicate headers make the mapping ambiguous and the file is rejected.
- No empty header cells. A stray comma in the first row creates a phantom column.
Value rules
- No empty values. Every row must fill every field. This is deliberate: an empty value produces a design missing its headline, which is worse than a failed batch.
- Long text wraps or shrinks to fit the text layer it belongs to. If it still cannot fit, the export is blocked rather than silently clipped — so a very long product name is a design problem to solve, not something that quietly truncates.
- Quoted values can contain commas.
"Oak table, small"is one value, not two. This is standard CSV behaviour and it is supported. - Multi-line values are allowed when quoted, which is useful for a two-line headline.
- UTF-8 only for anything outside plain ASCII. Accents, currency symbols and non-Latin scripts are fine in UTF-8 and mojibake in anything else.
A minimal working example
Template fields: title, price, cta
title,price,cta "A little room to grow",$24,Shop the collection "Slow mornings",$38,See the set
Two rows, three fields, no empty cell. Each row produces one PNG.
The six mistakes behind most failed uploads
- A trailing space in a header. Invisible in a spreadsheet, fatal on upload.
- Capitalisation drift.
Pricedoes not match apricevariable. - An empty cell somewhere in the middle of the sheet.
- Excel exported as plain CSV and mangled accented characters — re-export as CSV UTF-8.
- Leading zeros stripped from SKUs and IDs — format those columns as text first.
- A comma inside an unquoted value, which pushes every later column one place to the right.
What this does not do
- No
.xlsxupload, no Google Sheets sync, and no automatic column mapping — headers must match the template's variables by hand. - A batch is limited to 50 rows, and each template has a single page.
- Values are text only. There is no per-row image URL column, no conditional formatting and no per-row colour overrides.
- Nothing is uploaded to a server for rendering; the images are produced by your browser.
Test the headers before the data
Upload a two-row file with real headers first. If it validates, the rest of your sheet almost certainly will too.
Open the editor — no sign-up needed