🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Sheets to Instagram, carousels post themselves

Lisa Granqvist Partner Workflow Automation Expert

Your Instagram carousel process probably looks “organized” on the surface. Then posting day hits. Someone can’t find the right folder, the caption is in the wrong doc, an image is missing, and you’re re-uploading everything like it’s 2016.

This is where a Sheets Instagram carousel automation pays off fast. Social media managers feel it first, honestly, but marketers running campaigns and small teams handling content in-between client work get dragged into the same chaos.

This workflow turns a Google Sheet into your carousel publishing queue. You’ll see how it pulls assets from Google Drive, uploads them to Cloudinary, then publishes the carousel through the Instagram Graph API and marks the row as done.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Sheets to Instagram, carousels post themselves

The Problem: Carousel scheduling breaks when it’s manual

Manual carousel publishing is deceptively expensive. It’s not just the “upload images + paste caption” part. It’s the scavenger hunt across Drive folders, the double-checking that slide order is correct, the last-minute resize, and the nervous feeling that you’ll hit Publish with the wrong assets. When you’re running multiple campaigns, the mistakes multiply. One missed slide can tank a product walkthrough, and one wrong caption can create a support mess you didn’t need.

The friction compounds. A little delay here, a small correction there, and suddenly posting feels like a task you have to clear your schedule for.

  • You end up spending about 30 minutes per carousel just collecting assets and confirming the order.
  • Teams forget to update the “status” somewhere, so posts get duplicated or skipped.
  • When captions live in one place and images in another, someone always publishes the wrong version.
  • Scaling to multiple accounts becomes a spreadsheet of spreadsheets, not a system.

The Solution: Schedule in Google Sheets, publish to Instagram automatically

This n8n workflow watches your content queue for you. Every 5 minutes, it checks a Google Sheet for carousel posts marked “ToDo.” When it finds one, it grabs the images from a Google Drive folder you’ve specified, fetches each image file, and sends the assets to Cloudinary so they’re hosted in a way Instagram can reliably ingest. Then it uses the Instagram Graph API to create individual media items, aggregates their IDs, builds a carousel container, and publishes the post with your caption. Finally, it updates the original Google Sheet row so the same post doesn’t run again.

In plain terms: Google Sheets becomes your planner, Google Drive stays your asset library, and n8n does the uploading and publishing. You keep control of what gets posted, but you lose the repetitive busywork.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you publish 5 carousels a week. Manually, you might spend about 30 minutes per post between finding the Drive folder, uploading slides, re-checking order, and pasting captions, so that’s roughly 2.5 hours weekly. With this workflow, the “work” becomes updating one Google Sheet row and dropping images into a Drive folder, maybe 5 minutes per post. n8n handles the rest in the background on its next 5-minute check, which means you win back about 2 hours most weeks.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets for your carousel queue and status.
  • Google Drive to store carousel images per post.
  • Cloudinary API credentials (get them from your Cloudinary dashboard).
  • Instagram Graph API access_token + ig_business_id (get them from Meta developer tools for your business account).

Skill level: Intermediate. You’ll be connecting accounts, pasting API credentials, and mapping a few fields in n8n.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A scheduled check runs automatically. The workflow starts on a schedule trigger (every 5 minutes by default) so you don’t need to click anything or “run” it manually.

Your Google Sheet acts like a publishing queue. n8n pulls rows from Google Sheets and looks for carousel posts marked “ToDo.” If nothing is ready, nothing gets published. Simple.

Assets are fetched from Google Drive and prepared for Instagram. It lists the images in your Drive folder, fetches each file, uploads to Cloudinary, then generates Instagram media items via HTTP requests to the Graph API. Those media IDs get aggregated so Instagram can treat them as one carousel.

The carousel publishes and the queue updates itself. n8n creates the carousel container, publishes the post with your caption, and then marks the row in Google Sheets as processed so it won’t repeat.

You can easily modify the schedule interval to match your posting rhythm based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Schedule Trigger

This workflow runs on a timed schedule and starts by checking a Google Sheet for queued carousel posts.

  1. Add and open Scheduled Run Trigger.
  2. Set Rule → Interval → Field to minutes.
  3. Connect Scheduled Run Trigger to Retrieve Carousel Queue.

Step 2: Connect Google Sheets

These nodes read and update the carousel queue in Google Sheets.

  1. Open Retrieve Carousel Queue and set Document to [YOUR_ID] and Sheet to [YOUR_ID].
  2. In Retrieve Carousel Queue, confirm filters are set to Status = ToDo and Type = Carousel.
  3. Credential Required: Connect your googleSheetsOAuth2Api credentials to Retrieve Carousel Queue.
  4. Open Mark Execution Processed and verify Operation is update with Status set to Processed and ExecuteId set to {{ $('Retrieve Carousel Queue').item.json.ExecuteId }}.
  5. Credential Required: Connect your googleSheetsOAuth2Api credentials to Mark Execution Processed.

Step 3: Connect Google Drive and Fetch Image Files

This stage reads the target folder from the queue and downloads each image for upload.

  1. Open List Drive Images and set Filter → Folder ID to {{ $('Retrieve Carousel Queue').item.json.Folder }}.
  2. Ensure Return All is enabled and Fields include id, name, thumbnailLink, and webViewLink.
  3. Credential Required: Connect your googleDriveOAuth2Api credentials to List Drive Images.
  4. Open Fetch Drive Image File and set URL to =https://drive.google.com/uc?export=download&id={{ $json.id }} with Response Format set to file.

