PostPrep
← Blog
2026-09-11

Canva Bulk Create CSV Not Uploading? Every Reason Your File Gets Rejected

Canva Bulk Create CSV not uploading? Here's every reason your file gets rejected or lands empty, from format and sheet ranges to image URLs, and the fix.

Pete B.
Pete B.
Founder, Postprep

You exported a clean spreadsheet. Forty products, a name column, a price column, a photo column. You opened Bulk Create, clicked Upload data, picked the file, and then nothing useful happened.

Maybe Canva refused the file outright. Maybe it accepted it and showed you an empty table. Maybe it pulled in your columns but every image cell says https://cdn.shopify.com/... in grey text instead of showing a photo.

All three of these get searched as the same problem, and they have different causes. Here is every documented reason a Canva Bulk Create CSV is not uploading the way you expect, in the order worth checking, plus the fix for each.

Why Canva Bulk Create Rejects Your File

Canva accepts exactly two file types at the upload step: CSV and XLSX. That is it. Not .numbers, not the older .xls, not .ods, not .tsv, not a Google Sheets share link. If your file is any of those, the upload dialog will either ignore it or refuse it, and Canva will not explain why.

That is failure mode one, and it is the easiest to fix.

Failure mode two is more confusing: the file uploads fine, and the data table comes back empty or half-populated. This is almost always about structure, not format. Bulk Create reads your file on a strict model. Each column becomes one data field. Each row becomes one design. If Canva cannot find a clean rectangle of labelled columns, it has nothing to build fields from.

Failure mode three is the one that costs people the most time, because nothing looks broken. Text columns merge perfectly. The image column comes through as a column of grey text. That is Canva doing exactly what it documents: image URLs are not supported and will be treated as plain text. There is a full technical explanation of why Bulk Create ignores image URLs, and it is the single most common reason a batch that "uploaded fine" produces 40 designs with empty frames.

The Nine Reasons Your File Won't Upload (Or Uploads Empty)

Work down the list. Most stuck uploads are one of the first four.

1. The file isn't actually CSV or XLSX. Apple Numbers saves .numbers by default. Old Excel templates save .xls. LibreOffice saves .ods. None of these work. In Numbers use File > Export To, in Excel use File > Save As, in Google Sheets use File > Download, and pick .csv or .xlsx explicitly.

2. You're trying to link a Google Sheet instead of downloading it. There is no Google Sheets connector inside Bulk Create. The Data apps Canva does support are Google Analytics, HubSpot, Statista and World Bank, which is a very different list from what most people expect. Download the sheet as a file first.

3. Your workbook has multiple sheets and you skipped the sheet picker. Canva documents this step directly: once uploaded, if your file has multiple sheets you select the specific sheet, then add the range to fetch the data from if applicable. If your product data is on tab three and Canva defaulted to tab one, you get an empty table and no error. Delete the sheets you don't need before exporting, or pick carefully.

4. Your headers aren't in the top row. A title row, a logo row, a merged "Q3 Inventory" banner, or two stacked header rows will all break the column-labelling step. Canva expects clearly labelled columns. Strip everything above your header row before exporting, and unmerge every merged cell.

5. There are blank rows or gaps inside your data. Canva requires a contiguous block. Disjointed or blank ranges will not work, and this is a documented hard limitation rather than a soft warning. One empty row in the middle is enough. Delete blank rows instead of hiding them.

6. You're over the caps. The Bulk Create app takes up to 300 rows, and selections beyond the cap are rejected outright rather than trimmed. The column cap is quoted inconsistently inside Canva's own docs, with the main Bulk Create page saying 150 data fields and the Canva Sheets page referring to a 60-column limit for the app. If you're anywhere near either number, here are the real caps and how to batch past 300 rows.

7. A column mixes text and images. Each column must hold one content type only. A photo column where 38 rows have embedded images and two rows still hold a leftover URL is a mixed column, and Canva may skip it or read the whole thing as text.

8. Your image column is URLs. Covered above, and worth repeating because it is the most common. A link in a cell is text. Canva only reads images that are embedded inside the cell as real image data, in a single cell rather than floating across several. That is also why your images don't show up in Canva Sheets.

9. The panel isn't there at all. If you can't find Upload data in the first place, this isn't a file problem. Bulk Create is limited to Canva Pro, Teams, Business, Enterprise, Education and Nonprofits accounts, on desktop only. Start with what plan you actually need.

The Manual Workaround Most People Try First

Once the file format is sorted and the images still don't appear, the usual next move is to embed them by hand. Open the file in Excel, click a cell, Insert > Picture > Place in Cell, repeat for every row, save as XLSX, re-upload.

This works. Canva reads those images correctly, because Excel writes them into the file as DrawingML image data anchored to a cell rather than as a link. That is the format Canva is looking for.

It is also miserable past about twenty rows, and one image that lands floating across cells instead of inside one will break that row silently.

