PostPrep
← Blog
2026-06-13

How Food Trucks Can Use Canva Bulk Create for Menu Cards, Daily Specials, and Social Posts

Draft — Post #50 · Target keyword: canva bulk create food trucks · Meta: Build menu item cards, daily specials, and a week of social posts from one spreadsheet. The Canva Bulk Create food trucks workf

Pete B.
Pete B.
Founder, Postprep

Draft — Post #50 · Target keyword: canva bulk create food trucks · Meta: Build menu item cards, daily specials, and a week of social posts from one spreadsheet. The Canva Bulk Create food trucks workflow that handles your food photos.

Your truck moves five days a week and the menu changes with whatever the supplier had that morning. Tuesday you are at the brewery lot, Thursday the office park, Saturday the farmers market. Every stop needs a "we're here" post, a specials graphic, and a few menu item shots so people walking by already know what they want.

That is thirty-plus graphics a week, and most of them are the same layout with a different dish photo and a different price. You already know Canva Bulk Create is built for exactly this kind of repeat work. Then you load a spreadsheet with your food photo URLs and Canva ignores every image, handing back a stack of cards with blank photo slots.

This post walks through the full Canva Bulk Create food trucks workflow, the one step Canva will not do on its own, and a weekly rhythm that fits between prep and service.

Why Canva Bulk Create Stalls for Food Trucks

Food trucks run on photos. A burger that looks good in the feed sells out by noon. Your menu items, daily specials, and limited drops all live as images somewhere, a phone camera roll, a Google Drive folder, a Dropbox link, or product shots a photographer sent over.

Canva Bulk Create handles your text fields fine. Drop in a column of dish names, prices, locations, or serving times and Canva merges them cleanly into the template.

Image URLs are where it breaks. 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 raw link as a string on your card or leaves the photo slot empty. We covered the full technical reason in Why Canva Bulk Create Ignores Image URLs.

For a food truck this is the whole ballgame. A "Menu Monday" set spotlighting eight dishes, each with its own hero shot, will not render unless those photos are embedded in the XLSX before it ever reaches Canva.

The Manual Workaround Most Food Truck Owners Try First

The usual hack goes like this. Open the spreadsheet, switch to Excel, click each photo cell, use Insert > Picture > Place in Cell, point to the file on your laptop, repeat for every dish. That works in theory, if every photo is already downloaded, cropped to the same size, and named to match its row.

In practice you shot half the photos on your phone during last week's service, a few came from a friend who does photography, and the seasonal special you are posting tomorrow does not have a shot yet. By the time you have everything downloaded, sized, and inserted by hand, you could have served the lunch rush twice.

The other common attempt 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 parses the file and sees nothing in those cells.

One honest note. Some food truck posts need no images at all. A plain "We're at Maple Lot today, 11 to 2" location card or a text-only hours update is pure text, and Canva Bulk Create handles those on its own with no conversion needed. The workflow below is for the posts that actually carry a dish photo.

What You Need Before You Start

Two things.

A Canva template per post type. Most trucks cycle through a small set of recurring designs. The common ones look like this. A menu item card with the dish photo, name, price, and a one-line description. A daily special graphic with the photo, today's price, and the location. A "now serving" location post with a hero shot and the address and hours. A new-item or seasonal-drop announcement with the photo and launch date.

Each template needs Canva Bulk Create placeholders for the text variables like {{dish_name}}, {{price}}, {{location}}, and an image element where the food photo lands.

A single source-of-truth spreadsheet. One row per output card. Columns for every text field plus one column with the direct photo URL. If you already keep your menu in a Google Sheet or a Square catalog export, you are most of the way there. The only column you likely need to add is a direct URL to each dish photo. The same clean-sheet rules we use for restaurants and recipe cards apply here: one row per output, one column per field, photo URLs in their own column.

Step 1: Collect Your Photo URLs

This is the step that eats the most time, so it helps to know where each source hides its URLs.

Google Drive. Convert the share link to a direct image URL using the format https://drive.google.com/uc?id=FILEID&export=download, or drop the photos 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.

