PostPrep
← Blog
2026-08-30

How Sports Teams Can Use Canva Bulk Create for Player Cards, Rosters, and Game Day Graphics

Draft — Post #20 · Target keyword: canva bulk create sports team · Meta: Use Canva Bulk Create for sports team player cards, rosters, and game day graphics. The fix for player photo URLs Canva treats

Pete B.
Pete B.
Founder, Postprep

Draft — Post #20 · Target keyword: canva bulk create sports team · Meta: Use Canva Bulk Create for sports team player cards, rosters, and game day graphics. The fix for player photo URLs Canva treats as plain text.

It is the week before the season opener. You have 18 players, and every one of them needs a player card with their photo, number, position, and a roster post for the team feed. Same template, 18 times, with a different face and a different name on each.

You build the first card in Canva. It looks great. Then you realize you have to do it 17 more times: swap the photo, retype the name, change the number, reposition everything. By card six you are making mistakes. By card twelve you want to quit.

Canva Bulk Create is supposed to solve exactly this. One template, one spreadsheet, every card generated at once. It works perfectly for the text. The player names come through, the numbers come through, the positions come through. Then the photos do not show up at all, and you are left with 18 identical cards that all say the right thing over an empty photo frame.

Why Canva Bulk Create Stalls for Sports Teams

Here is the part that trips up every team manager. Canva Bulk Create handles text and images differently, and almost nobody tells you that up front.

When you connect a spreadsheet, Canva reads each column and lets you map it to a field in your template. Text columns like player name, jersey number, and position map cleanly. You drag the field onto the design and it fills in. That works.

Image columns are where it breaks. If your spreadsheet has a column of player photo links, like https://yoursite.com/photos/jordan-smith.jpg, Canva does not fetch that image. It treats the link as plain text. So instead of Jordan's face, the card prints the literal web address, or the frame just stays empty.

The reason is technical but worth knowing. Canva Bulk Create only pulls images that are embedded inside the spreadsheet file itself, as real picture data stored in the XLSX. A URL sitting in a cell is just a string of characters to Canva. It has no idea there is a photo on the other end of that link. We broke this down in full in Why Canva Bulk Create Ignores Image URLs, and it applies to player photos exactly the same way it applies to product shots.

The Manual Workaround Most Teams Try First

Once people hit the photo wall, they reach for one of two fixes. Both waste your week.

The first is Excel's Insert > Picture menu. You open your spreadsheet, click into a cell, insert a player photo, resize it to fit, then repeat for all 18 players. Technically this embeds the image, so Canva can read it. But you are back to doing manual work one player at a time, which is the exact thing Bulk Create was meant to kill. For a roster of 18 it is annoying. For a club with eight teams it is a full weekend.

The second is the =IMAGE() formula in Google Sheets. It looks like the answer. You paste =IMAGE("https://...") and the photo appears right there in the cell. Feels solved. It is not. That formula only renders a preview inside Google Sheets. When you download the sheet as an XLSX or CSV, the actual image data does not travel with it. Canva still sees an empty cell. We walked through why this dead-ends in Why =IMAGE() Doesn't Work for Canva Bulk Create. The short version: a formula preview is not an embedded image, and Canva only reads embedded images.

So the team manager is stuck choosing between slow-but-works (manual insert) and fast-but-broken (=IMAGE). Neither is the workflow you want before a game.

What You Need Before You Start

You need three things, and you probably already have two of them.

A Canva template for the graphic you are batching. A player card, a roster grid, a starting-lineup post, whatever you are making. Build one and make it look right.

A list of your players with the details that change on each card: name, number, position, and anything else like grade, hometown, or a stat line.

A photo for each player, hosted somewhere with a direct link. If your league platform, team photographer, or shared drive gives you image URLs, you are set. If your photos live as files on your computer, that is fine too. The key is getting each player matched to the right photo.

Note that not every team graphic needs photos. A schedule post, a game-day matchup with two logos, or a text-only score update may not need a single player headshot. For those, plain Canva Bulk Create works without any of this. The photo problem only shows up when each design needs its own unique image. Be honest with yourself about which graphics actually need faces before you do extra work.

The Workflow That Actually Works

Here is the full path from roster to finished cards.

Step 1: Collect your player photo URLs

