PostPrep
← Blog
2026-09-11

Google Forms to Canva Bulk Create: How to Turn Photo Submissions Into Designs

Google Forms to Canva Bulk Create: turn photo submissions into batched designs. Why Drive links fail in Canva, and the spreadsheet fix that actually works.

Pete B.
Pete B.
Founder, Postprep

You ran a form. Ninety-three people submitted a photo and their details. The response sheet is sitting right there with a name column, a caption column, and a column full of Google Drive links.

You want ninety-three designs. One per submission, same layout, their photo in the frame.

So you download the sheet as a CSV, open Canva, run Bulk Create, and every image placeholder fills with a line of blue text that reads https://drive.google.com/open?id=1aB2c.... Not the photo. The link, as text, stretched across your design.

This is the single most common dead end for anyone moving from Google Forms to Canva Bulk Create, and it is not your spreadsheet's fault.

Why Canva Bulk Create Stalls on Google Forms Submissions

Bulk Create merges text perfectly. Names, captions, dates, email addresses, whatever your form collected as short answers. Those columns drop into text boxes and behave exactly the way you expect.

Images work differently. Canva's own documentation is explicit: image URLs from cloud photo storage are not supported and will be treated as plain text. To use images, they must be embedded directly into the sheet, and each image must sit inside a single cell rather than floating across several.

That word "embedded" is doing all the work. Canva only reads images that are stored inside the XLSX file itself as DrawingML objects, which is the format Excel uses when you insert a picture into a worksheet. A URL is a string of characters. Canva sees a string of characters and prints it.

Google Forms gives you strings of characters, because that is the only sane thing for a form to do. Your photos are real files in a real Drive folder, and the sheet holds pointers to them. Every one of those pointers is invisible to Bulk Create. The full technical explanation is in why Canva Bulk Create ignores image URLs.

There is a second problem stacked on top, specific to Forms. Files uploaded through a form are private by default. They land in a Drive folder that only you and your form collaborators can open. So even if Canva did read URLs, nothing outside your account could fetch those images until you change the folder's sharing.

The Manual Workaround Most Form Owners Try First

Two things get tried, and both stall.

The first is =IMAGE() in Google Sheets. You point it at the Drive link, expecting a thumbnail. You get a blank cell, because the IMAGE function does not accept drive.google.com URLs. Even when people force a preview to appear, downloading the sheet as XLSX strips it back to a formula, so Canva still receives nothing. That whole trap is covered in why =IMAGE() doesn't work for Canva Bulk Create.

The second is Excel's Insert > Picture, one row at a time. Open the Drive folder, download ninety-three files, open Excel, click into row 2, insert the picture, drag it to fit the cell, repeat. Call it a minute per row as a rough rule of thumb. That is an afternoon, and it breaks the moment the form collects twenty more responses.

People also find the Zapier and Make integrations that connect Google Forms to Canva. Those fire one design per new response as it arrives, which is a different job from batching a closed set of ninety-three submissions you already have.

What You Need Before You Start

  • The Google Sheet linked to your form responses
  • Owner or edit access to the Drive folder holding the uploaded files
  • A Canva template with a frame or grid where the photo goes, and text boxes for everything else
  • A Canva plan that includes Bulk Create, on desktop. See which plan you actually need
  • Postprep, to do the embedding

Step 1: Open the Response Sheet and Find the File Column

In Google Forms, open the Responses tab and click the Sheets icon to open the linked spreadsheet. If you never linked one, use Select destination for responses to create it now.

Your file upload question becomes one column. Each cell holds a link to the uploaded file, and if a respondent uploaded several files to one question, the cell may hold several links separated by commas. Split those out or pick one per row, because Bulk Create expects one image per placeholder.

Delete the columns you do not need. Timestamp and email address rarely belong on the design.

Step 2: Share the Response Folder

This step is not optional and it is the one people skip.

Form attachments are only accessible if the Drive folder holding them is shared. From the Responses tab, find the file upload section and click View folder. Open the folder in Drive, then set its sharing to Anyone with the link with viewer access.

Think about what is in that folder first. Contest entries and product photos are fine. A person's ID document, a child's face collected under a school policy, or anything a respondent submitted expecting privacy is not. If the content is sensitive, download the files and re-host them somewhere you control instead.

One quirk worth knowing: the file upload question is not available at all if your form lives in a Google shared drive. It only works from My Drive. If your File upload option is greyed out, that is usually why.

Step 3: Turn the Drive Links Into Direct Image URLs

A Drive link is a link to a viewer page, not to an image file. It needs converting.

The old uc?export=view&id= pattern that every tutorial used to recommend started returning 403 errors around January 2024 and is no longer dependable. Two patterns are commonly used instead:

