I built a fully automated social media posting pipeline with n8n (topic → AI content → branded image → scheduled posting)

Overview

I got tired of manually writing and posting content for LinkedIn, Instagram, and Twitter/X four times a week, so I built an end-to-end n8n pipeline that handles the whole thing:

topic list → AI-generated, research-backed copy → branded image → cloud storage → scheduled multi-platform publishing

Zero manual steps once it’s running. I’ve since packaged a version of this as a client service, but the core workflow below is the one doing the work.

What it does

  1. Runs on a schedule (Sun/Tue/Thu/Sat, 9 AM)
  2. Pulls the next unused topic from a Google Sheet
  3. Generates platform-specific copy (LinkedIn post, Instagram caption, Twitter/X post + hashtags) using GPT-4o, grounded with a live SerpAPI search so the content reflects current news/trends rather than just the model’s training data
  4. Parses the AI output into structured fields
  5. In parallel: generates an image for the post, and pulls the brand logo from the client’s site
  6. Merges the logo onto the generated image (branding)
  7. Uploads the branded image to Google Drive and makes it public (needed so downstream tools can fetch the image via URL)
  8. Logs everything (captions, hashtags, image link) back to the same Sheet as a historical record
  9. Sends the final content + image URL out for scheduled publishing on LinkedIn, Instagram, and Twitter

Nodes used

  • Schedule Trigger — cron-based trigger (runs 4x/week)
  • Google Sheets — reads next topic; later appends generated content back as a log
  • AI Agent (OpenAI/GPT-4o) — content generation, with SerpAPI wired in as a tool for live web search
  • Output Parser — structures the AI response into separate fields (LinkedIn/Instagram/Twitter/hashtags)
  • Image generation node — creates the visual from a prompt
  • HTTP Request — fetches the client’s logo from their website
  • Edit Image — resizes the logo and overlays it onto the generated image
  • Google Drive — uploads image, sets public sharing permissions
  • HTTP Request / API call — sends structured content + image URL to the scheduling platform (Buffer, in my case — not a native n8n node, so this is a plain HTTP Request against Buffer’s API)

Requirements / credentials

  • OpenAI API key (GPT-4o access)
  • SerpAPI key
  • Google Sheets + Google Drive OAuth credentials
  • An image generation API/model of your choice
  • A scheduling tool with an API (I used Buffer) — swap this node for whatever you use

Setup notes for anyone replicating this

  • Pre-fill your Google Sheet with topics in one column; the workflow consumes them top-down and marks/logs what’s been posted so you don’t need a separate content calendar tool
  • Run image generation and the logo fetch in parallel (not sequentially) — saves real execution time
  • Making the Drive file public is required if your scheduler needs a fetchable URL rather than a direct upload
  • Logging generated content back to the Sheet doubles as your audit trail — no digging through n8n execution history to find “what did we post two weeks ago”

Workflow file

We build automation workflows like this one for clients at StepUp Analytics — mainly n8n-based content, ops, and reporting pipelines for small businesses that don’t have the bandwidth to run this stuff manually. If you want to see more of what we do: stepupanalytics.com.

If you have any suggestions on any of this — better branding logic, smarter scheduling, a different image model, or anything else — drop them in the comments below, I’d love to hear them.

4 Likes

Building the orchestration in n8n is definitely the way to go. the main bottleneck most people run into is state management and token refreshing when hitting social APIs directly from HTTP nodes.

Our setup uses airtable to stage content, n8n for the webhook trigger, and blotato as the execution node. blotato handles the text parsing, carousel/video rendering, and multi-platform publishing under a flat-rate plan so your n8n canvas doesn’t get clogged with retry loops.

How are you handling rate limits when posting across multiple channels at once?