HomeBusiness AutomationHow to Automate Social Media Posting…
Business Automation

How to Automate Social Media Posting Across Instagram, Facebook & YouTube with n8n

How to Automate Social Media Posting Across Instagram, Facebook & YouTube with n8n

One workflow, one Google Drive folder, four platforms. Drop a video, walk away β€” n8n handles the AI caption, the upload, the publish, and the status tracking automatically.

If you’re posting the same video to Instagram Reels, Facebook Reels, YouTube, and TikTok, you already know the drill: download, re-upload, write a caption, find the right tags, publish, check the status, repeat β€” four times, for every single video. It’s not a content problem. It’s a logistics problem. And logistics problems are exactly what n8n was built to solve.

This workflow watches a Google Drive folder, picks up the next unprocessed video, uses an AI model via OpenRouter to generate a platform-optimized caption with hashtags, uploads the video to Cloudinary as a CDN host, then simultaneously publishes it as a Reel on Instagram, a Reel on Facebook, and a video on YouTube β€” while staging the data for TikTok in a separate sheet. Every step is tracked in a Google Sheet so your team always knows what’s been published and what’s still pending. When everything is done, the original file is moved to an archive folder so it doesn’t get picked up again.

Prefer to skip the setup? Grab the ready-made template β†’ and be publishing cross-platform in under 20 minutes.

What You’ll Build

  1. A daily schedule trigger (fires at 6 PM) scans your Google Drive folder for the next video waiting to be published.
  2. A Code node strips the file extension and normalizes the filename into a clean public ID (spaces become underscores for Cloudinary).
  3. The video is uploaded to Cloudinary, which provides a stable public CDN URL that all four platforms can download from.
  4. An AI call to OpenRouter (Claude 3.7 Sonnet) reads the filename as a keyword and writes a Facebook-optimized caption with five hashtags β€” no manual copywriting needed.
  5. The Cloudinary URL and AI caption are written back to your Google Sheet tracking row.
  6. The video is published as a Reel on Facebook (via the Facebook Graph API) and simultaneously as a Reel on Instagram β€” with 30-second waits built in between API calls to respect rate limits.
  7. The same video is uploaded to YouTube with the AI caption as the description, then added to a playlist.
  8. A separate Google Sheets tab gets a row appended for your TikTok queue (ready for the next manual step or a future TikTok automation).
  9. The main tracking sheet updates the row status to “Video Shared”, and the original Drive file is moved to your archive folder.

How It Works β€” The Big Picture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  SOCIAL MEDIA AUTOMATION (n8n)                                               β”‚
β”‚                                                                              β”‚
β”‚  [Schedule Trigger 6PM] ──► [Google Drive: Search Folder]                   β”‚
β”‚                                        β”‚                                     β”‚
β”‚                                        β–Ό                                     β”‚
β”‚                              [Code: Clean Filename]                          β”‚
β”‚                                        β”‚                                     β”‚
β”‚                                        β–Ό                                     β”‚
β”‚                              [Cloudinary: Upload Video]                      β”‚
β”‚                                        β”‚                                     β”‚
β”‚                                        β–Ό                                     β”‚
β”‚                          [Sheets: Get Pending Row]                           β”‚
β”‚                                        β”‚                                     β”‚
β”‚                                        β–Ό                                     β”‚
β”‚                         [OpenRouter AI: Generate Caption]                    β”‚
β”‚                                        β”‚                                     β”‚
β”‚                                        β–Ό                                     β”‚
β”‚                         [Sheets: Write URL + Caption]                        β”‚
β”‚                                        β”‚                                     β”‚
β”‚               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                                     β”‚
β”‚               β”‚                        β”‚                                     β”‚
β”‚               β–Ό                        β–Ό                                     β”‚
β”‚  ── FACEBOOK REELS ──       ── INSTAGRAM REELS ──                           β”‚
β”‚  [Init Upload Session]       [Post Container]                               β”‚
β”‚  [Upload Hosted File]        [Wait 30s]                                     β”‚
β”‚  [Publish Reel]              [Publish to Instagram]                         β”‚
β”‚  [Get Upload Status]         [Wait 30s]                                     β”‚
β”‚  [Wait 30s]                  [HTTP: Fetch Video]                            β”‚
β”‚               β”‚                        β”‚                                     β”‚
β”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                     β”‚
β”‚                                        β”‚                                     β”‚
β”‚                                        β–Ό                                     β”‚
β”‚                         ── YOUTUBE ──                                        β”‚
β”‚                         [Upload Video]                                       β”‚
β”‚                         [Wait 10s]                                           β”‚
β”‚                         [Add to Playlist]                                    β”‚
β”‚                         [Wait 10s]                                           β”‚
β”‚                         [Sheets: Append TikTok Row]                         β”‚
β”‚                                        β”‚                                     β”‚
β”‚                                        β–Ό                                     β”‚
β”‚                         [Sheets: Update Status β†’ "Video Shared"]            β”‚
β”‚                         [Google Drive: Move to Archive Folder]              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

