How to Use Canva Bulk Create With Your Magento Product Images
Your Magento product export has image paths, not URLs. Here is the full Canva Bulk Create Magento workflow, from admin export to bulk-generated graphics.

You export 240 products out of the Magento admin, open the CSV, and scroll right to the image columns. The base_image cell says /l/o/logitech-trackman.jpg. That is not a link. You cannot click it, you cannot paste it into a browser, and Canva cannot fetch it.
So you upload the file anyway, connect the column to a frame, and get 240 designs with the literal text /l/o/logitech-trackman.jpg printed where the product photo should be.
The Canva Bulk Create Magento workflow has two blockers stacked on each other, not one. Magento exports image paths instead of full URLs, and even once you build real URLs, Canva ignores them. Both are fixable in about ten minutes once you know the order of operations.
Why Canva Bulk Create Ignores Magento Image Paths
Start with what Magento actually writes into the file. Adobe's own documentation on product image import spells it out: Commerce builds its own alphabetized directory structure for product images, and "when you export product data with existing images to a CSV file, you can see the alphabetized path before the file name of each image."
That alphabetized path is the two-character folder pattern in every Magento catalog. An image named logitech-trackman.jpg gets filed under /l/o/. The export gives you the path fragment, not the address your storefront serves it from. Four columns carry images: base_image, small_image, thumbnail_image, and additional_images, the last of which holds several files in one cell, comma separated.
Now the second blocker. Even after you turn those paths into working URLs, Canva will not fetch them. Canva's Bulk Create help page says image URLs from cloud photo storage are not supported and will be treated as plain text. Bulk Create only reads images embedded inside the spreadsheet file itself, as DrawingML objects sitting in a single cell. A URL in a cell is a string, and Canva renders it as a string. Full breakdown in why Canva Bulk Create ignores image URLs.
The Manual Workaround Most Magento Merchants Try First
The first instinct is Excel. Click a cell, go to Insert > Picture, browse to the file, drop it in, resize it so it sits inside the cell boundary rather than floating over four of them, repeat. That works, and it takes roughly a minute per row once you count the resizing. On a 40-product sale collection that is most of an afternoon. On a 240-product catalog refresh it is not a plan.
The second instinct is =IMAGE() in Google Sheets. It looks like a win because the picture appears in the cell. It is not. =IMAGE() renders a preview at display time rather than creating an embedded image object, so when you download the file as XLSX there is nothing in the cell for Canva to read. Same for Excel's newer in-cell image functions. Full explanation in why =IMAGE() doesn't work for Canva Bulk Create.
What You Need Before You Start
- Admin access to your Magento or Adobe Commerce store, with permission to run an export
- A spreadsheet app (Excel, Google Sheets, or Numbers)
- A Canva plan that includes Bulk Create. Per Canva's help page that means Pro, Teams, Business, Enterprise, Education, or Nonprofits, and desktop only. More detail in does Canva Bulk Create require a Pro plan
- Your storefront's media base URL, which you will confirm in Step 2
Step 1: Export Your Products From Magento
In the admin, go to System, then Data Transfer, then Export. Set Entity Type to Products and the format to CSV. Use the attribute filters to narrow the export before running it, because a full catalog export on a large store is a big file you do not need.
One thing that will bite you: a Magento export returns configurable parent products and their simple child variants as separate rows. A shirt in five sizes and three colors is sixteen rows, fifteen of which you do not want a graphic for. Filter on product_type and delete the child rows first, or you will burn Canva's row budget on duplicates of the same photo.
Step 2: Turn the Image Paths Into Real URLs
Open your storefront in a browser, go to any product page, right-click the main product image, and copy the image address. You will get something close to this:
https://yourstore.com/media/catalog/product/l/o/logitech-trackman.jpg
Everything before /l/o/ is your media base. For most Magento installations that is your domain plus /media/catalog/product, but confirm rather than assume: stores on Adobe Commerce Cloud sit behind a CDN, and some merchants serve media from a separate subdomain entirely.
Then build the column with a formula. In a new column next to base_image:
=CONCAT("https://yourstore.com/media/catalog/product", B2)
If your exported path already begins with a slash, do not add a second one. Fill down, then copy the column and paste it back over itself as values only, so you end up with plain text URLs instead of live formulas.
For additional_images, strip everything after the first comma before building the URL. Canva needs one image per cell either way.
Paste two or three finished URLs into a private browser window and confirm they load. A 404 usually means the file was renamed or removed after the export ran, which is worth catching now instead of in Canva.
Step 3: Build the Spreadsheet
Cut everything you do not need. Bulk Create pulls one design per row and one data field per column, so keep the sheet to the columns your template actually uses. Canva's documented caps are 300 rows, 150 columns, and 150 connected data fields.
Something like this:
| product_name | price | sku | image_url |
| Cordless Trackman Mouse | $89.00 | LT-CT-01 | https://yourstore.com/media/catalog/product/l/o/logitech-trackman.jpg |
| Mechanical Keyboard 87-Key | $129.00 | KB-M87-02 | https://yourstore.com/media/catalog/product/k/b/mech-87.jpg |
| USB-C Dock 11-in-1 | $159.00 | DK-C11-03 | https://yourstore.com/media/catalog/product/u/s/usbc-dock.jpg |
Keep column headers short and human. Canva's Auto-match feature guesses which data field belongs to which element, and it guesses better from product_name than from attribute_set_name_value_2.
If your catalog runs past 300 products, split it into batches of 300 with identical headers. The row limit post covers how to do that without losing track of which batch is which.
Step 4: Convert the File With Postprep
Upload the CSV or XLSX to Postprep, point it at your image_url column, and download the converted XLSX. Every URL comes back as a real embedded image object sitting inside its own cell, which is the exact format Canva reads. The free tier handles 100 rows with no account.
If you would rather do the embedding yourself, how to bulk embed images in Excel from URLs walks through the manual and scripted routes.
Step 5: Bulk Generate in Canva
- Open your template. Add a frame or grid from the Elements tab wherever the product photo goes. A plain image placed on the canvas will not accept connected data, it has to be a frame or a grid.
- Click the page background, select Edit, then Bulk create. Or reach it from Apps, under More from Canva.
- Choose Upload data and select your converted XLSX. If the file has multiple sheets, Canva asks which one, and you can specify a cell range.
- Connect your fields. Click Auto-match fields to let Canva map them, or drag each field onto its element by hand. Fix any wrong guesses individually rather than starting over.
- Hit Preview and page through a few rows before you commit. This is where a broken image URL shows up as an empty frame.
- Open Advanced options. Set Output to Individual designs for one file per product, use "Name each page using" to name files from your
skucolumn, and pick a folder under "Save in". - Generate.
Naming files from SKU is the single setting that saves the most time downstream, because you never have to match design_47.png back to a product by eye. More on that in how to get separate files with the right names.
The Repeatable Version
The first run takes real effort. Every run after it is mechanical, because the shape of a Magento export does not change.
Save the export filter in the admin so next quarter's run is one click. Keep the URL formula in a template spreadsheet with your media base already hardcoded, so a new export is paste, fill down, paste as values. Leave the Canva template and its field names alone, since Auto-match works better when your headers match last time's.
From there one export drives several deliverables: a social post per product, a price card, a printed catalog page, and a set of ad creatives, all off identical rows and different templates. The spreadsheet is the expensive part, and you build it once.
Worth saying plainly: if you need three hero graphics for a seasonal banner, skip all of this and drag the photos in by hand. The workflow earns its setup somewhere north of twenty products.
FAQ
Does this work with Magento 1?
The principle holds, since Magento 1 used the same two-character folder structure and exported paths rather than URLs. Menu paths and column names may differ, so check your own export headers before building the formula.
My store is on Adobe Commerce Cloud. Is the media URL different?
Possibly. Cloud stores serve media through a CDN and some merchants configure a separate media domain. Right-click one live product image, copy the image address, and use whatever base that gives you. The path fragment from the export stays the same.
What about the additional_images column?
It holds multiple filenames in one cell, comma separated. Canva needs one image per cell, so either keep the first filename or split them into separate columns and connect each to its own frame.
Can I pull images from the Magento API instead?
You can, and with a developer it is cleaner. Either route ends at the same place: a column of URLs that still needs embedding before Canva will read it.
Why did some frames come out empty?
Almost always a URL that did not resolve, usually because the image was renamed or deleted after the export ran. Open the failed URLs in a browser, fix those rows, re-convert.
Does Canva read image URLs natively in any form?
No. Its help page is explicit that image URLs from cloud photo storage are treated as plain text. Bulk Create reads only images embedded in the file, each inside a single cell rather than floating across several.
The Short Version
Magento exports image paths, not URLs, so the first job is building real URLs with your media base and a CONCAT formula. The second job is embedding those URLs as actual images in the XLSX, because Canva reads embedded images only and treats URLs as text.
Filter out your configurable child rows before you start, confirm your media base against one live product image, keep batches under 300 rows, and name your output files from the SKU column. Then the whole catalog becomes a batch instead of an afternoon.
Try it free at postprep.app — 100 rows, no account required.