PostPrep
← Blog
2026-06-13

How Fitness Studios and Personal Trainers Can Use Canva Bulk Create for Class Schedules, Trainer Cards, and Promo Posts

Draft — Post #20 · Target keyword: canva bulk create fitness · Meta: Build a week of class schedule graphics, trainer cards, and promo posts from one spreadsheet. The Canva Bulk Create fitness workflo

Pete B.
Pete B.
Founder, Postprep

Draft — Post #20 · Target keyword: canva bulk create fitness · Meta: Build a week of class schedule graphics, trainer cards, and promo posts from one spreadsheet. The Canva Bulk Create fitness workflow that actually embeds your photos.

It is Sunday night. Next week's schedule is set, three new trainers just joined the team, and you have a six-week challenge launching Monday. That means a fresh batch of class schedule cards, headshot graphics for every instructor, and a run of promo posts for the challenge. Same layout every time, just different names, photos, and times.

You already know Canva Bulk Create is built for exactly this kind of repeat-the-template job. So you build a spreadsheet with class names, times, and a column of trainer photo URLs, upload it, and watch Canva merge the text perfectly while every photo slot comes back empty.

This post walks through the full Canva Bulk Create fitness workflow, why the photos fail, and a weekly rhythm a studio or solo trainer can actually keep up with.

Why Canva Bulk Create Stalls for Fitness Studios

A fitness brand runs on faces and schedules. Instructor headshots. Class timetables. Member transformation shots. Before-and-after grids. Every one of those visuals lives as an image somewhere: a Google Drive folder of trainer photos, a phone camera roll, a booking app like Mindbody or Glofox, a brand kit on the studio drive.

Canva Bulk Create handles the text side without complaint. Drop in a column of class names, start times, instructor names, or challenge dates and Canva merges them cleanly into your template.

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 URL is just a line of text to Canva. It either prints the raw link inside your design or leaves the photo slot blank. We covered the technical reason in Why Canva Bulk Create Ignores Image URLs.

For a studio, that is the gap between a 15-minute job and a dead end. A roster of 12 trainers with photo URLs will not render unless those photos are embedded inside the XLSX before it ever reaches Canva.

The Manual Workaround Most Trainers Try First

The usual hack goes like this. Open the spreadsheet, switch to Excel, click each photo cell, use Insert > Picture > Place in Cell, find the right file on your laptop, repeat for every trainer and every class. That works only if every photo is already downloaded, cropped to the same size, and named to match the row.

In reality your trainer photos are scattered. A few on the shared Drive, a couple texted to you last week, one still sitting in an Instagram DM. By the time you have them downloaded, renamed, and inserted by hand, you could have built the whole schedule graphic manually and skipped Bulk Create entirely.

The other dead end is the =IMAGE() formula in Google Sheets. We broke down 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 parses the file and sees nothing in that cell.

What You Need Before You Start

Two things.

A Canva template per asset type. Most studios cycle through a small set of recurring designs:

A weekly class schedule card with class name, day, time, and instructor. A trainer intro card with headshot, name, specialty, and a short bio line. A class-specific promo post with the class photo, name, time, and a booking link. A challenge or program announcement with a hero image, dates, and price. A member transformation or testimonial post with a photo and a quote.

Each template needs Canva Bulk Create placeholders for the text variables like {{class_name}}, {{time}}, {{trainer_name}}, {{specialty}}, and an image element for the headshot or class photo.

A single source-of-truth spreadsheet. One row per output design. Columns for every text field plus a column with the direct image URL.

If you already run your schedule in Mindbody, Glofox, Wodify, 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 trainer headshot or class photo. The same clean-sheet rules we wrote about for Etsy sellers and Shopify stores apply here: one row per output, one column per field, image URLs in their own column.

One honest note. Some studio graphics are pure text. A motivational quote post, a "we're closed for the holiday" notice, or a plain class-time list needs no photos at all. Those work in Canva Bulk Create straight from a CSV with no conversion step. The workflow below is for the jobs that need real images embedded.

Step 1: Collect Image URLs From Wherever They Live

This is the step that eats the most time. Each source exposes photo URLs differently.

Google Drive or Shared Drive. Convert the share link to a direct image URL using the format https://drive.google.com/uc?id=FILEID&export=download. Or drop the photos into a public folder on your studio site.

Booking apps (Mindbody, Glofox, Wodify). Trainer profiles usually have a public photo. Open the profile, right-click the image, and copy image address. The URL typically ends in .jpg or .png.

Instagram or your website. If a trainer photo or class shot already lives on your public site, right-click and copy image address. That URL works as-is.

Phone photos. Upload them to your Drive or studio CDN first, then grab the direct URL. A camera roll image has no shareable web URL until it is hosted somewhere.