What You’ll Need

  • n8n β€” self-hosted or n8n Cloud (v1.30+)
  • Google Drive β€” one folder for new videos, one for archived videos
  • Cloudinary account β€” free tier is sufficient; the Social_Media folder will be created automatically
  • OpenRouter account β€” free tier works; Claude 3.7 Sonnet is configured by default (swap to any model you prefer)
  • Meta Developer App β€” with a Facebook Page token and an Instagram Business account linked to that page
  • YouTube Data API v3 β€” OAuth2 credentials connected in n8n; a playlist ID to post into
  • Google Sheets β€” one spreadsheet with two tabs: one for Instagram/Facebook/YouTube tracking, one for TikTok queue

Estimated build time: 90–120 minutes from scratch. Under 20 minutes with the template.

Part 1 β€” Picking Up the Video

1 Schedule Trigger

The workflow fires once a day at 6 PM. You can change this to any hour β€” just edit the Trigger At Hour field in the Schedule Trigger node. If you want to post multiple times a day, duplicate the trigger or switch to an interval-based schedule.

// Schedule Trigger output (no data β€” just fires the workflow)
{}
πŸ’‘

Tip: To publish a different video every day, just make sure your Drive folder always has the next video waiting before 6 PM. The workflow picks up the first file it finds, processes it, and archives it β€” so the order files appear in Drive determines your posting schedule.

2 Search Files and Folders (Google Drive)

This node lists files inside your designated Google Drive folder, returning the first result it finds (limit: 1). It fetches all fields, including webContentLink β€” a direct download URL that Cloudinary will use to pull the video.

// Google Drive file output
{
  "id": "1aBcDeFgHiJkLmNoPqRsTuV",
  "name": "Summer Sale Promo.mp4",
  "webContentLink": "https://drive.google.com/uc?id=1aBcDeFgHiJkLmNoPqRsTuV&export=download",
  "mimeType": "video/mp4",
  "size": "48234567"
}
πŸ“Œ

Important: Set the folder ID to your “pending videos” folder in the Google Drive node. Leave the archive folder ID empty for now β€” you’ll fill it into the Move file1 node at the end of the workflow.

3 Remove Space & Extensions (Code Node)

Platform APIs and CDNs don’t love filenames with spaces or extensions. This Code node strips the .mp4 (or any extension) from the filename and produces two variants: one with underscores (for Cloudinary’s public_id) and one with the original spaces preserved (for YouTube’s video title, which looks better with natural spacing).

const baseName = $json["name"]
  .replace(/\s*\.[^/.]+$/, "")  // remove file extension
  .trim();

const public_id_underscores = baseName.replace(/\s+/g, "_"); // spaces β†’ underscores
const public_id_no_underscores = baseName;                    // natural spacing

return [{ json: { public_id_underscores, public_id_no_underscores } }];
// Output
{
  "public_id_underscores": "Summer_Sale_Promo",
  "public_id_no_underscores": "Summer Sale Promo"
}

Part 2 β€” Uploading to Cloudinary

4 Upload an Asset from URL (Cloudinary)

