Social Posting Kitfor n8n
Get the kit

Set it up

Step-by-step setup

Work through these steps with the posting workflow still unpublished. The first live post is on the next page.

#Prepare the Google Sheet

  1. Create a Google Sheet, or make a copy of the template you were given.
  2. Name the first tab queue. Row 1, in this order: id, platform, message, image_url, link, scheduled_at, status, post_id, error, posted_at You can import sample-queue.csv. Delete or rewrite sample rows before you go live; keep the header.
  3. Add a tab error_log with time, workflow, execution_id, execution_url, failed_node, error_message (see error-log-header.csv).
  4. If you will use the AI planner, add planner_log: time, posts_created, notes.
  5. Copy the Sheet ID from https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit.
  6. Share the Sheet (Editor) with the Google account you will use in n8n.

sample-queue.csv is the starter queue tab (fictional rows only). After a successful post, Mark Posted fills status, post_id, and posted_at on that row.

id platform message image_url link scheduled_at status post_id error posted_at
demo-001 facebook Hello from our demo Page! This post was published automatically from our content queue. #automation 2026-11-11T09:00:00+08:00 approved
demo-002 facebook New guide: 5 ways to keep your social calendar on track. Read it here: https://example.com 2026-11-12T10:00:00+08:00 draft
demo-003 facebook Behind the scenes: our team at work. What would you like to see next? https://upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg 2026-11-12T18:00:00+08:00 approved

Select Due Approved Posts would keep demo-001 and demo-003 (both approved and due once scheduled_at is in the past) and skip demo-002 (draft). There is no live Google Sheet screenshot in this kit.

#Connect the Facebook Page in Zernio

The client never creates a Meta developer app.

  1. In your Zernio account, create an API key (shown once) and a profile for this client.
  2. Request a Facebook connect URL, for example GET https://zernio.com/api/v1/connect/facebook?profileId={profileId}&redirect_url=https://your-app/callback. Optional: welcome=true and brandName / logoUrl; scopes=posting if you only need publishing now; handoff=true for a QR code. The link lasts 30 minutes.
  3. The client signs in with Facebook and picks the Page (they must be Admin or Editor). You get back accountId and profileId.
  4. Keep accountId for Config zernio_account_id. Personal profiles cannot post. Meta's consent screen still names the Zernio app.

Official references: Connecting accounts, Create post.

#Import the workflows

  1. n8n → Create workflow → ⋯ → Import from File… → workflows/social-posting-error-handler.json → Save.
  2. Repeat for workflows/social-posting-zernio.json.
  3. Optional: import workflows/social-content-ai-planner.json. These files use placeholders such as YOUR_SHEET_ID and YOUR_CREDENTIAL_ID.
  4. All import inactive. Credential badges are expected until the next step.
The posting workflow after import, with sticky notes on the canvas.

#Create credentials

#Google Sheets OAuth2 API

  • n8n Cloud: Sign in with Google. Allow Sheets and Drive.
  • Self-hosted: In Google Cloud Console enable Google Sheets API and Google Drive API. Configure the OAuth consent screen (add your Google account as a test user if the app is External and in Testing). Create a Web application OAuth client and paste the redirect URI from n8n:
Text
https://YOUR-N8N-DOMAIN/rest/oauth2-credential/callback

Copy it exactly, including https and any port. Then paste Client ID and Secret into n8n and sign in.

Select this credential on Read Content Queue, Lock Row (publishing), Mark Posted, Mark Failed, and Log Error to Sheet.

The n8n credentials list. Select Google Sheets OAuth2 and Header Auth named Zernio API on the matching nodes.

#Header Auth: Zernio API

  1. Credentials → Header Auth, name it Zernio API.
  2. Name: Authorization. Value: Bearer plus your Zernio API key (one space after Bearer).
  3. Select it on Publish via Zernio (and on Zernio Presign if you use the planner).

Never put the Zernio API key in a node, the Sheet, or a screenshot.

#Fill in Config

Open Config on the posting workflow and set:

Field Example
client_name Your Business
zernio_account_id YOUR_ACCOUNT_ID
zernio_profile_id YOUR_PROFILE_ID
google_sheet_id YOUR_SHEET_ID
queue_sheet_name queue
max_posts_per_run 5

On Log Error to Sheet in the error handler, paste the same Sheet ID (that node does not read Config). Keep the tab name error_log.

Config fields. Live Sheet and Zernio IDs are boxed as YOUR_SHEET_ID, YOUR_ACCOUNT_ID, and YOUR_PROFILE_ID.
  1. Open Social Posting – Error Handler and Publish it. It only runs when another workflow fails; it never posts. On n8n 2.47.3 the Error workflow picker greys out unpublished workflows and ones without an Error Trigger.
  2. Posting workflow → ⋯ → Settings → Error workflow → select it → Save.

The buyer JSON ships with settings.errorWorkflow set to YOUR_ERROR_WORKFLOW_ID. Choosing the published error handler in Settings replaces that placeholder.

When this is done, go to Test and go live for the one-row test post. Leave the posting workflow unpublished until that test succeeds.

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.