# How to import products from CSV, XML and Google Sheets in CloudCart

How to import products from a CSV file in CloudCart: the columns you need, uploading from Excel, supplier XML feeds and updating prices without duplicates.

Source: https://cloudcart.com/en/blog/product-import-csv-xml · CloudCart · 2026-11-06

In short: a CSV file is a plain-text table with values separated by commas. In CloudCart you upload it under Products → Import → Import with CSV file. A supplier's XML feed goes in through the XML Import app, and bulk edits to products you already sell are done in Google Sheets. A CSV import always creates new products, so update prices with XML Import, XML Sync or Google Sheets.

This guide is for anyone loading a catalog into a store that sells in Bulgaria or across the EU: from an Excel list, a Bulgarian supplier's feed or another platform. It covers which tool fits which job, the exact columns, the admin steps and the mistakes to avoid.

## What is a CSV file, what opens it, and what is an XML feed?

CSV (comma-separated values) is a text file holding a table: each line is one record, and the values on the line are separated by a comma or another character ([RFC 4180](https://www.rfc-editor.org/rfc/rfc4180)). Excel, Google Sheets and almost every ecommerce platform read and write CSV, which is why it is the most common format for moving a catalog.

Excel, Google Sheets, LibreOffice Calc or any text editor opens a CSV file, and the same programs create one: in Google Sheets with File → Download → Comma-separated values (.csv). The line "TSH-01,Basic T-shirt,24.90" is a code, a name and a price.

XML (Extensible Markup Language) is a text format that wraps data in tags, such as <price>24.90</price> ([W3C specification](https://www.w3.org/TR/xml/)). Wholesalers and suppliers publish their catalog as an XML feed at a fixed web address (URL). Your store reads it on a schedule.

In CloudCart, the Bulgarian ecommerce platform, each format has its own app:

| Tool | Source | Creates new products | Updates existing products | Best for |

| CSV Import | A .csv or .txt file you upload | Yes | No, a second import creates duplicates | First catalog load, migration |

| XML Import | The URL of an XML feed | Yes | Yes, only the fields ticked "Update" | A supplier's catalog, a new product line |

| XML Sync | The URL of an XML feed, on a schedule | Yes | Yes, the fields ticked "Update", on every run | Dropshipping, daily prices and stock |

| Google Sheets | A spreadsheet CloudCart creates in your Google account | Yes, a row with an empty Product ID | Yes, the sheet wins on Download | Manual changes to prices, names, descriptions |

| AI agent with a PAT token | A sentence and a file you give the agent | Yes | Yes, by SKU or by a rule | Changes you can describe in one sentence |

## Which import method should you choose?

It depends on where the data comes from and how often it changes: once, use CSV; from a supplier, use XML; already in the store, use Google Sheets or an AI agent.

- A new store with the catalog in Excel. Save the sheet as CSV and upload it with CSV Import.

- Moving from WooCommerce, Shopify, OpenCart or Magento. Export the products from the old platform as CSV or XML and import them. How to keep your URLs and Google rankings is covered in the guide to migrating from WooCommerce without losing SEO .

- A supplier with an XML feed. XML Import loads the catalog once and then, by default, reads the feed again every 12 hours. XML Sync is for suppliers whose prices and stock change every day. How to start with such a supplier is in what dropshipping is .

- A new price list for products you already sell. Google Sheets if you type the prices by hand, or an AI agent if the change is a rule ("+8% on brand X").

- Dropshipping. XML Sync with "Update" ticked only on price and quantity, so your own descriptions are never overwritten.

> Migration €0 for the move with a 24-month contract The CloudCart team moves your products, customers and blog articles and keeps your Google rankings, while the old store keeps selling. How the move works →

## Which columns does the CSV import file need?

A CloudCart product CSV needs two columns: product.id and product.name. If a product has variants, every variant row also needs variant.parent_id. All other columns are optional, and you map them by hand in the last step of the import.

| CloudCart field | Required | What goes in the column |

| product.id | Yes | Your own product code in the file. Rows with the same code become one product. |

| product.name | Yes | The product name. |

| variant.parent_id | Yes, for variants | The code of the main product the variant belongs to. |

| variant.v1 / variant.v1_value | No | The first option and its value, such as "Size" and "M". There are also v2 and v3: up to 3 options per variant. |

| Price, SKU, barcode, weight | No | At product level or at variant level ( variant.price , variant.sku , variant.quantity ). |

| Category | No | A path with a separator, such as "Clothing > Shirts". You set the separator in the import settings. |

| product_images.src | No | Image URLs, separated by commas in one cell. |

| Description, brand, tags, properties | No | Text. Several columns can be combined into one field. |

CloudCart downloads each image once into its own media library, so the old site can be switched off after the import. The CSV Template button in the first step of the import downloads a sample file.

An example for a clothing store: a T-shirt in 3 sizes is 3 rows in the file. All three rows have variant.parent_id "TSH-01", and the v1 and v1_value columns hold "Size" and S, M, L. After the import the store has 1 product with 3 variants, so the product count can be lower than the row count.

## How do you upload products from Excel, step by step?

Products from Excel go into CloudCart as a CSV file, because the import does not accept .xls or .xlsx. In Excel, choose Save As → CSV UTF-8 ([Microsoft Support](https://support.microsoft.com/en-us/office/import-or-export-text-txt-or-csv-files-5250ac4c-663c-47ce-937b-339e391393ba)). UTF-8 encoding keeps every character intact, including the Cyrillic names that Bulgarian suppliers often send. A file saved as Windows-1251, the older Cyrillic encoding, can come out as unreadable symbols.

- Open the import. In the admin: Products → the Import button (the cloud icon) → Import with CSV file . The same import is also under Apps → CSV Import .

- Step 1, Upload file. Drop the file in or pick it from your computer. The delimiter (comma, semicolon or tab) is detected from the first 10 KB of the file.

- Step 2, CSV file settings. Turn on the header row if the first line of the file holds the column names. The switch is off by default, and the first line would otherwise become a product. Here you also set the character that separates category levels (such as > ).

- Advanced settings. Publishing, featured or new, shipping, stock tracking and selling when out of stock, for every row in the file.

- Step 3, Mapping. Next to each CloudCart field, pick the column from your file. The value from the first row is shown next to it. Select Submit .

- Track the progress. The Track importing progress button opens the task list. The count of imported and failed rows refreshes every 5 seconds, and failed rows appear in a separate table with the error.

Important: run a file with 10 to 20 rows first. The CSV import has no undo: Cancel import stops the task, but products already created stay. A wrong mapping then touches only 20 products.

> €1 for 3 months The full plan for €1/month while you test the import New stores pay €1/month for the first 3 months on every plan, so you can load your whole catalog and take your first orders before you pay the plan price. Create a store for €1 →

## How do you import products from a supplier's XML feed?

You import an XML feed with the XML Import app: you enter the feed URL, map its tags to CloudCart fields and the platform creates the products. The app accepts only a URL (HTTP or HTTPS). For a file on your computer, use the CSV import.

- Install the app. Apps → XML Import → Install, then + New task .

- Step 1: URL and rules. Paste the feed URL. Choose the import type: new products, updates to existing ones, or both. This step also holds the switches for stock tracking (Track inventory), selling when out of stock (Continue selling), hiding products that have left the feed (Disable missings) and a fixed category for all products.

- Step 2: the tags. Name the tag that wraps each product and map the tags to fields: name, price, SKU, description, images, category, quantity. Choose how the feed describes variants. Every field has an Update checkbox next to it.

- Step 3: finish. Map the categories (missing ones are created, levels use > ), the default tax and brand, and the properties. Saving starts the task.

- Check the status. Under Status you see the progress of each task. A large feed keeps importing in the background.

By default the feed is read again every 12 hours. The platform waits up to 120 seconds for the supplier's server to answer. After 3 failed attempts in a row, the task switches itself off so it does not write stale data.

## How do you update prices from a supplier's XML feed?

Prices from a supplier's feed are updated with the Update checkbox in step 2 of XML Import or XML Sync. Tick only price and quantity: unticked fields, such as your own descriptions and SEO texts, stay as they are on every later read of the feed.

The platform finds the existing product by the task that created it and the code of the row in the feed, so updates do not create duplicates. In XML Sync you also choose in step 1 what products are matched by (Compare by): SKU, barcode or ID.

- Daily prices and stock. XML Sync compares the feed with your catalog on every run and updates, creates or hides products.

- Discontinued products. Disable missings hides them without deleting them. In XML Sync, Enable exists products shows a hidden product again when it returns to the feed with stock.

- Images. Once they are loaded, untick Update on them. If the supplier replaces an image URL with a broken one while Update is ticked, the product can end up with no image.

If the supplier sends an Excel price list rather than a feed, it is faster to give the file to an AI agent: "update the prices by SKU and show me which codes are missing".

## Google Sheets: bulk changes to products already in your store

Google Sheets is the recommended way to change prices, names, descriptions, brands and categories of products already in CloudCart. Upload sends the catalog to a sheet, and Download brings the changes back.

- Connect your Google account. Apps → Google Sheets → Settings → Sign in with Google . The platform creates the spreadsheet itself; you cannot choose your own.

- Choose products and columns. Filter: all products, a category, a brand or specific products. (The tag and selection filters do not narrow the Upload.) Tick at least one column to edit.

- Upload. In the Tasks tab, select the up-arrow button. Every Upload clears the sheet and writes it again.

- Edit in the sheet. A new row with an empty Product ID becomes a new product. New categories (as a path, "Clothing > Shirts") and brands are created automatically.

- Download. The down-arrow button brings the changes back, after at least one successful Upload.

Important: on Download, the sheet wins. Admin changes made between Upload and Download are replaced, tags included, so run Upload right before you edit.

Google Sheets handles products only. If the app is not in your app list, your plan does not include it. How products, variants, properties and brands are structured is explained in the guide to [the CloudCart product catalog](https://cloudcart.com/en/blog/product-catalog-management).

## Imports and changes with an AI agent instead of columns and mapping

An AI agent connected with a PAT token (a personal access token) loads and changes products from a sentence, with no column mapping. It is a program such as Claude Code, ChatGPT Codex, Gemini CLI or Cursor that works through the CloudCart Admin GraphQL API with the permissions of the token you give it.

An example: "Here is the supplier's price list in prices-11.xlsx. Update the prices by SKU, leave products that are not in the file untouched, and show me the first 5 before you save." With the CloudCart skills for AI agents, at 100 rows or more the agent first writes the current values to a CSV file and does a dry run that changes nothing; above 1,000 rows that file is mandatory. With an agent that lacks these skills, ask it to show the plan first. The file is the way back that the CSV import does not have.

> A store with an AI assistant An Excel price list into your store with one sentence The agent reads the supplier's file, finds the products by code and shows what it will change before it saves. How the AI assistant connects →

## How do you export orders and sales from CloudCart as a CSV file?

Orders are exported as CSV with the Export button at the top right of Orders. The export takes exactly the orders you see after filtering (period, status, payment), or the full history with no filter, in a fixed set of more than 40 columns with one row per product in an order.

- Up to 50 orders. The file downloads straight to your browser.

- More than 50 orders. The export runs in the background, CloudCart emails you a download link and keeps the file in the store's file manager.

- Two-factor authentication. If it is on for your account, the platform asks for a code first.

The file is raw material for a pivot table in Excel. An AI agent with a Read Only PAT token skips that step: "show me revenue, order count and average order value for this month against last month" returns the numbers straight from the store.

## How many products can you import on each plan?

Import limits follow your store's plan. The table follows the [pricing and plans](https://cloudcart.com/en/pricing) page, billed annually, prices excluding VAT.

| Limit | Baby Pack (€14) | Starter Pack (€33) | CC Pro (€83) | CC Master (€249) |

| Products in the store | 100 | 2,000 | 7,500 | Unlimited |

| CSV import | 100 | 2,000 | 7,500 | 10,000 |

| XML Import: products per task | 100 | 2,000 | 7,500 | 25,000 |

| XML Import: active tasks | 1 | 1 | 1 | 2 |

| XML Import: total products ever imported | 100 | 2,000 | 7,500 | 100,000 |

| XML Sync: products | 100 | 2,000 | 7,500 | 25,000 |

If a CSV import hits the product limit halfway, the task stops with a message saying how many rows were imported out of how many. In XML Import, products above the limit are not processed, and you get a notification and an email. The XML Import total counts every product ever imported with the app; only deleting the products resets it. You raise the limits with a higher plan or an extra product pack. The commission on sales is [0% on every plan](https://cloudcart.com/en/offer/zero-commission-ecommerce), however many products you load.

## The other direction: an XML feed from your store to Pazaruvaj, eMAG and Google

The same catalog goes out to price comparison sites and marketplaces as an XML feed CloudCart generates. The XML Feed app (Apps → XML Feed) has ready formats for Google Merchant Center, the Facebook catalog, TikTok, Pazaruvaj (a Bulgarian price comparison site), eMAG (an online marketplace), Glami, Skroutz and Criteo. You turn on a format and give its fixed URL to the channel.

A price changed by XML Sync or by the AI agent reaches Pazaruvaj and Google Shopping on the next read of the feed, with no second file.

These feeds also power product ads. The more complete your columns at import (SKU, barcode, brand, category, images), the fewer products the ad accounts reject.

> Sales channels One catalog to Google, Facebook, TikTok, Pazaruvaj and eMAG The products you just imported go to every channel from a ready feed, without a separate spreadsheet for each site. CloudCart sales channels →

## Best practices for importing products

- Test with 10 to 20 rows , then load the full catalog.

- Keep the same columns every time. The mapping is not saved between imports.

- Import as drafts. Leave "Publish imported products" off, review 10 products, then publish.

- Fill in SKUs and barcodes. Later price and stock updates from a supplier, an ERP or an AI agent match on them.

- One category separator. "Clothing > Shirts" and "Clothing/Shirts" build two different trees.

- Check 3 image URLs in a browser before the import.

- Stock from your ERP. If stock lives in warehouse software such as Microinvest, a Bulgarian inventory program, bring it in through an integration.

## Import mistakes to avoid

- Re-importing a CSV to change prices. It creates duplicates. Use Google Sheets, XML Import with Update ticked or an AI agent.

- Admin IDs in product.id . The number in a product's admin URL (such as 583) does not update product 583: the column is the code inside your file.

- The header row switched off. The first line becomes a product called "Name".

- A file in Windows-1251. Cyrillic text from a Bulgarian supplier turns into unreadable symbols. Save as CSV UTF-8.

- Importing again because products are not visible yet. They appear on the storefront gradually while search refreshes, but they are in the admin right away.

- Two imports at once. A store runs one CSV import at a time, on every plan.

If an import went wrong, the Imported with filter in the product list shows every product from one task: select them all, delete them in one go and upload the corrected file. Every way to load and edit a catalog is on the [product catalog](https://cloudcart.com/en/catalog) page, and a full move from another platform is on the [migration to CloudCart](https://cloudcart.com/en/migration) page. Questions about a specific file go to support@cloudcart.com.

## Frequently asked questions

**How do I upload products from Excel to my online store?**

Save the sheet in Excel as CSV UTF-8 and upload it under Products → Import → Import with CSV file. Files in .xls and .xlsx are not accepted. Map the columns in step 3 and select Submit.

**Which columns do I need for a product CSV import?**

product.id (your product code) and product.name (the name) are required. Variant rows also need variant.parent_id. Everything else is optional, and the CSV Template button downloads a sample file.

**How do I update prices from a supplier's XML feed?**

Create a task in XML Import or XML Sync and, in step 2, tick Update only on price and quantity. On every later read of the feed, only those fields change. XML Sync is for feeds that change every day.

**Can a CSV import update existing products?**

No. The CSV import in CloudCart always creates new products, and uploading the same file again creates duplicates. Change existing products with Google Sheets, XML Import with Update ticked, or an AI agent.

**How do I export orders from my store as CSV?**

In Orders, filter the period and select Export at the top right. Up to 50 orders download right away; for more, CloudCart emails you a link.

**How many products can I import into CloudCart?**

It depends on the plan: the store holds 100 products on Baby Pack, 2,000 on Starter Pack, 7,500 on CC Pro and unlimited on CC Master. All limits are on the pricing page.
