How Travel Agents Can Use Canva Bulk Create for Destination Cards, Package Deals, and Social Promos
Draft — Post #24 · Target keyword: canva bulk create travel agents · Meta: Build destination cards, package deal graphics, and a month of social promos from one spreadsheet. The Canva Bulk Create work

Draft — Post #24 · Target keyword: canva bulk create travel agents · Meta: Build destination cards, package deal graphics, and a month of social promos from one spreadsheet. The Canva Bulk Create workflow built for travel agents.
You have 40 destinations to promote this quarter. Each one needs a social post with a hero photo, the package price, the travel window, and your branding. On top of that there are 15 cruise deals, a dozen all-inclusive resort cards, and the weekly "deal of the day" graphics your clients have come to expect.
Every one of those is the same layout with a different photo, headline, and price. You already know Canva Bulk Create is the tool for this. You also know what happens the first time you hand it a spreadsheet full of destination photo URLs: Canva ignores the URLs and ships you a stack of designs with blank image slots.
This post walks through the full Canva Bulk Create travel agents workflow, the one step Canva will not do on its own, and a realistic monthly rhythm for a working travel agency.
Why Canva Bulk Create Stalls for Travel Agents
Travel marketing runs on photos. Beach resorts, cruise ships, city skylines, safari lodges, ski chalets. Every destination card, package promo, and itinerary teaser leans on a strong image. Those photos usually live as URLs somewhere already: a supplier's media portal, a resort's press kit, a Dropbox folder of stock you bought, your own brand library.
Canva Bulk Create handles the text side without complaint. Drop in columns of destination names, prices, dates, and trip lengths and Canva merges them in cleanly.
Image URLs are a different story. Canva's 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 the URL as a literal string inside your template or leaves the image slot empty. We covered the technical reason in Why Canva Bulk Create Ignores Image URLs.
For a travel agent this is the whole game. A list of 40 destinations with photo URLs will not render unless those photos are embedded inside the XLSX before you upload it to Canva. And a destination card without the destination photo is just a price tag.
The Manual Workaround Most Travel Agents Try First
The standard hack goes like this. Open the spreadsheet, switch to Excel, click each image cell, use Insert > Picture > Place in Cell, point to the file on disk, repeat 40 times. That works in theory if every photo is already downloaded to your laptop, cropped to the right size, named to match the row, and sitting in order.
In practice you are pulling resort photos from one supplier portal, cruise images from another, and a few hero shots from a stock site you subscribe to. By the time you have all 40 photos downloaded, renamed, and inserted by hand, you could have built the posts one at a time and saved yourself the spreadsheet.
The other hack is the =IMAGE() formula in Google Sheets. We covered why that one fails for Bulk Create in Why =IMAGE() Doesn't Work for Canva Bulk Create. Short version: =IMAGE() is a live cell reference, not embedded image data. Canva sees nothing when it parses the file.
Worth saying plainly: some travel content is text-only. A "5 reasons to book early" carousel or a plain quote card needs no photo column at all. For those, Bulk Create works straight from your spreadsheet with no conversion step. The image problem only shows up when each design needs its own destination photo.
What You Need Before You Start
Two things have to be in place.
A Canva template per content type. Most agencies cycle through a small set of recurring designs. The common ones look like this.
A destination spotlight card with a hero photo, destination name, starting price, and travel window. A package deal graphic with a resort photo, package name, inclusions, and price. A cruise card with a ship photo, line, sailing dates, and cabin price. A "deal of the day" post with one strong image, a headline, and an expiry. A testimonial or review card with a client photo and a quote.
Each template needs Canva Bulk Create placeholders for the text variables like {{destination}}, {{price}}, {{travel_dates}}, and an image element for the hero photo.
A single source-of-truth spreadsheet. One row per output design. Columns for every text field plus one column with the direct image URL.
If you already track deals in a Google Sheet, Airtable, or a supplier export, you are most of the way there. The only column you might need to add is a direct URL to the destination photo. We have written about clean spreadsheet prep for verticals like Shopify stores and product catalogs, and the same rules apply: one row per output, one column per data field, image URLs in their own column.
Step 1: Collect Image URLs From Wherever They Live
This is the step that costs most agencies the most time. Each source exposes URLs differently.
Supplier and resort media portals. Most suppliers (resorts, cruise lines, tour operators) give you a media library. Right-click the photo and copy image address. The URL usually ends in .jpg or .png, which is what you want.
Google Drive or Shared Drive. Convert the share link to a direct image URL using the format https://drive.google.com/uc?id=FILEID&export=download, or move the photo into a public folder.
Dropbox. Take the share link and change the trailing ?dl=0 to ?raw=1. That returns the raw image instead of the preview page.
Stock photo subscriptions. If you license images from a stock site, download them to a folder you can host, or use the direct CDN link if the license allows hotlinking. Check your license before linking directly.
Your own brand library. If you store standard photos on your agency website or in an S3 bucket, those URLs already work.
Drop every URL into the spreadsheet under one column. Name it image_url or photo or hero — pick a convention and stick with it.
A note on licensing: make sure you actually have the rights to use each destination photo in paid or organic marketing. Supplier-provided photos usually come with marketing rights, but random images pulled off the web do not. Use photos you own or are licensed to use.
Step 2: Build the Travel Deals Spreadsheet
A typical travel agent's bulk sheet looks like this.
| destination | package_name | price | travel_dates | nights | hero |
| Cancun, Mexico | All-Inclusive Beach Escape | from $1,199 | Sep 12-19 | 7 | https://cdn.agency.com/.../cancun.jpg |
| Santorini, Greece | Island Hopper | from $2,450 | Oct 3-12 | 9 | https://cdn.agency.com/.../santorini.jpg |
| Anchorage, Alaska | 7-Night Glacier Cruise | from $1,890 | Aug 24-31 | 7 | https://cdn.agency.com/.../alaska.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 them in one click.
Step 3: Convert the Spreadsheet With Postprep
This is the conversion 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 photo, and embeds it inside the XLSX as DrawingML — the binary format Canva actually reads. Every other column passes through unchanged.
A 40-row sheet takes a few seconds. The free tier covers 100 rows with no account required, which is more than enough for a full quarter of destination cards.
Step 4: Bulk Generate in Canva
Open your destination card template in Canva. Make sure you are on a plan that supports Bulk Create. Based on Canva's current documentation this is a paid feature (Pro, Teams, and similar plans) and runs on desktop. Plan names and eligibility change, so confirm against your own Canva account before you build a workflow around it.
In the left panel click Apps, then Bulk Create. Click Upload data and pick your converted XLSX. Drag each column onto its matching placeholder, or use Auto-connect if your column names already match.
Click Generate designs. Canva produces one finished design per row with the destination photos, prices, and dates already merged.
If you run several template types off the same spreadsheet — a destination card, a deal-of-the-day post, and a Pinterest pin — take the same XLSX into each template and run Bulk Create three times. Same data, three sets of branded graphics.
Download as a ZIP. You have a full set of destination promos ready to post or schedule.
A Realistic Travel Agent Workflow
Here is what the rhythm looks like for a working agency.
Start of the month. Pull every deal you want to promote into one master sheet with a photo URL column. Run it through Postprep. Generate destination cards and package graphics in Canva for the whole month. Schedule the social posts in your scheduler.
Mid-month. Suppliers drop new flash deals. Add the new rows to the same sheet, re-run Postprep, generate just the new cards. Two minutes of work for a same-day promo.
Weekly. Build your "deal of the day" run for the week from the same master sheet. One row per day, one image each. Bulk generate, schedule, done.
The whole cycle takes about 20 minutes of spreadsheet time and 15 minutes of Canva time per template, whether you are promoting 10 destinations or 100. Without the converted XLSX you are looking at hours of manual photo placement per template.
Since most travel promos end up on social, the same converted spreadsheet feeds your posting workflow too. We cover that side in How to Use Canva Bulk Create for a Month of Social Media Posts.
Frequently Asked Questions
Can I use the same spreadsheet for Instagram posts and printed flyers?
Yes. Canva exports the same generated designs to PNG for social or PDF for print. Run Bulk Create once, download both formats. The photos are embedded at the resolution the URL returns, so high-resolution source images hold up at print sizes.
My supplier photos are huge files. Will that break anything?
Postprep embeds whatever the URL returns. Very large files make a bigger XLSX and a slightly slower Canva upload, but they still work. If speed matters, resize the photos to roughly the dimensions your template needs before adding the URLs.
Some deals do not have a photo yet. What do I do?
Leave the image URL cell blank for those rows. Postprep skips the image embed for empty cells, and Canva leaves the placeholder visible in the generated design. Re-run the job once you have the photo.
Do I need a photo for every single post?
No. Text-only content like tips carousels, FAQs, or quote cards needs no image column and no conversion step — Bulk Create runs straight from your spreadsheet. Postprep only matters when each design needs its own destination photo.
Can I pull deals straight from a supplier's export?
Often, yes. Many supplier or GDS exports give you a CSV of deals. Add a hero column with a direct photo URL if it is not already there, and the rest of the workflow is the same.
What about client testimonials with their photos?
Same pattern. One row per testimonial, a column for the quote, a column for the client photo URL. Convert with Postprep, generate review cards in Canva. Just confirm you have the client's permission to use their photo.
The Short Version
Canva Bulk Create handles the merge work for every destination card, package promo, cruise deal, and review graphic in your pipeline. The one thing it does not do is convert image URLs into embedded images inside the XLSX. Postprep is the missing step.
Build one master deals sheet. Convert with Postprep. Bulk generate in Canva. A full quarter of destination marketing ships in an afternoon instead of a week.
Try it free at postprep.app — 100 rows, no account required.