Get a direct link for each player's photo. Many youth sports platforms and team management tools let you export a roster, and team photographers often deliver galleries with shareable links. If your photos are files rather than links, you can host them on a free image host or shared drive that produces direct URLs. One photo, one link, per player.

Step 2: Build the spreadsheet

Put one player per row. One column for each piece of text on the card, plus one column for the photo URL. Keep it simple and consistent.

Player NameNumberPositionPhoto URL
Jordan Smith12Guardhttps://yoursite.com/jordan.jpg
Maya Chen7Forwardhttps://yoursite.com/maya.jpg
Andre Diaz23Centerhttps://yoursite.com/andre.jpg

Double-check that each row points to the correct player's photo. A mismatched link means a card with the wrong face, and on a sports team that is the kind of mistake people screenshot.

Step 3: Convert the file with Postprep

This is the step that fixes the photo problem. Upload your spreadsheet to Postprep. It reads your photo URL column, downloads each image, and embeds it as real picture data inside a new XLSX file. The free tier handles 100 rows with no account, which covers a full roster or several teams at once.

What you get back is a spreadsheet that looks the same but now carries the actual photos inside it, in the exact format Canva Bulk Create reads. No manual inserting, no formula tricks.

Step 4: Bulk generate in Canva

Open your template in Canva, go to Bulk Create, and connect the XLSX you got from Postprep. Map the text columns to your text fields and the photo column to your image frame. Hit generate. Canva spits out one finished card per player, each with the right name, number, and face, all in one batch. What was an afternoon of manual editing is now a few minutes.

A Repeatable Season Workflow

The real payoff is that you set this up once and reuse it all season.

Keep a master roster spreadsheet for the team. When you need player cards, you already have the names, numbers, and photo links in one place. Run it through Postprep, drop it into your card template, done.

When you need a different graphic, you reuse the same data with a new template. Player spotlights for the player of the week. Starting-lineup posts before each game. Senior night cards at the end of the year. Recruiting profiles. The spreadsheet barely changes; you just point it at a new design.

Mid-season roster changes are easy too. A new player joins, you add one row, run it through again, and generate just their card. You are not rebuilding anything by hand.

For clubs running multiple teams, the same system scales. One spreadsheet per team, or one big sheet with a team column, and you batch every roster in the league without touching Canva 200 times. If you want the broader walkthrough of the feature itself, the complete Canva Bulk Create guide covers the template side in more depth, and the photographer workflow is close to what a team photographer doing headshot cards would run.

FAQ

Does this work for any sport?

Yes. The workflow does not care whether it is football, basketball, soccer, baseball, hockey, or volleyball. It is just names, numbers, and photos in a spreadsheet mapped to a template. Swap the template, keep the system.

What if I do not have photo URLs, just photo files on my computer?

You can still do it. Host the files somewhere that gives direct links, like a free image host or a shared drive set to produce direct URLs, then put those links in your spreadsheet. The photos need to be reachable by a link for the conversion step to pull them.

Do I need a paid Canva plan?

Bulk Create is a Canva feature, and availability can depend on your plan. Check your current Canva account to confirm Bulk Create is available before you build your workflow, since plan details change. Postprep's conversion step is separate and works regardless of which Canva plan you are on.

How many players can I do at once?

Postprep's free tier handles 100 rows with no account, which is plenty for a single roster and usually enough for several teams. Larger batches are supported beyond that.

Will the photos look stretched or cropped wrong?

Canva fits each image into the frame you set in your template. Set the frame the way you want once, and every generated card uses the same crop and sizing. Consistent frames are one of the reasons batching looks more professional than building cards by hand.

Can I reuse the same spreadsheet for different graphics?

That is the whole idea. One roster sheet feeds player cards, spotlights, lineup posts, and more. You only change the Canva template, not the data.

The Short Version

Canva Bulk Create reads the text on your player cards but ignores photo URLs, because it only embeds images that live inside the spreadsheet file as real picture data, not links. The manual Insert > Picture fix works but is slow, and the =IMAGE() formula looks like it works but breaks on export. Postprep converts your roster spreadsheet so the player photos are actually embedded, then Canva Bulk Create generates every card, spotlight, and roster graphic in one batch. Set it up once, reuse it all season.

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