I Spent 20 Hours on an n8n Article-to-Social Workflow. Here's What I Shipped
The r/n8n 20-hour workflow compressed to 90 minutes. Research backend, prompt template, cost per article, and the mistakes to skip.
A viral r/n8n post in April 2026 opened with "I spent 20 hours building an article-to-social-post workflow in n8n." Most of the comments were engineers who had done the same thing and shipped something slightly different. This post is a compressed version: the workflow, the research backend that makes it actually useful, and the mistakes worth skipping.
The Workflow in One Sentence
Webhook fires with an article URL, research agent pulls competitor takes from Google SERP and Reddit, LLM drafts platform-tuned variants for LinkedIn/X/Reddit, drafts land in Slack for human approval, emoji reaction triggers publish.
The Mistake Everyone Makes
The first draft of this workflow feeds only the article into the LLM and asks for variants. The output sounds exactly like ChatGPT. Boring, generic, derivative. Post-engagement is terrible.
The fix is adding research context. Before the LLM runs, pull 10 competitor takes on the same topic and 10 Reddit quotes from real discussion. Feed all of that into the prompt. The LLM now has differentiation material and specific phrasing to riff on. Engagement jumped 4-6x in our tests.
The Research Backend
Two API calls, one LLM prompt. The research calls can run in parallel:
async function gatherContext(topic: string) {
const [serp, reddit] = await Promise.all([
fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': process.env.SCAVIO_API_KEY!, 'content-type': 'application/json' },
body: JSON.stringify({ query: `${topic} opposing view` })
}).then(r => r.json()),
fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': process.env.SCAVIO_API_KEY!, 'content-type': 'application/json' },
body: JSON.stringify({ platform: 'reddit', query: topic })
}).then(r => r.json())
]);
return {
competing_views: serp.organic_results.slice(0, 10),
reddit_quotes: reddit.organic_results?.slice(0, 10) || []
};
}The Prompt That Matters
You are a social media editor with a point of view.
Article text: {{article}}
Competing takes on this topic: {{serp}}
Real Reddit quotes on this topic: {{reddit}}
Write:
1) LinkedIn post (180 words, one specific opinion, reference a competing view)
2) X thread (5 tweets, open with a stat, close with a question)
3) Reddit comment draft (no self-promo, 120 words, specific and useful)
Rules: no corporate buzzwords, no "Let's dive in", no em-dashes overused.The 20 Hours Worth of Polish
Things that burned time and are worth copying:
- Gate the publish step behind an emoji reaction in Slack, not auto-publish. Humans catch bad drafts; agents do not.
- Cache the SERP/Reddit context in a Postgres table with a 24h TTL so reruns on the same article do not double-charge.
- Store a rejection reason when a draft is rejected. Feed rejections back into the prompt as negative examples after 20 accumulated.
- Fire a different prompt per platform (LinkedIn/X/Reddit) instead of one mega-prompt. The outputs are noticeably sharper.
The Cost Per Article
Two Scavio calls (~60 credits) + LLM tokens (~$0.02 with GPT-4 Turbo or Claude Haiku). Per article cost lands near $0.04. For a team publishing 4 articles a week, monthly cost is under $1, which means the Scavio plan is fully covered by other agent workloads.
If you want to skip the 20 hours, the full n8n JSON is published in the article-to-social workflow template. Drop your Scavio key, import into n8n, and you are live.