Description
n8n-nodes-bulkpublish
n8n community node for BulkPublish — publish to 15 social media platforms from your n8n workflows.
Supported Platforms
Facebook, Instagram, X (Twitter), TikTok, YouTube, Threads, Bluesky, Pinterest, Google Business Profile, LinkedIn, Mastodon, Discord, Telegram, Tumblr, Snapchat
The node also accepts reddit, and channels already connected to it keep
publishing — but new Reddit connections are paused pending Reddit API approval,
so it is not counted above.
Installation
In your n8n instance:
1. Go to Settings > Community Nodes
2. Enter n8n-nodes-bulkpublish
3. Click Install
Or via CLI:
npm install n8n-nodes-bulkpublish
Credentials
1. Sign up at app.bulkpublish.com
2. Go to Settings > Developer and create an API key
3. In n8n, add a BulkPublish API credential with your key
Operations
Post
- Create — Create a draft or scheduled post to one or more channels (supports all post types: reels, stories, carousels, threads via
postTypeOverrides) - Get — Get a post with platform statuses
- List — List posts with filters (status, search, date)
- Update — Update a draft or scheduled post
- Delete — Delete a post
- Publish — Publish a draft immediately
- Retry — Retry failed platforms
- Metrics — Get engagement metrics (impressions, likes, comments, shares) — see Reading metrics safely
- Story Publish — Publish as a story to Facebook or Instagram
- Bulk Operations — Bulk delete or retry multiple posts
- Queue Slot — Get the next optimal time slot for a channel
- List — List all connected social media channels
- Get — Get a channel by ID
- Health Check — Check channel token health
- Get Options — Get platform-specific options (Pinterest boards, YouTube playlists)
- Mentions Search — Search users for @mention (X, Bluesky)
- Create — Save a named group of channels for one-click targeting (max 50 sets per organization; names are unique — duplicates return a 409
DUPLICATE_NAMEerror) - List — List channel sets
- Update — Rename a set or change its channels
- Delete — Delete a channel set
- Upload — Upload an image or video file
- Upload Large File — Chunked multipart upload for large files (videos up to 1GB, images up to 100MB). The file is sent in 10MB parts; each part is retried independently, so a network drop never restarts the whole file. Note: the whole file is buffered in n8n memory before upload — make sure your n8n instance has enough RAM for the file size.
- Get — Get a media file by ID
- List — List uploaded media files
- Delete — Delete a media file
- Create — Create a label
- List — List all labels
- Update — Update a label name or color
- Delete — Delete a label
- Summary — Get analytics summary for a date range
- Engagement — Get engagement data grouped by time period
- List — List recurring schedules
- Create — Create a recurring schedule (frequency + time of day)
- Update — Update a schedule
- Delete — Delete a schedule
- Create — Add an RSS/Atom feed for autoposting (polled every 15 min; new items become posts).
modedefaults todraft(items land as drafts for review); setpublishto auto-publish. Max 20 feeds per organization. Optional Field Mapping (JSON) controls how items render (caption template with item tokens, media selection, HTML stripping, truncation, hashtags, per-channel overrides). - List — List RSS feeds (includes
lastCheckedAtandlastError) - Update — Change name, URL, channels, mode, or enabled. Changing the feed URL re-baselines the feed — only items newer than the change are posted.
- Delete — Delete an RSS feed
- Usage — Get current plan limits and usage
Post → MetricsreturnsmetricsSupportedandsupportedMetricson eachAnalytics → EngagementreturnssupportedTotals(the union across the- API Docs
- SDK & Examples
- npm
- PyPI
Channel
Channel Set
Media
Label
Analytics
Schedule
RSS Feed
Quota
Reading metrics safely
Every metric column is stored as an integer defaulting to 0, so **a 0 does
not always mean zero engagement** — it may mean the platform has no such metric
at all. Branch on the support fields, not on the number.
platform entry. A key absent from supportedMetrics is not a measurement.
window — treat a total* field whose key is missing as “not available”),
metricSupport (per-platform lists), partialTotals (platforms excluded from
an otherwise-real total) and conditionalMetrics (supported but
permission-gated).
| Platform | Reports | Never reports |
|—|—|—|
| X | impressions, likes, comments, shares, saves (bookmarks) | reach, clicks, video views |
| YouTube | impressions, video views, likes, comments | reach, shares, saves, clicks |
| Instagram | impressions, reach, likes, comments, shares, saves | clicks, video views |
| Facebook | likes, comments, shares + impressions, reach, clicks¹ | saves, video views |
| LinkedIn (company pages) | impressions, reach, likes, comments, shares, clicks | saves, video views |
| TikTok | impressions, video views, likes, comments, shares | reach, saves, clicks |
| Threads | impressions, likes, comments, shares | reach, saves, clicks, video views |
| Pinterest | impressions, clicks, saves, likes, comments, video views | reach |
| Bluesky | likes, comments, shares, saves (bookmarks) | impressions, reach, clicks, video views |
| Mastodon | likes, comments, shares | everything else |
| Reddit | likes (score), comments, shares (crossposts) | impressions, reach, saves, clicks, video views |
| Discord | likes (reaction counts), comments (thread replies) | everything else |
| Snapchat | impressions, reach, likes, comments, shares, clicks, video views | saves |
| Google Business, Telegram, Tumblr | nothing | — |
| LinkedIn personal profiles | nothing | — |
¹ Facebook’s impressions/reach/clicks come from Page Insights and need the
read_insights permission; without it they stay 0.
engagementRate is derived from impressions, so it is always 0 where
impressions are unsupported (Bluesky, Mastodon).
Two other legitimate zeroes: figures come from a snapshot refreshed every 6
hours (a just-published post starts at zero), and X’s per-post sync is **opt-in
per channel** and runs at most weekly because X bills every read — affected
channels are listed in metricsDisabledChannels.
Example Workflows
Auto-post RSS feed items
1. RSS Feed Trigger → reads new items
2. BulkPublish → creates a scheduled post for each item
Post on GitHub release
1. GitHub Trigger → new release event
2. BulkPublish → creates and publishes announcement to all channels
Links
License
MIT