You can import WooCommerce products with images using WooCommerce’s built-in CSV importer or a dedicated plugin like WebToffee’s Product Import Export. This guide covers both.
Whether you’re migrating a product catalog, bulk uploading hundreds of items from a supplier’s CSV, or updating gallery images across an existing store, the method you choose depends on your catalog size and image complexity. The built-in importer works well for straightforward imports. For variable products, gallery images, external URLs, or scheduled recurring imports, a plugin like the Product Import Export for WooCommerce handles what the native tool can’t.
By the end of this guide, you’ll know exactly how to set up your CSV, map image columns correctly, and avoid the common failures.
Key Takeaways:
- Importing products and their images is key when migrating a store to a new platform or updating existing products.
- WebToffee’s Product Import for WooCommerce plugin makes importing products and associated images hassle-free, saving time and reducing errors.
Before running any import, make sure you have the following in place. Skipping these steps is the most common reason images fail to appear after import.
1. A Properly Formatted CSV File
Your CSV needs at a minimum these columns:
| Column | Example Value | Notes |
|---|---|---|
| name | Blue Cotton T-Shirt | Product title |
| sku | BCT-001 | Used to match existing products on re-import |
| images | https://yoursite.com/tshirt-blue.jpg | First URL = featured image |
| images (multiple) | https://…/front.jpg|https://…/back.jpg | Pipe-separated for gallery |
| meta:variation_image | https://…/tshirt-red.jpg | Variable products only |
The images column does double duty — the first URL becomes the featured image, and every additional URL separated by a pipe character (|) becomes a gallery image. There should be no spaces around the pipe.
2. Images Must Be Hosted at a Public URL
WooCommerce imports images by fetching them from a URL during import — it cannot pull images from your local computer or a password-protected location. Before you run the import, paste each image URL into a browser tab. If the image loads directly, it will import correctly. If the page redirects, shows a login screen, or prompts a download dialog, it won’t work.
Common URL problems and fixes:
| Source | Problem | Fix |
|---|---|---|
| Google Drive | Share URL loads Drive viewer, not the file | Change URL to https://drive.google.com/uc?export=download&id=FILE_ID |
| Private server | URL requires authentication | Move images to a public folder or CDN first |
| Local computer | No URL exists | Upload to your Media Library or an image host first, then copy the URL |
3. Understand How Woocommerce Maps Image Types
WooCommerce uses three distinct image types, each stored in the WordPress Media Library and linked to products via internal IDs. Getting these mapped correctly in your CSV is what separates a clean import from one where thumbnails go missing, or galleries don’t attach.
| Image Type | CSV Column | What it does |
|---|---|---|
| Featured Image | images (first URL in cell) | Primary image on shop pages, category pages, and the top of the product page |
| Gallery Images | images (2nd, 3rd… URLs, pipe-separated) | Thumbnail strip below the featured image on the product page |
| Variation Images | meta:variation_image | Swaps dynamically when a customer picks an attribute like color or size |
Note: If you only have one image per product, just put a single URL in the images column with nothing else. The pipe separator is only needed when a product has more than one image.
Once you have your CSV ready and your image URLs verified, you’re ready to import. Choose your method below.
WooCommerce’s built-in importer lets you upload products with images directly from a CSV file — no plugin required. It works well for small catalogs with simple product types and straightforward image requirements. If you have fewer than 50 products, no variation images, and all your image URLs are publicly accessible, this method will get the job done.
Step 1: Open the WooCommerce Importer
- Log in to your WordPress admin dashboard and go to Products > All Products.
- Click the Import button at the top of the page.

Step 2: Upload Your CSV File
- On the Import Products screen, click Choose File, then select your prepared CSV file.
- Leave the Update existing products checkbox unchecked unless you’re overwriting products already in your store. If you’re doing a fresh import, leave it off.
- Click Continue.

