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 forumarrow-up-right and Make.com forumarrow-up-right. 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

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:

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 slotsarrow-up-right 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

  1. Create a Google Sheet with columns: Text, Image URL, Platform, Account ID, Scheduled Time, Status.

  2. Add rows for your upcoming posts. Set Status to "Ready" for posts that should be published.

  3. In n8n, add a Google Sheets trigger node. Set it to watch for rows where Status = "Ready".

  4. Install the Blotato community nodearrow-up-right if you have not already.

  5. Add a Blotato "Publish Post" node.

  6. 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

  7. Set scheduledTime from the Scheduled Time column.

  8. Add a Google Sheets "Update Row" node after the Blotato node to change Status from "Ready" to "Scheduled".

  9. 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 Everywherearrow-up-right

Step-by-step: Make.com scheduler

  1. Create a Google Sheet with the same columns as above.

  2. In Make.com, add a Google Sheets "Watch Rows" module.

  3. Add an HTTP module configured as:

    • Method: POST

    • URL: https://backend.blotato.com/v2/posts

    • Headers: blotato-api-key: your-api-key

    • Body: JSON with the post data and scheduledTime mapped from the spreadsheet

  4. Add a Google Sheets "Update a Row" module to set Status = "Scheduled".

  5. Activate the scenario.

For a blueprint and detailed walkthrough, see: Make AI Social Media Systemarrow-up-right

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:

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 APIarrow-up-right:

  • 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:

Last updated