Build a Social Media Scheduler with n8n or Make
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
An n8n instance or Make.com account
A Blotato account with your social accounts connected
Option A: scheduled posting with timestamps
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:
My post text
https://example.com/img.jpg
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".
Install the Blotato community node if you have not already.
Add a Blotato "Publish Post" node.
Map the spreadsheet columns to the Blotato node fields:
textfrom the Text columnmediaUrlsfrom the Image URL column (split by comma if you have multiple URLs)platformandtargetTypefrom the Platform columnaccountIdfrom the Account ID column
Set
scheduledTimefrom 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.
For a complete template and video walkthrough, see: n8n Post Everywhere
Step-by-step: Make.com scheduler
Create a Google Sheet with the same columns as above.
In Make.com, add a Google Sheets "Watch Rows" module.
Add an HTTP module configured as:
Method: POST
URL:
https://backend.blotato.com/v2/postsHeaders:
blotato-api-key: your-api-keyBody: JSON with the post data and
scheduledTimemapped from the spreadsheet
Add a Google Sheets "Update a Row" module to set Status = "Scheduled".
Activate the scenario.
For a blueprint and detailed walkthrough, see: Make AI Social Media System
Multi-platform scheduling from one row
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:
Launch day!
https://example.com/img.jpg
acc_tw
2026-04-05T09:00:00+00:00
Ready
Launch day!
https://example.com/img.jpg
acc_li
2026-04-05T09:00:00+00:00
Ready
Launch day!
https://example.com/img.jpg
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:
PATCH /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:
Airtable Social Scheduling (Make)
Last updated