The other popular attempt is =IMAGE() in Google Sheets. It renders a picture on screen, so it looks like it worked. Export the file and the cell contains a formula, not an image, and Canva gets nothing. There is a full breakdown of why =IMAGE() doesn't work for Bulk Create if you want the detail.

What You Need Before You Start

  • A Canva plan with Bulk Create (Pro, Teams, Business, Enterprise, Education or Nonprofits), on desktop
  • A spreadsheet with one row per design and clearly labelled columns in the top row
  • A column of image URLs that actually resolve in a browser
  • A Canva template with a text box per text field and a frame or grid from the Elements tab per image

Step 1: Get Your Image URLs Into One Column

Wherever your images live, the goal is a single column of direct links. Most e-commerce and catalogue exports already give you this. Shopify, Ecwid, Square Online, BigCommerce and WooCommerce product exports all carry an image URL column.

Test three of them in a private browser window. If a link only loads while you're signed in, or expires after a few minutes, it won't work downstream. Re-host those somewhere public first.

Step 2: Build the Spreadsheet

Keep it boring. Headers in row one, one row per design, no merged cells, no blank rows, no summary row at the bottom.

product_namepriceimage_url
Cedar Candle$28https://cdn.example.com/cedar.jpg
Linen Throw$64https://cdn.example.com/linen.jpg
Clay Mug$22https://cdn.example.com/mug.jpg

Descriptive headers are worth the extra seconds. Canva's Auto-match fields feature tries to connect your data to your design automatically, and readable names like product_name give it far more to work with than col_1.

Step 3: Convert the File So Canva Can Read the Images

Upload that CSV or XLSX to Postprep. It fetches every URL in your image column and writes the actual image data into each cell, then hands back an XLSX with real embedded images in exactly the format Bulk Create reads.

Free tier covers 100 rows with no account. That is enough for most catalogue batches, and enough to test the workflow before committing to anything.

Postprep also normalises the output to a clean single-sheet XLSX, which quietly removes several of the failure modes above at the same time: no stray tabs, no merged header banner, no legacy .xls format.

Step 4: Upload to Canva and Generate

Open your template. Click the page background, select Edit, then Bulk create, and choose Upload data. Pick the converted XLSX.

Your image column should now show thumbnails rather than grey text. Connect each field to its element, either by clicking Auto-match fields or by dragging fields onto elements manually. Use the Preview step to check a few rows before generating.

Then open Advanced options below the Continue button. Set Output to Individual designs if you want one file per row, and set Name each page using to your product name column so the downloads come back with usable filenames instead of numbers.

A Pre-Upload Checklist Worth Reusing

Once you're running batches regularly, this takes about a minute and prevents almost every upload failure:

  • One tab, one header row, headers in row one
  • No merged cells, no blank rows, no totals row
  • Under 300 rows per batch
  • One content type per column
  • Every image URL opens in a private window
  • File saved as .csv or .xlsx, not .numbers, .xls or .ods
  • Images embedded in cells, not linked

If you export the same report every week, save the cleaned version as your template and overwrite the data rather than rebuilding it each time.

FAQ

Canva accepted my CSV but the table is empty. What happened?

Most often the header row isn't in row one, there are merged cells at the top, or your workbook had multiple sheets and Canva defaulted to the wrong one. Strip everything above your headers, unmerge cells, and re-export with a single sheet.

Does Bulk Create accept XLSX, or only CSV?

Both. Canva's docs list CSV and XLSX as the supported formats. XLSX is the one you want when images are involved, because CSV is plain text and physically cannot carry embedded image data.

Why do my image URLs show as text after uploading?

Because that is what Canva does with them. Image URLs are explicitly unsupported and treated as plain text. Images have to be embedded inside the cell as real image data. This is what works and what breaks in a Bulk Create CSV image column.

Can I skip the upload entirely and use Canva Sheets?

You can, and it avoids the file-format problem completely. It does not avoid the image problem: Canva Sheets also rejects image URLs and expects uploaded images or images from your Canva library. Here is how Canva Sheets and Bulk Create actually differ.

Is there a file size limit?

Canva documents row and column caps rather than a size in megabytes, so the practical ceiling is 300 rows. An XLSX with 300 full-resolution embedded photos does get large fast, so batching in chunks of 100 keeps things responsive.

My file uploads on one computer and not another.

Try a different browser or an incognito window and clear the cache. Community reports on this point at browser state more often than at the file, and it costs thirty seconds to rule out.

The Short Version

Canva Bulk Create takes CSV and XLSX only. Beyond that it wants one sheet, headers in row one, no merged cells, no blank rows, under 300 rows, and one content type per column.

Get all of that right and the file will upload. Your images still won't appear, because Canva only reads images embedded inside cells and treats URLs as plain text. Embedding them by hand works and takes forever. Converting the file takes one upload.

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