Rather than downloading the video to n8n’s memory and re-uploading it, this node passes Cloudinary the Google Drive download link directly. Cloudinary fetches it server-to-server, transcodes it if needed, and stores it in your Social_Media folder with the underscore-normalized name as the public ID. In return, Cloudinary hands you a secure_url β€” the stable CDN link that all four platforms will pull from.

// Cloudinary upload output (key fields)
{
  "public_id": "Social_Media/Summer_Sale_Promo",
  "secure_url": "https://res.cloudinary.com/your-cloud/video/upload/Social_Media/Summer_Sale_Promo.mp4",
  "resource_type": "video",
  "format": "mp4",
  "duration": 28.4,
  "bytes": 48234567
}
πŸ’‘

Tip: Cloudinary’s free tier gives you 25 GB of storage and 25 GB of monthly bandwidth β€” more than enough to test with. Videos are stored permanently so you can reuse the same CDN URL if you ever need to repost.

Part 3 β€” AI Caption Generation

5 Get Row(s) in Sheet (Google Sheets)

This node looks up the first row in your tracking sheet where the Status column is set to pending. It returns all columns for that row, including its row_number β€” which is used later to update the same row in place rather than creating a duplicate.

// Google Sheets row output
{
  "row_number": 4,
  "video_url": "",
  "Video Caption": "",
  "Status": "pending"
}

6 Video Caption (OpenRouter AI)

This HTTP Request node calls the OpenRouter API, sending the cleaned filename as the keyword. The system prompt tells Claude 3.7 Sonnet to act as a Facebook copywriter and return a Reel title (max 46 characters) followed by five relevant hashtags β€” no labels, no emojis, no markdown bold formatting. Clean, ready-to-paste copy every time.

// Request body (simplified)
{
  "model": "anthropic/claude-3.7-sonnet",
  "messages": [
    {
      "role": "system",
      "content": "You are a facebook copywriter expert. Follow formatting rules exactly."
    },
    {
      "role": "user",
      "content": "based on this keyword Summer Sale Promo Write an optimized facebook Reel title (max 46 characters), use 5 related hashtags, Do NOT include labels like (Video Reel Title, Hashtags) no emojis, don't use ** in title."
    }
  ]
}
// OpenRouter response
{
  "choices": [
    {
      "message": {
        "content": "Summer Sale β€” Shop the Best Deals Now\n#SummerSale #ShopNow #SaleAlert #BestDeals #LimitedTime"
      }
    }
  ]
}
πŸ’‘

Tip: You can swap Claude 3.7 Sonnet for any model on OpenRouter β€” GPT-4o Mini, Mistral, or Llama 3 all work. For pure caption writing, GPT-4o Mini costs a fraction of a cent per request and produces great results.

7 Update Caption & Video URL (Google Sheets)

Once the AI returns the caption and Cloudinary returns the CDN URL, this node writes both values back to the pending row β€” matching by row_number. From this point on, every downstream node references these two fields using $('Update caption & vid url').item.json.video_url and $('Update caption & vid url').item.json['Video Caption'].

// Updated row in Google Sheets
{
  "row_number": 4,
  "video_url": "https://res.cloudinary.com/your-cloud/video/upload/Social_Media/Summer_Sale_Promo.mp4",
  "Video Caption": "Summer Sale β€” Shop the Best Deals Now\n#SummerSale #ShopNow #SaleAlert #BestDeals #LimitedTime",
  "Status": "pending"
}

Part 4 β€” Publishing to Facebook Reels

Facebook’s Reels API uses a three-step upload protocol: initialize a session, upload the file, then publish. n8n handles all three calls in sequence with a 30-second wait before the publish check β€” giving Facebook’s servers time to process the video before you query the status.

8 Initialize an Upload Session (Facebook Graph API)

Sends a POST to your Facebook Page’s video_reels edge with upload_phase=start and the Cloudinary video URL. Facebook returns a video_id and an upload_url that the next node uses.

// Facebook API response
{
  "video_id": "740128398210437",
  "upload_url": "https://rupload.facebook.com/video-upload/v23.0/740128398210437"
}

