Brand GuideCSV Import

Import Products from a File

Import your catalog from an Excel (.xlsx) or CSV file — every row with a composition becomes a live, preliminary passport in the same run.

Plans: free accounts can import up to 50 rows per import; Pro is unlimited.

How it works

  1. Go to Products in the sidebar and click Import file
  2. Download the Excel template (recommended — it has dropdowns and instructions) or the CSV template
  3. Fill one row per product (per style, not per size) and drop the file in the wizard — or drop any export from your own system: unrecognized columns open a mapping step where you match them to Pasera fields once, and the mapping can be saved per file type so the next import skips straight to the preview. Free-text values are normalized automatically (“Organic Cotton” → the canonical material, “China” → CN) and every auto-mapping is shown as a warning in the preview
  4. Review the preview — the wizard validates everything before writing: N create · M update · K unchanged · E errors, with per-row messages
  5. Confirm — products are created and passports publish automatically for every row that has a name, category, composition, and weight
  6. The results screen links to your DPPs — from there, invite suppliers to verify and download QR codes

Imports are per organization: every row lands in the brand you’re currently working in. If you operate several brands, switch brands before importing.

Columns

The Excel template documents every column with dropdowns for categories and material types. The essentials:

ColumnRequiredDescription
nameYesProduct name
external_idNoYour stable product ID — the key used to match rows to existing products on re-imports
sku, gtinNoAlso used as match keys (after external_id)
categoryNoCategory ID (defaults to textile_apparel) — see the template’s Instructions tab
weight_kgFor a passportWeight per unit in kg (missing → 0.25 kg category default, flagged estimated)
country_of_manufactureNo2-letter code (e.g. BD)
material_1..3_type / _percent / _originFor a passportComposition — percentages must total 100
care_instructions, expected_lifespan_years, recyclable, recycling_instructions, ecommerce_urlNoCare & end-of-life
supplier_name, supplier_emailNoRecorded for supplier invites

Rows without composition import as products only (no passport) — you can add materials later and use Publish passport on the product page.

Re-imports, updates, and duplicates

The import is safe to re-run:

  • Each row is matched to existing products by external_id, then gtin, then sku
  • Unchanged rows are skipped — importing the same file twice creates nothing new
  • Two modes: Create only (default — matched rows are left untouched and reported as skipped) and Create + update (matched rows are updated; changed fields overwrite, composition is replaced as a whole, and published passports re-publish in place with the same QR)
  • Rows without any key (external_id, gtin, or sku) can’t be matched — always fill at least a SKU to avoid duplicates on re-import

Validation and errors

Every row gets its own outcome — one bad row never fails the batch:

  • Errors (row skipped): missing name, unknown category, composition not totaling 100%, unknown material type
  • Warnings (row imports anyway): missing weight (0.25 kg default, flagged estimated), no composition (no passport published)

Errors and warnings are shown with the spreadsheet row number in the preview, before anything is written.

API endpoints

The same core is available programmatically:

POST /brand/bulk/validate   # dry run, writes nothing, ≤300 rows
POST /brand/bulk/commit     # ≤25 rows per call — chunk larger files
Content-Type: application/json
Authorization: Bearer <token>
X-Organization-Id: <org_id>
 
{ "mode": "create" | "upsert", "rows": [ { "name": "...", "externalId": "...", "materials": [...] } ] }

Both return per-row outcomes plus a summary (create / update / unchanged / skipped / errors / passports). The legacy CSV endpoint (POST /brand/bulk/products, multipart) still works and runs through the same validation.

See Products API for the product field reference.