Hear every voice in your language
Live AI dubbing and bilingual subtitles for any video. Free, open source and private by design.
Publish to TikTok, Instagram, YouTube and LinkedIn from an n8n workflow, with a working template you can import.
PluginsTypeScript · JavaScriptGitHub @PerufitlifeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
n8n community node for PostWire — publish one idea natively to TikTok, Instagram, YouTube, LinkedIn, Facebook Pages, Bluesky, Mastodon, Telegram and Discord
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Publish one idea to every social network from n8n — with a different post written for each network, not the same text pasted everywhere.
This is the official n8n node for PostWire, maintained by the PostWire team. PostWire already holds the platform approvals TikTok, Instagram (Meta) and YouTube require for publishing apps, so connecting an account is one OAuth click — there is no developer app or App Review on your side.
n8n Cloud and self-hosted — Settings → Community nodes → Install → n8n-nodes-postwire.Read the full README ↗Publish one idea to every social network from n8n — with a different post written for each network, not the same text pasted everywhere.
This is the official n8n node for PostWire, maintained by the PostWire team. PostWire already holds the platform approvals TikTok, Instagram (Meta) and YouTube require for publishing apps, so connecting an account is one OAuth click — there is no developer app or App Review on your side.
Networks: TikTok · Instagram · YouTube · LinkedIn · Facebook · X (paid plans, X credits) · Bluesky · Mastodon · Telegram · Discord · Slack · Nostr — and articles on WordPress · Dev.to · Hashnode.
Two nodes:
n8n Cloud and self-hosted — Settings → Community nodes → Install → n8n-nodes-postwire.
Self-hosted, from the command line:
cd ~/.n8n/nodes && npm install n8n-nodes-postwire
GET /api/me, so a wrong key fails now rather than at publish time.Free plan: one brand, 20 posts a month, 2 networks per post, no card. Paid plans send each post to every network you connect.
| Resource | Operation | What it does |
|---|---|---|
| Post | Publish | Publishes now to one or more networks. Content can be Smart Distribute (one idea in, a native post per network), Same Text on Every Network, or Drafts From a Previous Step (for approval flows). |
| Write Drafts | Preview only: writes a native draft per network — right length, hook, hashtags, YouTube title and tags — and publishes nothing. Also returns a readable preview for Slack/Telegram/email approval. | |
| Schedule | Queues a post for later: at a time, or in the next free queue slot of the brand (When). Connections and media are checked now, so a missing video shows up while you watch, not at 7am tomorrow. | |
| Plan Week | One topic in, up to seven days of different posts out (a lesson, a mistake, a number, a question, behind the scenes), already scheduled one per day, in the workflow's time zone. Text networks only. Options → Days (1–7, default 5), Hour (0–23, default 10), Timezone and Brand. | |
| Get Status | Whether a TikTok or YouTube upload has finished processing, or, with PostWire's own ID, where a scheduled post or one waiting for approval stands. | |
| Scheduled Post | Get · Get Many · Update · Cancel | Read one post or the queue, move a post to another time, or cancel it. |
| Brand | Get · Get Many · Create · Rename · Delete | A brand is one business with all its networks — what PostWire plans count. |
| Connection | Get Many · Check Health · Create Connect Link | See connected accounts, ask a network whether a connection can still publish, or create a one-hour link a client can use to connect their account to your PostWire (agencies); Options → Network locks the link to one network. |
| Approval | Get · Get Many | Posts waiting for a person and the ones decided, with each network's preview, why it waits and who decided. Deciding is for people only (the emailed link or the dashboard), never an API key. |
The node is also available as an AI agent tool (usableAsTool): attach it to an AI Agent node and the agent can write drafts or publish.
Options → Thread lists the posts after the main one on X, Bluesky and Mastodon (each a reply to the one before; Bluesky and Mastodon take up to 9, X up to 25), or Split Long Text Into a Thread lets PostWire cut a long text at the network's limit. First Comment is posted by you right under the post on LinkedIn, X, Bluesky and Mastodon (under the last post of a thread): the place for a link, so the post keeps its reach. Facebook and Instagram cannot take one.
With Same Text on Every Network, Options → X Thread (overrides Thread for X) adds posts 2, 3… of a thread (each a reply to the one before) and X Reply adds one post under the last, the usual place for a link. With Smart Distribute, ask for a thread in the idea ("write a thread about…") and the X draft comes back with its thread. Every X post is at most 280 characters as X counts them (a link counts 23, an emoji 2): the node checks each one before anything is sent. X is part of the paid plans and each post uses X credits (1, or 10 with a link).
A Publish that reached none of its networks fails the step. With On Error: Continue, it returns one item — error, description (the fix), ok: false and results (each network's own result and hint) — so an error branch that sends an email sends one, not one per network plus one.
If a brand's approval rules hold a post for a person (or the API key has "every post needs approval", or the key belongs to a Contributor), Publish and Schedule do not fail: each network comes back with status: "pending_approval", the approval_id, the post's id and a review_url. Nothing is published until someone approves it. Follow it with Post → Get Status (Network: PostWire ID), Approval → Get, or a PostWire Trigger on Approval Decided.
| Event | When |
|---|---|
| Post Published | A network accepted the post (one event per network), with its ID and link |
| Post Failed | A network refused it or it could not be sent, with the reason and a code |
| Connection Needs Sign-In | A network's sign-in expired or was revoked, with the reconnect link |
| Approval Requested | A post is held for a person, with each network's text as the approver sees it, the reasons and the dashboard link |
| Approval Decided | Someone approved or rejected it: the networks approved, rejected and edited, the reason, and when it goes out |
When the workflow is activated, the node adds a webhook endpoint to your PostWire account (POST /api/webhooks) for the events you picked and keeps its signing secret; when it is deactivated, it removes it. Every delivery is checked against the PostWire-Signature header (HMAC-SHA256 over <timestamp>.<raw body>, at most 5 minutes old) and refused with 401 if it does not match. Options → Networks and Brand ID narrow which events start the workflow. The output is the event (id, type, created_at, data) plus delivery_id, which stays the same on PostWire's retries: dedupe on it.
PostWire calls n8n from the internet, so the instance needs a public https address (WEBHOOK_URL). A local http://localhost:5678 cannot receive events; the node says so when you activate it. An account has up to 5 endpoints. Send a test from PostWire (API & MCP → Webhooks → Send test): webhook.test always gets through. Events and payloads: postwire.io/docs/webhooks.
TikTok and YouTube only publish video; Instagram needs a photo or a video. The networks download the file from a link, with no login — so the most common failure is a link that opens a page instead of the file.
https:// link (up to 1 GB): the file itself, a Google Drive, Dropbox or SharePoint share link (shared with "anyone with the link" — PostWire fetches the file behind it), or a web page that names its video or image. Before anything is sent, the node checks what it can: reachable without a login, under 1 GB, and a video when a video network is selected. Links to someone else's post (TikTok, YouTube, Instagram, Vimeo) and personal OneDrive pages are named with the fix.Publish returns one item per network, so a Filter or IF node can act on failures alone:
{ "ok": true, "platform": "bluesky", "id": "at://…", "url": "https://bsky.app/profile/…/post/…" }
{ "ok": false, "platform": "youtube", "error": "…", "hint": "YouTube could not download the media. It must be a public https link…" }
If no network was published, the step fails (so a scheduled workflow cannot go silent for weeks), with the reason and the fix.
Write Drafts returns:
{
"drafts": { "linkedin": { "text": "…" }, "youtube": { "text": "…", "title": "…", "tags": ["…"] } },
"platforms": ["linkedin", "youtube"],
"preview": "*LinkedIn*\n…\n\n*YouTube*\n…"
}
Map {{ $json.drafts }} into a later Publish with Content → Drafts From a Previous Step.
Every refusal from the API carries a code, and the node turns it into a message plus the fix:
| Code | What you see |
|---|---|
not_connected | Which network, and where to connect it (or send a client a Connect Link) |
media_required | Which network needs a video/photo, and how to add one |
media_unreachable | Why PostWire could not download the file (403, 404, a Drive page…) — nothing was published |
too_long | The limit and how far over it the text is |
limit_reached, brand_limit_reached | The plan limit and the upgrade link |
duplicate_post | That the post was already sent moments ago and was not sent twice |
x_credits_required, x_paid_plan_required, x_daily_limit, bad_x_thread | What X needs (credits, a paid plan, tomorrow, a shorter post) — nothing was published |
role_forbidden, brand_restricted, workspace_forbidden | The team role or brands of the member who created the key, and who can change them |
key_monthly_cap_reached, key_network_not_allowed | A limit the owner set on this API key |
no_free_slot | No free queue slot in 28 days: add slots or pick a time |
| 401 | Fix the API key in the credential |
| 429 | Daily AI-draft cap per plan, or a burst limit — wait or add a Wait node |
RSS → a native post per network
RSS Feed Trigger → PostWire: Post → Publish (Content: Smart Distribute, Idea: {{ $json.title }} — {{ $json.contentSnippet }} {{ $json.link }}, Networks: LinkedIn, Bluesky, Mastodon, Options → Idempotency Key: {{ $json.guid }}).
Google Drive video → TikTok, Reels and Shorts
Google Drive Trigger → Google Drive: Download → PostWire: Post → Publish (Media: Binary File, Networks: TikTok, Instagram, YouTube, Idea: {{ $json.name }}).
Approve in Slack before anything goes out
PostWire: Write Drafts → Slack: Send and Wait for Approval (message: {{ $json.preview }}) → IF approved → PostWire: Publish (Content: Drafts From a Previous Step, Drafts: {{ $('Write drafts').item.json.drafts }}).
Alert in Slack when a post fails or a login expires
PostWire Trigger (Events: Post Failed, Connection Needs Sign-In) → Slack: Send Message ({{ $json.data.platform }}: {{ $json.data.error || $json.data.reason }}).
Tell the client's channel when their post is approved
PostWire Trigger (Events: Approval Decided, Options → Brand ID) → IF {{ $json.data.decision }} is approved → Microsoft Teams / Slack / Gmail.
Ready-to-import templates: n8n.io/creators/postwire.
Priced per brand — one business with all of its networks — not per channel. Adding a fifth network to a brand never changes the bill. X is an add-on of the paid plans, billed in X credits.
| Brands | Posts/month | ||
|---|---|---|---|
| Free | 1 | 20 | no card |
| Starter | 3 | 300 | $9/mo |
| Pro | 10 | 2,000 | $29/mo |
| Agency | 50 | 15,000 | $99/mo |
| Scale | 200 | no monthly cap | $299/mo |
Current prices: postwire.io/pricing.
Tested with n8n 2.40. Workflows built with version 1 of the node (package 0.1.x–0.2.x) keep working unchanged; new nodes use version 2. Everything added in 0.4.0 is additive: a workflow saved with 0.3.x opens and runs as before (a Schedule without When uses Publish At).
MIT
| Account | Get | Plan, posts used this month, connected networks, and the team workspace and role the key acts with. |
| Media | Upload | Hosts a binary from a previous node (up to 1 GB; over 50 MB it is uploaded in parts) and returns a public URL the networks can download. |