9 Upload a Hosted File (HTTP Request)

Posts to the upload_url from the previous step, passing the Cloudinary URL in a custom file_url header. Facebook fetches the video directly from Cloudinary β€” no binary upload, no memory usage in n8n.

10 Publish The Reel (Facebook Graph API)

Sends the finish signal: upload_phase=finish, video_state=PUBLISHED, the AI-generated description, and the video_id. This is the moment the Reel goes live on your Facebook Page.

11 Get the Upload Status + Wait 30s

Queries the Facebook Graph API to confirm the video’s status field. The 30-second Wait node before Instagram publishing gives Facebook time to fully process the reel and updates internal state before the workflow moves on.

Part 5 β€” Publishing to Instagram Reels

12 Post Container (Facebook Graph API β€” Instagram)

Instagram’s publishing API (also part of the Facebook Graph API) requires a two-step process. First, create a media container by posting the video URL, caption, and media_type=REELS to your Instagram Business account’s media edge. This returns a container id.

13 Wait 30s β†’ Publish to Instagram

The 30-second wait is mandatory β€” Instagram needs time to process the video before you can publish the container. After the wait, a second API call to the media_publish edge with the creation_id makes the Reel visible on your Instagram profile.

πŸ“Œ

Note: You need a Facebook Page and an Instagram Business account connected to it under the same Meta Developer App. Personal Instagram accounts cannot use the Reels API.

Part 6 β€” Publishing to YouTube

14 HTTP Request β€” Fetch Video Binary

This node downloads the video binary from the Cloudinary URL. YouTube’s n8n node expects a binary input (unlike the Facebook API which accepts a URL), so this step bridges the gap β€” the response body becomes the binary data that the YouTube Upload node reads.

15 Upload a Video (YouTube)

Uploads the binary to YouTube. The title uses the un-modified filename (public_id_no_underscores β€” natural spaces), the description gets the AI-generated caption, and the video is published as public with notifySubscribers: true. Category 22 is “People & Blogs” β€” change this to match your niche.

// YouTube upload output (key fields)
{
  "uploadId": "abc123XYZ_youTubeVideoId",
  "status": { "privacyStatus": "public", "uploadStatus": "uploaded" },
  "snippet": { "title": "Summer Sale Promo", "categoryId": "22" }
}

16 Add to Playlist (YouTube)

After a 10-second wait (gives YouTube time to finish processing the upload), this node adds the video to your designated playlist using the uploadId from the previous step. Set your playlist ID in the node parameters.

Part 7 β€” Tracking and Cleanup

17 Append Row to TikTok Sheet (Google Sheets)

After a second 10-second wait, this node appends a new row to a separate “TikTok” tab in your spreadsheet with the video URL and caption β€” ready for you to post manually or wire up to a future TikTok API automation.

18 Update Row Status (Google Sheets)

Updates the original tracking row from pending to Video Shared, matched by row_number. This prevents the same video from being picked up again on the next trigger run.

19 Move File to Archive (Google Drive)

Moves the original video file from your “pending” folder to your “archive” folder. The file ID comes from the very first node (Search files and folders). Set your archive folder ID in this node’s parameters.

πŸ’‘

Tip: If you’d rather delete the file from Drive than archive it, swap this node for a Google Drive Delete node. Archiving is recommended so you have a record of what was posted and can repost if needed.

The Data Structure

Your Google Sheet needs two tabs with these exact column names. The workflow uses string matching on column headers, so capitalization and spacing matter.

Tab 1: instagram / Facebook / Youtube

Column NameTypeExample ValueDescription
video_urlTexthttps://res.cloudinary.com/…/Summer_Sale_Promo.mp4Filled automatically by the workflow after Cloudinary upload
Video CaptionTextSummer Sale β€” Shop the Best Deals Now
#SummerSale #ShopNow…
AI-generated caption; filled automatically by the workflow
StatusTextpending β†’ Video SharedSet to “pending” manually when you add a video; updated to “Video Shared” after publishing

Tab 2: Tiktok

