You want to manage a content calendar in a spreadsheet, set a date and time for each post, and have it publish automatically. No monthly SaaS subscription. No AI-generated content. Your words, your schedule, your workflow.
This is a frequent request on the n8n forum and Make.com forum. Users want a self-hosted alternative to Buffer or Hootsuite. The problem: building a reliable multi-platform scheduler from scratch means dealing with each platform's API quirks, timezone handling, and retry logic. Most attempts stall at "it works for Twitter but I gave up on Instagram."
Here is how to build a working scheduler in under an hour.
What you need
A Google Sheet (or Airtable, or Notion database) as your content calendar
The Blotato Publish API accepts a scheduledTime field. Instead of publishing immediately, the post queues and goes live at the time you specify.
Your spreadsheet has these columns:
Text
Image URL
Platform
Account ID
Scheduled Time
Status
My post text
https://example.com/img.jpg
instagram
acc_123
2026-04-05T09:00:00+00:00
Ready
The request body looks like this:
{"post":{"accountId":"acc_123","content":{"text":"My post text","mediaUrls":["https://example.com/img.jpg"],"platform":"instagram"},"target":{"targetType":"instagram"}},"scheduledTime":"2026-04-05T09:00:00+00:00"}
The scheduledTime field is a sibling of post, not nested inside it. Use ISO 8601 format with a timezone offset. The post queues on Blotato's side and publishes at that time.
Option B: use your calendar slots
If you have schedule slots configured in Blotato (e.g., "post to Instagram at 9am, 12pm, and 5pm"), set useNextFreeSlot: true instead of a specific time:
Blotato picks the next open slot for that platform. This approach works well when you batch-create content and want it spread across your schedule without manually assigning times.
Step-by-step: n8n scheduler
Create a Google Sheet with columns: Text, Image URL, Platform, Account ID, Scheduled Time, Status.
Add rows for your upcoming posts. Set Status to "Ready" for posts that should be published.
In n8n, add a Google Sheets trigger node. Set it to watch for rows where Status = "Ready".
Map the spreadsheet columns to the Blotato node fields:
text from the Text column
mediaUrls from the Image URL column (split by comma if you have multiple URLs)
platform and targetType from the Platform column
accountId from the Account ID column
Set scheduledTime from the Scheduled Time column.
Add a Google Sheets "Update Row" node after the Blotato node to change Status from "Ready" to "Scheduled".
Activate the workflow.
New rows with Status = "Ready" trigger the workflow. Blotato queues the post. The sheet updates to "Scheduled." You manage your entire content calendar from the spreadsheet.
To post the same content to multiple platforms, add one row per platform or use a Router (Make) / Split In Batches (n8n) node to fan out a single row to multiple Blotato requests.
Example spreadsheet with multi-platform rows:
Text
Image URL
Platform
Account ID
Scheduled Time
Status
Launch day!
https://example.com/img.jpg
twitter
acc_tw
2026-04-05T09:00:00+00:00
Ready
Launch day!
https://example.com/img.jpg
linkedin
acc_li
2026-04-05T09:00:00+00:00
Ready
Launch day!
https://example.com/img.jpg
instagram
acc_ig
2026-04-05T09:05:00+00:00
Ready
Each row triggers independently. Stagger the times by a few minutes if you want posts to appear sequentially.
Managing scheduled posts
After scheduling, you have full control over queued posts through the Blotato Schedule API:
List scheduled posts:GET /v2/schedules -- see all queued posts.
Update a scheduled post:PUT /v2/schedules/{id} -- change the text, media, or time.
Delete a scheduled post:DELETE /v2/schedules/{id} -- cancel before it publishes.
This gives you the same control as a SaaS scheduler, without the monthly fee.
Forum threads referenced
These are the community discussions that prompted this post: