How to Use Canva Bulk Create with Your WooCommerce Product Images
WooCommerce exports product images as URLs in a CSV — but Canva Bulk Create won't read them. Here's the full workflow from WooCommerce export to bulk-generated graphics.

WooCommerce lets you export your entire catalog as a CSV. Every row carries the product name, price, SKU, and a column of image URLs pointing at your media library. It looks like the exact input Canva Bulk Create needs to spin up a batch of product graphics.
It isn't. Canva Bulk Create reads text columns fine, but the moment it sees an image URL it gives up and treats the URL as plain text. You end up with empty image slots, or the raw URL stamped across your design where the product photo should be.
The fix is one extra step between WooCommerce and Canva. Here is the full workflow.
Why Canva Bulk Create Ignores Your WooCommerce Image URLs
This is the part most people get stuck on. Canva Bulk Create requires images to be physically embedded inside the spreadsheet using a format called DrawingML. The image data lives inside the cell. A URL pointing at your WooCommerce media library doesn't qualify, even though the URL is public and the image loads fine in a browser.
WooCommerce, like Shopify and most other ecommerce platforms, only stores references to images. The CSV export reflects that. You get rows like:
https://yourstore.com/wp-content/uploads/2026/04/ceramic-mug.jpg
Valid URL. Useless to Canva.
This is the same limitation we covered for Shopify exports and Etsy listings. The platform changes, the problem doesn't.
Step 1: Export Your Products from WooCommerce
WooCommerce has a built-in exporter that handles this without a plugin.
- In your WordPress admin, go to Products → All Products
- Click Export at the top of the page
- Choose which columns to export (or leave Export all columns checked)
- Optionally filter by product type, category, or status
- Click Generate CSV
The download starts immediately. Open the file and look for the Images column. This is where your URLs live.
One thing specific to WooCommerce: the Images column can hold multiple URLs separated by commas. The first URL is the main product image, anything after is a gallery image. For most Bulk Create workflows you only want the first one.
Step 2: Trim the CSV to the Columns You Actually Need
WooCommerce exports 40+ columns by default. Most of them describe stock, tax classes, dimensions, and attributes that have nothing to do with your design template.
For a typical product graphic you only need:
Name— product titleRegular priceorSale priceShort description— for taglines, if your template uses oneImages— the URL column
Open the CSV in Excel, Google Sheets, or Numbers. Delete every column you don't need and save it back as CSV. A clean file might look like:
| Name | Regular price | Images |
|---|---|---|
| Ceramic Pour-Over Mug | 34.00 | https://yourstore.com/wp-content/uploads/2026/04/mug.jpg |
| Linen Market Tote | 48.00 | https://yourstore.com/wp-content/uploads/2026/04/tote.jpg |
| Brass Candle Holder | 29.00 | https://yourstore.com/wp-content/uploads/2026/04/candle.jpg |
If your Images column has multiple URLs per row, split on the comma and keep only the first one. You can do this with a Google Sheets formula:
=TRIM(SPLIT(C2, ","))
Drop the result in a new column and use that as your image source.
Step 3: Convert the Image URLs Into Embedded Images
This is the step that fixes the Canva limitation. Postprep takes your trimmed WooCommerce CSV, fetches every image URL in the column you select, and writes a new XLSX where each image is embedded directly in its cell using DrawingML.
- Go to postprep.app
- Upload your trimmed WooCommerce CSV
- Pick
Imagesas the image column - Download the converted XLSX
The output keeps all your text columns intact and adds an embedded image where the URL used to be. A 50-product catalog processes in under a minute.
No account required for the first 100 rows. Larger catalogs need a one-time unlock.
Step 4: Build Your Canva Template
If you already have a template you use for product posts, skip this step. Otherwise, in Canva:
- Create a new design at the size you need (Instagram post, story, Pinterest pin, etc.)
- Add a text element for the product name and type
{{Name}} - Add a text element for the price and type
{{Regular price}} - Add an image frame where the product photo goes — this is where Canva will drop in each row's embedded image
The field names in {{double braces}} must match your XLSX column headers exactly. Case-sensitive. Spaces matter.
Step 5: Run Bulk Create
Back in Canva:
- With your template open, go to Apps → Bulk Create in the left panel
- Click Upload data
- Select the converted XLSX from Postprep
- Connect each data field to the matching element on your design — text to text placeholders, the image column to your image frame
- Click Continue → Generate designs
Canva produces one design per row, with the real product image in the right slot. Download the batch as PNG, JPG, or PDF, or push the designs into Canva's scheduler if you use that.
What This Workflow Is Useful For
New product launches. Filter your WooCommerce export to products added in the last week, run through Postprep, generate a batch of launch graphics for Instagram, Pinterest, and Facebook.
Seasonal sales. Tag products with summer-sale in WooCommerce, export only those rows, generate matching sale graphics with consistent pricing callouts.
Catalog refresh. Once a quarter, regenerate every product graphic from scratch with an updated design template. A 200-product store becomes 200 fresh designs in one Bulk Create run.
Affiliate or wholesale sheets. Same workflow, different template — a printable PDF tile per product instead of a social graphic.
Email campaign assets. Use Bulk Create to spit out the hero image for each product card in a newsletter.
Frequently Asked Questions
Does this work with WooCommerce variable products?
Yes, but the export gives you one row per variation. If the parent product has an image and the variations don't, the image URL column will only be populated on the parent row. Filter to parent products before exporting if you want one design per product instead of one per variant.
What about gallery images — can I use those instead of the main image?
The Images column is a comma-separated list. To use a different image, split on the comma and pick the URL you want before running Postprep. You can do this in Google Sheets with SPLIT() or Excel with TEXTSPLIT().
My WooCommerce images are on a CDN — does that matter?
No. Postprep fetches whatever URL you give it, as long as it's publicly reachable. CDN URLs work the same as URLs pointing at your wp-content/uploads folder.
What if the URLs are behind a login or password-protected staging site?
Postprep can't reach private URLs. Either move the images to a public location, or temporarily make the staging site reachable. Most production WooCommerce stores have publicly accessible image URLs by default.
How big can the catalog be?
The free tier covers 100 rows. The one-time unlock removes the cap, so a 2,000-product catalog runs in a single batch.
Can I automate this on a schedule?
Not yet through Postprep itself. The usual workflow is to export from WooCommerce when you need a new batch, run it through Postprep, and import into Canva. For repeating designs the pillar tutorial covers the full Bulk Create loop in more detail.
The Short Version
WooCommerce → CSV → Postprep → Canva. Four steps, no plugins, no Apps Script, no manual image upload. The bottleneck has always been Canva's refusal to read image URLs. Postprep is the missing converter.
Export your products, trim the CSV, run it through Postprep, plug the XLSX into Canva Bulk Create. From a fresh WooCommerce export to a finished batch of designs takes under five minutes for most stores.
Try it free at postprep.app — 100 rows, no account required.