Column NameTypeExample ValueDescription
video_urlTexthttps://res.cloudinary.com/…/Summer_Sale_Promo.mp4Same Cloudinary URL β€” ready for TikTok posting
Video CaptionTextSummer Sale β€” Shop the Best Deals Now
#SummerSale…
Same AI caption β€” TikTok hashtag format works identically
πŸ“Œ

Setup step: Before activating the workflow, add one row to Tab 1 with Status = pending and leave video_url and Video Caption blank β€” the workflow fills those in automatically. Make sure the video file is already in your Google Drive folder.

Full System Flow

New video dropped into Google Drive "Pending" folder
          β”‚
          β–Ό
[Schedule Trigger: 6PM daily]
          β”‚
          β–Ό
[Google Drive: Search Folder] β†’ { name: "Summer Sale Promo.mp4", webContentLink: "..." }
          β”‚
          β–Ό
[Code: Clean Filename] β†’ { public_id_underscores: "Summer_Sale_Promo",
                            public_id_no_underscores: "Summer Sale Promo" }
          β”‚
          β–Ό
[Cloudinary: Upload Video] β†’ { secure_url: "https://res.cloudinary.com/.../Summer_Sale_Promo.mp4" }
          β”‚
          β–Ό
[Sheets: Get Pending Row] β†’ { row_number: 4, Status: "pending" }
          β”‚
          β–Ό
[OpenRouter AI: Generate Caption] β†’ "Summer Sale β€” Shop the Best Deals Now\n#SummerSale..."
          β”‚
          β–Ό
[Sheets: Write URL + Caption to Row 4]
          β”‚
    β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β–Ό                                        β–Ό
── FACEBOOK ──                       ── INSTAGRAM ──
[Init Upload Session]                [Post Container] β†’ { id: "17867..." }
[Upload Hosted File]                 [Wait 30s]
[Publish Reel]                       [Publish to Instagram]
[Get Upload Status]                  [Wait 30s]
[Wait 30s]                           [Fetch Video Binary (HTTP)]
    β”‚                                        β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β–Ό
                 ── YOUTUBE ──
                 [Upload Video] β†’ { uploadId: "abc123..." }
                 [Wait 10s]
                 [Add to Playlist]
                 [Wait 10s]
                 [Sheets: Append TikTok Row]
                       β”‚
                       β–Ό
                 [Sheets: Update Status β†’ "Video Shared"]
                 [Google Drive: Move to Archive Folder]
                       β”‚
                       β–Ό
            βœ… Video live on Facebook, Instagram & YouTube
               TikTok row ready in queue sheet

Testing Your Workflow

  1. Add a short test video (under 60 seconds) to your Google Drive “pending” folder.
  2. Add a row to Tab 1 of your Google Sheet with Status = pending, leave other fields blank.
  3. In n8n, click Test workflow. Watch the execution β€” look for green checks on each node.
  4. Confirm the Code node output shows both public_id_underscores and public_id_no_underscores.
  5. Check your Cloudinary account to verify the video was uploaded to the Social_Media folder.
  6. Confirm the Google Sheet row now has a video_url and Video Caption filled in.
  7. Check your Facebook Page and Instagram profile for the new Reel (allow 2–3 minutes for processing).
  8. Check your YouTube channel for the new video and confirm it was added to the correct playlist.
  9. Verify the TikTok sheet has a new row appended.
  10. Confirm the original Google Drive file has been moved to the archive folder.
ProblemLikely CauseFix
Google Drive returns no files Folder ID is empty or incorrect in the Search node Open the Google Drive node β†’ Filter β†’ Folder ID and enter your “pending” folder’s ID (copy from the Drive URL)
Cloudinary upload fails Google Drive webContentLink requires authentication Make sure the file in Drive is shared as “Anyone with the link can view” β€” Cloudinary needs a public download URL
OpenRouter returns an error Invalid or expired API key in the HTTP Header credential Check your OpenRouter API key at openrouter.ai/keys and update the n8n credential
Facebook Reel fails: “Invalid node” Facebook Page ID is still the placeholder Replace YOUR_FACEBOOK_PAGE_ID in the Facebook Graph API nodes with your actual Page ID (found in Meta Business Suite β†’ Settings β†’ Page Info)
Instagram publish fails: “The media container is not ready” 30-second wait wasn’t long enough for processing Increase the Wait node before “Upload to instagram” to 60 seconds for larger videos
YouTube upload returns 403 OAuth token expired or insufficient scopes Reconnect the YouTube OAuth2 credential in n8n, ensuring the youtube.upload scope is granted
Google Sheet not updating Column name mismatch (case-sensitive) Confirm your sheet headers match exactly: video_url, Video Caption, Status

