How to Use Canva Bulk Create With Images (The Complete Guide)
Draft — Post #33 · Target keyword: how to use canva bulk create with images · Meta: Learn how to use Canva Bulk Create with images, why image URLs fail, and the one-step fix that embeds your photos so

Draft — Post #33 · Target keyword: how to use canva bulk create with images · Meta: Learn how to use Canva Bulk Create with images, why image URLs fail, and the one-step fix that embeds your photos so every design generates correctly.
You have a spreadsheet of 80 products, each with a name, a price, and a photo URL. You open Canva Bulk Create, upload the file, connect the columns, and hit generate. The text shows up perfectly. The images do not. Every design comes back with a blank frame or, worse, the raw URL printed as text across your template.
This is the single most common wall people hit with Canva Bulk Create. Text merges flawlessly. Images quietly fail. And the official help docs gloss over exactly why.
This guide covers how to use Canva Bulk Create with images the right way, why URLs break, the manual method Canva supports, and the one-step fix when your images live as links instead of files.
Why Canva Bulk Create Treats Image URLs as Text
Canva Bulk Create merges data from a spreadsheet into a template. For text fields like names, dates, and prices, you drop a column in and Canva swaps the value into a placeholder. Simple.
Images work differently. Canva only renders an image in a bulk design if the image is physically embedded inside the file as binary data, in a format called DrawingML. A URL is not image data. It is a string of text. When Canva reads a cell that contains https://cdn.shop.com/photo.jpg, it sees characters, not a picture. So it either prints the URL literally or leaves the frame empty.
This trips up nearly everyone, because the URL looks like an image to a human. You can paste it in a browser and the photo loads. But Canva never fetches the URL. It only reads what is already inside the file. We broke down the full technical reason in Why Canva Bulk Create Ignores Image URLs.
So the rule is simple. If your images are sitting in your spreadsheet as links, Canva will not load them. The image data has to be inside the file before you upload.
The Manual Method Canva Actually Supports
Canva does support images in Bulk Create. There are two supported paths, and both assume the image is a file, not a link.
Path one: enter data inside Canva. From the Bulk Create panel, click Enter data, add a column, set its type to Image, then click the plus icon in each cell to upload a file from your computer or your Canva uploads. This works fine for ten rows. For a hundred, you are uploading and clicking a hundred times.
Path two: embed images in the spreadsheet first. You can upload an XLSX file that already has images embedded inside the cells. In Excel this is the Insert > Picture > Place in Cell option. The image has to sit inside one cell, not float across several. Done by hand, this means downloading every photo, sizing it, dropping it into the right cell, and repeating for every row.
There is also the dead end worth naming. The =IMAGE() formula in Google Sheets looks like it should solve this. It does not. =IMAGE() is a live cell reference, not embedded image data, so Canva sees nothing when it parses the file. We covered why in Why =IMAGE() Doesn't Work for Canva Bulk Create.
Both supported paths work. Both are slow once you pass a couple dozen rows. The bottleneck is always the same: turning URLs into embedded image files.
What You Need Before You Start
Two things have to be in place before you generate anything.
A Canva template with a frame. Text placeholders handle your text columns. For images, your template needs a frame element, which you add from the Elements tab in the Canva editor. A plain image or a shape will not accept bulk image data. It has to be a frame. Add one frame per image you want to populate, plus text placeholders for every text field.
A clean, one-row-per-output spreadsheet. One row equals one finished design. One column per data field. Put your image URLs in their own dedicated column with a clear name like image_url. Keep it tidy and Canva will auto-connect matching column names in one click.
Step 1: Collect Your Image URLs
Get a direct link to each image, the kind that ends in .jpg, .png, or .webp and loads the raw file when pasted into a browser. A few common sources:
Shopify, Etsy, WooCommerce. Product exports include image URLs, or you can right-click a product photo and copy image address.
Google Drive. Convert the share link to a direct link using the format https://drive.google.com/uc?id=FILEID&export=download.
Dropbox. Change the trailing ?dl=0 on a share link to ?raw=1 to return the raw image.
Drop every URL into one column. One convention, applied consistently.
Step 2: Build the Spreadsheet
A typical bulk sheet looks like this. One row per output, image URL in its own column.
| product_name | price | image_url |
| Linen Throw Pillow | $38 | https://cdn.shop.com/pillow.jpg |
| Ceramic Mug Set | $24 | https://cdn.shop.com/mugs.jpg |
| Woven Basket | $52 | https://cdn.shop.com/basket.jpg |
Save it as CSV or XLSX. Column names do not have to match Canva exactly, since you map them in the Bulk Create panel, but matching names lets Canva auto-connect everything in one click.
Step 3: Convert the Spreadsheet With Postprep
This is the step Canva refuses to do for you. Your sheet has URLs. Canva needs embedded images. Something has to bridge the gap.
Go to postprep.app, upload your CSV, and pick the column that holds the image URLs. Postprep fetches each URL, downloads the image, and embeds it inside the XLSX as DrawingML, the binary format Canva actually reads. Every other column passes through unchanged.
A 100-row sheet takes under a minute. The free tier covers 100 rows with no account required. What you get back is an XLSX with the images physically inside the cells, which is exactly the format Canva's supported path two expects, without the manual download-and-drag for every row.
Step 4: Bulk Generate in Canva
Open your template in Canva. Make sure you are on a plan that supports Bulk Create. (Bulk Create has been a paid feature available on plans like Canva Pro and Teams, and it runs on desktop. Canva changes plan details over time, so confirm your plan includes it before you start.)
In the left panel, click Apps, then Bulk Create. Click Upload data and pick your converted XLSX. Drag each text column onto its text placeholder, and drag your image column onto the frame. Or use Auto-connect if your column names already match. Click Generate designs.
Canva produces one finished design per row, with photos, names, and prices already merged. Download the full set as a ZIP, or push them straight to your scheduler.
One note on limits. Canva caps a single bulk run (recent guidance points to a few hundred rows per batch, often cited around 300). If you have more rows than the cap, split the sheet and run it in batches. Verify the current limit in Canva, since these numbers shift.
A Repeatable Workflow
Once the template exists, the loop is fast. Keep one master spreadsheet of your items with an image URL column. When you need a new batch of graphics, update or filter the rows you want, run the sheet through Postprep, and bulk generate in Canva. Same template, fresh data, finished designs in minutes.
For new products or new content, you add rows, not designs. The template does the layout work once. The spreadsheet does the rest forever.
Frequently Asked Questions
Why are my images blank in Canva Bulk Create?
Your image column holds URLs, and Canva treats URLs as text. The images have to be embedded inside the file as actual image data. Convert the sheet first so the photos are inside the cells.
Can I just paste image URLs into the bulk data?
No. Canva ignores them. It only renders images that are embedded in the file or uploaded directly inside Canva. A URL is text to Canva.
Do I need a frame in my template?
Yes. Bulk image data connects to a frame element, not a plain image or shape. Add the frame from the Elements tab before you connect your data.
What image formats work?
Standard web formats like JPG, PNG, and WebP work once embedded. SVGs should be exported to PNG first.
What if some rows have no image?
Leave that cell blank. The image embed is skipped for empty cells, and Canva leaves the frame placeholder visible in that design. Re-run once you have the missing photos.
Is there a free way to do this?
Yes. Postprep's free tier converts up to 100 rows with no account. Past that you only need a paid Canva plan for Bulk Create itself.
The Short Version
Canva Bulk Create handles text merges on its own. Images only render when they are embedded inside the file, and image URLs are just text to Canva, so they fail. Build a template with a frame, keep a clean one-row-per-output sheet with your URLs in one column, convert it with Postprep so the photos are embedded, then bulk generate in Canva.
That is the whole trick. The frame, the clean sheet, and the one conversion step that turns links into images Canva can actually see. For more on the underlying problem, see Why Canva Bulk Create Ignores Image URLs.
Try it free at postprep.app — 100 rows, no account required.