Step 3: Map Columns
WooCommerce will display a column mapping table. Most standard columns, like name, SKU, and price, will be detected automatically. The images field is where most imports go wrong.
Find the row for your images column and confirm it is mapped to Images in the WooCommerce field dropdown — not to any other field. If WooCommerce hasn’t detected it automatically, set it manually using the dropdown.

What WooCommerce does with your image URLs at this stage:
| What you put in the images column | What WooCommerce does |
|---|---|
| Single URL | Downloads it and sets it as the featured image |
| Multiple URLs pipe-separated | First URL = featured image, remaining URLs = gallery images |
| Filename only (e.g. tshirt.jpg) | Filename only (e.g., tshirt.jpg) |
| Local file path | Look for a matching file already in your Media Library |
Important: WooCommerce does not give you a preview of how images will be assigned before you run the import. Double-check your images column in the CSV before this step. Fixing it after a bad import is more time-consuming than getting it right before.
Step 4: Run the Importer
Once you’re satisfied with the column mappings, click Run Importer. WooCommerce will begin processing your CSV row by row, downloading each image URL and attaching it to the corresponding product.
For a small catalog, this typically takes under a minute. For larger files, the page needs to stay open until the progress bar completes. Closing it mid-import will leave your catalog partially imported.

When the import finishes, click View Products or go to Products > All Products. Check that:
- Each product shows a thumbnail in the product list
- Opening individual products shows the correct featured image
- Products with multiple images show the full gallery thumbnails
Also, visit your live shop page and click through to a product page to confirm images display correctly for customers, not just in the admin.
When the Built-In Importer Isn’t Enough
The native importer handles straightforward imports well, but you’ll run into its limits quickly in specific situations:
| Situation | Built-in importer | WebToffee plugin |
|---|---|---|
| Simple products, single featured image | Works well | Works well |
| Products with gallery images | Inconsistent | Reliable |
| Variable products with variation images | Not supported | Fully supported |
| Images hosted on Dropbox / Google Drive | Often fails | Handles with correct URL format |
| Large catalogs (500+ products) | Timeout risk | Batch import available |
| Scheduled or recurring imports | Not available | Built-in scheduling |
| Import from XML or Google Sheets | CSV only | CSV, XML, XLSX, Google Sheets |
If any of the situations in the right column match your use case, the built-in importer will likely cause you problems. The next section covers how to handle these with the WebToffee plugin.
The WebToffee Product Import Export for WooCommerce plugin handles everything the built-in importer can’t – gallery images, variation images, external URLs from Google Drive, large catalogs via batch processing, and scheduled recurring imports. If any of those apply to your store, use this method.
Before starting, make sure you have purchased, installed, and activated the premium version of the WooCommerce Product Importer plugin.
Need help? – Refer to our detailed installation guide for more information.
Step 1: Choose Product Import Method
- Once installed, go to WebToffee Import Export (Pro) > Import from your WordPress dashboard.
- Choose Product as the post type and click Select import method.

Now, select the method for importing WooCommerce products and images. There are two options: Quick import and Advanced import.
| Method | Best for | What it does |
|---|---|---|
| Quick Import | Files exported from the WebToffee plugin | Imports all standard fields automatically with no mapping required |
| Advanced Import | Any CSV, XML, XLSX or Google Sheets file | Gives you full control over column mapping, filtering, and field selection |
Select Advanced Import. Unless your file was exported directly from this plugin to another site, Advanced Import is the right choice. It lets you handle files from suppliers, other platforms, or spreadsheets you’ve built yourself.
On the next screen, configure three things before proceeding:
- Upload method: Choose from local file, URL, existing file, or FTP/SFTP
- Delimiter: Match this to your CSV. Comma is standard, but some supplier files use semicolons or tabs
- Date format: Set this to match how dates are formatted in your file if your products include sale dates or scheduled visibility
Click Continue to proceed to column mapping.

Step 2: Map Import Columns
This is the most important step. The mapping screen shows every column in your CSV on the right and every WooCommerce product field on the left. Drag your CSV columns to their corresponding WooCommerce fields.
Since we must import all products and their images, it’s best to skip configuring them and move to the next step.