https://drive.google.com/thumbnail?id=FILE_ID&sz=w1200
https://lh3.googleusercontent.com/d/FILE_ID=w1200

Test both on two or three of your own files before you build the whole column, because behaviour here has changed more than once and reports vary. The thumbnail endpoint in particular has been reported to rate-limit when a lot of images are requested at once.

To build the column, extract the file ID out of the link and wrap it. If your links look like https://drive.google.com/open?id=FILE_ID, this works in the cell beside your file column:

=IF(C2="","","https://drive.google.com/thumbnail?id="&MID(C2,FIND("id=",C2)+3,100)&"&sz=w1200")

Check the shape of your own links first. Google has used more than one URL format for form uploads, and if yours put the ID somewhere else, the formula needs adjusting. Fill the formula down, then copy the column and paste it back as values.

The mechanics of Drive link conversion are covered in more depth in Google Drive to Canva Bulk Create.

Your sheet should now look like this:

NameCaptionImage URL
Dana RuizBest in show, junior divisionhttps://drive.google.com/thumbnail?id=1aB2c...
Kofi MensahRunner up, open classhttps://drive.google.com/thumbnail?id=1dE4f...
Priya ShahPeople's choicehttps://drive.google.com/thumbnail?id=1gH6i...

Download it as CSV or XLSX: File > Download.

Step 4: Convert With Postprep

Upload that file to postprep.app. Postprep fetches every image at every URL and writes it into the spreadsheet as a properly embedded, single-cell image, then hands you back an XLSX.

The free tier handles 100 rows with no account, which covers most single form collections.

Open the file it returns and you will see actual pictures in the image column rather than blue text. That is the file Canva wants. The same embedding problem, solved by hand, is walked through in how to bulk embed images in Excel from URLs.

Step 5: Bulk Generate in Canva

  1. Open your template. Add a frame or grid from the Elements tab wherever the photo goes. A plain image will not accept a data connection.
  2. Click the page background, select Edit, then Bulk create.
  3. Choose Upload data and select the XLSX from Postprep.
  4. Connect your fields. Auto-match fields will attempt this with AI, or drag each field onto its element by hand.
  5. Preview a few rows to confirm the photos land in the frames.
  6. Under Advanced options, set Individual designs and use Name each page using to name each file after the respondent's name column.
  7. Generate.

Bulk Create caps at 300 rows per run. If your form collected more, see how to batch past 300 rows. For getting clean separate files out the other side, see the download guide.

A Repeatable Workflow for Recurring Forms

Most forms are not one-offs. A photo contest runs every quarter, a staff directory form collects headshots from every new hire, a vendor application collects logos each season. Set it up once and each round costs minutes:

  1. Keep the form live and the response sheet linked
  2. Keep the helper column with the URL formula permanently in the sheet, so it populates itself as responses arrive
  3. Keep the response folder's sharing set once
  4. Each round, filter the sheet to the new rows, download, convert, generate
  5. Keep the Canva template stable so the field mapping stays the same

The template and the formula are the reusable assets. Everything else is a download and two uploads.

Worth saying plainly: if your form does not collect photos, you do not need any of this. A text-only form goes straight from Sheets to Bulk Create with no conversion step at all.

FAQ

Can Canva read Google Drive links directly?

No. Canva's documentation states that image URLs from cloud photo storage are treated as plain text. The image has to be embedded in the spreadsheet.

Do I have to make the response folder public?

Something has to be able to fetch the image. If the files are private, no external tool can read them. If sharing the folder is not acceptable for your content, download the files and re-host them somewhere you control instead.

Can I go straight from the linked Google Sheet without downloading?

Bulk Create accepts CSV and XLSX uploads, and Google Sheets is not in Canva's list of connected data apps, so you download first. The general Sheets route is covered in Google Sheets to Canva Bulk Create.

What if respondents uploaded several photos each?

One image per placeholder. Either split the multiple links into separate columns and add a frame per column in your template, or pick one photo per row.

Why does my file upload question not appear?

The file upload option is not available on forms stored in a Google shared drive. Move the form to My Drive. It can also stop working if the form owner's Drive is full or the form hits its total upload size cap.

What about Jotform or Typeform?

Same problem, different export. See Jotform to Canva Bulk Create and Typeform to Canva Bulk Create.

The Short Version

Google Forms hands you a spreadsheet full of Drive links. Canva Bulk Create reads links as text and prints them on your design. The fix has three parts: share the response folder so the files are readable, convert the Drive links into direct image URLs with one formula, then run the file through Postprep so the images are embedded rather than referenced. Canva takes it from there.

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