How Coaches Can Use Canva Bulk Create for Testimonials, Quote Cards, and Program Promos
Draft — Post #21 · Target keyword: canva bulk create coaches · Meta: Turn one spreadsheet of client wins, quotes, and headshots into a month of branded graphics. The Canva Bulk Create coaches workflow

Draft — Post #21 · Target keyword: canva bulk create coaches · Meta: Turn one spreadsheet of client wins, quotes, and headshots into a month of branded graphics. The Canva Bulk Create coaches workflow that actually embeds images.
You have 18 client testimonials sitting in a spreadsheet. Headshots in a Drive folder. A list of program wins you have been meaning to turn into social proof for six weeks. You know each one is the same branded card with a different name, photo, and quote. You know Canva Bulk Create is built for exactly this.
Then you upload your sheet, the text merges fine, and every headshot slot comes back blank. Canva printed your image URLs as plain text instead of showing the photos.
This post walks through the full Canva Bulk Create coaches workflow, why the image step breaks, the one piece Canva does not handle on its own, and a repeatable monthly rhythm so social proof stops being the thing you never get around to.
Why Canva Bulk Create Stalls for Coaches
Coaching content runs on faces and words. Client testimonials with headshots. Transformation stories with before-and-after photos. Quote cards built from your own frameworks. Program promos with a cohort photo or your branded portrait. Most of those assets already live somewhere as image URLs: a Google Drive folder of client photos, a Dropbox of headshots, a testimonial tool that stores avatars, your brand kit on a CDN.
Canva Bulk Create handles the text without complaint. Drop in a column of client names, quotes, program titles, or session dates and Canva merges them in cleanly.
Image URLs are where it breaks. Canva Bulk Create only reads images that are physically embedded inside the XLSX file as binary data in a format called DrawingML. A URL is just text to Canva. It either prints the link as a literal string in your template or leaves the photo slot empty. The full technical reason is in Why Canva Bulk Create Ignores Image URLs.
For a coach this is the difference between a 10-minute batch and giving up. A list of 30 client testimonials with headshot URLs will not render unless those headshots are embedded inside the XLSX before Canva ever sees it.
The Manual Workaround Most Coaches 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 disk, repeat for every client. That works if every headshot is already downloaded to your laptop, cropped to the same size, named to match the row, and sitting in the right order. For three testimonials, fine. For thirty, you have lost the afternoon you were trying to save.
The other dead end is the =IMAGE() formula in Google Sheets. It looks like it works because the photo shows up in the cell. But =IMAGE() is a live cell reference, not embedded image data, so Canva sees nothing when it parses the file. We covered exactly why in Why =IMAGE() Doesn't Work for Canva Bulk Create.
One honest note: not every coaching graphic needs an image. A pure quote card built from your own frameworks is text only, and text-only Bulk Create works out of the box with no conversion step. You only need the rest of this guide when your cards include client photos, headshots, logos, or transformation images.
What You Need Before You Start
Two things.
A Canva template per card type. Most coaches cycle through a small set of recurring designs. A client testimonial card with headshot, name, quote, and result. A quote or affirmation card with your brand colors and an optional portrait. A program or cohort promo with a photo, program name, start date, and price. A transformation post with a client photo and a one-line outcome. A "spots open" or launch card with your headshot and a deadline.
Each template needs Bulk Create placeholders for the text variables like {{client_name}}, {{quote}}, {{result}}, {{program_name}}, plus an image element where the headshot or photo goes.
A single source-of-truth spreadsheet. One row per output card. A column for each text field, plus one column holding the direct image URL.
If you already keep client wins in Notion, Airtable, a testimonial tool, or a plain Google Sheet, you are most of the way there. The only column you may need to add is a direct URL to the headshot or photo. We have written about clean spreadsheet prep for verticals like Etsy sellers and photographers, and the same rules hold: one row per output, one column per field, image URLs in their own column.
Step 1: Collect the Image URLs
This is the step that eats the most time, because client photos live in scattered places. Each source exposes URLs a little differently.
Google Drive. Convert the share link to a direct image URL in the format https://drive.google.com/uc?id=FILEID&export=download. Or drop the photos into a public folder on your site.
Dropbox. Take the share link and change the trailing ?dl=0 to ?raw=1. That returns the raw image instead of the preview page.
Testimonial or review tools. If you collect testimonials through a tool that stores client avatars, open the entry and copy the image address. It usually ends in .jpg or .png.
Intake forms. If your onboarding form collects a headshot upload (Typeform, Tally, Google Forms with file upload), each upload has a viewable URL. Open the file in the form admin and copy the image address.
Your own brand kit. Standard assets stored on your website or in cloud storage already have working URLs.
Drop every URL into one column. Name it headshot or image_url and stick with the convention.
Step 2: Build the Coaching Spreadsheet
A typical coach's testimonial sheet looks like this.
| client_name | quote | result | program | headshot |
| Dana Reyes | "I finally stopped second-guessing every decision." | Promoted in 4 months | Leadership Reset | https://cdn.site.com/.../reyes.jpg |
| Tom Albright | "Booked 12 discovery calls in my first launch week." | 12 calls, 3 clients | Launch Lab | https://cdn.site.com/.../albright.jpg |
| Priya N. | "I have a system now instead of constant overwhelm." | 10 hrs/week back | Systems Sprint | https://cdn.site.com/.../priya.jpg |
Save it as CSV or XLSX. Column names do not have to match Canva exactly because you map them in the Bulk Create panel, but matching names lets Canva auto-connect them in one click.
Step 3: Convert the Spreadsheet With Postprep
This is the conversion step Canva refuses to do.
Go to postprep.app, upload your CSV, and pick the column that holds the image URLs. Postprep fetches each URL, downloads the photo, and embeds it inside the XLSX as DrawingML, the binary format Canva actually reads. Every other column passes through unchanged.
A 30-row sheet takes a few seconds. The free tier covers 100 rows with no account required.
Step 4: Bulk Generate in Canva
Open your testimonial template in Canva. Make sure you are on a plan that includes Bulk Create. Last I checked, Bulk Create is part of the paid and eligible tiers and runs on desktop, but Canva changes plan details often, so confirm your current plan covers it before you build the whole batch.
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 match.
Click Generate designs. Canva produces one finished card per row with the headshots, names, quotes, and results already merged.
If you run three template types off the same sheet, a testimonial card, a transformation post, and a "client win" 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 and you have weeks of social proof ready to schedule.
A Realistic Monthly Workflow for Coaches
Here is a rhythm that keeps social proof flowing without a content scramble.
Once a month, collect. As wins and testimonials come in, drop them straight into your master sheet with a headshot URL column. No design, just capture. By month-end you have a full batch waiting.
One 30-minute session, convert and generate. Run the sheet through Postprep. Generate your testimonial cards, transformation posts, and quote cards in Canva from the same file. You walk out with 20 to 30 finished graphics.
Schedule and drip. Load the batch into whatever scheduler you use, Later, Buffer, Planoly, and drip the social proof across the month. Aim for the 70/20/10 split coaches use: mostly educational, a steady stream of social proof, a few direct offers.
For text-only quote cards built from your frameworks, skip Postprep entirely. Write the quotes into a column, run Bulk Create on a text-only template, done. Save the conversion step for the cards that need faces.
The whole cycle is about 30 minutes of spreadsheet time and 15 minutes of Canva time per template, whether you are shipping 10 cards or 100. By hand, the same batch with embedded photos runs 3 to 5 hours.
Frequently Asked Questions
Do I need client permission to post their testimonial with a photo?
Yes. Get written consent before you publish a client's name and headshot, even for a glowing review. A simple line in your offboarding form or a quick message covers it. This is about respect and trust, not just legal cover.
My quotes are just text. Do I still need Postprep?
No. Text-only quote and affirmation cards work in Canva Bulk Create with no conversion. You only need Postprep when a card includes a headshot, client photo, logo, or any image pulled from a URL.
Some clients did not send a headshot. What do I do?
Leave the image cell blank for those rows. Postprep skips the embed for empty cells, and Canva leaves the placeholder showing. Use a branded background or your logo for those, or re-run once the photo arrives.
Can I reuse the same client across different card types?
Yes. One row per output. If a client appears on a testimonial card and a transformation post, that is two rows with the same headshot URL and different text. Canva generates one design per row.
What if my headshots are different shapes and sizes?
Postprep embeds whatever the URL returns at its original resolution. For consistent framing, crop your template's image placeholder to a fixed shape (a circle or square frame), and Canva fits each photo into it. Pre-cropping the source photos to a square also helps.
The Short Version
Canva Bulk Create handles the merge work for every testimonial, quote card, and program promo you want to ship. The one thing it does not do is turn image URLs into embedded images inside the XLSX. Postprep is the missing step.
Collect your client wins in one sheet all month. Convert with Postprep. Bulk generate in Canva. Social proof goes from the task you keep postponing to a 30-minute batch.
Try it free at postprep.app — 100 rows, no account required.