11.07.2026

Importing products from Excel and CSV

Product import is needed when the data is already in a spreadsheet and transferring it manually is slow or inconvenient. But a supplier’s file should not be uploaded straight to the live store. First, determine how to match products, which fields to change, and how to handle errors. Otherwise, a price update could create a duplicate or erase a description you edited separately.

Below, we cover file preparation, the differences between WooCommerce and OpenCart, and checks you can include in a developer's brief. This is a guide for a store owner or manager, not a universal file for every module.

Checking spreadsheet rows before product import: valid data enters the catalog, while the erroneous row is separated
A conceptual illustration of data validation. Not a screenshot of the importer's interface.

First, define exactly what you are updating

A one-time catalog migration and daily stock updates need different rules. The first may require names, descriptions, categories and photos. For the second, a product identifier and quantity are often enough. The fewer unnecessary fields involved in regular imports, the easier it is to monitor the result.

  • New catalog: we create products and check categories, specifications, photos and publication status.
  • Price Updates: we change the agreed price type without touching descriptions or page URLs.
  • Stock Updates: we determine whether the number means the supplier's stock quantity, the quantity available for sale or an increment.
  • Multiple Suppliers: we agree on source priority and how to match their SKUs to your catalog.

A periodically updated file does not become real-time synchronization simply because it runs on a schedule. If you need two-way order and stock exchange, separately consider website API integration.

Which field the import should use to find a product

A name is not a reliable key: it can change, and similar products can have identical names. A stable identifier is needed: an SKU, internal ID, or a separate source code with a mapping table.

SKUs with leading zeros and duplicates

Store SKUs as text. For your catalog 00125 and 125 may be different values. Before running the import, check for duplicates, leading and trailing spaces, and identical codes from different suppliers. If a code is ambiguous, it is better to reject the row with an explanation than to update the first product found.

An Empty Field Does Not Mean Zero

Define three actions separately: leave the value unchanged, write zero and clear the field. For example, an empty stock value in a price list may mean the supplier did not provide data. Automatically treating it as an out-of-stock product is risky. You need to test how your specific importer handles an empty cell.

How to prepare Excel or CSV

Excel is convenient for preparation, but the store module determines the upload format. If it expects CSV, export the spreadsheet to CSV rather than simply changing the XLSX extension. Keep one header row and remove totals, merged cells, and internal notes.

Agree on the currency, tax treatment, rounding, and which price the file updates: regular, sale, or a separate customer-group price. Convert formulas to values. Also open the exported file as text and check that Ukrainian names and SKUs have been preserved.

Before sending a sample to a developer, remove purchasing terms not needed for the estimate, personal data, and tokens from links. An anonymized sample is enough to check the structure.

WooCommerce: standard CSV or a separate module

WooCommerce has a built-in CSV importer in the product list. It matches products by ID or SKU; to update products, select the appropriate mode and check the column mapping. Use UTF-8. In update mode, a standard new product without a matching ID/SKU will be skipped; for variations, behavior depends on the version and file structure. Details are provided in the official WooCommerce guide.

A Small Sample for Checking Prices

The SKUs and amounts shown are fictional. The example concerns existing simple products with these SKUs. This is not a Web Alchemy price list or a ready-to-use file for your store.

SKU,Regular price
DEMO-001,249.00
DEMO-002,399.00

On a test copy, select the option to update existing products and map the SKU and regular price. Do not import other fields. If a product has an active sale, also check the actual storefront price: changing the regular price does not automatically cancel the sale price.

Variations, Photos, and Additional Fields

A variation needs a link to its parent product and correct attributes. Check this structure separately. Do not assume that any plugin's SEO fields are standard columns. The built-in CSV importer also does not edit image alt text: this requires a separate process.

OpenCart: check the specific module and version

A WooCommerce file should not be transferred to OpenCart without mapping its fields. Request a sample export from the specific module installed and check its compatibility with the store version, options, languages, and custom fields. A product having an SKU or model does not in itself prove that the importer uses that field for matching.

Current OpenCart documentation on identifiers describes OpenCart 4. Do not automatically apply its rules to OpenCart 3 and third-party modules. For example, Zoori Life from our portfolio runs on OpenCart 3. This is an example of a store on the platform, not confirmation of any importer’s capabilities.

What must not disappear after an update

Create a list of protected fields. If a manager has written a custom description, changed categories, or configured meta tags, the supplier’s price list must not overwrite them without agreement. The same applies to manually configured sales and visibility rules.

  • URL and SEO: price imports must not change page URLs. If URL migration is needed, map old and new addresses and configure permanent redirects according to Google's recommendations for URL changes.
  • Images: check file accessibility, photo order, and behavior on repeat runs. A failed new photo must not silently leave a product without its old one.
  • Products missing from the file: a missing row is not a delete command. The supplier may have sent an incomplete price list.
  • Orders: restoring the entire database from an old backup may remove new orders. The catalog rollback plan must be agreed before starting, separately from purchase processing.

Import acceptance checklist: ten checks

Start with a test copy of the store and a small, varied sample. Include a simple product, a variation, a sale product, and a few intentionally invalid rows. This is a suggested test scenario, not a claimed client project result.

  1. Restoration: there is a verified backup and a clear way to restore the catalog without losing new orders.
  2. Matching: an existing SKU updates the correct product; identical names with different SKUs are not merged.
  3. Invalid key: an empty or duplicate SKU does not change a random product; the reason appears in the report.
  4. Prices: currency, rounding, regular and sale prices, and the price in the cart have been checked.
  5. Stock: zero, an empty value, and a product missing from the file are handled according to different agreed rules.
  6. Variations: the size or color belongs to the correct product; the price and quantity match the specific variant.
  7. Protected fields: manually written descriptions, categories, URLs, and meta tags remain unchanged unless agreed.
  8. Images: an unavailable photo is included in the report; repeat downloads do not create unnecessary copies according to the agreed logic.
  9. Retry and failure: reimporting the file does not duplicate products; after an interruption, it is clear which rows were processed and how to resume safely.
  10. Result: the counts of created, updated, skipped, and failed rows have been reconciled; the product page, search, filters, and cart have been checked.

A green “completed” label does not replace these checks. Regular imports also need a run log, error notifications, and a responsible person who will investigate errors before the next update.

What to prepare for an estimate

Send the platform version, the name of the current module, an anonymized sample file, the number of rows, the update frequency, and a list of fields that must not be changed. Specify variations, multiple warehouses, languages, and suppliers separately. This helps determine whether configuring an existing tool will be enough or additional development is needed.

We can check the data format and configure the import as part of website work or automation and integrations. To get started, describe the task through Web Alchemy contact details or AI consultant. You do not need to send passwords, API keys, or the full customer database for an initial estimate.

Prepared by Web Alchemy. The examples are educational; the rules must be checked against your store and importer versions.