Automation

Auto-post videos from n8n to TikTok, Instagram, YouTube and more

Most n8n templates for posting video wire up each platform's API on its own, with its own app review, tokens and limits. A simpler workflow sends the video once to a publishing API and lets it reach every platform. Step by step, with the HTTP Request node.

The people who build Reelspan

8 min read

Cover illustration: the title 'Auto-post videos from n8n to TikTok, Instagram, YouTube and more' on a dark card with Reelspan's crop-frame mark

n8n is a good fit for content workflows: a new video lands in a folder, a sheet gets a new row, or an AI step finishes an edit, and the workflow takes it from there. The last step, actually posting the video, is where most workflows get complicated.

This guide shows a workflow that posts one video to TikTok, Instagram, YouTube and the other platforms you use with one HTTP Request node. It also covers how to schedule the posts and how to check that each one went live.

Why posting video from n8n gets complicated

n8n has a built-in YouTube node that can upload videos, but no built-in TikTok or Instagram node, so most community templates connect to those platforms' APIs directly with HTTP Request nodes: one branch for TikTok, one for Instagram, one for YouTube. Each branch brings its platform's own rules:

  • App reviews before anyone else can use it. TikTok keeps every post from an unaudited app private, and allows at most five users to post through it in a 24-hour window (content sharing guidelines). On Meta, with Standard Access only people with a role on your app can grant it permissions; reaching anyone else needs Advanced Access, which requires Business Verification and often App Review (access levels). Our guides to the TikTok audit and the YouTube quota cover these in detail.
  • Different upload styles. YouTube uses resumable uploads, TikTok uploads in chunks or pulls from a URL, and Instagram creates a container you poll before publishing.
  • Tokens that expire on different clocks. Some last hours, some 60 days, so each branch needs its own refresh logic.
  • Different limits on length, size and caption text. See our guides to video length limits and caption limits.

All of this is doable, and for one platform it's fine. For several, the workflow becomes mostly plumbing.

The simpler shape: one request, every platform

A publishing API takes one video and posts it to every connected platform. It does the reviews, uploads, tokens and retries itself. In n8n that turns the branches into a single node:

Trigger → get the video → HTTP Request (publish) → Wait → HTTP Request (status) → notify

The examples below use Reelspan's API. Reelspan uses the same endpoints and fields as Upload-Post's API, so templates written for Upload-Post work after changing the base URL and key.

Before you start

  1. Connect your accounts in Reelspan, under a profile (for example brand), and connect TikTok, Instagram, YouTube and the others you post to.
  2. Create an API key in Reelspan's dashboard.
  3. Store the key in n8n. Create an HTTP Request credential of type Header Auth (n8n credentials docs) with:
    • Name: Authorization
    • Value: Apikey YOUR_KEY

Keeping the key in a credential, not in the node, means it never appears in exported workflows.

Step 1: The trigger

Pick whatever starts your workflow:

  • Schedule Trigger (docs) to post at set times,
  • a Google Drive or Dropbox trigger when a new video arrives,
  • a Google Sheets row with a video URL and caption,
  • or a Webhook called by another system.

Step 2: Get the video

You have two options:

  • A public URL. If the video is already at a public https:// address, you can send the URL instead of the file. Nothing else to do here.
  • The file itself. Use a node that downloads the file, such as Google Drive's download operation or an HTTP Request that fetches a file. n8n stores it as binary data on the item, usually in a property called data.

Step 3: Publish with the HTTP Request node

Add an HTTP Request node (n8n docs) and set:

Setting Value
Method POST
URL https://app.reelspan.com/api/upload
Authentication Generic Credential Type → Header Auth → the credential from above
Send Body On
Body Content Type Form-Data

Then add these body parameters:

Name Type Value
user Form Data your profile name, e.g. brand
platform[] Form Data tiktok
platform[] Form Data instagram
platform[] Form Data youtube
video n8n Binary File input data field: data
title Form Data the caption (YouTube uses it as the title)
async_upload Form Data true

Repeat platform[] once per platform you want, using the names from the API reference.

Sending a URL instead of a file: make video a normal Form Data field with the URL as its value.

Different captions per platform

One caption rarely fits everywhere: YouTube's title is limited to 100 characters, while TikTok and Instagram allow 2,200. Add per-platform fields to override title where needed:

  • youtube_title for a short YouTube title, and youtube_description for the description,
  • tiktok_title, instagram_title and x_title for those platforms.

Platforms without an override use title.

TikTok settings

By default Reelspan posts TikToks publicly when the account allows it, and otherwise uses the first privacy option TikTok offers for that account. To choose, add privacy_level, for example MUTUAL_FOLLOW_FRIENDS or SELF_ONLY. Or set post_mode to MEDIA_UPLOAD to send the video to the creator's TikTok inbox to finish in the app.

Step 4: Schedule instead of posting now

You can schedule in two ways:

  • Let n8n decide when. Use a Schedule Trigger and post immediately each time it fires.
  • Let the API hold the post. Add scheduled_date (an ISO 8601 date and time) and timezone (for example Europe/London) to the request. The response returns a job_id, and the post goes out at that time even if your n8n instance is off. Reelspan accepts dates up to a year ahead.

The second option is more reliable for posts days ahead, and it's the only way to "schedule" on platforms whose own APIs can't, such as Instagram and TikTok. Our scheduling guide explains those platform limits.

Step 5: Check the result on every platform

