Importing products from CSV and XML feeds
How to move a catalog from a table or a feed: upload the file, map the columns, review the result and revert the import if needed.
What file you need
- CSV or TSV up to 250 MB and 100,000 rows. Save a table from Excel or Google Sheets as CSV — the import detects the delimiter (comma, semicolon, tab) and the encoding itself.
- Or an XML feed — YML or a Google feed — up to 250 MB and 100,000 products.
- Or a Shopify or WooCommerce product export — it’s recognized by its column headers. How to get one and what is transferred — see “Moving from Shopify” and “Moving from WooCommerce”.
- Any of these files can be uploaded compressed as .gz. Unpacked, it must also be no larger than 250 MB.
- The first row holds the column headers, then one product per row.
- Photos — links to images, several separated by commas. The import downloads them to the media library itself, up to 10 per product.
- Categories — as a path with “>”: “Clothing > T-shirts”. Missing categories are created as a tree.
“Catalog” → “Import” → “CSV template”. The template has our columns: id, sku, name, price, stock_quantity, categories, images and more, plus columns for store languages (name:en) and attributes (attr:code). A file made from the template is recognized automatically and needs almost no mapping.
YML feeds
YML is an XML feed that marketplaces accept and suppliers send. Platform specifics are recognized by the tags on their own. Prom, Deal.by and Satu.kz exports are read from YML and from CSV; CSV has no group tree, so categories stay flat. Export a Horoshop catalog in the Prom format. The feed’s tags become columns and are mapped automatically: categories come from the feed’s category tree, every param becomes an attribute (columns like param:Color), and name_ua and description_ua become the Ukrainian translation if Ukrainian is among the store languages.
Google feeds
A Google Merchant feed is XML (RSS or Atom) or a TSV or CSV table with Google attribute names. Meta (Facebook, Instagram) and Microsoft Merchant Center feeds use the same attributes and are uploaded the same way. sale_price is the sale price: when it’s filled in, it becomes the product price and the regular price becomes the old price. google_product_category goes to the product’s Google category, product_type is a category path “A > B > C” that builds the store’s category tree, and product_detail entries become attributes.
Compatible platforms
Any product export as a file works. “Automatic” means the format is recognized by itself. “Through custom CSV” means the file uploads and you map its columns at the “Fields” step. If your platform is not listed, export your products to CSV and upload them as a custom CSV. Save an Excel file as CSV first.
- In any country: automatic — Wix, Ecwid; through custom CSV — Etsy, Amazon, eBay, Squarespace, BigCommerce, Magento.
- Canada: automatic — Lightspeed.
- United States: through custom CSV — GoDaddy, Webflow.
- Brazil: automatic — VTEX.
- Argentina: through custom CSV — Tiendanube.
- Chile: through custom CSV — Jumpseller.
- Germany: automatic — Shopware.
- France: through custom CSV — PrestaShop.
- Poland: automatic — Shoper.pl; through custom CSV — Allegro.pl.
- Czechia: automatic — Shoptet.cz.
- Ukraine: automatic — Prom.ua, Horoshop.ua.
- Kazakhstan: automatic — Satu.kz.
- Türkiye: automatic — ikas.
- India: through custom CSV — Zoho Commerce.
- Malaysia: through custom CSV — EasyStore.
- Hong Kong: through custom CSV — Shopline.
- Saudi Arabia: through custom CSV — Zid.sa.
- Australia: through custom CSV — Maropost.
How the import goes
- Source“Catalog” → “Import” → “New import”, choose the file. Every upload goes into a source — uploading into the same source again updates its products instead of creating new ones. If the same catalog was already uploaded into another source, the wizard offers to update that one.
- FormatYou see how many records the file has and which format and encoding were detected, and a table shows the first records with all columns. If the format is wrong, the table is garbled or everything sits in one column, change the format, encoding or delimiter and read the file again.
- Fields, categories, attributesMap the columns to product fields, then decide which categories and attributes to create and which to link to existing ones.
- VariantsIf the file has a group key or a parent reference, the wizard shows the variant groups it found and their options. When there are no groups, the step is skipped.
- SettingsCreate and update or only one of the two, what to do with products missing from the file, the currency rate, the status of new products, photos, filters. The defaults are usually enough.
- Check and runThe import shows what will be created, updated and skipped, and only then writes to the catalog. It runs in the background: you can close the window, and an email arrives when it’s done.
Fields and transformations
On the left — the file’s columns with sample values, on the right — where to write them: a product field, a text in a store language, a category, photos, an attribute or “Skip”. Columns with familiar names are mapped automatically, and fitting options come first in the list. The mapping is saved in the source and reused on the next upload.
The “Transform” button on a column changes values on their way to the catalog: replace or remove text (“WHOLESALE”, a supplier’s name), add text at the start or end, change the letter case, truncate, fill empty values, replace values by a table, build a value from several columns with a template like {Brand} {Model}, multiply, add or round a number — for example, a markup. Rules apply in order, and you see “before → after” next to them.
A repeated upload finds products by the id column, or by SKU without it. If the file has neither, every upload creates the products again.
Variants
- A variant is a separate product in a group. A group is assembled from a column with a shared group key (group_id in YML, item_group_id in a Google feed) or from a column referencing the parent — the parent product’s id or SKU; the parent itself joins the group too.
- Options are the attributes variants differ by: color, size. By default they are the attributes whose values differ within a group; at the “Variants” step you can pick them yourself — up to three. Turn off “Assemble variants” to import every product separately.
- The main product of a group is the parent, or without one, the group’s first product in the file. Variants without their own description, categories or photos take them from the main product, along with missing attributes.
- A group of more than 100 products, with more than three options, with an option that isn’t a “List” or “Color” attribute, with a product missing an option value or with a repeated combination of values isn’t assembled: its products are imported one by one, and their rows keep a warning.
- A repeated upload adds new variants to the group that’s already assembled.
Filters
Filters at the “Settings” step take only part of the file’s records — for example, one brand or products priced above 100. A condition is a column, a comparison (equals, contains, greater than, less than, one of a comma-separated list, empty and others) and a value; the value is compared after the column’s transformations. The import takes only records that match all conditions, the rest are neither created nor updated. The “Check” step shows how many records were filtered out. Up to 20 conditions.
Currency and rate
Prices in another currency are converted to the store currency: at the feed’s rate (currencies in YML), USD with the NBU rate in a UAH store at the current NBU rate, otherwise at the “Source rate” from the “Settings” step — how much one unit of the file’s currency costs in the store currency. Without a rate the import doesn’t run: the check shows which currency lacks one, so dollar prices don’t reach the site as hryvnias.
Check
At the “Check” step nothing is written to the catalog yet. At the top you see how many products will be created, updated and skipped and how many rows have errors, below — the “Products”, “Categories” and “Attributes” tabs. Each row shows its row number in the file and the error reason. Uncheck a row to exclude it from this import. “Error report” downloads them as a CSV list.
If the import changes the catalog noticeably — the price of many products changes by more than half, new products match existing ones by name, many products go off sale — the check shows the numbers and the run asks for a confirmation. That way a mistake in a markup doesn’t reach the site as live prices.
Review before publishing
By default new products are written as drafts and new categories are hidden: the data is already in the catalog, but not on the site. Review and adjust them in the regular dashboard — the “Created by the import” list leads to the product pages — and press “Publish”. Changes to existing products apply right away. The “Review before publishing” option is at the “Settings” step.
Stopping and reverting
- “Stop” during writing takes effect after the current batch. Then — “Resume” from the same place, “Finish as is” or “Revert import”. Without a decision a stopped import finishes as is after a day.
- An import that hasn’t started closes with the “Close” button on the source card or goes away with the source: it wrote nothing to the catalog.
- “Revert import” is available on the latest import of a source that wrote to the catalog. It deletes products the import created, plus categories and attributes nothing else uses. Products with orders go to the archive. The confirmation shows how many products will be deleted and how many of them were edited after the import.
- Reverting doesn’t roll back updated fields of existing products.
Plan limit
A store can have up to 100 products on Free, 5,000 on Pro and 15,000 on Team. If the file doesn’t fit, the import tells you right after reading it: upgrade your plan or exclude extra rows at the “Check” step. An import that would take the store over the limit doesn’t run.
Sync by link
Instead of a file you can give a link to a supplier’s feed: “New import” → “By link”. The import downloads the feed (up to 100 MB) and goes through the same steps as with a file. If the feed opens with a login and password, tick “Private feed” and enter them — they are stored encrypted.
- On Pro and Team a link source updates on a schedule — every 1, 3, 6, 12 or 24 hours. Turn the schedule on in the source menu → “Edit”.
- By default sync updates price, old price, availability and stock, and moves products that are no longer in the feed to the archive. You can change this in the source settings.
- A markup in percent or as an amount and price rounding — to a whole number or to .99 — apply to the price and old price after currency conversion.
- If the feed hasn’t changed since the last run, sync skips it — the run is marked “Feed unchanged” in the history.
- Significant changes — the same that need a confirmation in a manual run, or a feed that got much shorter — aren’t written by sync on its own: the source pauses and you get an email. Open the check and run the import or resume the source.
- Five failures in a row — the feed didn’t download or the link opened a page instead of a feed — pause the source too. Check the link and access, then resume it.