Tip: Ensure the Google Drive files are shared or accessible to the connected account, or the download request in Fetch Drive Image File will fail.

Step 4: Configure Image Upload and Instagram Media Creation

This workflow uses multiple HTTP requests to upload images, prepare credentials, and create Instagram media items.

  1. Open Send Images to Cloudinary and set URL to https://api.cloudinary.com/v1_1/[YOUR_ID]/image/upload.
  2. In Send Images to Cloudinary, keep Method as POST, Content Type as multipart-form-data, and confirm the body parameters include file (binary) and upload_preset set to [YOUR_ID].
  3. Open Prepare Instagram Credentials and set access_token to [CONFIGURE_YOUR_TOKEN] and ig_user_id to [YOUR_ID].
  4. In Prepare Instagram Credentials, set image_url to {{ $json.url }} and caption to {{ $('Retrieve Carousel Queue').item.json['Expected content'] }}.
  5. Open Generate IG Media Item and set URL to =https://graph.instagram.com/v23.0/{{ $json.ig_user_id }}/media with Method POST and Content Type form-urlencoded.
  6. In Generate IG Media Item, set body parameters image_url, caption, and access_token to {{ $json.image_url }}, {{ $json.caption }}, and {{ $json.access_token }} respectively.

⚠️ Common Pitfall: If Prepare Instagram Credentials uses placeholder values, Instagram requests will fail. Replace [CONFIGURE_YOUR_TOKEN] and [YOUR_ID] with valid Instagram Graph API credentials.

Step 5: Build and Publish the Carousel

This stage aggregates image IDs, creates the carousel container, and publishes the post.

  1. Open Aggregate IG Media IDs and confirm Fields to Aggregate contains body.id with Merge Lists enabled.
  2. Open Build Carousel Container and set URL to =https://graph.instagram.com/v23.0/{{ $('Prepare Instagram Credentials').first().json.ig_user_id }}/media.
  3. In Build Carousel Container, set body parameters: caption to {{ $('Retrieve Carousel Queue').item.json['Expected content'] }}, media_type to =CAROUSEL, children to {{ $json.id }}, and access_token to {{ $('Prepare Instagram Credentials').first().json.access_token }}.
  4. Open Publish Carousel Post and set URL to =https://graph.instagram.com/v23.0/{{ $('Prepare Instagram Credentials').first().json.ig_user_id }}/media_publish.
  5. In Publish Carousel Post, set body parameters creation_id to {{ $json.body.id }} and access_token to {{ $('Prepare Instagram Credentials').first().json.access_token }}.
  6. Connect Publish Carousel Post to Mark Execution Processed to update the queue.

Step 6: Test and Activate Your Workflow

Verify each stage works end-to-end before enabling scheduled runs.

  1. Click Execute Workflow to run a manual test starting at Scheduled Run Trigger.
  2. Confirm Retrieve Carousel Queue returns at least one row with Status = ToDo and Type = Carousel.
  3. Check that Send Images to Cloudinary returns image URLs and Generate IG Media Item outputs a body.id.
  4. Verify Publish Carousel Post returns a successful response and Mark Execution Processed updates Status to Processed.
  5. Toggle the workflow to Active to enable scheduled publishing.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials section and confirm the connected Google account still has access to the sheet.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Cloudinary and Instagram Graph API calls can fail silently when a preset, folder setting, or token scope is wrong. If publishing stops, check your HTTP Request node responses and confirm your access_token still has the right permissions.

Frequently Asked Questions

How long does it take to set up this Sheets Instagram carousel automation?

About 45 minutes if you already have API access.

Do I need coding skills to automate Instagram carousel posting?

No. You will connect accounts, paste credentials, and map a few fields in n8n.

Is n8n free to use for this Sheets Instagram carousel workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Cloudinary usage and any Meta API-related costs for your setup.

Where can I host n8n to run this Sheets Instagram carousel automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Sheets Instagram carousel workflow for different statuses like “Approved” or “Scheduled”?

Yes, and it’s a common tweak. Update the filter logic right after “Retrieve Carousel Queue” so it looks for your preferred status values, then adjust “Mark Execution Processed” to write back whatever state you want (like “Posted” plus a timestamp). Some teams also add extra columns for campaign name, designer, or client approval link. If you’re managing multiple accounts, you can add an “Account” column and route to different credentials before the Graph API calls.

Why is my Google Sheets connection failing in this workflow?

Usually it’s expired Google authentication or the connected account lost access to the sheet. Reconnect the Google Sheets credential in n8n, then open the sheet and confirm the same Google user can view and edit it. If it still fails, check the sheet ID and worksheet/tab name you mapped in the node, because a renamed tab breaks lookups more often than people expect.

How many posts can this Sheets Instagram carousel automation handle?

In practice, it can handle dozens of queued posts a day as long as your API limits and server resources are fine.

Is this Sheets Instagram carousel automation better than using Zapier or Make?

Often, yes, because carousel publishing via the Instagram Graph API is more than a simple two-step trigger and action. n8n makes it easier to handle loops (multiple images), aggregation (collecting media IDs), and conditional logic without paying extra for every branch. It also gives you the self-hosting option, which can be a big deal once you start publishing frequently. Zapier or Make can still be fine for lightweight scheduling, but carousels tend to get fiddly. Talk to an automation expert if you want a quick recommendation based on your volume.

Once this is running, your Google Sheet becomes the calm center of your publishing process. The workflow handles the repetitive parts, so your attention stays on the content itself.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal