PostPrep
← Blog
2026-08-30

Webflow to Canva Bulk Create: How to Turn Your CMS Items Into Graphics (With Images)

Draft — Post #25 · Target keyword: webflow to canva bulk create · Meta: Export Webflow CMS items with image URLs, then bulk create Canva graphics that actually show the images. The full Webflow to Can

Pete B.
Pete B.
Founder, Postprep

Draft — Post #25 · Target keyword: webflow to canva bulk create · Meta: Export Webflow CMS items with image URLs, then bulk create Canva graphics that actually show the images. The full Webflow to Canva Bulk Create workflow.

You run a Webflow site with a CMS Collection full of content. Blog posts, products, case studies, team members, portfolio projects, whatever your collection holds. Every item needs a social card, a Pinterest pin, or an Open Graph image, and each one is the same design repeated with a different title, category, and photo.

Canva Bulk Create is built for exactly this. You export your collection to a CSV, drop in the image URLs, upload, and let Canva merge everything into finished graphics. Then you hit the wall every Webflow user hits: the text columns merge fine, but the image column comes back as raw URL strings printed across your template, or just blank frames.

This post covers the full Webflow to Canva Bulk Create workflow, the one step Canva will not do for you, and a repeatable rhythm for keeping every CMS item's graphics current without rebuilding them by hand.

Why Canva Bulk Create Stalls for Webflow Sites

Webflow stores your content as structured data inside a CMS Collection. Each item has a name, slug, rich text body, reference fields, and one or more image fields. When you export a Collection to CSV, Webflow writes every field out as text, and image fields become Webflow-hosted URLs that look like https://cdn.prod.website-files.com/yoursite/abc123_cover.jpg.

Canva Bulk Create reads the text columns without complaint. Item names, categories, dates, author, read-time, price, all of it merges into your template cleanly.

The image column is where it breaks. Canva Bulk Create only accepts images that are physically embedded inside the XLSX file as binary data, in a format called DrawingML. A URL is just text to Canva. It either prints that long website-files path as a literal string inside your card, or it leaves the image frame empty. The technical reason is covered in Why Canva Bulk Create Ignores Image URLs.

For a Webflow owner this is the gap between a 20-minute batch job and an afternoon of copy-paste. A 200-item Collection export with image URLs will not render a single image in Canva unless those images are embedded in the XLSX before you upload it.

The Manual Workaround Most Webflow Users Try First

The usual hack is the Excel insert trick. Open the export, switch to Excel, click an image cell, use Insert > Picture > Place in Cell, point to the downloaded file, and repeat for every row. It works in theory, but only if you have already downloaded all 200 images, named them to match each row, and lined them up in the right order. Webflow stores its assets behind hashed CDN filenames, so a bulk download leaves you with a folder of abc123_cover.jpg files that match nothing in your sheet. That is a rename marathon before you even open Canva. We broke down why that hack falls apart at scale in How to Bulk Embed Images in Excel From URLs.

The other dead end is the =IMAGE() formula in Google Sheets. It looks like it embeds the image, and it renders fine inside the browser, so people assume Canva will read it too. It will not. =IMAGE() is a live cell reference, not embedded image data, so Canva sees nothing when it parses the file. The full explanation is in Why =IMAGE() Doesn't Work for Canva Bulk Create.

What You Need Before You Start

Two things.

A Canva template per graphic type. Most Webflow sites cycle through a small set of recurring designs: a blog or Open Graph card at 1200x630, a Pinterest pin with the item title and cover image, and maybe a square Instagram tile. Each template needs Bulk Create placeholders for the text variables like {{name}}, {{category}}, and {{author}}, plus one image element for the cover photo.

A clean export of your Collection. One row per item. Columns for every text field you want on the graphic, plus one column holding the direct image URL. If you run a Webflow Ecommerce store and you are creating product graphics rather than blog cards, the product export is slightly different, covered in Step 1.

Step 1: Export Your Webflow CMS Collection With Image URLs

Webflow has a built-in CSV export, so you do not need a plugin.

For a standard CMS Collection, open the CMS panel in the Designer or your project dashboard, select the Collection you want, and use the Export option. Webflow writes one row per item, with every field as a column. Image fields export as Webflow-hosted URLs.

For a Webflow Ecommerce store, the product export lives under your Ecommerce settings. It exports products and variants, with the product image field as a URL. Use this one if you are building product cards rather than blog graphics.

Either way, the result is a CSV with one row per item and a column of image URLs. That URL column is the one Canva cannot read on its own.

One quirk worth knowing: if an image field holds multiple images (a gallery), Webflow may export several URLs in one cell or split them across columns. For Bulk Create you want one image per row, so pick the single cover or main image column and ignore the gallery fields.

Step 2: Build the Spreadsheet

Trim the export down to the columns you actually want on the graphic. A typical Webflow bulk sheet looks like this.

