BulkPublish
The best free social media publishing and scheduling API. Publish to 11 platforms from a single API call. Schedule posts, upload media, track analytics, and automate your social media workflow.
README
BulkPublish API
The free social media API built for automation, AI agents, and LLMs.
Programmatically publish to 11 platforms from a single API call. Built for developers, AI agents, LLMs, and agentic workflows that need reliable social media automation without browser sessions or manual interaction.
from bulkpublish import BulkPublish
bp = BulkPublish("bp_your_key_here")
bp.posts.create(
content="Launching our new product today!",
channels=[{"channelId": 1, "platform": "x"}, {"channelId": 2, "platform": "linkedin"}],
status="scheduled",
scheduled_at="2026-04-10T09:00:00Z",
)
Why BulkPublish?
Most social media tools are built for humans clicking buttons. BulkPublish is built for code — whether that code is written by a developer, an AI agent, an LLM with tool use, or an autonomous workflow.
- Headless by design — No browser, no UI, no OAuth pop-ups at runtime. Connect accounts once in the dashboard, then automate everything via API.
- AI-native — MCP server for Claude, tool definitions for GPT and LangChain, structured JSON responses that LLMs parse reliably.
- Agentic-ready — Deterministic API with clear error codes. AI agents can create posts, check status, retry failures, and read analytics autonomously.
- 11 platforms, one endpoint — Facebook, Instagram, X/Twitter, TikTok, YouTube, Threads, Bluesky, Pinterest, Google Business Profile, LinkedIn, Mastodon.
Use Cases
- AI social media managers — Let Claude, GPT, or custom agents schedule and publish posts autonomously
- Content pipelines — RSS-to-social, blog-to-social, newsletter-to-social automation
- Bulk scheduling — Upload a CSV or feed a content calendar and schedule weeks of posts programmatically
- Cross-platform syndication — Publish once to all platforms with per-platform content optimization
- Analytics dashboards — Pull engagement data into your own tools, spreadsheets, or AI analysis
- Zapier/n8n/Make alternatives — Direct API access without middleware, lower latency, more control
- LLM-powered content creation — Generate content with AI, publish it with BulkPublish, track performance, iterate
Quick Start
1. Sign up
Create a free account at app.bulkpublish.com.
2. Get your API key
Go to Settings > Developer in the dashboard and create an API key. Keys start with bp_ and are shown only once — save it securely.
3. Connect platforms
Connect your social accounts in the dashboard under Channels. The API uses your connected channels to publish.
4. Install an SDK
Python
pip install bulkpublish
Node.js
npm install bulkpublish
Homebrew (macOS/Linux)
brew tap azeemkafridi/bulkpublish && brew install bulkpublish
Or call the REST API directly with curl, fetch, requests, or any HTTP client.
5. Make your first API call
curl -X POST https://app.bulkpublish.com/api/posts \
-H "Authorization: Bearer bp_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"content": "Hello from the BulkPublish API!",
"channels": [{"channelId": 1, "platform": "linkedin"}],
"status": "draft"
}'
AI Agent Integration
MCP Server (Claude, Cursor, Windsurf, Claude Code)
BulkPublish ships an MCP server so AI assistants can manage your social media directly:
{
"mcpServers": {
"bulkpublish": {
"command": "npx",
"args": ["-y", "@bulkpublish/mcp-server"],
"env": {
"BULKPUBLISH_API_KEY": "bp_your_key_here"
}
}
}
}
12 tools available: create_post, list_channels, upload_media, get_analytics, and more. See mcp-server/README.md.
LLM Tool Use / Function Calling
Ready-made tool definitions for autonomous AI agents:
- Claude tool_use example — Anthropic SDK with tool definitions for scheduling posts
- OpenAI function calling example — GPT-4 with functions for post management
- LangChain tool example — LangChain agent with BulkPublish tools
All examples are complete, runnable scripts with error handling.
Code Examples
Create a Post
<table> <tr><th>Python</th><th>Node.js</th></tr> <tr> <td>
from bulkpublish import BulkPublish
bp = BulkPublish("bp_your_key_here")
post = bp.posts.create(
content="Check out our latest update!",
channels=[
{"channelId": 1, "platform": "facebook"},
{"channelId": 2, "platform": "x"},
{"channelId": 3, "platform": "linkedin"},
],
status="draft",
)
</td> <td>
import { BulkPublish } from 'bulkpublish';
const bp = new BulkPublish({ apiKey: 'bp_your_key_here' });
const post = await bp.posts.create({
content: 'Check out our latest update!',
channels: [
{ channelId: 1, platform: 'facebook' },
{ channelId: 2, platform: 'x' },
{ channelId: 3, platform: 'linkedin' },
],
status: 'draft',
});
</td> </tr> </table>
Schedule a Post
post = bp.posts.create(
content="This will go out tomorrow morning.",
channels=[{"channelId": 1, "platform": "instagram"}],
status="scheduled",
scheduled_at="2026-04-10T09:00:00Z",
timezone="America/New_York",
)
Upload Media and Publish
media = bp.media.upload("./product-photo.jpg")
post = bp.posts.create(
content="Our newest product is here.",
channels=[{"channelId": 1, "platform": "instagram"}],
media_files=[media["file"]["id"]],
status="scheduled",
scheduled_at="2026-04-10T12:00:00Z",
)
Automation Example: Bulk Schedule from CSV
import csv
from bulkpublish import BulkPublish
bp = BulkPublish("bp_your_key_here")
channels = bp.channels.list()["channels"]
with open("content-calendar.csv") as f:
for row in csv.DictReader(f):
bp.posts.create(
content=row["content"],
channels=[{"channelId": ch["id"], "platform": ch["platform"]} for ch in channels],
status="scheduled",
scheduled_at=row["scheduled_at"],
timezone="America/New_York",
)
More examples in examples/ — including Python automation scripts, Node.js examples, curl reference, and AI agent integrations.
Features
- 11 platforms — Facebook, Instagram, X/Twitter, TikTok, YouTube, Threads, Bluesky, Pinterest, Google Business Profile, LinkedIn, Mastodon
- Scheduling — Schedule posts for any future time with timezone support, or let queue slots pick optimal times
- Media uploads — Images (JPEG, PNG, WebP, GIF) and videos (MP4, MOV, WebM) up to 100 MB
- Recurring schedules — Repeat posts daily, weekly, biweekly, or monthly with cron expressions
- Analytics — Track impressions, likes, comments, shares, and engagement across all platforms
- Webhooks — Get notified when posts are published, fail, or are scheduled
- Labels — Organize posts and media with color-coded labels
- Bulk operations — Delete or retry multiple posts in a single request
- Threads — Multi-part thread posts for X, Threads, Bluesky, and Mastodon
- Auto first comment — Automatically add a comment after publishing on any platform
- Per-platform content — Customize text and options per platform in a single post
- Platform-specific options — Instagram collaborators, TikTok privacy, YouTube categories, Pinterest boards, and more
API Reference
Full interactive API documentation: app.bulkpublish.com/docs
Base URL
https://app.bulkpublish.com
Authentication
Authorization: Bearer bp_your_key_here
Core Endpoints
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/posts |
Create a post (draft, scheduled, or immediate) |
GET |
/api/posts |
List posts (paginated, filterable by status/date/channel/label) |
GET |
/api/posts/:id |
Get a post with platform statuses and metrics |
PUT |
/api/posts/:id |
Update a draft or scheduled post |
DELETE |
/api/posts/:id |
Delete a post |
POST |
/api/posts/:id/publish |
Publish a draft immediately |
POST |
/api/posts/:id/retry |
Retry failed platforms |
POST |
/api/posts/bulk |
Bulk delete or retry |
GET |
/api/channels |
List connected social media channels |
GET |
/api/channels/:id/health |
Check channel token health |
POST |
/api/media |
Upload a media file (multipart) |
GET |
/api/media |
List uploaded media |
GET |
/api/analytics/summary |
Analytics summary for a date range |
GET |
/api/analytics/engagement |
Engagement data grouped by day/week/month |
POST |
/api/schedules |
Create a recurring schedule |
POST |
/api/webhooks |
Create a webhook for event notifications |
GET |
/api/quotas/usage |
Check current plan limits and usage |
See the OpenAPI spec for the complete endpoint list.
Supported Platforms
| Platform | Post Types | Media |
|---|---|---|
| Post, Story | Images, Videos | |
| Feed, Reel, Story, Carousel | Images (JPEG), Videos (MP4, MOV) | |
| X / Twitter | Tweet, Thread | Images, Videos, GIFs |
| TikTok | Video, Photo Slideshow | Videos (MP4, MOV), Images |
| YouTube | Video, Short | Videos (MP4, MOV, WebM, AVI, WMV, FLV) |
| Threads | Post, Thread, Quote Post | Images, Videos |
| Bluesky | Post, Thread | Images |
| Pin | Images, Videos | |
| Google Business Profile | Post, Event, Offer | Images |
| Post | Images, Videos | |
| Mastodon | Post, Thread | Images, Videos |
SDKs
Python
pip install bulkpublish
Supports sync and async. Rich docstrings on every method for IDE and LLM consumption.
Node.js / TypeScript
npm install bulkpublish
Full TypeScript types, zero dependencies, native fetch (Node 18+).
Homebrew (macOS/Linux)
brew tap azeemkafridi/bulkpublish && brew install bulkpublish
Installs the Node SDK via Homebrew.
REST API
No SDK needed — any HTTP client works:
curl https://app.bulkpublish.com/api/channels \
-H "Authorization: Bearer bp_your_key_here"
Rate Limits
| Limit | Free | Pro | Business |
|---|---|---|---|
| Writes/min | 60 | 60 | 60 |
| Reads/min | 300 | 300 | 300 |
| Daily API requests | 100 | 5,000 | 50,000 |
| API keys | 1 | 5 | 10 |
| Webhooks | — | 5 | 10 |
| Recurring schedules | — | 10 | Unlimited |
See the rate limits guide for headers, backoff strategies, and best practices.
Guides
- Authentication — API keys, authorization, key management
- Scheduling — Scheduled posts, queue slots, recurring schedules, timezones
- Media Uploads — File uploads, supported formats, using media in posts
- Platform Options — Per-platform configuration and quirks
- Webhooks — Real-time event notifications, payloads, signature verification
- Rate Limits — Burst limits, daily quotas, best practices
Links
| Resource | URL |
|---|---|
| Dashboard | app.bulkpublish.com |
| API Docs | app.bulkpublish.com/docs |
| Website | bulkpublish.com |
| support@bulkpublish.com |
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。