PostPrep
← Blog
2026-08-30

Instagram Data Export to Canva Bulk Create: How to Repurpose Your Photo Archive

Draft — Post #71 · Target keyword: instagram data export to canva bulk create · Meta: Your Instagram data export has photos and captions but no usable URLs. Here's the Instagram data export to Canva B

Pete B.
Pete B.
Founder, Postprep

Draft — Post #71 · Target keyword: instagram data export to canva bulk create · Meta: Your Instagram data export has photos and captions but no usable URLs. Here's the Instagram data export to Canva Bulk Create workflow that actually works.

You requested your Instagram data export, waited a day for the email, and downloaded a zip file with four years of your own work inside it. Hundreds of photos. Every caption you ever wrote. Timestamps on all of it.

Now you want to do something with it. Throwback posts. A best-of carousel. Quote cards pulled from your highest-performing captions. A portfolio grid for a new landing page. All of it is the same design repeated with different content, which is exactly what Canva Bulk Create exists for.

Then you build the spreadsheet, upload it, and Canva ignores every image. This post covers the full Instagram data export to Canva Bulk Create workflow, including the one step that trips people up specifically with Instagram archives, which is different from the problem every other source platform has.

Why Canva Bulk Create Stalls on Instagram Archives

Canva Bulk Create merges text without complaint. Drop in a column of captions, dates, or post types and it fills every placeholder cleanly across every row.

Images are a different story. Canva only reads images that are physically embedded inside the XLSX file as binary data in a format called DrawingML. A URL sitting in a cell is just text. Canva either prints the raw URL into your design or leaves the image frame empty. The technical breakdown is in Why Canva Bulk Create Ignores Image URLs.

Instagram archives add a second wall on top of that one. Your export does not contain URLs at all. It contains actual image files sitting in a media/posts/ folder, plus a JSON file that references them by local file path, something like media/posts/202403/photo_123.jpg. That path means nothing to Canva, nothing to Postprep, and nothing to any tool that is not running on your laptop.

So you have two gaps to close: local file paths need to become real URLs, and those URLs need to become embedded images. Most of this post is about the first gap, because the second one takes about thirty seconds.

The Dead End Most People Try First

The obvious shortcut is to skip the export entirely, open Instagram in a browser, right-click one of your own photos, and copy the image address. You get something that starts with scontent- and ends in a long string of query parameters.

Those URLs expire. Instagram's CDN signs image links with an expiry token, and once it lapses you get a 403 or a black placeholder. This is well documented across WordPress plugin forums, Zapier community threads, and RSS bridge issue trackers, all reporting the same "URL signature expired" failure. Anyone who has tried to pipe Instagram images into a website or a Zap has hit it.

If you copy fifty Instagram CDN URLs into a spreadsheet on Monday, some of them may already be dead by the time you run your batch on Friday. Do not build a workflow on them.

The other dead end is doing it by hand in Excel: click a cell, Insert > Picture > Place in Cell, browse to the file, repeat. That works for eight rows. It does not work for four hundred, and your export probably has four hundred. Same goes for the =IMAGE() formula in Google Sheets, which looks like it embeds an image but does not. We covered exactly why in Why =IMAGE() Doesn't Work for Canva Bulk Create.

What You Need Before You Start

  • Your Instagram data export, requested in JSON format (Accounts Center > Your information and permissions > Download your information). HTML format is easier to read but harder to turn into a spreadsheet.
  • Somewhere to host the images publicly: Google Drive, Dropbox, an S3 or R2 bucket, or your own site's media library. Any host that gives you a direct, publicly loadable link will work.
  • A spreadsheet tool. Google Sheets or Excel, either is fine.
  • A Canva account on a plan that includes Bulk Create. Canva has historically gated this behind paid tiers, so check your current plan before you build anything on it.
  • A Canva template with a text placeholder and an image frame.

Step 1: Pull the Photos and Captions Out of the Export

Unzip the export. Inside you will find a media/posts/ folder organized into date-based subfolders, plus a content/posts_1.json file that lists each post with its media reference, caption, and creation timestamp.

