PostPrep
← Blog
2026-08-30

Canva Bulk Create QR Codes: How to Give Every Design Its Own Code

Draft — Post #74 · Target keyword: canva bulk create qr code · Meta: Canva Bulk Create QR code batches fail because the QR app makes one static code. Here's how to generate a unique, scannable QR on e

Pete B.
Pete B.
Founder, Postprep

Draft — Post #74 · Target keyword: canva bulk create qr code · Meta: Canva Bulk Create QR code batches fail because the QR app makes one static code. Here's how to generate a unique, scannable QR on every design from a spreadsheet.

You have 180 wedding place cards. Each guest gets a card with a QR code that opens their own meal choice and table number. You build the card in Canva, drop in a QR code from the QR app, upload your guest list to Bulk Create, and generate.

Every single card comes out with the same QR code.

This is the most common way a Canva Bulk Create QR code batch fails, and it is not a bug. The QR code you placed is a static image element. Bulk Create swaps text and images that are connected to a data field. A QR generated by an app inside the editor is not connected to anything, so it gets cloned onto all 180 pages exactly as-is. Same problem for 300 product labels, 50 restaurant table tents, or a conference badge run where every attendee needs a personal check-in link.

The fix is to stop treating the QR as a design element and start treating it as data.

Why Canva Bulk Create Stalls on QR Codes

There are two separate failures here, and most guides only mention the first one.

Failure one: the QR app is not a data field. Canva's help docs are clear that Bulk Create works by linking columns in your data to placeholder elements on the page. Text needs its own text box. Images need a frame or grid from the Elements tab. A QR code generated by an app is just a flat image sitting on the canvas. There is no column behind it, so there is nothing to vary.

Failure two: QR image URLs get read as text. The obvious next move is to generate a QR image for each row, put the image links in a column, and let Bulk Create pull them in. That does not work either. Canva states plainly that image URLs from cloud photo storage are not supported and will be treated as plain text, and that images must be embedded directly within a single cell.

So your QR column arrives in Canva as 180 rows of https://api.qrserver.com/v1/create-qr-code/... printed as literal text on the card. This is the same wall that hits anyone batching product photos or listing images. The underlying reason is technical: Canva only reads images that are DrawingML-embedded inside the XLSX file, not URLs pointing at images. We broke that down in full in why Canva Bulk Create ignores image URLs.

The Manual Workaround Most People Try First

Generate a QR on a free site, download the PNG, repeat. Then either drag each PNG into Canva one at a time, or open Excel and use Insert > Picture > Place in Cell for every row.

It works. At 180 rows it also takes an afternoon, and one mis-ordered file means someone scans a card and lands on a stranger's meal choice.

The Google Sheets shortcut people reach for next is =IMAGE("https://api.qrserver.com/..."). It renders a perfect QR code on screen, which is exactly why it fools people. The image never becomes a real cell object, so exporting to XLSX gives you a formula result and nothing embedded. Canva sees an empty cell. We covered why =IMAGE() does not work for Canva Bulk Create separately.

There is also a third-party QR app in the Canva marketplace that does bulk generation from an uploaded file. It is a legitimate option worth looking at, though it is a paid service on a per-code basis past a free allowance, so check its current pricing yourself before you commit a large run to it. The route below keeps the QR generation free and keeps you in control of the spreadsheet.

What You Need Before You Start

  • A spreadsheet with one row per design and a column holding whatever each QR should encode (a URL, an order number, a vCard string)
  • Canva Pro, Teams, Business, Enterprise, Education, or Nonprofits, on desktop. Bulk Create is desktop only.
  • A Canva template with a frame where the QR should sit, plus separate text boxes for name, table number, SKU, or whatever else varies
  • Postprep to convert the sheet into an XLSX with the QR images actually embedded

Step 1: Build the QR URL Column

You do not need a QR tool with a UI. A QR code image can be generated from a plain URL, which means one spreadsheet formula produces a unique code for every row.

In Google Sheets, if column B holds the link each guest or product should point to:

="https://api.qrserver.com/v1/create-qr-code/?size=600x600&qzone=2&data="&ENCODEURL(B2)

Drag it down. Every row now has its own QR image URL.

Two settings matter. size=600x600 gives you enough resolution to print without a fuzzy code (the API defaults to 200x200, which is fine on screen and bad on card stock). qzone=2 adds the quiet zone margin around the code that scanners need to lock on; the QR spec recommends 4 modules, and cramming a code right up against a design edge is a common reason a printed batch scans badly.

A note on ENCODEURL: it exists in Google Sheets and in Excel on Windows, but has historically been missing from some Excel for Mac builds. If it errors, generate the column in Google Sheets and move on.

Step 2: Build the Spreadsheet

Keep it flat. One row per design, one column per thing that changes.

guest_nametableqr_image
Amara Osei4https://api.qrserver.com/v1/create-qr-code/?size=600x600&qzone=2&data=https%3A%2F%2Fyoursite.com%2Fg%2F1001
Ben Halloran4https://api.qrserver.com/v1/create-qr-code/?size=600x600&qzone=2&data=https%3A%2F%2Fyoursite.com%2Fg%2F1002
Priya Raman7https://api.qrserver.com/v1/create-qr-code/?size=600x600&qzone=2&data=https%3A%2F%2Fyoursite.com%2Fg%2F1003

Before you go further, paste two or three of those QR URLs into a browser and scan the result with your phone. Thirty seconds here catches an encoding mistake that would otherwise show up on 180 printed cards.

Step 3: Convert With Postprep

Save the sheet as CSV or XLSX and upload it to Postprep. Point it at the qr_image column. It fetches every QR, embeds each one inside its own cell as a real image object, and hands back an XLSX that Canva can actually read.

Free tier covers 100 rows, no account needed. Same mechanism as bulk embedding product images in Excel from URLs, just pointed at generated codes instead of photos.

Step 4: Set Up the Canva Template

Open your design and add a frame where the QR belongs. Not a plain image, not a shape with the QR pasted on top. A frame from the Elements tab is what Bulk Create can fill.

Size the frame square. A QR stretched into a rectangle will still often scan, but you are burning margin you do not need to burn. Leave white space around it.

Step 5: Generate the Batch

From the editor side panel, open Bulk create, choose Upload data, and select the converted XLSX. Connect guest_name to the name text box, table to the table text box, and qr_image to the frame. Auto-match will usually get this right, and you can drag fields manually if it does not.

Hit Preview and step through several rows, not just the first one. Confirm the QR changes between rows. If every preview shows the same code, the frame is connected to a static image rather than the data field.

Before you click generate, open Advanced options. Set Output to individual designs if you want separate files, and set Name each page using to your name or SKU column so files come out labeled rather than numbered.

A Repeatable Workflow

Once the sheet exists, reruns are cheap. The pattern holds across most QR batch jobs:

Events. Guest list lives in a sheet already. Add a link column, add the formula column, convert, generate badges or place cards. Next event, swap the guest list and rerun. Same logic as the batches in our event planner workflow.

Restaurants and bars. One table tent per table, each QR encoding a table-specific ordering link. Change the menu link column, regenerate, reprint. Fits alongside the restaurant menu and daily special batches.

Product labels and packaging inserts. QR points at the product page, a care guide, or a review request. Export your catalog, append the QR column, convert, generate.

Keep the source sheet as the single source of truth and treat the XLSX as a build artifact you regenerate whenever data changes.

FAQ

Can Canva Bulk Create make unique QR codes on its own?

No. Canva can generate a QR code inside a design, but that code is a static element, not a data field. Making the code vary per row requires the code to arrive as embedded image data in your spreadsheet.

Are these QR codes static or dynamic?

Static. The destination is baked into the code permanently. If the link changes, the printed code is dead. If you need to redirect codes later or track scans, encode a short link you control (from your own domain or a link shortener) so you can repoint the destination without reprinting.

Is the free QR API safe to use for a real print run?

For internal or small runs it is fine and there is no request limit published. It also has no service guarantee. For a large commercial print run, use a paid QR service, or generate the PNGs once, store them somewhere stable, and point Postprep at those URLs instead.

Does the QR data get sent anywhere?

The QR generation service receives whatever you encode, because it has to in order to draw the code. Do not encode anything sensitive. Encode a link that resolves to the private information instead of the information itself.

What resolution should I use for print?

Go higher than you think. 600x600 or 1000x1000 for anything printed. The API accepts up to 1000x1000 for PNG. Vector output is available too, but Bulk Create wants raster images embedded in the sheet, so stick with PNG here.

How many rows can I do at once?

Canva accepts up to 300 rows and 150 columns per Bulk Create selection. Larger jobs get split into batches. Postprep's free tier handles 100 rows per file.

My codes scan on my phone but not on the printed cards. Why?

Usually contrast, size, or quiet zone. Keep the code dark on light, give it a real white margin, and do not print it smaller than about 2cm square for a typical URL. Test-print one card and scan it before running the whole job.

The Short Version

Canva Bulk Create can absolutely put a different QR code on every design. It just cannot make those codes for you, and it will not fetch them from URLs.

Generate a QR image URL per row with a formula, convert the sheet so the codes are embedded as real images rather than text, connect the column to a frame, and generate. The build takes about ten minutes the first time and about two minutes every time after.

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