Frequently Asked Questions

Do I need a paid Cloudinary plan for this to work?

No β€” Cloudinary’s free tier supports up to 25 GB of storage and 25 GB monthly bandwidth, which is plenty for most small to medium posting schedules. If you’re posting long-form videos or several per day, upgrade to a paid plan. The secure_url generated for each upload never expires, so your CDN links remain valid indefinitely.

Can I change the AI model that generates captions?

Yes. The “video Caption” node is a standard HTTP Request to OpenRouter. Change the model field in the JSON body to any OpenRouter-supported model β€” for example, openai/gpt-4o-mini for lower cost or meta-llama/llama-3-70b-instruct for an open-source option. The system prompt and output format stay the same regardless of model.

Why does the workflow use Cloudinary instead of uploading directly from Drive?

Facebook and Instagram’s APIs require a publicly accessible video URL that their servers can download. Google Drive download links require authentication and have rate limits. Cloudinary solves both problems: it fetches the file from Drive during upload and serves it via a clean, public CDN URL that all four platforms can reliably access. It also handles transcoding and format compatibility automatically.

Can this post to TikTok automatically too?

The workflow currently stages TikTok data in a separate sheet tab (video URL + caption) but doesn’t publish directly, because TikTok’s Content Posting API requires business account approval and has stricter OAuth flows. The staged row is ready to wire into a TikTok API node once you have access β€” or you can use a tool like Buffer or Later to pick up from that sheet.

What happens if the workflow runs and there’s no video in the Drive folder?

The Google Drive “Search files and folders” node will return an empty result set, and the workflow will stop at that point with no error β€” it simply has nothing to process. No rows will be updated, no API calls will be made. You can optionally add an IF node after the Drive search to send yourself a Telegram or email notification when no videos are found.

Can I post to multiple Facebook Pages or Instagram accounts?

Yes, but you’ll need a separate set of Facebook Graph API nodes for each page or account, each with its own credential. The cleanest approach is to duplicate the Facebook and Instagram sections of the workflow and swap the Page ID and Instagram User ID in the cloned nodes. One n8n workflow can handle multiple accounts in parallel using a Split In Batches node at the top.

πŸš€ Get the Social Media Automation Template

Download the ready-to-import workflow JSON, the Google Sheets setup template with both tabs pre-configured, and a step-by-step credential guide β€” everything you need to go from zero to cross-platform posting in under 20 minutes.

Get the Template β†’

Instant download Β· Works on n8n Cloud and self-hosted

What’s Next?

  • Add a Telegram alert β€” wire a Telegram node at the very end to send yourself a confirmation message with the video title and publish status every time a video goes live.
  • Schedule multiple posts per day β€” duplicate the workflow and set one trigger for 9 AM and another for 6 PM to double your daily output without any extra manual work.
  • Auto-generate video thumbnails β€” add a Cloudinary transformation step that extracts a frame from the uploaded video and creates a custom thumbnail you can use as the YouTube cover image.
  • Connect a content calendar β€” replace the manual “add a file to Drive” step with a Notion or Airtable database where you queue up video ideas, titles, and target dates, and let the workflow pick the next scheduled entry automatically.
  • Add TikTok direct posting β€” once your TikTok Content Posting API access is approved, add a TikTok node after the “Append row in sheet” step and close the loop on all five platforms in a single run.
n8n Social Media Automation Instagram Reels Facebook Reels YouTube Automation Cloudinary Google Drive OpenRouter AI Caption Generator No Code