Automatically 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.
PlatformMethodAutomation LevelLinkedInAPI (OAuth)Fully automatedDev.toAPI (token)Fully automatedHashnodeAPI (token)Fully automatedPinterestAPIFully automatedTwitter/XEmail digestContent formatted, manual postRedditEmail digestContent formatted, manual postSubstackEmail digestContent formatted, manual post
text
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 TypeUsed ForPlaceholder in JSONGoogle Sheets OAuth2Cross-post tracking and deduplicationYOUR_GOOGLE_SHEETS_CREDENTIAL_IDSMTP (Gmail or custom)Email digests for manual platformsYOUR_SMTP_CREDENTIAL_IDLinkedIn OAuth2Auto-posting to LinkedInYOUR_LINKEDIN_CREDENTIAL_IDOpenAI (optional)AI-powered content formattingYOUR_OPENAI_CREDENTIAL_ID
Replace these placeholders in the workflow JSON before deploying:
PlaceholderDescriptionYOUR_BLOG_ADMIN_API_KEYAPI key for your blog admin panelYOUR_CROSSPOST_SECRETWebhook authentication secretYOUR_TRACKER_SHEET_IDGoogle Sheet ID for cross-post trackingYOUR_GOOGLE_SHEETS_CREDENTIAL_IDn8n Google Sheets credential IDYOUR_SMTP_CREDENTIAL_IDn8n SMTP credential IDYOUR_LINKEDIN_CREDENTIAL_IDn8n LinkedIn OAuth credential IDYOUR_LINKEDIN_PERSON_IDYour LinkedIn profile URNYOUR_OPENAI_CREDENTIAL_IDn8n OpenAI credential IDYOUR_BLOG_DOMAINYour blog's public URLYOUR_FROM_EMAILSender email for digestsYOUR_NOTIFICATION_EMAILWhere to send cross-post summariesYOUR_BLOG_ADMIN_HOST:3000Blog admin hostname (Docker or URL)
Set your API credentials in the workflow's Platform Config node:
json
{
"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/failedbash
# 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.