With async_upload set, the publish request returns a request_id straight away. The upload then carries on in the background, because some platforms process video for a minute or more. To check it:

  1. Add a Wait node (docs), for example two minutes.
  2. Add an HTTP Request node: GET https://app.reelspan.com/api/uploadposts/status, with the query parameter request_id set to {{ $json.request_id }} from the publish step, and the same credential.
  3. Add an IF node on the result. The response lists a result for each platform that has finished, with whether it succeeded, the post's URL or the error, plus how many platforms are done out of the total. If some are still processing, loop back to the Wait node. If any failed, send yourself a message (Slack, email, Telegram).

For a scheduled post, query the same endpoint with job_id instead.

Webhooks instead of polling. If you'd rather not wait and poll, set a webhook in Reelspan and point it at an n8n Webhook trigger. Reelspan calls it as each platform finishes, so the trigger runs once per platform, with that platform's result.

Step 6: Retry only what failed

If one platform fails, for example because a token expired or the video was too long for that network, you don't want to repost to the others. Call POST https://app.reelspan.com/api/uploadposts/posts/retry from the failure branch with the request_id (or job_id). Optionally, list only the platforms to retry, and pass changed fields, such as a shorter caption. The API reference has the details.

Tips for a workflow that runs unattended

  • Send your own request_id. Use 8 to 100 letters, digits, hyphens or underscores, for example the file name plus a date. If n8n loses the response, you can still look the post up.
  • Test with a private post or a test profile first. Make sure every platform shows up as you expect before you point the workflow at real accounts.
  • Keep videos within every platform's limits. Under a minute, vertical 9:16, H.264 MP4 works almost everywhere; see the length and aspect ratio guides.
  • Log every request_id in a sheet next to the video, so you can trace any post later.

Example: post every new video in a Google Drive folder

A common setup, from start to finish:

  1. Google Drive Trigger watches a folder, say Ready to post, for new files.
  2. Google Drive node, operation Download, fetches the new file into the binary property data.
  3. Set node builds the caption. For example, it takes the file name without the extension as the YouTube title and reads a longer caption from a sheet or a text field.
  4. HTTP Request node publishes it, as in Step 3, with async_upload set to true.
  5. Wait node, two minutes.
  6. HTTP Request node checks the status with the request_id.
  7. IF node: everything published, or not?
  8. Google Drive node moves the file to Posted on success. On failure, a Slack or email node tells you which platform failed and why.

Moving the file at the end keeps the workflow from posting the same video twice if it runs again.

Troubleshooting

What you see Likely cause Fix
401 from the publish request Missing or wrong key Check the credential's header name is Authorization and the value starts with Apikey
400 about user or platform A required field is missing Send user, at least one platform[] and video
A platform is skipped It isn't connected on that profile Connect it in Reelspan, or remove it from the request
The request times out on big files The upload is waiting for every platform Set async_upload to true and check the status separately
The video field arrives empty Wrong binary property name Match Input Data Field Name to the property the download node wrote, usually data
One platform failed, others worked That platform's limits or account Read its error in the status result, fix, then retry only that platform

When to call the platforms directly instead

A publishing API isn't always the right choice. Calling a platform's API yourself makes sense if:

  • you post to one platform only,
  • you need a feature the publishing API doesn't expose,
  • or you already have approved developer apps and the plumbing in place.

For everything else, one request per video keeps the workflow short. The full list of fields is in the API reference, and the same actions are available to AI assistants through the MCP server.

Questions people ask

Can n8n post to TikTok?

Yes, through an HTTP Request node, either to TikTok's own Content Posting API or to a publishing API that posts to TikTok for you. Posting to TikTok's API directly means your own TikTok developer app, and posts stay private until that app passes TikTok's audit.

Is there a built-in n8n node for TikTok or Instagram posting?

n8n has a built-in YouTube node that can upload videos, but no built-in TikTok or Instagram node when we checked. For those, use the HTTP Request node, which can call any posting API.

How do I send a video file from n8n?

Use the HTTP Request node with the body content type set to Form-Data, and add a parameter of type n8n Binary File that points to the binary property holding the video, which is usually called data.

Can n8n schedule posts?

Yes, in two ways: trigger the workflow on a schedule with the Schedule Trigger node, or send a future publish time to an API that schedules for you. With Reelspan, set scheduled_date and timezone on the upload request.

How do I know if the post went live on every platform?

Ask for an asynchronous upload, keep the request_id, wait, then call the status endpoint, which returns a result per platform. Webhooks are an alternative to polling.

Sources

  1. HTTP Request node, n8n Docs. Checked 6 Nov 2026.
  2. HTTP Request credentials, n8n Docs. Checked 6 Nov 2026.
  3. Schedule Trigger node, n8n Docs. Checked 6 Nov 2026.
  4. Wait node, n8n Docs. Checked 6 Nov 2026.
  5. Content Sharing Guidelines, TikTok for Developers. Checked 6 Nov 2026.
  6. Access levels, Meta for Developers. Checked 6 Nov 2026.
Cover illustration: the title 'How to schedule Instagram Reels, TikToks and YouTube Shorts' on a dark card with Reelspan's crop-frame mark

Automation

How to schedule Instagram Reels, TikToks and YouTube Shorts (2026 guide)

Instagram, TikTok and YouTube each have a built-in scheduler, with different rules on who can use it, how far ahead you can schedule and what doesn't work. Step by step for all three, from their own help pages, plus when a cross-platform scheduler makes more sense.

6 min read

Cover illustration: the title 'How to post one video to every social platform' on a dark card with Reelspan's crop-frame mark

Cross-posting

How to post one video to every social platform (and what changes on each)

Cross-posting one video to TikTok, YouTube, Instagram, Facebook, X, LinkedIn, Threads, Pinterest and Bluesky is mostly the same job nine times, except for the parts that aren't. A field guide to what changes per platform: shape, length, captions, privacy, scheduling and AI labels.

5 min read