canva-bulk-create
Canva Bulk Design Creation
Create one Canva design per row of data by autofilling a brand template with data tags.
Workflow
Step 1: Get the Data
Accept data in any form the user provides and extract a list of rows with named columns:
- Uploaded file: read the file and extract headers and rows
- Pasted data: parse markdown tables, tab-separated values, or JSON arrays directly from the chat
- URL: fetch the resource and parse the response as tabular data
If no data has been provided, ask the user to share it in whatever format is convenient for them.
Once parsed, show the user:
- Column headers found
- Number of rows (= number of designs that will be created)
- A preview of the first few rows
Step 2: Select the Brand Template
If the user hasn't specified a template, search for autofill-capable ones:
Canva:search-brand-templates dataset=non_empty
Show the results and ask the user to pick one. If they already named or described a template, search with that query.
Step 3: Inspect the Template Schema
Canva:get-brand-template-dataset template_id=<selected_id>
This returns the field names and types (text, image, chart) that the template expects.
Step 4: Map CSV Columns to Template Fields
Present a mapping table to the user:
| Template Field | Type | Matched CSV Column | Notes |
|---|---|---|---|
product_name |
text | Product Name |
auto-matched |
price |
text | Price |
auto-matched |
hero_image |
image | (none) | no match — image fields need asset IDs |
Matching rules:
- Do case-insensitive, fuzzy matching between CSV headers and template field names
- Text fields can be filled directly from CSV string values
- Image fields require a Canva asset ID — see Image Field Handling below
- Chart fields require structured data — treat as advanced and ask the user for clarification
Confirm the mapping with the user before proceeding, especially if there are unmapped fields or ambiguous matches.
Image Field Handling
There are two ways a CSV can supply images for image-type template fields:
Pattern A — CSV has a Canva asset ID column (e.g. image_asset_id):
Use the asset ID value directly in the autofill-design call:
{ "image": { "type": "image", "asset_id": "<value from CSV column>" } }
Pattern B — CSV has an image URL column (e.g. image_url):
URLs cannot be passed directly to autofill-design. Upload each URL to Canva first using Canva:upload-asset-from-url, capture the returned asset ID, then use it in the autofill call. Do the upload immediately before creating that row's design so failures stay localised.
Pattern C — No image column in CSV:
Ask the user whether to skip the image field (template default image stays) or abort. Skipping is safe — just omit the image key from the data payload entirely.
Step 5: Bulk Create — One Design per Row
Loop through every CSV row and call Canva:autofill-design for each one. Call them sequentially, not all at once — the API may have rate limits and sequential calls are easier to debug.
For each row:
- If the row has an image URL column (Pattern B), first call
Canva:upload-asset-from-urlto get a Canva asset ID. - Build the
datapayload from the confirmed field mapping:
{
"text_field_name": { "type": "text", "text": "<value from CSV>" },
"image_field_name": { "type": "image", "asset_id": "<asset ID>" }
}
- Call
Canva:autofill-designwith the template ID, data payload, and a descriptive title using the row number or a meaningful column value (e.g."Bulk Design - Row 3 - <identifier>").
Track results as you go:
Row 1 / 50: Created — <design_url>
Row 2 / 50: Created — <design_url>
Row 3 / 50: Failed — <error>
Step 6: Report Results
After all rows are processed, summarise:
- Total rows attempted
- Successes (with links)
- Failures (with row number and reason)
Offer to save a summary CSV with columns: row, status, design_url, error.
Notes
- Autofill requires a Canva Enterprise plan.
- For large CSVs (50+ rows), warn the user upfront that this will make N API calls and may take a while. Offer to do a test run on the first 3 rows before proceeding with the full batch.
- If some rows fail, continue with the rest — don't abort the whole batch.
- Skip rows where all mapped fields are empty and warn the user about them.
- If no CSV column matches a required template field, ask the user to confirm which column to use or whether to skip that field.
- Template field names are case-sensitive in the API — use the exact keys from
get-brand-template-dataset. - There is no "undo bulk create" — warn the user before starting large runs.
- Designs created this way are full Canva designs the user can further edit in their account.
More from canva-sdks/canva-claude-skills
canva-branded-presentation
Create on-brand Canva presentations from an outline or brief. Use when the user asks to create a branded presentation, make an on-brand deck, turn an outline into slides, or generate a presentation from a brief. Input can be text directly in the message, a Canva design ID, a reference to a Canva doc by name, or a Canva design link (e.g., https://www.canva.com/design/...).
175canva-translate-design
Translate all text in a Canva design to another language, creating a translated copy. Faster than manually copying and editing each text box in Canva's editor. Use when users say "translate my design to [language]", "make a Spanish/French/etc version", or "localize my Canva design".
50canva-resize-for-social-media
Resize a Canva design into multiple social media formats (Facebook post, Facebook story, Instagram post, Instagram story, LinkedIn post) and export all versions as PNGs. Use this skill when users want to resize Canva designs specifically for multiple social media platforms in one operation, rather than resizing to a single format manually.
40canva-implement-feedback
Implement reviewer feedback on a Canva design. Reads all comment threads, synthesises what reviewers want, makes the clear-cut changes directly, and flags anything that needs a human decision. Use when the user asks to "implement feedback on my deck", "address comments on a design", "apply review feedback", "fix the comments on my presentation", or "implement the feedback".
28canva-classroom-helper
Turn a lesson plan into a teaching slide deck in Canva. Use when the user asks to build classroom slides from a lesson plan, convert a lesson plan into a presentation, make a teaching deck, create school slides from an outline, or generate a lesson deck for students. Input can be a lesson plan pasted in the message, a Canva design ID, a Canva doc or design by name, or a Canva design link (e.g., https://www.canva.com/design/...).
19canva-presentation-time-fitting
Fit a Canva presentation to a target speaking duration by generating or rewriting presenter notes only (visible slide text is not edited). Use when users say "make this a 10-minute presentation", "split time evenly across slides", "generate speaker notes for a 15-minute talk", "fit my deck to [duration]", or "how long per slide for a 20-minute slot".
13