Drop every URL into the spreadsheet under one column. Name it image_url or photo or headshot and keep the convention consistent.

Step 2: Build the Fitness Spreadsheet

A typical studio bulk sheet looks like this.

class_namedaytimetrainer_namespecialtyphoto
Sunrise HIITMonday6:00 AMJordan LeeHIIT & Conditioninghttps://cdn.studio.com/.../jordan.jpg
Power VinyasaMonday9:30 AMMia TorresVinyasa Yogahttps://cdn.studio.com/.../mia.jpg
Strength 101Tuesday5:30 PMSam OkaforStrength & Mobilityhttps://cdn.studio.com/.../sam.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 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 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 full week of classes plus the trainer roster takes under a minute. The free tier covers 100 rows with no account required.

Step 4: Bulk Generate in Canva

Open your schedule or trainer template in Canva. Make sure you are on a plan that supports Bulk Create. Bulk Create is a Canva Pro and Teams feature and runs on desktop, though plan names and eligibility change, so confirm on your account before a big 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 design per row with the trainer photos, class names, times, and specialties already merged.

Running three template types off the same sheet? Take the same XLSX into your schedule card, your trainer intro, and your promo post template and run Bulk Create in each. Same data, three sets of branded graphics.

Download as a ZIP and you have the full set ready to post or print.

A Realistic Weekly Workflow for a Studio

Here is what the rhythm looks like once the templates exist.

Sunday, 20 minutes. Pull next week's schedule from your booking app into the master sheet. Confirm trainer photo URLs are current. Run it through Postprep. Generate the weekly schedule cards and any new trainer intros in Canva. Schedule them across Instagram and Facebook for the week.

Mid-week, 10 minutes. A sub steps in for a class, or you add a pop-up session. Update one or two rows in the same sheet, re-run Postprep, regenerate just those cards.

Campaign weeks. Launching a challenge or a new program? Add the challenge rows with hero images and dates, re-run the bulk job, and generate the full promo series in one pass.

The whole weekly cycle runs about 30 minutes whether you have 8 classes or 80. Doing it by hand, one graphic at a time, is a 3-to-4-hour Sunday every single week.

Frequently Asked Questions

My trainer photos are all different sizes and crops. Will that look messy?

Postprep embeds whatever the URL returns at its original dimensions. For a consistent look, crop your source photos to the same aspect ratio before you host them, or use a Canva template with a fixed-size image frame so each photo fills the same shape.

Can I generate both Instagram posts and printable schedule flyers from one sheet?

Yes. Run Bulk Create once per template. Export the Instagram version as PNG and the flyer as PDF. The photos embed at the source resolution, so they hold up at print sizes as long as your originals are high enough quality.

My schedule lives in Mindbody. Can I export it directly?

Mindbody and most booking apps export class data to CSV. Add a photo_url column for trainer or class images, run it through Postprep, and you are set. For text-only schedule lists with no photos, you can skip the conversion and feed the CSV straight to Canva.

One of my new trainers has not sent a headshot yet. What do I do?

Leave the photo cell blank for that row. Postprep skips the embed for empty cells and Canva leaves the placeholder visible in the generated design. Re-run the job once the photo arrives.

Can I reuse the same trainer photo across multiple class cards?

Yes. If a trainer teaches five classes, that is five rows with the same photo URL and five different class names and times. Canva generates one design per row.

Does this work for transformation or testimonial posts with a member photo and a quote?

Yes. One row per member, a column for the photo URL and a column for the quote text. Just confirm you have the member's permission to post their photo before you publish.

The Short Version

Canva Bulk Create handles the merge work for every schedule card, trainer intro, and promo post your studio ships. The one thing it does not do is turn image URLs into embedded photos inside the XLSX. Postprep is the missing step.

Build one master sheet from your booking app. Convert with Postprep. Bulk generate in Canva. A full week of branded fitness content goes out in the time it used to take to make two graphics by hand.


Try it free at postprep.app — 100 rows, no account required.

Try it free

Canva Bulk Create with real embedded images.

Upload your CSV or XLSX. Select your image column. Download a Canva-ready file. Free for up to 100 rows — no account needed.

Try Postprep →
Pete B.

Written by

Pete B.

Pete is a small business owner who got tired of social media eating his evenings. Posting product graphics across channels used to mean opening Canva, dropping in each image by hand, and repeating that for every listing and every platform. He kept hitting the same wall: Canva Bulk Create can save hours, but it refuses to read image URLs from a spreadsheet — turning a 5-minute workflow into a 2-hour copy-paste job. So he built Postprep to fix that one specific limitation, and writes about bulk content workflows, design tool limitations, and shipping social content without burning out.

Discussion