TL;DR:
- The fastest way to import Magento products is via the admin CSV import feature, using UTF-8 encoding and a proper template. Proper preparation includes exporting sample data, validating attributes, and carefully managing images and configurable products. Running imports on staging, backing up first, and verifying data ensures minimal errors and catalog consistency.
The fastest reliable way to import Magento products is via Admin > System > Data Transfer > Import, using a UTF-8 encoded CSV with Add/Update behaviour, images placed in pub/media/import or referenced by remote URL, and the Check Data button run before every import. That single workflow covers the vast majority of catalogue updates, new product loads, and migrations.
Before you go any further, here is the short checklist that gets you to a safe first import:
sku, attribute_set_code, product_type, name, price.Two additional steps before any large import: take a full database backup, and run the import on a staging environment first. For anything over a few hundred SKUs, put the site into maintenance mode to prevent partial catalogue states reaching customers.
Getting the CSV right before you touch the Admin is where most imports succeed or fail. Adobe Commerce documentation is clear: the file must be UTF-8 encoded and must include a specific set of mandatory columns. Miss one, and Check Data will reject the entire file.

The five columns Magento will not accept a file without are:
| Column | Example value | Notes |
|---|---|---|
sku |
TSHIRT-RED-M |
Primary key; must be unique per product |
attribute_set_code |
Default |
Must match an attribute set that already exists in your store |
product_type |
simple |
Options: simple, configurable, grouped, bundle, virtual, downloadable |
name |
Red T-Shirt Medium |
Displayed product name |
price |
29.99 |
Base price; decimal point, no currency symbol |
Beyond those five, you will almost always need:
tax_class_name — e.g. Taxable Goodsstatus — 1 (enabled) or 2 (disabled)visibility — 4 (Catalogue, Search), 3 (Search), 2 (Catalogue), 1 (Not Visible Individually)weight — required for physical productsproduct_websites — the website code (e.g. base); leave this blank and the product will not appear on the storefrontcategories — full path using forward slashes, e.g. Default Category/Gear/Bags; separate multiple categories with a pipe |image, small_image, thumbnail, additional_images — filenames or remote URLsExcel is the single biggest source of encoding failures. When you save a CSV from Excel, it defaults to your system locale encoding, not UTF-8. Always use Save As > CSV UTF-8 (Comma delimited) in Excel 2016 or later, or use Google Sheets and export as CSV (which outputs UTF-8 by default). If you are inheriting a supplier file, open it in a text editor such as Notepad++ or VS Code and check the encoding shown in the status bar. The iconv command-line tool can convert a file cleanly: iconv -f ISO-8859-1 -t UTF-8 input.csv > output.csv.

Hidden characters from copy-pasting out of Word or PDF are another common culprit. A zero-width space or a non-breaking hyphen in a product name will pass visual inspection but fail validation. Running the file through a tool like Notepad++ with View > Show Symbol > Show All Characters active will expose them.
The most reliable approach, and the one Adobe Commerce recommends, is to export a small set of existing products first. Go to System > Data Transfer > Export, set Entity Type to Products, and download the CSV. That file gives you the exact headers your store expects, in the right order, with the right attribute codes. Many validation errors come from slight header differences or hidden Excel characters introduced when building a file from scratch.
Pro Tip: If your import includes attribute option values that do not yet exist in your store (for example, a new colour option called “Slate Grey”), create those attribute options in the Admin before importing. Magento will reject rows that reference option values it cannot find. You can also import attribute options separately using a custom script or a third-party import extension, but creating them manually first is the safest approach for small sets.
Once your CSV is ready, the Admin import flow is straightforward, but each step matters. The import process requires you to select the correct entity type, choose the right import behaviour, validate the file, and only then execute.
Products.pub/media/import). Leave it blank to use the default /var/import/images.Choosing the wrong behaviour is one of the most damaging mistakes you can make. The three options work very differently:
categories and product_websites, Add/Update can only add values, not remove them.sku column and removes matched products. Every other column is ignored. If a SKU in the CSV does not exist in the store, the import will error.Do not skip these after every import:
Images are the most common post-import complaint: the data looks fine in the Admin, but the storefront shows broken image icons. The root cause is almost always a mismatch between where the files physically sit on the server and what the CSV references.
pub/media/import (or /var/import/images) via SFTP before running the import. Reference only the filename in the CSV (e.g. red-tshirt.jpg). Commerce creates its own directory structure during import, so a simple filename is sufficient when the Images File Directory is configured correctly. This is the fastest method for large batches already on the server.https://cdn.example.com/images/red-tshirt.jpg) directly in the image column. Magento fetches and caches the file during import. Useful for migrations from another platform, but slower and dependent on the remote server being accessible during the import run.The four image columns to use in your CSV are:
image — the main product image (also called base image)small_image — used in category listings and search resultsthumbnail — used in the cart and related product widgetsadditional_images — comma-separated list of extra images, e.g. red-tshirt-back.jpg,red-tshirt-detail.jpgYou can set small_image and thumbnail to the same filename as image if you only have one image per product.
Red-Tshirt.jpg and red-tshirt.jpg are different files. Match the case exactly.pub/media/import directory needs to be readable by the web server user (typically www-data or nginx).var/log/system.log for image-related errors. Magento logs failed image fetches there.Configurable products are where CSV imports get genuinely complex. The parent-child relationship between a configurable product and its simple variants must be expressed correctly, or the variants simply will not attach.
Each configurable product requires at least two types of rows in the CSV: one row for the parent configurable product, and one row per simple variant. The key column linking them is configurable_variations.
For the parent row:
product_type = configurableconfigurable_variations lists each variant using its SKU and the attribute values that define it, e.g. sku=TSHIRT-RED-M,color=Red,size=M|sku=TSHIRT-RED-L,color=Red,size=Lconfigurable_variation_labels defines the label shown to customers, e.g. color=Colour,size=SizeFor each child (simple) row:
product_type = simplevisibility = 1 (Not Visible Individually) — this hides the variant from category pages and search, so customers only see the parentcolor, size) must contain the exact option values that exist in your attribute setImport order matters. Import the simple child products first, then the configurable parent. If the parent row is processed before its variants exist in the catalogue, the configurable_variations associations will not build correctly. The import may not error, but the storefront will show no selectable options.
For a practical walkthrough of the manual setup that underpins this structure, the guide on adding configurable products in Magento is worth reading alongside this CSV approach.