Importing images only (without re-importing full product data):
If you only want to import product images from the input file, simply uncheck all other product fields and select only the Images/Gallery field. It’s that simple! This lets you quickly update or bulk add product images without re-importing your entire catalog.

Next, click the Advanced options/Batch import button to move to the remaining step.
Step 3: Set up Advanced Options
This is the final step in the import process. Here, you will find several advanced import options that you can apply.
Let’s examine these options in detail:
| Setting | What it does | Recommended for |
|---|---|---|
| If product exists in store | Update existing product or skip it | Set to Update when refreshing an existing catalog |
| Match products by | ID or SKU | Use SKU — it stays consistent across migrations |
| Skip import of new products | Ignores rows for products not already in your store | Useful for image-only updates |
| Use SKU to link up-sells, cross-sells and grouped products | Connects related products using SKU references | Enable if your CSV includes upsell/cross-sell columns |
| Delete non-matching products from store | Removes products from your store not present in the import file | Use with caution. Only enable if the import file is your complete catalog |

Quick Tip: Save your current import configurations as a template for next time. This way, you can quickly import your products without setting everything up again!
You can also schedule the import to happen at a later time using WordPress or Server Cron jobs.
After selecting the import options, click the Import button to start the process.
Step 4: Verify Your Imported Products and Images
When the import finishes, the plugin displays a summary showing how many products were imported, updated, or skipped, and flags any rows that encountered errors.

Click View Log for a line-by-line report. If any images failed to import, the log will show which rows were affected and why, typically a URL that couldn’t be fetched or a column that wasn’t mapped correctly.
To confirm the import worked as expected, check three places:
- Products > All Products: Check product listings: You should now see all imported products, each with its corresponding image displayed in the product thumbnail column.
- Preview individual products: Click on a few products to ensure the main product image and gallery images are correctly linked and displaying as expected.
- Live product page: Open your store’s front end to verify that product images appear properly on category and product pages.

