How to Use Canva Bulk Create with Your SmugMug Gallery Photos
Draft — Post #37 · Target keyword: canva bulk create smugmug · Meta: SmugMug doesn't export a CSV of image links for Canva Bulk Create. Here's how to pull photo URLs from your galleries and batch-crea

Draft — Post #37 · Target keyword: canva bulk create smugmug · Meta: SmugMug doesn't export a CSV of image links for Canva Bulk Create. Here's how to pull photo URLs from your galleries and batch-create graphics anyway.
You wrap a wedding gallery of 400 photos, upload them to SmugMug for client proofing, and pull your 20 favorites to turn into Instagram teasers before the couple even sees their proofs. You paste those photo links into a spreadsheet, upload it to Canva Bulk Create, and every single design comes back with a blank image box or a wall of URL text instead of a photo.
It gets worse at volume. A school or sports photographer wrapping team day for a dozen teams is looking at hundreds of headshots sitting in SmugMug galleries, one per athlete, with a September deadline to turn each one into a player card. Doing that by hand in Canva, one design at a time, eats a week that should take an afternoon.
SmugMug doesn't make this easier. There's no button in the dashboard that exports your gallery as a spreadsheet of image links ready to paste into anything. Here's the actual workflow, and where SmugMug photographers usually get stuck before finding it.
Why Canva Bulk Create Stalls for SmugMug Photographers
Canva Bulk Create only pulls an image into a design when that image is physically embedded inside the spreadsheet file, in a format called DrawingML. A link in a cell doesn't count, even a real, permanent, working one. Canva reads it as text, the same as a client's name or a caption, and either drops the raw URL string into your design or leaves the image frame empty. We covered the full mechanics in why Canva Bulk Create ignores image URLs, but the short version is this: Canva needs the actual picture sitting inside the cell, not a pointer to where it lives online.
This trips up SmugMug photographers in a specific way. A SmugMug "Copy Photo Link" is a genuine direct link to the image file itself, not a gallery page or a lightbox view. Paste it into a browser tab and the photo loads instantly. That's exactly what makes the Canva failure so confusing the first time it happens: the link clearly works, and Canva still can't see it.
The Manual Workaround Most SmugMug Photographers Try First
Two things usually come up before someone finds a converter.
Insert > Pictures in Excel. Open each photo in SmugMug, save it to your desktop, then place it into the spreadsheet by hand with Insert > Pictures. Fine for a handful of images from one session. For a full wedding gallery or a season of team photos, it's a lost afternoon, and the pictures tend to float above the cells instead of sitting inside them, which breaks Canva's row matching.
The =IMAGE() formula in Google Sheets. Paste =IMAGE("https://...") and the photo shows up right in the cell, looking embedded. It isn't. It's a live formula rendering a preview. Export to XLSX or CSV and Canva never sees an actual picture, just a broken formula or flattened text. We wrote the full breakdown in our =IMAGE() post.
Both get a photographer through one small gallery. Neither survives a real season or a full studio catalog.
What You Need Before You Start
- A Canva template with placeholders for the text fields you need (client name, event date, athlete name, jersey number) and an image frame for the photo
- The SmugMug galleries you're pulling from organized by client, event, or team, so you can match photos to rows without guessing
- A way to actually get your image URLs out of SmugMug, since there's no single export button for it
That last part is the real gap. SmugMug's account settings give you batch ZIP downloads of image files and per-photo direct links, not a spreadsheet of URLs ready to paste anywhere. If you want your gallery's image links in one place, you're picking one of two paths.
Step 1: Collect Your SmugMug Image URLs
If you're pulling from one gallery. Open the photo in SmugMug, click the Share icon, choose the Link tab, and select Copy Photo Link. That grabs a direct link to the image file itself, not the gallery page. For 15 to 40 photos from a single session, this is a manual but manageable five-to-ten-minute job. Paste each link into your spreadsheet next to the matching client or file name.
If you're pulling from a whole season or catalog. SmugMug's API (free to apply for at api.smugmug.com) gives you programmatic access to your galleries, including each photo's direct URL, caption, and keywords, and there are several open-source SmugMug export tools built specifically to pull this data in bulk. Setting this up takes some comfort with developer tools or a script someone else has written, but it's worth the time if you're processing hundreds of photos across a full season instead of one gallery.
Either way, you want to land on something like this:
| athlete_name | team | image_url |
| Jordan Lee | Lincoln HS Varsity | https://photos.smugmug.com/.../lee-042.jpg |
| Maya Torres | Lincoln HS Varsity | https://photos.smugmug.com/.../torres-043.jpg |
| Sam Patel | Lincoln HS Varsity | https://photos.smugmug.com/.../patel-044.jpg |
Step 2: Clean Up the Sheet
Keep only what your template uses. For player cards that's usually name, team, and the image URL. For a client gallery announcement, it might just be client name, gallery link for the caption, and the hero photo URL. Drop anything your design doesn't reference.
Step 3: Convert the URLs Into Embedded Images
This is the step that actually fixes the problem. Postprep takes your spreadsheet, fetches the image behind every URL in the column you choose, and returns an XLSX with each image embedded directly in its cell.
- Go to postprep.app
- Upload your SmugMug spreadsheet (CSV or XLSX)
- Select image_url as the column to convert
- Download the finished XLSX
No account needed for the first 100 rows. A single gallery or team roster runs through in under a minute.
Step 4: Build or Reuse Your Canva Template
If you already have a template for client previews or player cards, open it. If not:
- Start a new design at whatever size you're posting: Instagram post, story, or a print-ready card
- Add a text box for the name and type
{{Name}} - Add any other text fields you need, like
{{Team}}or{{Session Date}} - Drop in an image frame for the photo
Field names in {{double braces}} need to match your spreadsheet's column headers exactly, capitalization included.
Step 5: Run Bulk Create
- With your template open, click Apps → Bulk Create in Canva's side panel
- Upload the XLSX Postprep gave you
- Match each spreadsheet column to its design element
- Click Continue, then Generate designs
Canva outputs one finished design per row. Download the batch or send it straight to your scheduler or your print queue.
A Repeatable Workflow for SmugMug Photographers
Gallery-live announcements. Pull one hero photo per client the day a gallery goes live, run it through Postprep, and batch out a stack of "Your Gallery Is Live" cards in one pass instead of designing each one by hand.
Team and roster graphics. For school or sports photographers, one batch per team turns a SmugMug gallery of headshots into a full set of player cards, using jersey number and name alongside the photo. For the full team-roster playbook, see how sports teams use Canva Bulk Create.
Weekly highlight rounds. Pick the best shot from every gallery delivered that week and batch a set of portfolio or "recently delivered" posts for Instagram in one sitting instead of building each post from scratch.
Print sale pushes. When a seasonal print sale goes out to your whole client list, batch-generate the promo graphic across every active gallery at once instead of duplicating one Canva design over and over.
If you're not SmugMug-specific and just want the general playbook, see how photographers use Canva Bulk Create.
Frequently Asked Questions
Does this work with private, password-protected SmugMug galleries?
Bulk Create never actually fetches an image from a URL, private or public, so gallery privacy isn't what blocks you here. Use this workflow for photos you have the rights to repost as your own marketing, not client proofing galleries you don't have permission to publish elsewhere.
I already have my SmugMug direct image links. Why won't they just work if I paste them into Canva?
Because Canva's Bulk Create doesn't fetch or preview the URL, no matter how valid it is. It reads the cell as text. The fix isn't a different kind of link, it's getting the actual image embedded inside the spreadsheet file, which is what Postprep does.
Can I use SmugMug's batch ZIP download instead of copying individual photo links?
The batch download gives you image files in a folder, not a list of URLs, so it doesn't build the spreadsheet this workflow needs. Stick with Copy Photo Link for smaller batches, or the API for larger ones.
Do I need a specific SmugMug plan for Copy Photo Link to work?
Copy Photo Link and gallery sharing are standard SmugMug features, but exact download and privacy settings shift depending on your plan and account configuration, and SmugMug's plan lineup has changed more than once in the past year. Worth a quick check at smugmug.com/plans before you build a recurring workflow around a specific setting.
How many photos can I run through at once?
Free for the first 100 rows, no account required. That covers most single galleries or team shoots in one pass. Bigger studio catalogs can run in batches, one gallery or event at a time.
Will the embedded images stay linked back to my live SmugMug gallery?
No, and that's the point. Postprep embeds a copy of the image directly into the XLSX. Once it's embedded, Canva doesn't need to reach back out to SmugMug, or anywhere else, to render it.
The Short Version
SmugMug gives every photo a real, working direct link. Canva Bulk Create still won't read it, because Bulk Create only recognizes images embedded in the spreadsheet, not linked to it. Copy your photo links (or pull them in bulk through the API for a full catalog), drop them in a spreadsheet next to your client or team data, run the file through Postprep to get the images properly embedded, then upload that to Canva Bulk Create.
Collect your URLs, convert with Postprep, generate in Canva. That's the whole workflow, whether you're processing one gallery or a full season.
Try it free at postprep.app — 100 rows, no account required.