Your phone. Upload the shots to Google Drive or Dropbox first, then grab the URLs as above. Shoot in good daylight at the truck window and you rarely need editing.

Square, Toast, or your online ordering menu. If your dishes already have photos in your POS or ordering site, right-click the image and copy image address. The URL usually ends in .jpg or .png.

A photographer's gallery. Most delivery galleries (Pixieset, Dropbox, Google Drive) expose a direct image link per photo. Copy the image address, not the gallery page link.

Drop every URL into the spreadsheet under one column. Name it photo_url and keep the convention consistent.

Step 2: Build the Menu Spreadsheet

A typical food truck bulk sheet looks like this.

dish_namepricedescriptionlocationphoto_url
Smash Burger$11Double patty, house sauce, picklesMaple Lothttps://drive.google.com/uc?id=.../burger.jpg
Birria Tacos$13Three tacos, consomé, limeBrewery Yardhttps://drive.google.com/uc?id=.../birria.jpg
Loaded Fries$9Cheese, bacon, scallionOffice Parkhttps://drive.google.com/uc?id=.../fries.jpg

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

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 photo 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 well under a minute. The free tier covers 100 rows with no account required, which is more than a month of menu cards for most trucks.

Step 4: Bulk Generate in Canva

Open your menu card template in Canva. Make sure you are on a plan that supports Bulk Create. (Bulk Create is a paid feature and runs on desktop. Check Canva's current plan list for exactly which tiers include it, since they update it periodically.)

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 card per row with the dish photo, name, price, and description already merged.

Running three template types off the same sheet, say a menu card, a daily special, and a social location post, take the same XLSX into each template and run Bulk Create three times. Same data, three sets of branded graphics. Download as a ZIP and you have the week's posts ready to schedule.

A Realistic Food Truck Workflow

Here is the rhythm that fits an actual service week.

Sunday night, 30 minutes. Lock next week's menu and any specials. Update the master sheet with dish names, prices, and the location for each day. Add or swap photo URLs for anything new. Run it through Postprep once.

Same sitting, 15 minutes. Take the converted XLSX into each Canva template. Generate the menu cards, the daily specials, and the location posts for all five service days. Download the ZIP.

Each morning, 2 minutes. Pull that day's location post and specials graphic, and schedule or post them with your "we're here" caption.

The whole cycle is under an hour for a full week of graphics, whether your menu has six items or twenty. Doing it by hand, one card at a time, is closer to four or five hours, which is exactly why most trucks post inconsistently and then wonder why the lot is quiet.

Frequently Asked Questions

My photos are all on my phone. Is that a problem?

No, you just need them somewhere with a URL first. Upload the shots to Google Drive or Dropbox, grab the direct links, and add them to your sheet. Phone photos shot in daylight at the window look great on a menu card.

My prices change with cost of goods. Can I update fast?

Yes. Change the price column in your sheet and re-run Bulk Create. You do not need to re-convert with Postprep unless the photos changed. Text-only updates regenerate in Canva directly.

Can I make both printed window menus and Instagram posts from the same sheet?

Yes. Build one template sized for print and one sized for Instagram, both pulling from the same converted XLSX. Run Bulk Create twice. Canva exports to PDF for print or PNG for the feed.

Some dishes do not have a photo yet. What happens to those rows?

Leave the photo URL cell blank. Postprep skips the image embed for empty cells, and Canva leaves the placeholder visible in the generated card. Re-run once you have the shot.

Do I need a Canva subscription for this?

Bulk Create is a paid Canva feature, so yes, you need a plan that includes it. Postprep itself is free for up to 100 rows with no account. Confirm the current Canva tier details on their site, since the plan lineup changes.

What if I sell the same dishes at different locations with different prices?

One row per output card. The same birria taco at two lots with two prices is two rows, same photo URL, two different price and location values. Canva generates one card per row.

The Short Version

Canva Bulk Create does the repeat work for every menu card, daily special, and location post your truck ships in a week. The one thing it will not do is turn photo URLs into embedded images inside the XLSX. Postprep is that missing step.

Build one master menu sheet. Convert with Postprep. Bulk generate in Canva. A full week of food photos goes out without you editing a single card by hand between prep and service.


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