Home · Blog · How to upload products to a bot from CSV: columns, encoding, variants and errors

How to upload products to a bot from CSV: columns, encoding, variants and errors

· Command CHBT · Catalog, Sales

For the bot to pick a product for a shopper, quote the price and say whether it is in stock, it needs a catalog. If the store has no feed and the products are not on Wildberries, the shortest path is a file: an export from 1C, MoySklad or an ordinary Excel spreadsheet saved as CSV. Here is how to prepare such a file so that it uploads the first time: which columns are required, how to record sizes and colours, what to do with prices and availability, and how to read the preview before the upload.

What CSV is and why not Excel

CSV is a table in text form: one line of the file is one row of the table, and cells are separated by a comma, a semicolon or a tab. Any accounting program and any spreadsheet editor can save such a file.

The catalog does not accept an Excel file (.xlsx) directly. Open it and save it as CSV: File → Save as → CSV. TSV and a JSON array of products also work, but for most stores CSV is the simplest option.

You do not need to change the encoding: the catalog understands both UTF-8 and Windows-1251, which Russian Excel usually uses to save CSV. The separator is detected from the first line automatically — comma, semicolon or tab.

Required columns

The first line of the file is headers. The column order does not matter, and extra columns do not get in the way.

  • SKU is required. It is the product key: by it a repeated upload updates the product instead of creating a duplicate. A row without a SKU is skipped entirely.
  • Name is required for a new product. A row with a SKU but no name will be skipped too.

Everything else is optional, but without a price and availability the bot will have nothing to tell the shopper. You can keep the headers as your program exports them: the catalog recognises Russian and English names. “sku”, “offer_id”, “vendor_code” and the Russian “article” are the same column, and so are “name”, “title” and the Russian “product name”.

Which columns the catalog understands

WhatWhat the column can be called
Priceprice, or its Russian equivalents
Currencycurrency — RUB, KZT, UZS
Availabilityavailability, in_stock, stock_status
Stockquantity, qty, stock
Descriptiondescription, desc
Brandbrand, vendor
Categorycategory
Linkurl, link
Citycity, region, warehouse
Variantssize, color, model
Barcodebarcode, EAN, GTIN

A column the catalog does not recognise is not thrown away: it becomes a product attribute under its own header. “Material”, “Season” or “Volume” go into the card as they are.

Sizes and colours: one product — several rows

If a product has sizes or colours, you do not need to invent separate SKUs or columns like “size 1”, “size 2”. Write each variant as a separate row with the same SKU:

skunamesizepricestock
RUN-01Novo Run sneakers4054903
RUN-014154900
RUN-014254905

The catalog will assemble them into one product with three variants. The name, description and brand are taken from the product’s first row — you do not need to repeat them in the others. A variant is distinguished by the “size”, “color” and “model” columns: if there are none, the product has a single variant.

Prices and currency

You can write the price the way it appears in the price list: 5490, 5 490, 1 234,50 ₽. The catalog will remove the spaces and the currency sign itself.

It does not guess ambiguous entries. 1,299 could be either “one thousand two hundred ninety-nine” or “one rouble thirty kopecks” — the catalog will not accept such a price and will show an error in the row. Being off by a factor of a thousand is worse than asking to fix a cell.

The currencies are roubles, tenge and sums. If the file has no currency, neither as a column nor as a sign in the price, the catalog takes the store’s currency and says so in the preview: “The file had no currency — we used the store’s currency”. A price in dollars or euros is a row error, not a conversion at the exchange rate.

Availability and stock

The catalog’s main rule: an empty cell means “unknown”, not zero. An empty price or stock will not turn into 0 and will not make a product “out of stock”.

  • In the availability column the words “yes”, “no”, “in stock”, “out of stock”, “available” are understood, as well as their Russian equivalents and 1 and 0, + and -.
  • “Pre-order”, “backorder” and their Russian equivalents are recorded as “availability unknown” — the catalog will not promise the shopper that the product is in stock, nor say that it is not.
  • If availability is empty but stock is given, availability is derived from the stock.
  • If availability says “yes” and stock is 0, the file contradicts itself — the catalog will not promise availability.

