PostPrep
← Blog
2025-06-25

How to Use Canva Bulk Create with Your Shopify Product Images

Shopify's product export CSV has image URLs — but Canva Bulk Create won't read them. Here's the exact workflow to go from Shopify export to bulk-generated graphics in minutes.

Pete B.
Pete B.
Founder, Postprep

Shopify makes it easy to export your entire product catalog as a CSV. Every row has your product title, price, description, and a URL pointing to the product image. It looks like exactly what you'd need to feed into Canva Bulk Create and generate a batch of product graphics.

The problem: Canva Bulk Create doesn't read image URLs. It ignores them entirely, treating them as plain text. Your designs come out with blank image slots — or worse, the URL printed where the product photo should be.

Here's the full workflow to get from a Shopify product export to a finished batch of Canva designs.


Why the Shopify CSV Doesn't Work Directly in Canva

Canva Bulk Create requires images to be physically embedded inside the XLSX file — not linked via URL. The technical format it needs is called DrawingML: image data stored directly in a spreadsheet cell, not referenced from an external source.

Shopify's product export gives you URLs like:

https://cdn.shopify.com/s/files/1/0123/4567/products/mug-main.jpg

That's a valid, public URL. Canva still won't use it. From Canva's perspective, it's just a string of text.

This is a known limitation documented in Canva's own help center — it's not a bug, and there's no setting to change it.


Step 1: Export Your Products from Shopify

In your Shopify admin:

  1. Go to Products → All products
  2. Click Export in the top right
  3. Choose which products to export (all, or a filtered selection)
  4. Select CSV for Excel, Numbers, or other spreadsheet applications
  5. Click Export products

Shopify emails you the file (or downloads it directly, depending on the size).

Open the CSV. The columns you'll want for most design templates are:

  • Title — product name
  • Vendor — brand name if relevant
  • Variant Price — price
  • Image Src — the product image URL (this is the column Canva can't use yet)

Step 2: Clean Up the CSV (Optional but Recommended)

Shopify's export includes a lot of columns — 30+. Most of them you don't need for design work. Before converting, it helps to trim the file down to just the columns your Canva template uses. This makes the field-mapping step in Canva much cleaner.

A minimal product graphics spreadsheet might look like:

Title Variant Price Image Src
Ceramic Pour-Over Mug 34.00 https://cdn.shopify.com/.../mug.jpg
Linen Market Tote 48.00 https://cdn.shopify.com/.../tote.jpg
Brass Candle Holder 29.00 https://cdn.shopify.com/.../candle.jpg

You can do this trimming in Excel, Google Sheets, or even Numbers — just delete the columns you don't need and save as CSV.

One thing to watch: Shopify exports one row per variant, not one row per product. If a product has 3 color variants, it shows up 3 times. The Image Src column is only filled in on the first row of each product group. You'll want to either filter to unique products or fill down the image URLs before proceeding.


Step 3: Convert Image URLs to Embedded Images

This is the step that unlocks everything. Postprep takes your CSV (with the Image Src column of Shopify URLs) and converts it to an XLSX where each image is properly embedded in a cell — the exact format Canva needs.

  1. Go to postprep.app
  2. Upload your trimmed Shopify CSV
  3. Select Image Src as the image column
  4. Download the converted XLSX

Postprep fetches each Shopify CDN image, embeds it using DrawingML, and preserves all your other columns intact. The whole thing takes under a minute for a typical product catalog.


Step 4: Build Your Canva Template

If you don't have one already, create a template in Canva for the type of graphic you're making — product announcement posts, Instagram feed tiles, sale banners, whatever fits your store.

The key is using Bulk Create data fields as placeholders:

  • Add a text element and type {{Title}} for the product name
  • Add a text element and type {{Variant Price}} for the price
  • Add an image placeholder where your product photo goes — this is what Canva will swap out per row

The field names in your template need to match the column headers in your XLSX exactly (case-sensitive).


Step 5: Import Into Canva Bulk Create and Generate

  1. In Canva, open your template
  2. Go to Apps → Bulk Create in the left panel
  3. Click Upload data and select your converted XLSX from Postprep
  4. Use Auto-connect fields or drag fields from the side panel onto your design elements
  5. Click Generate designs — Canva creates one design per row, with the real product image in place

From there you can download everything as a ZIP (individual PNGs or JPGs), or publish directly if you're using Canva's scheduling tools.


What You Can Make With This Workflow

New arrival posts. Every time you add products to your store, export the new ones, run through Postprep, generate the batch. A 20-product drop becomes 20 Instagram posts in a few minutes.

Sale graphics. Filter your Shopify export to products with a specific tag (e.g., "summer-sale"), convert, generate a batch of sale announcement graphics with consistent design.

Product highlight series. Pick your bestsellers, grab a clean subset of the catalog, generate a week's worth of feed posts in one go.

Facebook/Instagram ad creative. Build a Canva template for your ad format, generate variants for each product, export for Meta Ads Manager.


Frequently Asked Questions

Does this work with Shopify's multi-image products?

Shopify's CSV exports the first (main) image URL in Image Src. If you want a different image for a specific product, you can manually swap in the URL before converting.

What if some image URLs are broken or return a 404?

Postprep skips rows where the URL isn't reachable and flags them in the output. You can fix the URLs and reprocess, or just ignore those rows if the images aren't critical.

Can I use a filtered Shopify export — just one collection?

Yes. In Shopify, filter your product list by collection before exporting, and only those products will be in the CSV.

How many products can I process at once?

Postprep's free tier handles up to 100 rows. The one-time unlock removes that limit for larger catalogs.

Does this work for product variant images too?

If each variant has its own image URL in the Shopify export, yes — as long as the URL is populated in the Image Src column, Postprep will embed it.


The Short Version

Shopify CSV + Canva Bulk Create almost works — except for the image URL limitation. Postprep is the missing step: it converts your Shopify image URLs into properly embedded XLSX images that Canva actually reads.

Export from Shopify → convert with Postprep → bulk-generate in Canva. That's the full loop.


Try it free at postprep.app — 100 rows, no account required.

Try it free

Canva Bulk Create with real embedded images.

Upload your CSV or XLSX. Select your image column. Download a Canva-ready file. Free for up to 100 rows — no account needed.

Try Postprep →
Pete B.

Written by

Pete B.

Pete is a small business owner who got tired of social media eating his evenings. Posting product graphics across channels used to mean opening Canva, dropping in each image by hand, and repeating that for every listing and every platform. He kept hitting the same wall: Canva Bulk Create can save hours, but it refuses to read image URLs from a spreadsheet — turning a 5-minute workflow into a 2-hour copy-paste job. So he built Postprep to fix that one specific limitation, and writes about bulk content workflows, design tool limitations, and shipping social content without burning out.

Discussion