How Boutiques Can Use Canva Bulk Create for New Arrivals, Sale Posts, and Lookbook Graphics
Draft — Post #26 · Target keyword: canva bulk create boutique · Meta: Turn a new-arrivals spreadsheet into product posts, sale graphics, and lookbook cards in one batch. The Canva Bulk Create boutique

Draft — Post #26 · Target keyword: canva bulk create boutique · Meta: Turn a new-arrivals spreadsheet into product posts, sale graphics, and lookbook cards in one batch. The Canva Bulk Create boutique workflow that handles your image URLs.
A new drop just landed. Forty-two pieces, each with its own photo, name, and price. By Friday you need a product post for every one, a "new arrivals" carousel, a weekend sale graphic, and a lookbook card set for the email. That is well over a hundred graphics, all the same layout with a different photo and a few lines of text swapped in.
You already know Canva Bulk Create is built for exactly this. Then you export your product list, paste in the photo links, upload it to Canva, and every design comes back with a blank square where the garment should be. The text merged fine. The images did not.
This post walks through the full Canva Bulk Create boutique workflow, the one step Canva quietly skips, and a repeatable rhythm so every drop turns into a week of content without a late night in the design tab.
Why Canva Bulk Create Stalls for Boutiques
Retailers have a content advantage most businesses do not: new product is new content. Every arrival is a post waiting to happen. The catch is that boutique content is photo-first. Nobody scrolls past a clothing post for the caption. The garment photo is the whole thing.
Canva Bulk Create handles the text side without complaint. Drop in a column of product names, prices, sizes, or fabric notes and Canva merges them cleanly across every design.
Image URLs are where it breaks. Canva's Bulk Create only accepts images that are physically embedded inside the XLSX file as binary data, in a format called DrawingML. A link to your product photo is just text as far as Canva is concerned. It either prints the raw URL as a string inside your template or leaves the photo slot empty. Canva's own help docs confirm it: image URLs from cloud storage are not supported, and each image has to be embedded directly into the sheet. We covered the technical reason in full in Why Canva Bulk Create Ignores Image URLs.
For a boutique that means a 42-piece drop with photo links will not render until those photos are embedded inside the XLSX before it ever reaches Canva.
The Manual Workaround Most Boutique Owners Try First
The usual hack: open the spreadsheet in Excel, click the first image cell, use Insert > Picture > Place in Cell, find the photo on your laptop, repeat for every product. It works in theory, if every product shot is already downloaded, cropped to the same size, named to match its row, and sitting in one folder.
In reality your photos are scattered. Some are in your phone camera roll, some on the photographer's Dropbox, some pulled straight from your Shopify or Etsy listing, a few still coming in as the model shoot wraps. By the time you have downloaded, renamed, and hand-inserted forty images, you could have styled the next collection.
The other dead end is the =IMAGE() formula in Google Sheets. It looks like it should work because the photo appears right there in the cell. It will not. We broke down exactly why in Why =IMAGE() Doesn't Work for Canva Bulk Create. Short version: =IMAGE() is a live cell reference, not embedded image data. When Canva parses the file, there is nothing there to read.
What You Need Before You Start
Two pieces.
A Canva template per graphic type. Most boutiques cycle through a handful of recurring layouts. The common ones look like this. A single-product post with the garment photo, name, and price. A "new arrivals" or "back in stock" card with a photo and a short label. A sale or markdown graphic with the photo, original price, and sale price. A lookbook or collection card with a photo and a styling note. A "shop the look" post with product name and a link or code.
Each template needs Canva Bulk Create placeholders for the text fields like {{product_name}}, {{price}}, {{sale_price}}, and an image element where the product photo lands.
A single source-of-truth spreadsheet per drop. One row per output graphic. A column for every text field, plus one column holding the direct photo URL. If you already run inventory in Shopify, Etsy, a Square catalog, or a plain Google Sheet, you are most of the way there. The only column you may need to add is a direct link to the product image. We have written about clean spreadsheet prep for Shopify stores and Etsy sellers, and the same rules carry over: one row per output, one column per field, photo URLs in their own column.
Step 1: Collect Your Product Image URLs
This is the step that eats the most time, so it helps to know where the links already live.
Shopify. Every product image already has a public CDN URL. Open the product, right-click the photo, and copy image address. It ends in .jpg or .png on a cdn.shopify.com path. Or export your product CSV, which includes an image URL column.
Etsy. Open the listing, right-click the main photo, and copy image address. Etsy image URLs are public and work directly.
Squarespace, Wix, or a Square Online store. Same move: right-click the live product photo, copy image address. The hosted URL works.
Dropbox. Take the share link and change the trailing ?dl=0 to ?raw=1 so it returns the raw image instead of the preview page.
Google Drive. Convert the share link to https://drive.google.com/uc?id=FILEID&export=download, or move the photos to a public web folder.
Drop every link into one column in your sheet. Name it image_url or photo and keep the convention consistent.
Step 2: Build the Drop Spreadsheet
A typical boutique bulk sheet looks like this.
| product_name | price | sale_price | sizes | photo |
| Marlowe Linen Dress | $68 | $48 | XS-XL | https://cdn.shopify.com/.../marlowe.jpg |
| Cassie Knit Cardigan | $54 | — | S-L | https://cdn.shopify.com/.../cassie.jpg |
| June Wide-Leg Trouser | $72 | $59 | 0-14 | https://cdn.shopify.com/.../june.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.
One honest note: not every boutique job needs photos. A plain text-only "we restocked, link in bio" announcement or a sale-terms graphic with no product shot needs no conversion at all. The workflow below is for the photo-driven posts, which is most of them.
Step 3: Convert the Spreadsheet With Postprep
This is the step Canva refuses to do for you.
Go to postprep.app, upload your CSV, and pick the column that holds the photo 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 untouched.
A 50-product drop takes under a minute. The free tier covers 100 rows with no account required, which fits most single drops outright.
Step 4: Bulk Generate in Canva
Open your product-post template in Canva. Make sure you are on a plan that supports Bulk Create. Per Canva's documentation that means Pro, Teams, Business, Enterprise, Education, or Nonprofits, and Bulk Create runs on desktop only. (Plan eligibility and naming change from time to time, so confirm against your own Canva account.)
In the left panel click Apps, then Bulk Create. Click Upload data and choose your converted XLSX. Drag each column onto its matching placeholder, or use Auto-connect if your column names already line up.
Click Generate designs. Canva builds one finished design per row with the garment photo, name, and price already in place.
Running three template types off the same drop, say a product post, a sale card, and a lookbook graphic, just means taking the same XLSX into each template and running Bulk Create three times. One spreadsheet, three sets of branded content. Download as a ZIP and you have the full week ready to schedule.
A Realistic Boutique Workflow
Here is the rhythm once it clicks.
Drop day. The new collection photos come in. You build one master sheet with product name, price, sizes, and a photo URL column pulled straight from your store. Run it through Postprep once. Generate your single-product posts in Canva, queue them across the week.
Mid-week. Take the same converted XLSX into your "new arrivals" carousel template and your lookbook template. Two more Bulk Create runs, no new spreadsheet work. You now have a feed post, a carousel, and an email graphic set from one upload.
Sale weekend. Add a sale_price column to the same sheet for the pieces going on markdown. Re-run Postprep, run Bulk Create against your sale template, and every discounted item gets a matching promo graphic.
The whole cycle is roughly 20 minutes of spreadsheet time and 15 minutes per template in Canva, whether the drop is 12 pieces or 120. Done by hand at scale, that is a 4-to-6 hour afternoon per template.
Frequently Asked Questions
My products have multiple photos. Which one do I use?
Pick the hero shot for the bulk run, one row per output graphic with one photo URL. If you want a front and a styled shot as two separate posts, make two rows with the same product name and two different photo URLs. Canva generates one design per row.
Can I pull image URLs straight from my Shopify export?
Yes. The Shopify product CSV includes an image URL column. Clean it down to one row per product with the fields you want, keep the image URL column, and run it through Postprep. Same workflow for an Etsy or Square export.
Some new arrivals do not have final photos yet.
Leave the photo cell blank for those rows. Postprep skips the embed for empty cells and Canva leaves the placeholder visible. Re-run the bulk job once the real shots are ready.
Will the embedded photos look sharp enough for a full-screen post?
Postprep embeds whatever the URL returns at its original resolution, so the quality matches your source file. Use the full-size product photo URL rather than a thumbnail and your posts will hold up at feed and story sizes.
Can I reuse the same sheet for next month's drop?
Keep the column structure and swap the rows. The template, the mapping, and the Postprep step all stay the same. Each new drop is just a fresh set of rows in the same sheet.
The Short Version
Canva Bulk Create does the merge work for every product post, sale card, and lookbook graphic in your drop. The one thing it will not do is turn your photo URLs into embedded images inside the XLSX. Postprep is that missing step.
Build one master sheet per drop. Convert with Postprep. Bulk generate in Canva. Every new arrival becomes a week of content without another night lost in the design tab.
Try it free at postprep.app — 100 rows, no account required.