Quick overview
Schedule your existing social posts from Google Sheets after exact human approval. Validate timezone-aware dates, destination accounts and optional image bytes, store each request before submission, and track Blotato scheduling results without blindly repeating uncertain publication requests.
How it works
- Reads a bounded SchedulerQueue and its authoritative native Data Table. It rejects duplicate job IDs, malformed dates, unsupported destinations and changes to an already registered brief.
- Normalizes each requested timestamp to UTC. For optional images, downloads an allowlisted HTTPS PNG or JPEG and saves its byte hash before creating an immutable review record.
- An authenticated n8n reviewer downloads the exact text, image, destination settings and UTC timestamp, then approves the saved content hash and version. A Sheet permission flag alone cannot authorize submission.
- The worker verifies an approved image again, saves an exclusive request intent using compare-and-swap conditions, and submits one destination with scheduledTime beside post at the request root.
- Stores each returned postSubmissionId. Scheduled results wait until their recorded time before further status checks; published is reported only after the provider confirms it.
- Mirrors status into Google Sheets using RAW values. Lost or uncertain responses stop for authenticated reconciliation with a verified original submission ID instead of an automatic POST retry.
Setup
- Import workflow.json and run only the credential-free scheduling demo first. Inspect the resulting ZIP; it contains two synthetic scheduling requests and creates no real post.
- Create the exact SchedulerQueue headers and string-column Data Table described in README.txt, or run the optional setup utility after connecting your Google Sheets credential. The setup utility creates new resources.
- In both policy nodes, set the same spreadsheet ID, queue tab, state table ID, connected account IDs, Facebook Page ID, reviewer emails and optional trusted image hosts. Connect Google Sheets OAuth2 to both worker Sheet nodes.
- Connect Header Auth with header blotato-api-key to both provider HTTP nodes. Keep publishingEnabled=false while configuring. Add your own text with a unique job ID, explicit timezone timestamp, content_allowed=TRUE and status=ready.
- Run intake, download its authenticated review package, inspect the content and approve using the current version/hash.
- Only then intentionally enable publishing and run the worker manually before activating its minute schedule.
Requirements
- Designed for n8n 2.28.6 with native Data Tables, authenticated n8n User Forms and binary-data helpers. Requires Google Sheets OAuth2 and a Blotato API account with your intended LinkedIn, Facebook, X or optional Instagram account connected. Facebook requires a Page ID; Instagram requires an approved image. Images must be publicly accessible PNG/JPEG files on explicitly trusted HTTPS hosts. Hosting and Blotato/platform fees are separate. No OpenAI account is needed. Tests use isolated native n8n and simulated Sheets/provider/authentication fixtures; real posting, browser login, OAuth and n8n Cloud were not tested.
Customization
- Change row text, supported destinations, image URL and timezone-aware schedule before registering a new job. Configure reviewer emails, account/Page IDs, trusted image hosts, lead-time limits, approval lifetime and poll limits in both policy nodes. The adapter supports one to four destinations from linkedin, facebook, twitter and instagram. Its X length check is intentionally conservative for Unicode and URLs. Registered jobs are immutable: use a new job ID for revisions. Cancellation or rescheduling of an existing provider job must be handled in Blotato; this adapter does not implement those API operations.
Additional info
Independent implementation for existing approved content; it does not generate AI posts or media. All workflow exports are inactive and publication is disabled by default. Approval authorizes scheduling by the enabled worker. Scheduled is not published. Partial multi-platform outcomes are possible and are tracked separately. A preflight image hash cannot prove the bytes Blotato later fetches from a public URL; use controlled immutable versioned hosting and inspect the images. No provider credentials or private resource IDs are embedded. Official helper 13868 was used internally for local parsing/layout checks without OpenAI calls; its workflow is not included or resold.