Cross-Post to 9 Platforms from One Workflow
You want to publish the same post to Instagram, TikTok, LinkedIn, Facebook, X, Threads, Bluesky, Pinterest, and YouTube. You open n8n or Make.com and start building. One node per platform. Each node needs its own OAuth connection, its own request format, and its own error handling. By platform four, the workflow is a mess. By platform six, something breaks and you spend an hour debugging.
This is the most common question on both the n8n forum and Make.com forum. Users ask: "Which nodes do I need to post to all platforms?" The answer is always a long list of separate integrations, each with its own pitfalls. Here is why that approach fails, and a workflow that replaces it.
Why per-platform integrations break
Each social platform has a different API:
Instagram requires the Facebook Graph API with a two-step media container flow. No native module in Make.com handles carousels or Reels without custom HTTP calls.
TikTok requires developer app approval. Many users report their applications getting rejected. The upload flow uses chunked uploads and a multi-step publish confirmation.
X (Twitter) uses OAuth 1.0a for media uploads. The n8n native X node has known issues with image and video posting.
LinkedIn has a separate upload flow for videos vs. images. Video requires a pre-registered upload URL, a binary PUT, then a post referencing the uploaded asset.
Facebook needs a
pageIdfrom a subaccounts call. Video uploads go through a different endpoint than image uploads.YouTube requires OAuth2 with the YouTube Data API v3. Videos under 60 seconds with vertical aspect ratio become Shorts.
Threads, Bluesky, Pinterest each have their own authentication and posting requirements.
Building and maintaining nine separate integrations means nine points of failure. When Meta changes the Graph API (which happens often), your Instagram and Facebook nodes break. When X deprecates an auth method, your Twitter node breaks. You spend more time fixing integrations than creating content.
On the n8n forum, one user described it this way: "I tried using the IF node to route posts per platform, but each platform needs different fields, different media handling, and different error responses. The workflow became unmaintainable."
The unified approach: one API call per platform
With the Blotato Publish API, each platform publish is one POST request with the same structure. The only fields that change are platform, targetType, and accountId.
Here is a post to Instagram:
Here is the same post to LinkedIn:
Same structure. Same endpoint. Blotato handles the platform-specific upload flows, media processing, and authentication behind the scenes.
Step-by-step: n8n workflow
Install the Blotato community node in n8n (Settings > Community Nodes > search "Blotato").
Add a trigger node. Use a Google Sheets trigger (read from a content spreadsheet), a webhook, or a schedule.
Add one Blotato Publish Post node per platform. Connect them in parallel from the trigger.
In each node, set the platform (Instagram, LinkedIn, TikTok, etc.) and pass the corresponding
accountId.Pass the same
textandmediaUrlsinto each node.Run the workflow.
Each Blotato node returns a postSubmissionId. Add a Blotato Get Post Status node after each publish if you need to confirm the post went live.
For platform-specific setup guides, see:
Step-by-step: Make.com scenario
Add a trigger module (Google Sheets, webhook, or RSS).
Add a Router module after the trigger.
Add one HTTP module per platform route, each calling
POST https://backend.blotato.com/v2/postswith theblotato-api-keyheader.In each HTTP module, set the request body with the platform-specific
accountId,platform, andtargetType.Pass the same
textandmediaUrlsinto each route.Run the scenario.
For a full walkthrough, see: Make.com Integration
Step-by-step: Claude Code
Claude Code connects to Blotato through the API. From your terminal:
Get your connected accounts by calling
GET /v2/users/me/accountsto retrieve each platform'saccountId.Write a script (or let Claude Code write one) that loops through your accounts and calls
POST /v2/postsfor each platform.Pass the same content to each call, changing only
accountId,platform, andtargetType.
See: API Reference
Adapting content per platform
Cross-posting does not mean posting identical text everywhere. Each platform has different character limits, hashtag conventions, and audience expectations. You have two options:
Option 1: Same text, different formatting. Post the same core message but adjust formatting. LinkedIn supports longer text. X has a 280-character limit (use additionalPosts for threads). TikTok and Instagram prioritize the first line as a hook.
Option 2: AI-generated platform-specific text. Use the Create Source endpoint with sourceType: "text" and customInstructions to rewrite your post for each platform:
Run this for each platform with different instructions, then publish the rewritten versions.
Platform support reference
Platform
platform / targetType value
Requires pageId
Media support
instagram
No
Images, videos, carousels
TikTok
tiktok
No
Videos, image carousels
linkedin
Yes
Images, videos, carousels
facebook
Yes
Images, videos, carousels
X (Twitter)
twitter
No
Images, videos, threads
Threads
threads
No
Images, videos, carousels
Bluesky
bluesky
No
Images, videos
pinterest
No
Images, videos
YouTube
youtube
No
Videos (Shorts and long-form)
For platforms that require pageId (Facebook and LinkedIn), fetch it from GET /v2/users/me/accounts/{accountId}/subaccounts (docs).
Scheduling cross-posts
Instead of publishing to all platforms at the same time, stagger your posts. Add scheduledTime to each request:
Or use useNextFreeSlot to let Blotato pick the next open slot in your content calendar for each platform:
Both fields are top-level (siblings of post, not nested inside it). See Build a Social Media Scheduler for a full scheduling walkthrough.
Forum threads referenced
These are the community discussions that prompted this post:
Last updated