Social Posting Kitfor n8n
Get the kit

Set it up

Optional AI planner

This workflow only writes to the Google Sheet (and may upload media to Zernio). It never publishes to Facebook and it never sets status to approved.

Import workflows/social-content-ai-planner.json only if you want AI to draft the week. Leave it inactive until you are ready for it to append rows. There is no planner screenshot in this kit; follow the steps below.

#What it does

  1. Every Monday at 08:00 Asia/Manila (or on a Manual Test Run) it reads the queue tab.
  2. It asks the selected chat model for enough new posts to reach posts_per_week in the next 7 days, avoiding captions and time slots already taken.
  3. Validate & Normalize Posts always sets status = pending_approval and assigns ids like ai-20261117-1.
  4. If image_provider is not none, it generates a square image, uploads it with Zernio presign + PUT, and stores the publicUrl as image_url. A failed image still queues the caption, with error explaining why.
  5. It appends a planner_log row (time, posts_created, notes).

A person then reviews the caption, time, and image, and only then sets status to approved. The posting workflow ignores pending_approval.

#Providers

OpenAI xAI OpenRouter (default)
Captions Official Chat Model v1.2, default gpt-4o-mini Official Grok Chat Model, default grok-4.3 Official OpenRouter Chat Model, default openrouter/free
Images (HTTP Request) POST /v1/images/generations, default gpt-image-1-mini (b64) POST https://api.x.ai/v1/images/generations, default grok-imagine-image POST https://openrouter.ai/api/v1/images, default recraft/recraft-v4.1-flash at about $0.007/image
Notes API billing is separate from ChatGPT Plus API billing is separate from SuperGrok Free text model is rate-limited. No free image models

You can mix providers (for example OpenRouter captions and image_provider = none). Set ai_provider and image_provider independently in Config (openai, xai, openrouter; images also allow none).

OpenRouter :free captions: 20 requests/minute; 50/day if you have purchased less than $10 in credits, 1000/day at or above $10. A negative balance can block free models.

#Setup

  1. Add the planner_log tab to the same Sheet as the queue.
  2. Fill planner Config: google_sheet_id, brand fields, posts_per_week, preferred_posting_times, timezone (default Asia/Manila), ai_provider, image_provider, and the model fields you use.
  3. Create only the credentials you need, plus Google Sheets, and Zernio API if images are on. If you use OpenRouter for both captions and images, create two credentials with similar names: the official OpenRouter API type for the chat model, and a Header Auth Authorization: Bearer … credential for the image HTTP node.

In the buyer JSON, google_sheet_id is the placeholder YOUR_SHEET_ID. Paste your real Sheet ID after import.

  1. Click Execute workflow once. Confirm new pending_approval rows and a planner_log line. Do not approve them until you have read the captions.
  2. Approve and publish within 7 days of a Zernio image upload. Unused uploads expire after 7 days unless a post has used them.

The planner_log tab uses the header time, posts_created, notes. There is no planner-log screenshot in this kit.

The planner was not part of the 11 November 2026 live posting test. Treat the first planner run as its own review, still with the workflow inactive if you want to avoid the weekly schedule.

Social Posting Kit for n8n: a Google Sheet content queue, a human approval gate, and publishing to a Facebook Page through Zernio.

Checked against n8n 2.47.3. n8n, Google Sheets, Facebook, Zernio, OpenAI, xAI and OpenRouter are trademarks of their owners; this kit is not affiliated with them. Sample data is fictional.