Install
openclaw skills install multi-platform-crosspostAutomatically cross-post blog content to 7+ platforms (LinkedIn, Dev.to, Hashnode, Twitter/X, Reddit, Substack, Pinterest) with tracking, deduplication, and platform-specific formatting. Production-tested pipeline.
openclaw skills install multi-platform-crosspostAutomatically distribute your blog content across 7+ platforms with a single command. Built for Hugo blogs but adaptable to any static site generator or CMS.
You write a great article. Then you spend 45 minutes manually posting it to LinkedIn, Dev.to, Hashnode, Reddit, Substack, and Twitter. Every. Single. Time.
This skill eliminates that entirely.
| Platform | Method | Automation Level |
|---|---|---|
| API (OAuth) | Fully automated | |
| Dev.to | API (token) | Fully automated |
| Hashnode | API (token) | Fully automated |
| API | Fully automated | |
| Twitter/X | Email digest | Content formatted, manual post |
| Email digest | Content formatted, manual post | |
| Substack | Email digest | Content formatted, manual post |
Blog Post Published
│
▼
Webhook Trigger (n8n)
│
├── Validate auth (_secret)
├── Fetch post content from blog-admin API
├── Parse frontmatter + body
│
├──► IF LinkedIn enabled → Format + Post via API
├──► IF Dev.to enabled → Format + Post via API
├──► IF Hashnode enabled → Format + Post via API
├──► IF Pinterest enabled → Format + Pin via API
├──► IF Twitter enabled → Format + Email to owner
├──► IF Reddit enabled → Format + Email to owner
└──► IF Substack enabled → Format + Email to owner
│
▼
Google Sheets Tracker (appendOrUpdate, no duplicates)
You must create these credentials in your n8n instance before importing:
| Credential Type | Used For | Placeholder in JSON |
|---|---|---|
| Google Sheets OAuth2 | Cross-post tracking and deduplication | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
| SMTP (Gmail or custom) | Email digests for manual platforms | YOUR_SMTP_CREDENTIAL_ID |
| LinkedIn OAuth2 | Auto-posting to LinkedIn | YOUR_LINKEDIN_CREDENTIAL_ID |
| OpenAI (optional) | AI-powered content formatting | YOUR_OPENAI_CREDENTIAL_ID |
Replace these placeholders in the workflow JSON before deploying:
| Placeholder | Description |
|---|---|
YOUR_BLOG_ADMIN_API_KEY | API key for your blog admin panel |
YOUR_CROSSPOST_SECRET | Webhook authentication secret |
YOUR_TRACKER_SHEET_ID | Google Sheet ID for cross-post tracking |
YOUR_GOOGLE_SHEETS_CREDENTIAL_ID | n8n Google Sheets credential ID |
YOUR_SMTP_CREDENTIAL_ID | n8n SMTP credential ID |
YOUR_LINKEDIN_CREDENTIAL_ID | n8n LinkedIn OAuth credential ID |
YOUR_LINKEDIN_PERSON_ID | Your LinkedIn profile URN |
YOUR_OPENAI_CREDENTIAL_ID | n8n OpenAI credential ID |
YOUR_BLOG_DOMAIN | Your blog's public URL |
YOUR_FROM_EMAIL | Sender email for digests |
YOUR_NOTIFICATION_EMAIL | Where to send cross-post summaries |
YOUR_BLOG_ADMIN_HOST:3000 | Blog admin hostname (Docker or URL) |
Set your API credentials in the workflow's Platform Config node:
{
"devto_api_key": "your-dev-to-api-key",
"hashnode_token": "your-hashnode-token",
"hashnode_publication_id": "your-pub-id",
"linkedin_credential_id": "your-linkedin-oauth-id"
}
Create a Google Sheet with columns:
slug (text) — Post identifiersource (text) — Blog name (for multi-blog support)date (date) — Cross-post dateplatforms (text) — Comma-separated list of platforms posted tostatus (text) — success/partial/failed# Via webhook
curl -X POST https://your-n8n.com/webhook/blog-crosspost \
-H "Content-Type: application/json" \
-d '{"slug": "my-article", "lang": "en", "platforms": "all", "_secret": "your-secret"}'
# Or via blog admin (auto-triggers on first publish)
The tracker uses Google Sheets appendOrUpdate with matching on slug + source. This means:
Run multiple blogs through the same pipeline by setting different source values:
source: "my-tech-blog"source: "my-business-blog"Each gets tracked separately in the same sheet.