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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.blotato.com/blog/build-social-media-scheduler-n8n-make.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
