Social media content calendar from blog posts and news feeds
- Published
Managing a social media presence whilst maintaining a consistent blog is one of those tasks that sounds simple until you're doing it. You write a post, then manually copy sections into your social media scheduler, then watch news feeds for relevant stories, then create standalone posts around those stories. Before long, you've spent three hours on content distribution when you could have spent thirty minutes setting up automation.
The real issue is that valuable content already exists in two places: your blog posts and industry news feeds. Neither is connected to your social media calendar, so the work of extracting highlights, summarising content, and scheduling posts falls entirely on you. This is precisely where AI-powered automation shines. By combining content discovery, summarisation, and scheduling tools, you can build a workflow that takes a blog post or news article and automatically populates your social media calendar with ready-to-post content.
This guide shows you how to wire together Mirra (content discovery), Resoomer AI (summarisation), and Postwise (social media scheduling) using Zapier, n8n, Make, or Claude Code as your orchestration layer. The result is a system that runs on a schedule, pulls in fresh content, generates social media captions, and posts them without any manual intervention.ai: AI Social Media Conte.... For more on this, see Postwise vs Mirra vs VideoIdeas.ai: AI Social Media Conte....
The Automated Workflow
The workflow follows this path: trigger on a schedule or webhook; fetch blog posts or news articles; summarise key points; generate multiple social media variations; send them to Postwise for scheduling.
Choose Your Orchestration Tool
All four options work here, but they differ in ease of setup and cost:
-
Zapier: Fastest to build, easiest to maintain, most expensive at scale.
-
n8n: Self-hosted or cloud, good balance of control and cost, steeper learning curve.
-
Make (Integromat): Middle ground between Zapier and n8n, affordable, decent UI.
-
Claude Code: Programmatic approach using Claude's API, lowest cost, requires coding knowledge.
For this guide, I'll show examples in Zapier and Claude Code, as they represent the two ends of the spectrum.
Step 1: Trigger and Content Retrieval
The workflow starts with either a time-based trigger (e.g., daily at 9am) or a webhook. You then fetch content from Mirra's API or via RSS feeds.
If you're using Mirra's API (assuming you have API access):
GET https://api.mirra.ai/v1/articles
?query=your-industry-keywords
&limit=5
&sort=recent
Mirra returns a JSON array of articles with title, description, URL, and publication date. If Mirra doesn't have direct API access for your plan, you can use RSS feeds from your own blog or industry sources instead.
If you're using your own blog's RSS feed:
GET https://your-blog.com/feed.xml
Parse the XML using a tool like Zapier's Code step or n8n's XML node to extract the most recent 3-5 posts.
Step 2: Content Summarisation
Pass the article content to Resoomer AI's API. Resoomer specialises in generating concise summaries, perfect for extracting the key points you'll want to turn into social media posts.
The API endpoint looks like this:
POST https://api.resoomer.com/summarize
Content-Type: application/json
{
"text": "Full article text or extracted content",
"quality": "medium",
"sentences": 3
}
Resoomer returns a summary in the summary field. You can adjust the sentences parameter to generate shorter summaries for Twitter-length posts or longer ones for LinkedIn captions.
Step 3: Generate Multiple Social Media Variations
This is where the workflow gets clever. You don't want five identical posts across your platforms. Use a simple templating or iteration step to generate platform-specific content.
If you're using Zapier, add a "Code" step:
const summary = inputData.resoomerSummary;
const articleUrl = inputData.articleUrl;
const articleTitle = inputData.articleTitle;
const variations = {
twitter: `${summary.substring(0, 240)} ${articleUrl}`,
linkedin: `Key insight: ${summary}\n\nRead the full piece: ${articleUrl}`,
instagram: `✨ ${articleTitle}\n\n${summary.substring(0, 300)}\n\nLink in bio`,
facebook: `${articleTitle}\n\n${summary}\n\n${articleUrl}`
};
return variations;
If you're using Claude Code (more flexible), you could call Claude's API to generate more natural, varied captions:
import anthropic
client = anthropic.Anthropic(api_key="your-api-key")
def generate_social_variations(summary, title, url):
prompt = f"""
Create 4 social media captions for different platforms based on this content:
Title: {title}
Summary: {summary}
URL: {url}
Generate captions for:
1. Twitter (280 chars max, include hashtags)
2. LinkedIn (professional tone, 1200 chars max)
3. Instagram (engaging, casual, 2200 chars max)
4. Facebook (conversational, include emoji, 2200 chars max)
Return as JSON with keys: twitter, linkedin, instagram, facebook
"""
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{"role": "user", "content": prompt}
]
)
return message.content[0].text
Step 4: Send to Postwise for Scheduling
Postwise has an API for creating scheduled posts. You'll need your Postwise API key and workspace ID.
POST https://api.postwise.ai/v1/posts
Authorization: Bearer YOUR_POSTWISE_API_KEY
Content-Type: application/json
{
"content": "Your generated caption here",
"platforms": ["twitter", "linkedin"],
"scheduled_time": "2024-01-15T09:00:00Z",
"media_urls": []
}
Send one request per platform variation, or batch them if Postwise supports it.
Complete Zapier Zap Structure
Here's how to wire it together in Zapier:
- Trigger: Schedule (Daily at 8:00 AM UTC)
- Action 1: Fetch articles from RSS (using RSS by Zapier)
- Action 2: Code step to extract article URL and full text
- Action 3: Resoomer API call to summarise
- Action 4: Code step to generate platform variations
- Action 5: Postwise API call (repeat for each platform or use a looping step)
In Zapier, you'd configure Step 1 like this:
App: RSS by Zapier
Action: New Item in Feed
Feed URL: https://your-blog.com/feed.xml
For Step 2, use a Code step:
const feedData = inputData.feedData; // From RSS step
const articles = feedData.map(item => ({
title: item.title,
url: item.link,
pubDate: item.pubDate
}));
// Return the first article
return articles[0];
Then pass the article title and URL to Resoomer in Step 3. You'll need to fetch the full article text first; if RSS only gives you excerpts, add a "Webhooks by Zapier" step to fetch the HTML:
const fetch = require('node-fetch');
const response = await fetch(inputData.articleUrl);
const html = await response.text();
// Basic HTML stripping (real implementation would use a library like cheerio)
const text = html.replace(/<[^>]*>/g, ' ').trim();
return { fullText: text };
Complete n8n Workflow Example
If you prefer n8n, the structure is similar but more visual. Here's the workflow:
- Trigger node: Cron (runs daily)
- HTTP Request node: Fetch RSS feed
- XML node: Parse RSS into items
- Function node: Extract article data
- HTTP Request node: Call Resoomer API
- Function node: Generate social variations
- Loop node: Iterate over platforms
- HTTP Request node: Send to Postwise API
The n8n HTTP Request node for Resoomer looks like:
Method: POST
URL: https://api.resoomer.com/summarize
Body (JSON):
{
"text": "{{ $node['Extract Article'].json.content }}",
"quality": "medium",
"sentences": 3
}
Headers:
Authorization: Bearer YOUR_RESOOMER_API_KEY
Error Handling and Rate Limits
Resoomer and Postwise both have rate limits. Resoomer typically allows 100 requests per hour on paid plans; Postwise varies. Add retry logic:
// In Zapier, use the built-in Retry feature
// In n8n, add an Error Trigger node and set retries to 3 with exponential backoff
// In Claude Code:
import time
def call_with_retry(url, payload, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post(url, json=payload, timeout=10)
response.raise_for_status()
return response.json()
except requests.exceptions.RateLimitError:
if attempt < max_retries - 1:
wait_time = 2 ** attempt # Exponential backoff
time.sleep(wait_time)
else:
raise
The Manual Alternative
Not every workflow needs to be fully automated. You might prefer to use these tools individually for more control:
- Manual discovery: Use Mirra or a news aggregator to find articles, then copy the URL manually.
- Generate summary: Paste the article into Resoomer AI's web interface and download the summary.
- Write captions: Use the summary as reference material and write your own social media captions in your preferred tone.
- Schedule in Postwise: Log into Postwise and manually schedule your posts with custom images or timing.
This approach takes about 10-15 minutes per article but gives you full editorial control. It's worth doing for evergreen content or highly important announcements where brand voice matters most.
Pro Tips
1. Use Conditional Logic for Content Quality
Not every article deserves a post. Add a filter in your orchestration tool to only process articles above a certain quality threshold. In n8n, use an "If" node:
IF article.sentiment = "positive"
AND article.word_count > 500
THEN proceed to summarisation
ELSE skip
2. Spread Posts Throughout the Day
Instead of scheduling all posts for the same time, distribute them across peak engagement hours. Modify the Claude Code snippet to add time offsets:
import datetime
peak_hours = {
"twitter": "09:00",
"linkedin": "10:30",
"instagram": "18:00",
"facebook": "19:30"
}
scheduled_times = {}
for platform, hour in peak_hours.items():
time_obj = datetime.datetime.strptime(hour, "%H:%M").time()
scheduled_times[platform] = time_obj.isoformat()
return scheduled_times
3. Monitor Resoomer Summary Quality
Resoomer is generally reliable, but occasionally it misses context or key points. Add a manual approval step for high-stakes content. In Zapier, use the "Delay" action to pause the workflow and send you an email for review before the post is scheduled.
4. Track Your Costs by Platform
Postwise charges per post; Resoomer charges per summary; Zapier charges per task. If you're posting to four platforms daily, that's 120 posts per month. Use this workflow primarily for evergreen or secondary content, not your most important announcements.
5. Set Up Fallback Content
If Resoomer fails or the article text is too short, fall back to using the RSS description directly. In n8n, add an "If" node after the Resoomer call:
IF resoomer_summary == null OR resoomer_summary.length < 50
THEN use rss_description
ELSE use resoomer_summary
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| Mirra | Starter or higher | £29–£99 | Optional if using RSS feeds; content discovery and analytics |
| Resoomer AI | Premium | £9.99–£29.99 | 1,000–100,000 credits per month depending on tier |
| Postwise | Pro or Team | £79–£299 | Pro includes 150 posts/month; Team tier for collaboration |
| Zapier | Free–Professional | £0–£480 | Free tier allows 100 tasks/month; Professional tier (£168/month) needed for multiple steps |
| n8n | Cloud Free–Pro | £0–£60/month (cloud) | Self-hosted is free but requires server costs; cloud pricing scales with workflows |
| Make | Pay-As-You-Go | £0–£100+ | 1 operation = 1 credit; 10,000 operations typically £16–£50 depending on plan |
| Claude API | Pay-as-you-go | Typically £5–£20/month | Based on tokens; highly cost-effective for summarisation and caption generation |
Total Estimated Monthly Cost: £150–£450 depending on volume and tool choices. The Claude Code + n8n combination is the cheapest at around £50–£100/month if self-hosted.
More Recipes
User onboarding video series from feature documentation
SaaS companies need to convert technical documentation into engaging onboarding videos for different user segments.
Course curriculum and assessment generation from subject outline
Educators spend weeks designing course materials and assessments when they could generate them from a high-level curriculum outline.
Technical documentation generation from code
Developers struggle to maintain up-to-date documentation alongside code changes.