Articles / E-commerce

Import Images into PrestaShop from a CSV or URL: 4 Methods Compared

Bulk-import product images into PrestaShop from a CSV with external URLs. Comparison of back-office, native CSV import, paid modules, REST API, and PropulseCom.

Why importing images from URLs is genuinely painful in PrestaShop

Your suppliers send you an Excel or CSV file with one row per product. One column has the name. Another has the price. Two or three columns hold URLs pointing to images hosted on their CDN.

You want to create 200 products in PrestaShop with those images. The logic seems trivial: read the URL, download the image, attach it to the product. In practice, PrestaShop can’t do this natively in a way that survives a real catalog.

The native CSV import module accepts image URLs (image_url column), but on real catalogs it fails regularly: download timeouts, duplicate images, cover image lost, files broken silently. Anyone who’s tried it knows the song.

This article compares the 4 possible methods to import images into PrestaShop, with their concrete limits and the use case for each.


Method 1 — Manual upload in the back-office

You open each product page, click the Images tab, drag and drop files from your hard drive. PrestaShop generates the variants automatically (small, medium, large, cart, home).

When it’s enough: 5 to 30 products, photos taken by you, stored locally, one-shot upload.

Why it doesn’t scale:

  • You have to download every image from the supplier URL first
  • Manual renaming to follow a convention
  • No memory: if the supplier updates their visuals, you redo everything

Beyond 50 products, it’s no longer viable. And if your images already live on an external CDN (standard case with a supplier), pulling them all to local first is absurd.


Method 2 — PrestaShop native CSV import with image_url column

The Advanced Parameters > Import module accepts an image_url column. You put a public URL (https) there, PrestaShop downloads the file and attaches it to the product.

For multiple images on the same product, you separate the URLs with a comma in the same cell:

product_name;image_url
Red T-shirt;https://cdn.supplier.com/tshirt-red-1.jpg,https://cdn.supplier.com/tshirt-red-2.jpg

On paper, that’s exactly what we want.

In real life, you quickly hit:

  • Timeouts: if a URL takes more than 30 seconds (slow CDN, heavy image), PrestaShop kills the import mid-file. You end up with 80 products out of 200, with no way to know which ones to retry.
  • No retry: a URL returning a temporary 503 is permanently lost. The import moves to the next line without logging anything actionable.
  • Duplicates on re-import: if you replay the same CSV to update a product, images are re-downloaded and added as duplicates, not replaced.
  • Forced format: the column must be named image_url. If your supplier calls it IMAGES, Photo URL, or Bilder (German suppliers), you have to rename every column before each import.
  • Random cover: the first URL becomes the cover image, except when it doesn’t, with no documented logic.

When it’s enough: 50 to 100 products, very fast URLs (AWS S3-class CDN), no re-imports planned, no multi-language suppliers with different column names.


Method 3 — Third-party PrestaShop addon modules

The PrestaShop addon marketplace offers several modules dedicated to importing images from external URLs (typically between 30 € and 150 €). They fix part of the native problems:

  • Automatic retry on network errors
  • Configurable column mapping (you tell the module which column contains URLs)
  • Detailed error logs
  • Duplicate detection by MD5 hash

Limits:

  • You pay per shop, per PrestaShop version. A multi-shop or PS 1.7 → 8.x migration = new license.
  • These modules do ONE thing: import images. They don’t touch the product sheet (title, description, categories). You stay dependent on the native module for everything else.
  • Maintenance depends on the module developer. On PrestaShop 8.x, some modules sold for PS 1.7 are no longer maintained.

When it’s relevant: you ALREADY have a clean import workflow and just need to add the “images from URL” piece. For a technical team that knows how to read PHP logs.


Method 4 — Custom script via the PrestaShop REST API

PrestaShop exposes a REST API (Webservice) that lets you POST an image as multipart to /api/images/products/{id}. You write a Python or Node script that:

  1. Reads your CSV line by line
  2. Creates the product via POST /api/products
  3. For each image URL: downloads the file, POSTs it to /api/images/products/{product_id}

Pros:

  • Full control: retry, logging, parallelism, dedup by EAN13
  • No paid module dependency
  • Works on any PrestaShop version with the API enabled

Cons:

  • You have to code, test, and maintain the script
  • API authentication: generate a key in the back-office, store it properly (never in plain code)
  • Handling PrestaShop-specific errors (malformed XML, category constraints, taxes)
  • If your catalog grows, you need to parallelize without saturating the PrestaShop server

This is the cleanest technical path, but it requires a dedicated developer and at least 1 to 2 days of setup.


Method 5 — PropulseCom: CSV image import built into the generation workflow

PropulseCom solves the 4 problems of the previous methods:

  1. Automatic detection of image columns in your CSV. No need to rename to image_url. If a column is called IMAGES, Photo URL, Bilder, or anything else, and the values are https://...jpg URLs, PropulseCom detects it.

  2. Multiple image columns per product. You can have IMAGES + IMAGES #2 + Main visual in the same file — PropulseCom selects all of them, orders them, and the first selected column becomes the cover image.

  3. URL verification before import. During configuration, a sample of URLs is HEAD-tested to detect 404s or errors. You see broken URLs immediately with a red badge, before launching the import on 500 products.

  4. Upload via PrestaShop API with retry and logs. No mid-file timeout. Every processed image is associated with its product in Supabase, for per-row tracking.

  5. All of this integrated into the AI product sheet generation workflow. You launch ONE import that: creates the sheet, generates the title / description / SEO via AI, attaches images, links categories, all in a single pass.

How to enable in PropulseCom

In Listing Configuration (/csv-mapping), open the Product Image Management accordion:

  1. Toggle on “Product Image Management”
  2. Select the CSV columns containing your image URLs (PropulseCom auto-detects valid columns)
  3. Check the HTTP summary (200 / 404 / pending) on the sample
  4. Click Save in the global bar at the top/bottom of the page

On the next import, every product created in PrestaShop receives its images in the order of the columns. The first selected column automatically becomes the cover image.


Summary table

MethodInitial effortCostMax catalogMulti-supplier
Manual back-officeLowFree~50 productsNo
Native CSV importMediumFree~100 productsNo
Paid addon moduleMedium30-150 € / shop~5,000 productsLimited
Custom REST API scriptHigh (1-2 dev days)Dev costUnlimitedYes (you code it)
PropulseComLowIncluded in product creditUnlimitedYes, native

Bottom line

For catalogs under 50 products with local images, the PrestaShop back-office is enough.

For 50 to 100 products with external URLs on a fast CDN, the native CSV import gets the job done once, if you accept its limits.

Beyond that, if your suppliers regularly send CSV files with their own column formats, and you want a workflow that creates the complete product sheet (AI text + images + categories) in a single pass, PropulseCom is built exactly for that.

To test: import a sample of 10 products in test mode and check that the images appear correctly on the generated PrestaShop sheets before launching the full catalog.

Try the related tool

Put this article's tips into practice with our free tool.

Try the free tool