Social Posting Kitfor n8n
Get the kit

Reference

Node reference

Built for n8n 2.47.3. Behaviour below comes from the workflow files, not from guessed node features. Credential ids in those files are placeholders — select your own after import.

The full field-by-field write-up, including the planner's prompt and validation rules, is in the kit's docs/node-reference.md. This page covers what each node does and how they connect.

#Posting workflow

Social Posting – Facebook Page via Zernio (Content Queue). Settings: execution order v1, saveManualExecutions: true. No workflow timezone is set; scheduled_at values with an offset are compared in the Code node, and posted_at is $now.toISO().

Publish via Zernio: POST /v1/posts, Header Auth, Idempotency-Key expression, and a successful output with IDs boxed.
The JSON body uses expressions for content, the Facebook accountId, and publishNow.
Node Type What it does
Every 15 Minutes Schedule Trigger v1.2 Every 15 minutes, only while published.
Manual Test Run Manual Trigger v1 Same path when you click Execute workflow.
Config Set v3.4 Per-client settings: client_name, zernio_account_id, zernio_profile_id, google_sheet_id, queue_sheet_name (default queue), max_posts_per_run (5), ai_model, ai_brand_voice.
Read Content Queue Google Sheets v4.5 · read Reads the queue tab from Config. Retries 3× / 3 s. alwaysOutputData is not set.
Select Due Approved Posts Code v2 Keeps rows whose platform includes facebook, status is exactly approved, id and message are present, and scheduled_at is due (missing date = now; invalid dates skipped). Caps at max_posts_per_run.
Lock Row (publishing) Google Sheets v4.5 · update Match on id. Sets status = publishing, clears error. Retries 3× / 3 s.
AI Caption Polish (optional) HTTP Request v4.2 Deactivated by default. OpenAI Chat Completions, 2 retries. While off, the original caption continues.
Prepare Post Set v3.4 Builds post_message (AI text if present, else the original), plus image_url and link.
Publish via Zernio HTTP Request v4.2 POST https://zernio.com/api/v1/posts, Header Auth Zernio API. Body: content, optional mediaItems when image_url is set, platforms: [{ platform: 'facebook', accountId }], publishNow: true. link is not sent. Header Idempotency-Key = row id. 3 retries / 2 s. Error output → Mark Failed.
Mark Posted Google Sheets v4.5 · update posted, post_id (Zernio id and platformPostUrl joined with |), posted_at, error cleared.
Mark Failed Google Sheets v4.5 · update failed plus the first 500 characters of the error.
Raise Failure Alert Stop and Error v1 Fails the execution so the Error Handler can log it.

#Status lifecycle

draft or pending_approval → approved (human) → publishing (lock) → posted or failed. Only approved is postable.

#Error handler

Error Trigger → Format Error → Log Error to Sheet.
Node Type What it does
Error Trigger Error Trigger v1 Starts when a linked workflow fails.
Format Error Set v3.4 time, workflow, execution_id, execution_url, failed_node, error_message (first 500 characters).
Log Error to Sheet Google Sheets v4.5 · append Tab error_log. Document ID is pasted on this node (not read from Config). Retries 3× / 3 s.

Publish this workflow first, then select it under the posting workflow's Settings → Error workflow.

#AI planner (optional)

Social Content – AI Planner (fills Content Queue). Timezone Asia/Manila. It never calls Zernio's create-post endpoint and never sets approved.

Stage Nodes What happens
Trigger Every Monday 08:00, Manual, Config, Read Content Queue alwaysOutputData is on so an empty sheet still continues.
Brief Prepare Prompt Context, Need New Posts? Counts already-planned rows in the next 7 days; skips generation if the week is full.
Captions Switch Caption Provider → one Basic LLM Chain (OpenAI, xAI, or OpenRouter) + Structured Output Parser Unknown ai_provider hits Stop and Error.
Normalize Validate & Normalize Posts Hardcodes pending_approval, ids ai-YYYYMMDD-n, future unique times, valid https links only.
Images Switch Image Provider → generate (or Skip Image) → Prepare Image Binary Failures still keep the caption.
Upload Has Image Binary? → Zernio Presign → PUT (no auth) → Apply Image URL Presign/PUT errors go to Mark Image Failed, then the caption is still appended.
Log Append to Content Queue, Build / Log Already Planned, Append Planner Log Queue status is hardcoded pending_approval.

Default models: captions openrouter/free, images recraft/recraft-v4.1-flash. Details and credential types: Optional AI planner.

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.