PostPrep
← Blog
2026-08-30

How to Use Canva Bulk Create with Your Klaviyo Product Catalog Images

Draft — Post #62 · Target keyword: canva bulk create klaviyo · Meta: Klaviyo's product catalog images won't drop into Canva Bulk Create as plain URLs. Here's the actual workflow to turn your catalog i

Pete B.
Pete B.
Founder, Postprep

Draft — Post #62 · Target keyword: canva bulk create klaviyo · Meta: Klaviyo's product catalog images won't drop into Canva Bulk Create as plain URLs. Here's the actual workflow to turn your catalog into batch-generated graphics.

You've got a Klaviyo catalog synced with hundreds of products, ready to power your email flows. Now marketing wants matching social graphics for the same products: promo tiles for the abandoned cart flow, Instagram posts for the new arrivals segment, a batch of "back in stock" tiles for the win-back campaign. You open Canva Bulk Create, paste in a spreadsheet of product names and image links pulled from your catalog, and hit generate.

The text fills in. The images don't. Every image cell just shows the raw URL as text, sitting inside your design like a broken promise.

This isn't a Klaviyo bug. It's a Canva Bulk Create limitation that catches every marketer trying to go from "catalog data" to "batch-generated graphics" without a manual detour.

Why Canva Bulk Create Stalls for Klaviyo Users

Canva Bulk Create reads your spreadsheet cell by cell. Text goes into text fields. But for image fields, Bulk Create only accepts one thing: an image that's already embedded inside the file using DrawingML, the format Excel uses to physically place a picture inside a cell rather than just linking to one.

A plain URL, even a perfectly valid, publicly accessible one pointing straight at your product photo, reads as a string of characters to Canva. It has no idea it's supposed to be a picture. We go deeper on the mechanics in why Canva Bulk Create ignores image URLs, but the short version: URL in a cell equals text in a cell, every time, regardless of which platform that URL came from.

Klaviyo compounds this because its catalog usually isn't the original source of the image at all. For most Klaviyo accounts, the product catalog is synced automatically from a connected store (Shopify, WooCommerce, Magento, BigCommerce), and Klaviyo just mirrors the store's image_link field into its own catalog. There's no single "export catalog with images" button sitting in the Klaviyo dashboard the way there is a product export in Shopify. If you go looking for one, you'll find CSV export tools scattered across list exports, segment exports, and Catalog Insights analytics cards, but not a straightforward catalog-with-photos download built for this kind of one-off creative batch.

The Manual Workaround Most Klaviyo Teams Try First

The first instinct is usually Excel's Insert > Pictures menu: select every product photo one at a time, manually drop it into the matching row, resize it to fit the cell, repeat for every product in the batch. For 15 products this is tedious. For 150, it's most of an afternoon, and one misaligned row means the wrong photo ends up on the wrong product.

The second instinct, especially for anyone comfortable with formulas, is Google Sheets' =IMAGE() function. It looks like the fix: paste a URL, wrap it in the formula, and a thumbnail appears in the cell. It even looks right when you export to CSV or XLSX. The problem is that =IMAGE() doesn't embed a picture at all. It's a live formula that fetches and renders the image only inside Google Sheets itself. The moment the file leaves Sheets as CSV or XLSX, the formula either breaks or exports as plain text. We cover exactly why in why =IMAGE() doesn't work for Canva Bulk Create, including the Apps Script workaround for teams who want to build their own fix.

Both workarounds solve the same problem the wrong way: manually, and one row at a time. Neither scales to a real Klaviyo catalog with hundreds of SKUs.

What You Need Before You Start

Before you build the spreadsheet, get two things sorted:

A Canva Bulk Create template with image placeholders matched to your field names (product photo, product name, price, and whatever else your graphic needs), on a Canva plan that includes Bulk Create. It's gated behind Pro, Teams, Business, Education, or Nonprofits (Teams is closed to new signups as of this writing) — worth checking your plan before you build the batch if you're not sure.

A spreadsheet with two required columns at minimum: a public image URL for each product, and whatever text fields your template needs (name, price, collection tag). Where that image URL comes from depends on how your Klaviyo catalog is set up.

Where to Actually Get the Image URLs

This is the one step that's genuinely different for Klaviyo compared to a platform like Shopify. There are two paths, and which one applies depends on your setup.

If your Klaviyo catalog syncs from a connected store (the common case). The image URLs living in Klaviyo's catalog are the same ones your store already exposes in its own product export. Skip Klaviyo entirely and export directly from the source: our Shopify workflow and WooCommerce workflow both walk through pulling a clean image-URL export straight from the store. You'll get the same photos with less friction, since the store's native export is built for this and Klaviyo's isn't.

If you're running a custom catalog feed (no connected store, or a platform outside Shopify/WooCommerce). Klaviyo's own documentation for custom catalog feeds requires an image_link field as one of the mandatory properties for every catalog item, and the Catalogs API exposes a matching image_full_url field on each product when you pull data programmatically. If someone on your team (or your dev) already has API access set up for catalog sync, pulling id, title, and image_full_url for a segment of products via the Catalogs API is the most direct route to a clean spreadsheet. If nobody has API access, this path isn't realistic for a one-off marketing batch — fall back to whatever the original photo source was (your product photography folder, your DAM, or the vendor who supplied the images).

Building the Spreadsheet

Once you have your image URLs, keep the sheet simple:

Product NameImage URLPriceCollection
Ceramic Mug — Sandhttps://cdn.example.com/mug-sand.jpg$24New Arrivals
Linen Throw — Oathttps://cdn.example.com/throw-oat.jpg$58New Arrivals
Canvas Tote — Naturalhttps://cdn.example.com/tote-natural.jpg$32Back in Stock

Column headers should match your Canva template's field names exactly, since Bulk Create maps by name.

Convert With Postprep

This is the step that actually solves the embedding problem. Upload your CSV or XLSX to Postprep, and it converts every image URL into a real DrawingML-embedded picture inside the file, the same format Excel produces when you manually insert a photo, just automated across every row at once. The free tier handles up to 100 rows with no account required, which covers most single-campaign batches. Larger catalogs need the paid tier.

Bulk Generate in Canva

Upload the converted file to Canva Bulk Create, map your columns to your template's fields, and generate. Every design comes out with the actual product photo in place, not a URL, ready to review and export as a batch.

A Repeatable Workflow for Marketing Ops

Once this is set up, it's a fast loop to rerun for every campaign: pull this week's segment or new-arrivals list, grab image URLs from the connected store (or the API, if that's your setup), drop them into the same spreadsheet template, run it through Postprep, generate in Canva. A batch that used to eat an afternoon of manual image-dropping runs in minutes once the template and column headers are locked in.

FAQ

Does Klaviyo have a built-in way to export my catalog with images?

Not as a single "export catalog" button in the standard dashboard. Klaviyo's exportable views are mostly analytics and list/segment exports. For most accounts, the catalog is synced from a connected store, so the real export happens at the store level, not inside Klaviyo.

Can I just use the image URLs from my Klaviyo email templates?

You can, but if your catalog syncs from a store, you'll get the same URLs faster by exporting straight from the store's own product export, since that's the original source.

What if I use a custom catalog feed instead of a connected store?

Use the Catalogs API's image_full_url field if you or your team has API access set up. Without API access, there's no simple dashboard export for this — you'll need to go back to wherever the product photos originally came from.

Does the =IMAGE() formula work if I paste Klaviyo's catalog data into Google Sheets?

No. It renders a preview inside Sheets only. The moment you export to CSV or XLSX for Canva, the image is gone. See our full breakdown for why.

Do I need a Canva paid plan for this to work?

Bulk Create requires Canva Pro, Teams, Business, Education, or Nonprofits. Check canva.com/pricing for current plan details, since pricing and plan names shift.

Will this work for a full product catalog, or just a marketing segment?

Either. The workflow is the same whether you're batching 15 products for a single campaign or several hundred for a full catalog refresh — just make sure your image URLs are collected consistently across every row before converting.

The Short Version

Klaviyo's catalog doesn't hand you a ready-made image export, because for most accounts it's just mirroring your connected store. Get the URLs from the store directly if you can, or from the Catalogs API if you're running a custom feed. Either way, once you have a spreadsheet of image URLs and product data, Canva Bulk Create still won't read the URLs as pictures until they're embedded. That's the one step Postprep automates.

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