All courses

Import your catalog

How to upload your products, which columns Bruxel recognizes, and what happens to what you already loaded.

Video transcript

In this video, you'll import your catalog from a CSV or Excel file.

Your catalog is still empty. Start with “Import catalog”.

Starting from scratch? Download the template: it has the columns Bruxel recognizes.

Upload your file. This one has 24 products from four departments.

Before anything is written, choose “Review before importing”.

Bruxel shows what would happen: 24 new products, and nothing gets overwritten.

It also shows how it read your columns: SKU, name, brand and category.

Color and material repeat values, so they'll become filterable attributes.

The supplier description is long text. Check it so Bruxel can use it when generating.

If everything looks right, import.

Done: 24 new products are in your catalog.

Here are your 24 products, each with its SKU, its brand and how complete its record is.

In the product record, color and material are already attributes.

And the supplier description is kept under Imported data.

The SKU is the key: import again, and Bruxel updates instead of duplicating.

In the next video, you'll generate your first descriptions.

Formats and size

Two formats are accepted, and the file is validated by its contents, not just its extension:

  • CSV in UTF-8.
  • Excel (.xlsx).
  • CSV up to 256 MB and XLSX up to 10 MB, with up to 50,000 rows and 512 columns.

Columns

You do not need to rename anything: Bruxel recognizes several names for each key column.

ColumnNames it recognizesRequired?
SKUsku, upc, ean, gtin, codigo, id, product_id, id_productoYes
Namename, nombre, title, titulo, product_name, name_mejorado, nombre_mejorado, nombre_originalYes
Brandbrand, marcaNo
Categorycategory, categoria, categories, categoria_especifica, subcategoria, departamentoNo

The other columns in your file aren't lost. Before anything is written, the dry run lists them one by one and you tick which ones to keep: the ticked ones become source data and feed generation; the rest stay in your file.

What if your file has two columns that both work

An enriched catalog often carries the same thing twice: the raw ERP name and a polished one, or the department and the fine-grained category. Bruxel picks one, and always the same one:

  • Name: the enriched one wins. If your file has name_mejorado and nombre_original, the first is used — it's usually cleaner, since the raw one often stuffs the description into the name.
  • Category: the most specific one wins. Between categoria_especifica (“hammer drill”) and departamento (“Tools & Hardware”), the specific one is used: it describes the product, not the aisle.
The column that doesn't win is NOT lost: it stays as source data and can become a filterable attribute. And you don't have to guess: the dry run shows which column fed each field before anything is written.

How your attributes get in

Filterable attributes — colour, size, material — come in with the import itself, not from another screen. The place where it's decided is “Review before importing”: there, under “Which columns to keep”, Bruxel lists every column in your file and tells you what it would do with it. Three things can happen:

  • The column matches an attribute you already have: it fills itself, free. No credits, no AI — it's your own data, it was already in the file.
  • The column isn't an attribute yet: if you leave it ticked, it's created with its values during this same import and is ready to filter by. And if its cells carry several values at once (“Cruelty Free,Vegan”), it is created as a multi-select: each product gets its individual values, not the glued-together combination.
  • The column doesn't work as an attribute, and it tells you why: “long text”, “a different value per product”, “a single value”, “empty” or “nearly empty”. A column with a different value per product won't become an attribute even if you tick it — it would be useless as a filter.
Filling an attribute from your file NEVER overwrites what was already there. If someone on your team corrected a value by hand, a later import respects it and only fills the gaps. That's why you can re-import the same file as often as you need.
An attribute is created with at most 500 values, the most frequent ones in your file. If a column has more, products with an uncommon value won't get that attribute. The dry run warns you first: it tells you how many values the column has and how many will be created.

Whatever you don't tick isn't lost: it's stored as source data and still feeds description generation. You just can't filter by it in your store.

What happens to what was already there

The SKU is the key. Importing the same file twice does not duplicate anything:

  • New SKU: the product is created.
  • Existing SKU: name, brand, category and source data are updated.
  • SKU you had deleted: the product comes back.
The update REPLACES the product's source data with the new file's. If your second file has fewer columns, the missing ones are lost.

The journey of a load

In the import history, “View journey” shows where each load is: imported, listing generated, quality check, published, delivered to your system and in the store. Each stage shows its date, “In progress” (some products already got there), “Pending” or “No data”, with the reason.

It counts the products the load changed and what happened after it: a listing that already existed doesn't count as generated by this load. With several languages configured, a product counts once it's there in all of them.

If you upload the same file twice, the second load says no product changed: there are no listings to follow. Loads from before September 12, 2026 say “No data”: Bruxel wasn't keeping the change history yet.

“Delivered” is only known if a system listens for listing notices (webhooks), and for 30 days. “In the store” always says “No data”: Bruxel doesn't know when your store publishes each product.

Variants in the same file

If you sell sizes or colors, add a parent_sku column with the parent product's SKU. Bruxel builds the link on import, and you can bring parents and children in the same file.