The JSON is the useful part because it pairs each image with the caption you actually wrote. Captions typically live in a title field on the media entry, and the file path lives in a URI field. If you are comfortable with a script, parsing that JSON into a CSV takes a few lines of Python.

If you are not, the low-tech route works fine: open the JSON in a text editor or a free JSON viewer, and copy the captions you care about into a spreadsheet alongside the matching filenames. You almost certainly do not want all four hundred posts anyway. Pick the thirty or fifty worth repurposing.

Step 2: Re-host the Images and Get Real URLs

Upload the photos you selected to your host of choice, then collect the public link for each one.

The important part is that the link must load in a private browser window with no login. A Google Drive share link set to "Anyone with the link" works. A Dropbox share link works if you convert it to a direct link. A file sitting in your personal Drive with default permissions does not, and it will silently fail later.

Test one link in an incognito window before you do the other forty-nine.

Step 3: Build the Spreadsheet

One row per output design. One column for each placeholder in your Canva template.

captionpost_dateimage_url
Behind the scenes from the spring shoot2024-03-14https://yourhost.com/ig/spring-shoot.jpg
Three things I learned in year two2024-06-02https://yourhost.com/ig/year-two.jpg
The studio setup everyone asks about2024-09-21https://yourhost.com/ig/studio-setup.jpg

Keep captions short if they are going into a graphic. Instagram captions run long, and a 300-word caption will overflow a quote card. Trim to the line that actually carries the idea.

Step 4: Convert With Postprep

Upload the CSV or XLSX to Postprep. It fetches each image URL, embeds the image into the file as DrawingML, and hands back an XLSX that Canva can actually read. Free tier covers 100 rows, no account required.

If you want the manual version of what this does, we wrote it up in How to Bulk Embed Images in Excel From URLs. It works. It is slow.

Step 5: Bulk Generate in Canva

Open your template, go to Apps > Bulk Create, upload the converted XLSX, connect each column to its placeholder, and generate. You get one design per row, images included.

A Repeatable Rhythm for Archive Repurposing

The export is a snapshot, not a live feed, so treat this as a quarterly project rather than a weekly one.

Request a fresh export once a quarter. Pull the last three months of posts into a working sheet, tag each row with what you want it to become (throwback, quote card, portfolio tile, carousel slide), and batch by type rather than by date. Thirty quote cards from one template beats thirty mixed designs from five templates.

Keep your re-hosted images in one folder with stable URLs. Next quarter you are only adding new rows, not rebuilding the whole sheet. That turns a two-hour job into a twenty-minute one.

Once the graphics exist, scheduling them is a separate problem, and one we covered in How to Bulk Upload Instagram Posts From Google Sheets.

FAQ

Can I skip the re-hosting step?

Only if your images already live somewhere public. Photographers with a portfolio site, sellers with product photos on a store CDN, or anyone whose originals are already on the web can point straight at those URLs and skip the export entirely. The export path is for content that only exists on Instagram.

How long does the Instagram export take to arrive?

Instagram sends an email when it is ready. Timing varies with account size and has ranged from under an hour to a couple of days in user reports. Request it before you need it.

Should I choose JSON or HTML format?

JSON if you want to build a spreadsheet, because the caption and media data is structured and parseable. HTML if you just want to browse what you posted. The photos themselves are identical in both.

Do Reels and carousel posts come through?

The export includes them, but a carousel is multiple images under one post entry and a Reel is a video. Video does not help you here. For carousels, decide which single image represents the post and use that one.

What if my captions have emoji or line breaks?

Both survive the spreadsheet fine. Line breaks inside a cell can cause layout surprises in a tight Canva text frame, so replace them with a space or a period if the output looks wrong.

Is there a limit on how many rows Canva will take?

Canva has published row limits for Bulk Create and they have moved over time, with 300 rows commonly cited. Check Canva's current documentation before planning a 500-row batch, and split into smaller batches if you are near the ceiling.

The Short Version

Your Instagram data export gives you the photos and the captions. What it does not give you is URLs, and Canva Bulk Create does not accept URLs anyway.

Re-host the images you want, build one row per design, convert with Postprep so the images are embedded rather than referenced, and let Canva generate the batch. Four years of content becomes a quarter of scheduled graphics in an afternoon.


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