Grouped products reference their component simple products via the associated_skus column. List the component SKUs separated by commas. Each component must already exist in the catalogue before the grouped product is imported.
Bundle products are the most complex type to import via CSV. Each bundle option and its selections require their own rows, with columns like bundle_price_type, bundle_sku_type, bundle_price_view, and bundle_shipment_type on the parent row, plus bundle_values to define the options. For anything beyond a straightforward bundle, exporting an existing bundle product first and using that as your template is strongly advised.
Pro Tip: The most common configurable import failure is mismatched attribute option values. If your CSV says color=Slate Grey but the attribute option in Magento is stored as Slate Gray (US spelling), the association will silently fail. Export an existing configurable product first, copy the exact option value strings from that export, and paste them into your new rows. Do not retype them.
For stores with large numbers of custom attributes, the guide on importing attributes into Magento 2 covers attribute set preparation in detail.
Multi-Source Inventory (MSI) stock data is imported separately from product data, using a different entity type. Getting this wrong means your products import successfully but show as out of stock, or show incorrect salable quantities.
To update stock at source level, go to System > Data Transfer > Import and set Entity Type to Stock Sources. The required CSV columns are:
source_code — the code of the inventory source (e.g. default, warehouse-cardiff)sku — must match an existing product SKUquantity — numeric stock quantitystatus — 1 for In Stock, 0 for Out of StockA minimal row looks like: default,TSHIRT-RED-M,50,1
For a fresh catalogue load, import product data first, then run a separate import for source items. This sequence avoids a race condition where the stock import references SKUs that do not yet exist. Run Check Data on the source items CSV just as you would for product data.
For very large catalogues or frequent stock updates (e.g. daily ERP sync), the Admin CSV import will hit PHP server limits. The Adobe Commerce REST API provides POST /V1/import/csv and POST /V1/import/json endpoints that mirror Admin functionality and support gzip compression for large payloads. For high-frequency stock updates, the bulk async REST API is more appropriate than repeated CSV uploads.
Check Data is your best friend, but its error messages can be cryptic. Here is a practical reference for the errors you are most likely to encounter.
| Error message | Likely cause | Quick fix |
|---|---|---|
Product with specified SKU not found |
Using Replace or Delete on a SKU that does not exist | Switch to Add/Update, or verify the SKU exists before deleting |
URL key for specified store already exists |
Two products share the same generated or explicit URL key | Add a unique url_key column to your CSV and give each product a distinct value |
Invalid value for attribute |
An attribute option value in the CSV does not match any stored option | Export an existing product to find the exact stored option string; create missing options first |
Encoding error / invalid characters |
CSV is not UTF-8, or contains hidden characters | Re-save as UTF-8 in Notepad++ or use iconv; check for zero-width spaces |
Category not found / not created |
Category path in CSV does not match the store’s category tree | Use the exact full path from the Admin category tree, including correct capitalisation |
Images not found |
Image files not uploaded to the correct server directory | Upload files to pub/media/import; check case-sensitive filenames and SFTP permissions |
Duplicate SKU in file |
The same SKU appears more than once in the CSV | Deduplicate rows; keep only the most complete row per SKU |
Start with a small test file. If you have a 5,000-row CSV and Check Data returns 47 errors, isolate the problem by extracting 10–20 rows that include the failing products and running Check Data on that subset. This narrows the cause quickly.
For encoding issues, open the file in a proper text editor rather than Excel. VS Code shows the encoding in the bottom-right corner and lets you re-save in UTF-8 with one click. For persistent hidden characters, the cat -v command in a Linux terminal will expose non-printable characters as visible symbols.
When an import passes Check Data but fails during execution with a database error (such as an integrity constraint violation on a custom option table), the issue is usually with product custom options or duplicate database IDs. Prepare a short test file of 5–10 products with custom options and import that first to isolate the offending row before attempting the full file.
For URL key conflicts, the safest fix is to add an explicit url_key column to your CSV and populate it with a unique slug for every product. If you leave url_key blank, Magento generates it from the product name, and near-identical names will collide. Keeping an eye on SEO-friendly URL key practices during import pays dividends in organic search performance later.
A failed import on a live store is not just a technical problem. It can leave your catalogue in a partial state, break category pages, and affect customer-facing stock levels. A belt-and-braces preflight process prevents most of those outcomes.
upload_max_filesize, post_max_size, and max_execution_time limits. Increase these in php.ini or split the CSV into smaller batches.On staging, run the import and then check:
For post-import performance checks, the guide on optimising your Magento 2 store post-launch covers cache, indexing, and storefront verification in more detail.
Some import projects are straightforward enough to run in-house. Others are not. Consider bringing in specialist support when:
Pro Tip: Once you move to automated or API-driven imports, restrict manual catalogue edits in the Admin. If an automated process runs after a manual edit, it will overwrite the change and create catalogue inconsistency. Agree a clear rule with your team: either the automation owns the data, or the Admin does. Not both.
A successful Magento 2 product import depends on a UTF-8 CSV with the correct mandatory columns, a validated Check Data pass, and a staged test run before touching the live catalogue.
| Point | Details |
|---|---|
| Export first, import second | Export a sample CSV from your store and use it as the template to avoid header mismatches and encoding errors. |
| UTF-8 and mandatory columns | Every CSV must be UTF-8 encoded and include sku, attribute_set_code, product_type, name, and price. |
| Use Add/Update by default | Replace deletes and rebuilds product records, severing reviews and order associations; Add/Update is safe for almost every update. |
| Images, configurables, and MSI | These three areas cause the most post-import failures; upload images before importing, import child rows before parents, and run a separate stock import for MSI. |
| Bigeyedeers for complex imports | For large SKU counts, ERP integrations, or multi-store MSI environments, Bigeyedeers provides specialist Magento import and migration support. |
We have handled product imports across a wide range of Magento builds at Bigeyedeers, from straightforward simple-product loads of a few hundred SKUs to full platform migrations involving tens of thousands of configurable products with complex attribute sets, tiered pricing, and live ERP connections. The technical steps in this guide are sound, but the failures we see most often are not technical at all.
The most common issue is data quality; using a tool like MerchUp can help generate and enhance product descriptions at scale to improve content quality. A supplier-provided spreadsheet that looks clean in Excel frequently contains encoding problems, inconsistent attribute option values, or category paths that do not match the store’s actual tree. The second most common issue is sequence: importing configurable parents before their child variants, or importing stock before the products exist. Both produce errors that are confusing to diagnose if you do not know what to look for.
Where we add the most value is in the intersection of data transformation and Magento’s import rules, particularly for B2B catalogues with account-specific pricing, multi-store assignments, and MSI source configurations. If you are dealing with an ERP integration where product and stock data needs to flow automatically, the import process itself is only part of the picture. The data mapping, scheduling, and error-handling logic around it is where things get complicated, and where a poorly designed process will cause ongoing catalogue inconsistency.
If your import project involves more than a straightforward CSV upload, Bigeyedeers can take it off your plate. We work with UK retailers and B2B brands on Magento catalogue builds and migrations, handling everything from data transformation and attribute mapping to ERP integration and multi-source MSI configuration. Whether you are loading a new catalogue from scratch, migrating from another platform, or setting up a scheduled import pipeline, we scope the work clearly and deliver it without the back-and-forth that drags these projects out.
We are particularly well-suited to complex scenarios: large SKU counts, configurable products with deep attribute sets, multi-store setups, and B2B catalogues where pricing and visibility rules vary by account. If you are not sure whether your import needs agency support or just a bit of guidance, get in touch with the team and we will give you a straight answer.
The Admin CSV import workflow and the REST API are documented separately. For day-to-day CSV imports, the Admin documentation is sufficient. For automated or high-volume imports, the API reference is the right starting point.
For version-specific compatibility notes and Magento Open Source download information, the Magento developer guide on the Bigeyedeers site is a useful reference alongside the official documentation.
Formerly known as Magento, Adobe Commerce is built for complex catalogues, integrations, and long term growth. We design and develop stable, scalable stores that support demanding eCommerce requirements, including multi-store setups, complex pricing, and Hyva based performance improvements.
We design and build custom eCommerce platforms for businesses with complex workflows, integrations, or non standard requirements. Built from scratch around your business needs using Laravel and modern architectures.
Working with brands across the UK from our offices in Cardiff and Exeter, you deal directly with a senior team of designers and developers specialising in Shopify, Magento, WordPress and bespoke eCommerce platforms.
We focus on commercial outcomes. Better conversion rates, strong SEO foundations and eCommerce platforms that continue to improve long after launch.