That’s it! Your WooCommerce store now has all your products and images perfectly imported and ready to go live!
Image import failures in WooCommerce almost always come down to one of five causes. Each one has a specific fix. Work through the relevant issue below before re-running your import.
1. Images aren’t showing after import
The import completes without errors, but products show a placeholder or no image on the product page and in the admin product list.
Cause: The image URL wasn’t publicly accessible at the time of import. WooCommerce fetches images by sending a request to each URL during the import process. If the URL redirects, requires a login, or returns anything other than the image file directly, WooCommerce silently skips it rather than throwing an error, which is why the import appears to succeed.
Fix:
- Copy one of the image URLs from your CSV and paste it directly into a browser address bar
- If the image loads and displays in the browser, the URL is valid
- If you see a login screen, a redirect to a homepage, a Google Drive viewer, or a download prompt, the URL will not work for import
- Replace the URL with one that serves the image file directly, then re-import
Note: WooCommerce will not retry failed image URLs after an import. If images are missing after a completed import, you need to correct the URLs in your CSV and run the import again with Update existing products checked.
2. Dropbox or Google Drive image URLs aren’t working
Images from Dropbox or Google Drive fail to import even though the URLs appear valid and the files are set to public sharing.
Cause: The default sharing URLs for both services point to a viewer page, not the image file itself. WooCommerce receives an HTML page instead of an image and discards it.
Fix for Dropbox:
Take your standard Dropbox share URL:
https://www.dropbox.com/s/abc123/product-image.jpg?dl=0
Change dl=0 to dl=1 at the end.
https://www.dropbox.com/s/abc123/product-image.jpg?dl=1
The dl=1 parameter forces Dropbox to serve the raw file instead of the preview page.
Fix for Google Drive:
Take your standard Google Drive share URL:
https://drive.google.com/file/d/FILE_ID/view?usp=sharing
Replace it with this direct download format:
https://drive.google.com/uc?export=download&id=FILE_ID
Replace FILE_ID with the long string of characters from your original URL — it’s the part between /d/ and /view.
3. Only the first image imports — gallery images are missing
Products import with a featured image, but the gallery is empty even though the images column in your CSV contains multiple URLs.
Cause: The pipe separator between image URLs is either missing, incorrectly formatted, or has spaces around it. WooCommerce and the WebToffee plugin both use the pipe character (|) to identify where one image URL ends and the next begins. Any deviation from the exact format causes everything after the first URL to be ignored.
Fix:
Your images column should look exactly like this:
https://yoursite.com/product-front.jpg|https://yoursite.com/product-back.jpg|https://yoursite.com/product-detail.jpg
Common formatting mistakes that break gallery import:
| What’s in your CSV | Problem | Correct format |
|---|---|---|
| url1, url2, url3 | Comma separator instead of pipe | url1|url2|url3 |
| url1 | url2 | url3 | Spaces around the pipe | url1|url2|url3 |
| url1; url2; url3 | Semicolon separator | url1|url2|url3 |
| “url1|url2|url3” | Quotes wrapping the cell value | Remove the surrounding quotes |
Open your CSV in a plain text editor (not Excel — Excel sometimes adds invisible formatting) to confirm the exact characters in your images column before re-importing.
4. The wrong image is set as the featured image
Products import with images, but the featured image is one of the gallery images, or the gallery contains the image that should be the featured image.
Cause: Either the images column is mapped to the wrong WooCommerce field during import, or the URL order inside the cell is not what you intended.
Fix:
1. Check the column mapping first:
In the built-in importer, confirm the images column is mapped to Images — not to any custom field or meta field. In the WebToffee plugin, confirm it’s mapped to Images / Gallery, not to a standalone gallery field if one exists.
2. Check URL order in the cell:
The first URL in the images column is always assigned as the featured image. Every URL after the first pipe separator becomes a gallery image. If your featured image is appearing in the gallery, your URLs are in the wrong order in the CSV.
Correct order: https://yoursite.com/FEATURED-image.jpg|https://yoursite.com/gallery-1.jpg|https://yoursite.com/gallery-2.jpg
Edit your CSV to move the intended featured image URL to the first position in the cell, then re-import with Update existing products enabled.
Add image URLs to the Images or Gallery column in your CSV file. For multiple images, separate URLs using commas or a pipe symbol, depending on the importer.
Yes, WooCommerce and most import plugins support multiple product images. You simply need to include multiple image URLs in the image or gallery column of your import file.
Images may fail to import if the URLs are broken, not publicly accessible, or incorrectly mapped during import. Server restrictions and file permission issues can also cause image import failures.
No, a plugin is not required for basic imports. However, a product import plugin is recommended for large catalogs, recurring imports, image automation, and advanced field mapping.
No, the built-in WooCommerce importer does not support variation images—you need the WebToffee plugin for this. Variation images are assigned per attribute value, so each variation (like a specific color) can display its own image.
In your CSV, you must use a separate column called meta:variation_image instead of the main images column, and map it to the Variation Image field during import. Each variation row should include its own image URL in this column, matching that specific attribute combination.
The first image in the main images column will still be used as the default featured image before a variation is selected.
Yes, you can, as long as the CSV includes a column with publicly accessible image URLs. The column name doesn’t have to be images—during import, you can map any column (like product_image or thumbnail_url) to the Images field in WooCommerce or the WebToffee plugin.
The key requirement is that the image URLs must be publicly accessible at the time of import. If the images are hosted on another store or platform, that source must be live and able to serve the images during the import process.
Running an online store means making occasional changes. Imports play a crucial part in that.
That’s where the Product Import Export for WooCommerce plugin ticks the right boxes. It is user-friendly, highly compatible, and comes with a high degree of customization to fit your specific data import requirements.
Whether you handle simple or complex imports, you can complete them quickly and effortlessly with just a few clicks.
This plugin is your go-to solution for all WooCommerce import needs.
Did you find this article helpful? We’d love to hear your thoughts. Please don’t forget to share your comments.