How Resellers Can Use Canva Bulk Create for Listing Graphics, Closet Promos, and Sale Posts
Draft — Post #28 · Target keyword: canva bulk create resellers · Meta: Turn your Poshmark, Depop, and Mercari inventory sheet into batch listing graphics and promo posts. The Canva Bulk Create workflo

Draft — Post #28 · Target keyword: canva bulk create resellers · Meta: Turn your Poshmark, Depop, and Mercari inventory sheet into batch listing graphics and promo posts. The Canva Bulk Create workflow built for resellers.
You sourced 60 new items this week. Each one needs a clean listing photo, a branded cover graphic for the marketplace, and a promo post for your closet stories. That is 180 graphics, all the same layout with a different product photo, title, and price.
You already know the right tool for this is Canva Bulk Create. You also know the moment you try to feed it a spreadsheet with your product photo URLs, Canva shrugs. It prints the URL as plain text or leaves the image slot blank, and you are back to dragging photos in one at a time.
This post walks through the full Canva Bulk Create resellers workflow, the one step Canva won't do on its own, and a repeatable rhythm for cranking out listing and promo graphics from a single inventory sheet.
Why Canva Bulk Create Stalls for Resellers
Resellers run on inventory. Whether you sell on Poshmark, Depop, Mercari, eBay, or all four, your business is a list of items with photos, titles, sizes, brands, and prices. Most resellers already keep that in a spreadsheet or an inventory tool that exports one.
Canva Bulk Create handles the text side of that sheet fine. Drop in a column of item titles, brands, sizes, or prices and Canva merges them into your template cleanly.
Image URLs are where it breaks. Canva Bulk Create only accepts images that are physically embedded inside the XLSX file as binary data in a format called DrawingML. A photo URL is just text to Canva. It either prints the link as a literal string or leaves the image frame empty. We covered the technical reason in Why Canva Bulk Create Ignores Image URLs.
For a reseller this is the whole game. A closet of 200 items with photo URLs is not going to render into graphics unless those photos are embedded inside the XLSX before Canva ever sees it.
The Manual Workaround Most Resellers Try First
The usual hack: open the spreadsheet in Excel, click each image cell, use Insert > Picture > Place in Cell, point to the photo on your drive, repeat for every item. That works if every photo is already downloaded, cropped, named to match the row, and sitting in one folder.
In practice your photos are scattered. Some are camera roll exports, some live in the marketplace listing you already posted, some are in a Photoroom batch folder, some are still on your phone. By the time you have them downloaded, renamed, and inserted by hand, you could have re-listed the whole batch.
The other hack is the =IMAGE() formula in Google Sheets. We covered why it fails for Bulk Create in Why =IMAGE() Doesn't Work for Canva Bulk Create. Short version: =IMAGE() is a live cell reference, not embedded image data. Canva reads nothing when it parses the file.
What You Need Before You Start
Two things.
A Canva template per graphic type. Most resellers cycle through a few recurring designs. The common ones look like this.
A listing cover graphic with the product photo, brand, size, and a clean price tag. A "new arrivals" promo post with three or four item photos and a header. A markdown or sale-alert graphic with the item photo, old price crossed out, and new price. A "just shared" or bundle-deal story card with the item photo and a call to action.
Each template needs Canva Bulk Create placeholders for the text fields like {{title}}, {{brand}}, {{price}}, and an image element for the product photo.
A single inventory spreadsheet. One row per item. Columns for every text field plus one column with a direct URL to the product photo.
If you already run a reseller inventory tracker in Google Sheets, Airtable, Notion, or an export from a cross-listing tool, you are most of the way there. The only column you might need to add is a direct photo URL. We have written about clean spreadsheet prep for Etsy sellers and Shopify stores, and the same rules apply: one row per output, one column per field, photo URLs in their own column.
Step 1: Collect Your Product Photo URLs
This is the step that eats the most time, so set a convention and stick to it.
Photos already on a marketplace. If an item is live on Poshmark, Depop, or Mercari, the listing photo already has a public URL. Open the listing, right-click the main image, and copy the image address. The URL ends in .jpg or .png.
Photos in a cloud folder. If you store shots in Google Drive, convert the share link to a direct image URL using the format https://drive.google.com/uc?id=FILEID&export=download. Dropbox links work if you change the trailing ?dl=0 to ?raw=1.
Photos from a background-removal batch. Tools like Photoroom export clean white-background shots. Upload the batch to your Drive or a CDN folder and grab the direct URLs.
Drop every URL into the spreadsheet under one column. Name it photo_url and keep it consistent across your whole closet.
Step 2: Build the Inventory Spreadsheet
A typical reseller bulk sheet looks like this.
| title | brand | size | price | photo_url |
| Wool Blazer | J.Crew | M | 38 | https://di2ponv0v5otw.cloudfront.net/.../blazer.jpg |
| Pleated Midi Skirt | Zara | S | 22 | https://di2ponv0v5otw.cloudfront.net/.../skirt.jpg |
| Leather Crossbody | Coach | OS | 64 | https://di2ponv0v5otw.cloudfront.net/.../bag.jpg |
Save it as CSV or XLSX. Column names do not have to match Canva exactly, you map them in the Bulk Create panel, but matching names lets Canva auto-connect in one click.
Step 3: Convert the Spreadsheet With Postprep
This is the step Canva refuses to do.
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 unchanged.
A 200-row closet takes under a minute. The free tier covers 100 rows with no account required.
Step 4: Bulk Generate in Canva
Open your listing template in Canva. Make sure you are on a plan that supports Bulk Create. Based on Canva's current documentation this is a paid feature, available on plans like Canva Pro and Teams, and it runs on desktop. Check your account, since Canva changes plan details from time to time.
In the left panel click Apps, then Bulk Create. Click Upload data and pick 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 produces one finished graphic per row with the product photo, brand, title, and price already merged.
If you run three template types off the same sheet, say a listing cover, a sale-alert card, and a new-arrivals story, take the same XLSX into each template and run Bulk Create three times. Same data, three sets of branded graphics.
Download as a ZIP. You have the full set of listing and promo graphics ready to post.
A Realistic Reseller Workflow
Here is the rhythm for a working closet.
Sourcing day. Photograph the week's new items. Run them through a background remover if that is your style. Add each item to your inventory sheet with title, brand, size, price, and a photo URL.
Listing day. Run the sheet through Postprep once. Take the converted XLSX into your listing-cover template and your new-arrivals template. Generate both batches in Canva. Now every new item has a branded cover and a promo graphic before it even goes live on the marketplace.
Sale day. When you run a closet sale or drop prices, add a sale_price column to the same sheet, re-run Postprep, and push it into your markdown-alert template. One pass gives you a sale graphic for every discounted item.
The whole cycle takes about 20 minutes of spreadsheet time and 10 minutes of Canva time per template, whether you listed 15 items this week or 150. Doing it by hand at scale is the 4-to-6-hour version.
One honest note: some reseller posts are text-only, like a "closet open, come share" announcement or a shipping-delay notice. Those need no images, so they need no conversion. Bulk Create handles the text on its own. Postprep only matters when product photos are involved.
Frequently Asked Questions
Can I pull photos straight from my live Poshmark or Depop listings?
Yes, if the listing image has a public URL. Right-click the photo and copy the image address. Drop that into your photo_url column. Postprep fetches whatever the URL returns.
My photos have busy backgrounds. Will the graphics look messy?
Postprep embeds whatever the URL points to. If you want clean white backgrounds, run your photos through a background remover first, then add the cleaned-up URLs to your sheet.
Some items don't have a photo yet. What happens to those rows?
Leave the photo URL cell blank. Postprep skips the image embed for empty cells and Canva leaves the placeholder visible in the generated design. Re-run the batch once you shoot the photo.
I sell the same item on four marketplaces. Do I need four rows?
Only if you want a different graphic per marketplace. One row makes one design. If your listing cover is the same everywhere, one row covers all four. If you brand per platform, duplicate the row and change the relevant text field.
Does this work for bundle and lot listings with multiple items in one photo?
Yes, as long as you have one combined photo for the bundle. One row, one photo URL, one generated graphic. If you want a collage of separate item photos, build that collage first and use its URL.
My inventory lives in a cross-listing tool. Can I use its export?
If the tool exports a CSV with a photo URL column, yes. Add or rename the photo column to match your convention and run it through Postprep. Same workflow either way.
The Short Version
Canva Bulk Create handles the merge work for every listing cover, sale alert, and new-arrivals post in your closet. The one thing it won't do is turn photo URLs into embedded images inside the XLSX. Postprep is the missing step.
Keep one inventory sheet with a photo URL column. Convert it with Postprep. Bulk generate in Canva. Every item ships its branded graphics without another night of dragging photos one by one.
Try it free at postprep.app — 100 rows, no account required.