Auto-Post Instagram Carousels using Google Sheets, Drive, Cloudinary & Graph API
Go to WorkflowDescription
Auto-Post Instagram Carousels from Google Sheets + Drive (Cloudinary + IG Graph)
This workflow checks your Google Sheet for “Carousel” posts to do, pulls images from a Drive folder, uploads them to Cloudinary, creates an Instagram carousel, publishes it, and marks the row as “Processed”.
Benefits
Hands-off posting from a simple Google Sheet queue
Pulls all images from a Drive folder for each carousel
Uses Cloudinary for fast, reliable hosting
Posts via Instagram Graph API (official)
Updates your Sheet status to “Processed” after publish
How It Works
Schedule Trigger runs every few minutes.
Get Execution for Carousel reads rows where Status = ToDo and Type = Carousel.
Get image list loads all files from the Drive folder in that row.
Download Image fetches each file from Drive.
Upload to Cloudinary stores the image and returns a public URL.
Setup for Instagram prepares access_token, ig_user_id, image_url, caption.
Create Media Container (Image) creates an IG container for each image.
Combine containers collects all container IDs.
Create Media Container (Carousel) builds one carousel with the children IDs + caption.
Publish Instagram Carousel publishes the carousel post.
Update Execute sets Status = Processed for that ExecuteId in Sheets.
Who Is This For
Social media managers batching carousels
Agencies posting client content on a schedule
Creators who organize posts in Google Sheets
Setup
Google Sheets: set Spreadsheet and “Execute” tab (with ExecuteId, Folder, Expected content, Status, Type)
Google Drive: put carousel images in the folder referenced by the row
Cloudinary: set cloud name + upload_preset
Instagram Graph: get ig_user_id and a valid access_token
In n8n: paste tokens/IDs into the Set nodes and HTTP nodes as shown
Tips
Keep image order in Drive as you want it to appear (or sort before upload)
Caption comes from the Sheet field Expected content
Make sure the IG account is a Business/Creator account connected to a Facebook Page
Use high-res images; Cloudinary will optimize delivery
Add error alerts (Slack/Email) if a step fails
ROI
Save 2–4 hours/week on manual uploads
Fewer posting mistakes (everything logged in Sheets)
Scales easily to multiple brands and calendars
Strategy Insights
Add a “Schedule_at” column and delay publishing until that time
Write back the IG post ID to Sheets for tracking
Extend to cross-post (e.g., Facebook Page) with the same media containers
Check Out My Channel
For more practical automation workflows for content teams, check out my YouTube channel where I share the exact systems I use to run social posting at scale.