PostPrep
← Blog
2026-08-30

Is There a Canva Bulk Create API? What Exists, What Doesn't, and What to Use Instead

Draft — Post #70 · Target keyword: canva bulk create api · Meta: There is no Canva Bulk Create API. Here is what the Connect API actually does, why it needs Enterprise, and the faster fix for image UR

Pete B.
Pete B.
Founder, Postprep

Draft — Post #70 · Target keyword: canva bulk create api · Meta: There is no Canva Bulk Create API. Here is what the Connect API actually does, why it needs Enterprise, and the faster fix for image URLs in your spreadsheet.

You have 400 product rows in Airtable, a Canva template that already looks right, and someone asking whether this can just run on a schedule. So you searched for a Canva Bulk Create API, expecting an endpoint you POST a JSON payload to.

You did not find one. You found the Canva Connect APIs, a page about Data Autofill, some Zapier threads that go nowhere useful, and tool vendors telling you to switch products.

Here is the honest picture. There is no Canva Bulk Create API. Bulk Create is a UI feature: click into a template, upload a spreadsheet, map columns, generate. Canva does have APIs, but they do a different job under different conditions. This post covers what each one actually does, why the thing blocking you is probably not the lack of an API, and the workflow that gets you to batched designs today.

What Actually Exists in Canva's API Lineup

Three separate things get confused with each other. They are not interchangeable.

Bulk Create (the feature). Lives in the Canva editor under Apps. Takes a CSV or XLSX upload, merges each row into a template, generates one page per row. No endpoint, no webhook, no scheduled trigger. This is what almost everyone searching "canva bulk create api" is trying to automate.

Canva Connect APIs (the REST API). A real HTTP API at api.canva.com/rest/v1. It handles assets, folders, exports, brand templates, and a Design Autofill job endpoint. Autofill is the closest thing to programmatic bulk generation Canva offers, but it fills one brand template per job, not 400 rows in one call. You loop it yourself.

Canva Apps SDK (bulkCreate.launch). A method for developers building apps that run inside Canva. It opens the Bulk Create panel with your app supplying the data connector. You cannot call it from your own server, only from a published Canva app invoked by the design editor, and it still ends with a human clicking Generate.

So the option that sounds like the answer is the Connect API autofill endpoint. Two things usually kill it.

First, access. Canva's docs state that the Autofill APIs require your integration to act on behalf of a user who is a member of a Canva Enterprise organization. Free, Pro, and Teams do not have it. Enterprise is sales-led custom pricing aimed at larger teams. If you are an Etsy seller, a solo agency, or a five-person marketing team, that door is closed. (Plan eligibility changes, so check the current Connect API docs before ruling it in or out.)

Second, images. This is the part that matters even if you do have Enterprise.

Why Canva Stalls on Your Images, API or Not

The autofill endpoint does not accept an image URL. Look at the request body for a design autofill job and image fields take an asset_id, not a link:

{
  "product_photo": {
    "type": "image",
    "asset_id": "Msd59349ff"
  }
}

That asset ID comes from uploading the image into the user's Canva content library first, through a separate asset upload job, then polling until it finishes. So the "API" path for 400 product images is 400 asset upload jobs, 400 status polls, 400 autofill jobs, then 400 export jobs. Rate limits apply at each step.

The same limitation breaks the non-API path. Bulk Create merges text columns without complaint: names, prices, dates, SKUs all come through. Image URLs are a different story. Canva only reads images physically embedded inside the XLSX as binary data in a format called DrawingML. A URL sitting in a cell is just a text string, so Canva either prints the raw link into your design or leaves the image slot blank. We covered the technical reason in Why Canva Bulk Create Ignores Image URLs.

That reframes the problem. Most people hunting for a Canva Bulk Create API are not blocked by the absence of an API. They are blocked because their images will not render, and automation felt like the way around it. Fix the file and the manual flow takes about two minutes per batch.

The Manual Workaround Most People Try First

Two hacks show up in every forum thread on this.

The first is Excel's Insert > Picture > Place in Cell. Download every image to disk, name each file to match its row, click into each cell, insert, repeat. It does produce a working XLSX with DrawingML images inside. It also takes a couple of hours at 400 rows and breaks the moment your catalog changes.

The second is the =IMAGE() formula in Google Sheets. It looks like it embeds the image because you can see it rendered in the cell. It does not. =IMAGE() is a live cell reference resolved at display time, so when Canva parses the exported file there is no image data to find. Full writeup: Why =IMAGE() Doesn't Work for Canva Bulk Create.

Neither hack is any more automatable than the thing you were trying to automate.

What You Need Before You Start

A Canva template with real placeholders. Text fields for every variable, plus an actual image element for the photo or logo. No image element means Bulk Create has nowhere to put the picture, no matter how clean your file is. New to the feature? Start with the Canva Bulk Create tutorial.

One spreadsheet, one row per output design. Text columns for every variable, plus a dedicated column holding a direct image URL. Direct means the URL ends in the file itself and returns the image in a private browser window. Drive preview pages, login-gated CDN paths, and share links that render an HTML viewer will not work.

That is it. No developer account, no OAuth app, no Enterprise contract.

Step 1: Collect Your Image URLs

Wherever your data lives, the export usually contains URLs already. Shopify and WooCommerce product exports include image columns. Airtable and Notion attachment fields expose file URLs. Google Drive links need converting to the uc?id=FILEID&export=download form. Dropbox links need ?dl=0 swapped for ?raw=1.

Test three or four in a private window before building the whole sheet. A URL that only loads while you are signed in fails silently later.

Step 2: Build the Spreadsheet

One row per design. Keep it flat and boring.

product_namepricebadgeimage_url
Linen Tote, Sand$48Newhttps://cdn.shop.com/.../tote-sand.jpg
Linen Tote, Slate$48Newhttps://cdn.shop.com/.../tote-slate.jpg
Canvas Weekender$92Restockhttps://cdn.shop.com/.../weekender.jpg

Column names do not have to match your Canva placeholders exactly since you map them in the Bulk Create panel, but matching names lets Canva auto-connect in one click. For a deeper look at which column formats survive the trip, see Canva Bulk Create CSV Image Column: What Works and What Breaks.

Step 3: Convert the File With Postprep

Upload your CSV or XLSX to postprep.app. It reads the image URL column, downloads each image, and writes them into the XLSX as DrawingML-embedded binary data, the exact format Canva's parser looks for. The file looks nearly identical in Excel and behaves completely differently in Canva.

Free tier handles 100 rows with no account. A 400-row catalog needs splitting or a paid tier.

Step 4: Bulk Generate in Canva

Open your template, go to Apps, choose Bulk Create, upload the converted XLSX. Map each column to its placeholder, connect the image column to the image element, hit Generate. One page per row, images rendered.

A Repeatable Workflow That Doesn't Need an API

For most teams the honest automation ceiling looks like this, and it is closer to hands-off than it sounds.

Keep the source of truth where it already lives: Airtable, a Shopify export, a shared Google Sheet. Set up a saved view or export that always produces the same column layout. When you need a batch, export, run it through Postprep, upload to Canva, generate, download the ZIP. Once template and column mapping are settled, the loop is a few minutes.

The part you cannot remove is the Canva upload click. Nobody can, without Enterprise. Tools promising fully scheduled Canva generation are either using the Enterprise Connect API on your behalf or rendering designs outside Canva on their own template engine. Both are legitimate, but know which one you are buying. We compared one directly in Postprep vs. Pixel Sheet.

When You Actually Do Need the Connect API

There are cases where it is the right call. You are building a product where customers generate branded assets server-side without anyone opening Canva. You are in an organization that already has Enterprise and a design ops team maintaining brand templates. You need designs generated on an event trigger, like a new CRM record, rather than on a batch cadence.

In those cases, read the Connect API autofill guide, budget engineering time for the asset upload and polling loop, and confirm plan eligibility with Canva directly. If none of that describes you, the API is a detour.

FAQ

Is there an official Canva Bulk Create API endpoint?

No. Bulk Create is a UI-only feature. The closest programmatic equivalent is the Connect API's design autofill job, which is a different feature with different requirements.

Can I use Zapier or Make to trigger Bulk Create?

Not the feature itself. Canva's Zapier and Make integrations cover things like exporting designs and creating from brand templates, and anything touching autofill inherits the same plan restrictions. The CSV upload step stays manual.

Does the Connect API autofill accept image URLs?

No. Image fields take an asset_id. Upload the image to the user's Canva content library first, from a file or a URL via the asset upload job endpoints, then reference the returned asset ID.

Do I need Canva Pro for Bulk Create?

It has generally been a paid-plan feature rather than a free-plan one, but Canva moves features between tiers. Check the current pricing page for your region rather than trusting any blog post on this, including this one.

How many rows can Bulk Create handle at once?

The commonly cited cap is 300 rows per run. A column limit is also cited, but the number varies between sources, so treat it as unverified and chunk large jobs.

Will Postprep automate the whole thing end to end?

No, and it does not claim to. Postprep fixes the file so Canva can read your images. The Canva upload and generate steps stay manual unless you are on Enterprise with the Connect API. If you truly need server-side generation on a trigger, a tool with its own rendering engine fits better, at the cost of rebuilding your templates outside Canva.

The Short Version

There is no Canva Bulk Create API. The Connect API's autofill endpoint is the only programmatic path: it requires Canva Enterprise, fills one template per job, and takes asset IDs rather than image URLs. The Apps SDK method opens the Bulk Create panel from inside a Canva app and still needs a human to click Generate.

For nearly everyone searching this, the real blocker is not automation. It is that Canva ignores image URLs because it only reads DrawingML-embedded images. Convert the file once and the manual workflow gets fast enough that the API stops mattering.

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