City, link and attributes

Three columns that make the bot’s answers more precise:

  • City or warehouse. If price or availability differ by city, write the product as a separate row for each city with a “city” column. Then the product will have several offers, and the bot can answer about availability in the right place.
  • Link. The address of the product page on your website or a marketplace. Under the bot’s card a View product button will appear that leads to this link. The address must start with http:// or https://, otherwise the catalog will show an error in the row.
  • Attributes. “Material”, “Composition”, “Skin type” — everything shoppers ask about. You do not need to set up special columns for them: any unfamiliar column becomes an attribute, and the AI sales assistant can rely on it in its answer.

The catalog keeps the “compatible with” column as an attribute, not as a confirmed link between products: you confirm links between products yourself.

How to upload the file

  1. Sales → Catalog → Import from file.
  2. Choose the file in the Catalog file field. File Format is usually detected automatically; change it manually only if the file was parsed wrongly.
  3. Click Download and check. The file does not change anything yet — first comes the preview.
  4. Look at the summary and the rows with errors.
  5. Click Apply — or Cancel if something is wrong: cancelling simply deletes the preview.

Limits: a file up to 5 MB and up to 50,000 rows. If it is bigger, split it into parts and upload them one by one. The project owner and admin can upload the catalog.

How to read the preview

The preview shows what will happen to each row: “will be created” — a new product, “will be updated” — a product with this SKU already exists, “will be skipped” — a row without changes or without a SKU. Below are the first rows of the file, so you can make sure the columns were recognised correctly, and an Errors in rows table with the row number, column and reason.

Rows with errors do not get into the catalog; the rest are applied: nothing is rolled back because of one bad row. Fix the errors in the source sheet and upload the file again — re-applying will not create duplicates, products are matched by SKU.

If you upload the same file a second time, the preview warns: “The same file has already been uploaded”. The upload history is in Past imports.

After the upload: drafts and publishing

New products from a file arrive as drafts. The bot offers the shopper only published products, so after the import open the catalog, check the cards and click Publish for the products you need. Publishing is one product at a time; there is no bulk button. A product with data errors — without a price or without variants — cannot be published until the data is fixed.

A repeated import updates prices, stock and whatever came from the file, but does not change the status: published stays published, a draft stays a draft. Descriptions and attributes you confirmed by hand are not overwritten. A product that is not in the new file does not disappear either — it simply is not updated.

The catalog is shown to the shopper by the AI sales assistant: it picks a product based on the question and sends a card. It is available from the Basic plan, while the catalog itself can be uploaded on any plan.

How often to update the file

A file does not update itself: the catalog learns new prices only when you upload a new file. 7 days after the upload, products are marked “data is outdated” — a reminder that the bot is quoting week-old prices.

If prices and stock change often, it is more convenient to put the CSV at a permanent link and connect it as a feed in Marketplaces → Online store: then the catalog re-reads it on its own. This way you can connect, for example, a Google Sheet published as CSV — more in the article on the bot and Google Sheets. And if your website serves YML, it is better to connect that — photos come through there too. What this format is, is explained in the article on the YML feed.

Common mistakes

  • Merged cells and subheadings. A “Footwear” row above a group of products is not a product. Delete such rows and put the section into the “category” column.
  • Two header rows. Only the first line is the header; the second will be read as a product without a SKU.
  • A price with a comma and no kopecks. 1,299 will not be accepted — write 1299 or 1 299.
  • Expecting photos. There is no column for images; a photo link becomes an attribute. Photos come from a YML or Google Merchant feed and from Wildberries cards.
  • Not publishing. The import creates drafts — without Publish the bot will not offer them.

More on the blog