Canva Bulk Create Row Limit: The Real Caps and How to Batch Past 300 Rows
Draft — Post #72 · Target keyword: canva bulk create row limit · Meta: The Canva Bulk Create row limit is 300 rows and 150 columns per batch. Here's what breaks at scale and how to split a big spreads

Draft — Post #72 · Target keyword: canva bulk create row limit · Meta: The Canva Bulk Create row limit is 300 rows and 150 columns per batch. Here's what breaks at scale and how to split a big spreadsheet so the images survive.
You have 1,400 product rows. You have a template. You select the range, hit Bulk Create, and Canva refuses the selection.
Or worse: it accepts the file, generates 300 pages, and silently drops the other 1,100. You don't notice until you're scrolling through a Canva doc looking for SKU-1287 and it isn't there.
The Canva Bulk Create row limit is real, it's documented, and almost nobody finds it before they've already built the spreadsheet. Here's exactly what the caps are, what else quietly breaks before you reach them, and the workflow that gets a 1,400-row catalog through Canva without hand-splitting files all afternoon.
The Actual Canva Bulk Create Row Limit: 300 Rows, 150 Columns
Straight from Canva's own help documentation: you can select up to 300 rows and 150 columns. Selections beyond that won't be accepted.
Two more constraints in the same doc that matter just as much:
- You can connect up to 150 data fields to elements in your template.
- Bulk Create is desktop only, and requires Canva Pro, Teams, Business, Enterprise, Education, or Nonprofits.
A note on the column number, because it's quoted inconsistently across the internet: you'll find blog posts claiming the cap is 60 columns. Canva's current help page says 150 in two separate places. Treat 150 as the number, but if you're building something that lives close to either limit, test with a small file first rather than trusting any article, this one included.
One more thing the documentation doesn't say out loud: 300 is the hard cap, not the comfortable one. A single Canva design with 300 pages of image-heavy artwork gets sluggish to open, scroll, and export. Plenty of people report the sweet spot sitting closer to 50 to 100 pages per batch. If you have the choice, batch smaller than the maximum.
Why Bulk Create Stalls Long Before You Hit the Row Cap
Here's the part that catches people out. Most "Bulk Create won't handle my big file" complaints aren't actually about the row limit at all. They're about images.
Canva Bulk Create reads text from a CSV perfectly well. Feed it a column of image URLs and it treats every one of them as a string of characters. Your product photo becomes the literal text https://cdn.shopify.com/s/files/1/0/product-1.jpg sitting inside a frame.
Canva only reads images that are embedded inside the XLSX file itself, as DrawingML objects anchored to a single cell. Not URLs. Not =IMAGE() formulas. Not links to Drive, Dropbox, or a photo library. Canva's docs state it directly: image URLs from cloud photo storage are not supported and will be treated as plain text.
So the sequence people hit is: build a 1,400-row spreadsheet, discover the images don't come through, fix the images by hand for the first 300 rows, and only then discover the row cap. Two separate walls, one after the other. We wrote up the underlying cause in why Canva Bulk Create ignores image URLs if you want the technical version.
The Manual Workaround Most People Try First
The DIY path for a large batch looks like this:
- Split the CSV into five chunks of 300 rows each.
- Open chunk one in Excel.
- For every row, use Insert > Picture > Place in Cell to drop the image into the image column.
- Repeat 299 times.
- Save as XLSX. Upload. Generate.
- Repeat all of it four more times.
At roughly 15 seconds per image, that's about 75 minutes per chunk, or over six hours for 1,400 rows. And it gets redone from scratch every time your catalog changes.
The other common attempt is =IMAGE("url") in Google Sheets. It renders in the browser and looks like it worked. It didn't. The formula produces a display artifact, not an embedded file, and exporting to XLSX leaves you with an empty cell or the raw formula text. We covered why =IMAGE() doesn't work for Canva Bulk Create and what does.
There's also a subtler trap with splitting: if you convert your whole file to an XLSX with embedded images and then try to split it into 300-row chunks, the embedded images often don't survive the split. Google Sheets in particular tends to drop in-cell images on import and re-export. Split first, convert second. That ordering matters.
What You Need Before You Start
- A spreadsheet or export where every row has a publicly reachable image URL
- A Canva plan that includes Bulk Create (Pro, Teams, Business, Enterprise, Education, or Nonprofits) on desktop
- A Canva template with a frame for each image, not a grid
- A way to embed the images into XLSX without doing it by hand
Step 1: Count Your Rows and Trim Your Columns
Rows: divide by 300 to get your batch count. 1,400 rows means five batches, four full and a remainder of 200.
Columns: delete everything you're not placing in the design. A Shopify or Etsy export ships with 40 to 60 columns of inventory metadata you'll never put on a graphic. Cutting to the five or six fields your template actually uses keeps you clear of the field limit and makes the connect-data step far less painful, since you're dragging six named fields instead of hunting through sixty.
Step 2: Build the Master Spreadsheet
Keep one master file with everything in it. You'll split it later, but the master is what you maintain.
| product_name | price | image_url |
| Linen Throw Pillow | $38 | https://yourstore.com/img/pillow-linen.jpg |
| Ceramic Mug Set | $24 | https://yourstore.com/img/mug-set.jpg |
| Wool Runner Rug | $189 | https://yourstore.com/img/rug-wool.jpg |
Header row on top, one row per design, one image URL per image column. Test three or four URLs in a private browser window. If the image loads without a login prompt, it's reachable. If it redirects to a sign-in page or an album viewer, it isn't a direct image link and nothing downstream can fetch it.
Step 3: Split Into 300-Row Chunks Before Converting
Split the master CSV into files of 300 rows or fewer, each with its own header row. catalog-batch-1.csv through catalog-batch-5.csv.
If you'd rather keep pages manageable, split at 100 instead. Smaller batches generate faster and produce Canva files that open quickly.
Do this while the file is still a plain CSV of text and URLs. Splitting text is safe. Splitting embedded images is not.
Step 4: Convert Each Chunk With Postprep
Upload each CSV to postprep.app and point it at your image URL column. It fetches every image and writes a real XLSX with the pictures embedded as DrawingML objects anchored to individual cells, which is the exact format Bulk Create reads.
The free tier handles 100 rows with no account, enough to test one small chunk end to end before committing to the whole catalog. Larger batches need a paid tier, so run one chunk through first to confirm the output looks right in your template.
If you'd rather understand the embedding mechanics yourself, how to bulk embed images in Excel from URLs walks through what's happening inside the file.
Step 5: Run Each Batch in Canva
Open your template. Click the page background, select Edit, then Bulk Create. Choose Upload data and pick your first converted XLSX.
Connect your fields, either by dragging each one onto its placeholder or by letting Auto-match take a pass and correcting what it gets wrong. Preview a few rows to confirm the images are landing in the frames and not showing as text.
Then open Advanced options before you generate. Two settings matter for large batches:
- Output: "Individual designs" creates a separate Canva file per row and drops them in a folder, which is far easier to manage across five batches than five different 300-page documents.
- Name each page using: point it at your product name or SKU column so files come back named something you can actually search.
Generate, then repeat for batches two through five. If you're new to the connect-data step, the full Canva Bulk Create tutorial covers it in detail.
A Repeatable Workflow for Catalogs Over 300 Rows
Once it's set up, a refresh looks like this:
Re-export. Pull the fresh catalog from your store. Trim to the same five or six columns. Save as one master CSV.
Split. Same chunk size every time, same naming convention.
Convert. Run each chunk through Postprep. Save the XLSX files in a dated folder so you know which version generated which designs.
Generate. One Canva pass per chunk, always with Individual designs and auto-naming turned on.
Only regenerate what changed. If 40 products changed prices, build a 40-row file with just those. Don't rerun 1,400 rows to fix 40. A stable chunking convention is what lets you replace a small slice without touching the rest.
Building a full catalog rather than a one-off batch? Using Bulk Create to build a product catalog from a spreadsheet goes deeper on template structure.
FAQ
Can I raise the 300-row limit on a higher Canva plan?
Canva's help documentation states the 300-row and 150-column limit without tying it to a plan tier. Some third-party write-ups claim higher caps on Teams or Enterprise, but we haven't found that confirmed in Canva's own docs. Assume 300 regardless of plan, and verify against your own account if a higher cap matters to your workflow.
What happens if I upload more than 300 rows?
Canva's documentation says selections beyond the limit won't be accepted. In practice people report a mix of outright rejection and partial processing where only some rows generate. Neither is fun to debug after the fact, so count your rows first.
Does Canva Sheets have the same row limit?
Canva Sheets itself doesn't appear to carry the same explicit cap, but the moment you select a range and push it into Bulk Create, the 300-row selection limit applies to that selection. We'd call the Canva Sheets side of this only partially documented, so test rather than assume.
Can I split the file after converting it to XLSX with embedded images?
You can try, but it's fragile. In-cell images frequently don't survive an import-and-re-export cycle, especially through Google Sheets. Split the CSV first, then convert each chunk. It's fewer steps and it doesn't break.
Do I need Postprep if my batch is under 300 rows?
Only if your images are URLs. If you're doing text-only designs, or you've already got images embedded in the file, plain Bulk Create handles it. The tool exists for the URL-to-embedded-image gap, not the row count.
The Short Version
The Canva Bulk Create row limit is 300 rows and 150 columns per batch, desktop only, on a paid plan. Batches near that ceiling get sluggish, so aim lower.
The row cap usually isn't your first problem though. Image URLs are. Canva only reads images embedded inside the XLSX, so a large catalog hits the image wall before it hits the row wall.
Split your CSV into chunks first. Convert each chunk so the images are genuinely embedded. Then run one Bulk Create pass per chunk with Individual designs and auto-naming turned on. That order is what makes a 1,400-row catalog a twenty-minute job instead of a six-hour one.
Try it free at postprep.app — 100 rows, no account required.