namecategoryauthorcover_image
12 Easy Weeknight DinnersRecipesJamie L.https://cdn.prod.website-files.com/site/dinners.jpg
How to Start a GardenHomePriya R.https://cdn.prod.website-files.com/site/garden.jpg
Best Budget Cameras 2026GearMarco T.https://cdn.prod.website-files.com/site/cameras.jpg

Save it as CSV or XLSX. Column names do not have to match Canva exactly, because you will map them in the Bulk Create panel, but matching names lets Canva auto-connect everything in one click.

One thing to confirm: the image URLs need to be publicly reachable. Webflow CDN URLs are public by default, so a URL pasted into a private browser window should load the image directly. The one gotcha is that these URLs are tied to the site you exported from. If you delete or unpublish that Webflow project later, the links break, so run the conversion while the site is live.

Step 3: Convert the Spreadsheet With Postprep

This is the step Canva refuses to do.

Go to postprep.app, upload your CSV, and pick the column that holds the image URLs. Postprep fetches each URL, downloads the image, and embeds it inside the XLSX as DrawingML, the binary format Canva actually reads. Every other column passes through untouched.

A 200-row sheet finishes in about a minute. The free tier covers 100 rows with no account required, which is enough to convert a mid-size Collection or test the workflow on your most-trafficked items first.

Step 4: Bulk Generate in Canva

Open your card or pin template in Canva. Bulk Create runs on paid plans, and it is a desktop feature. (Canva changes plan eligibility and naming from time to time, so confirm Bulk Create is available on your current plan before you start. Flagging that rather than stating a guarantee.)

In the left panel click Apps, then Bulk Create. Click Upload data and choose your converted XLSX. Drag each column onto its matching placeholder, or use Auto-connect if your column names already line up.

Click Generate designs. Canva produces one finished graphic per row with the cover image, title, and category already merged. Download as a ZIP.

If you run three template types off the same export, an Open Graph card, a Pinterest pin, and an Instagram tile, take the same XLSX into each template and run Bulk Create three times. One export, three full sets of branded graphics.

A Realistic Webflow Workflow

Here is the rhythm that keeps a Webflow site's graphics current without a redesign marathon.

The back-catalog pass. Export your full Collection once. Run it through Postprep. Generate an Open Graph card and a Pinterest pin for every existing item in two bulk jobs. This is the big one-time win: a whole Collection gets fresh, on-brand graphics in an afternoon instead of a quarter.

The weekly add. Each time you publish new CMS items, re-export the Collection, convert the new rows with Postprep, and bulk generate. Two or three new items take about five minutes end to end.

The seasonal refresh. When you rebrand a template or run a seasonal pin design, re-export the items you want to refresh, run the same sheet through the new template, and regenerate. The data never changes, only the design.

A full Collection of 200 items runs about 30 minutes of spreadsheet and Postprep time plus 15 minutes per Canva template. Done by hand, that same Collection is days of work.

The same approach works for any other source. If you also publish on WordPress, the sibling walkthrough is in WordPress to Canva Bulk Create, and the Squarespace version is in How to Use Canva Bulk Create with Your Squarespace Product Images.

Frequently Asked Questions

Do I even need images for every graphic? Some of my cards are text-only.

If your design is purely typographic, you do not need this workflow at all. Plain Canva Bulk Create handles text-only merges fine. Postprep only matters when your template has an image frame that needs to pull a different cover image per row.

My Collection has a gallery field with several images per item. Which one do I use?

Bulk Create wants one image per row, so pick the single cover or main image field and map only that column. Ignore the multi-image gallery fields for the bulk job.

My cover images are different shapes. Will they fit my template?

Postprep embeds whatever the URL returns at its original aspect ratio. Inside Canva, the image element crops to fit your frame. For consistent results, set your Canva image frame to a fixed crop, or standardize image dimensions in Webflow before exporting.

Some items have no cover image set.

Leave the URL cell blank for those rows. Postprep skips the embed for empty cells, and Canva leaves the placeholder visible in the generated design. Fill in the image later and re-run just those rows.

I run Webflow Ecommerce. Is the product export different?

Yes. Product images come out of the Ecommerce product export, not the standard CMS Collection export. The image field still exports as a URL, so the rest of the workflow is identical once you have the CSV.

Will my Webflow CDN URLs keep working after export?

As long as the site stays published, the website-files.com URLs resolve to the actual image files and Postprep can fetch them. If you delete or unpublish the project, those assets go away and the links break, so convert while the site is live.

The Short Version

Canva Bulk Create can turn your entire Webflow Collection into Open Graph cards, pins, and social tiles in a handful of batch jobs. The one thing it will not do is read the image URLs in your export and embed them. That is the step Postprep handles.

Export your Collection with image URLs. Convert with Postprep. Bulk generate in Canva. Your whole catalog gets fresh graphics without rebuilding a single one by hand.


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