# 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](https://community.n8n.io) and [Make.com forum](https://community.make.com). 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](https://my.blotato.com) with your social accounts connected
* A [Blotato API key](https://my.blotato.com/settings/api)

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

```json
{
  "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](https://help.blotato.com/api/api-reference/schedule-slots) configured in Blotato (e.g., "post to Instagram at 9am, 12pm, and 5pm"), set `useNextFreeSlot: true` instead of a specific time:

```json
{
  "post": { ... },
  "useNextFreeSlot": true
}
```

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 node](https://help.blotato.com/api/n8n/n8n-blotato-node) 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 Everywhere](https://help.blotato.com/api/n8n/n8n-basics)

## 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 System](https://help.blotato.com/api/make.com/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:

| 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](https://help.blotato.com/api/api-reference/schedules):

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

* [Is it possible to use n8n self-hosted as a social media post scheduler?](https://community.n8n.io/t/is-it-possible-to-use-n8n-self-hosted-as-a-social-media-post-scheduler/228892) (n8n)
* [Automating posting for multiple social media](https://community.n8n.io/t/automating-posting-for-multiple-social-media/48086) (n8n)
* [Social Media IG+FB Scheduling Automation](https://community.make.com/t/social-media-ig-fb-scheduling-automation/20495) (Make)
* [Airtable Social Scheduling](https://community.make.com/t/airtable-social-scheduling/54173) (Make)
* [Auto Publish from Notion to Multiple Platforms](https://community.make.com/t/auto-publish-from-notion-to-multiple-platforms/28319) (Make)
