Auto-Post New Blog Articles Across Channels with n8n

AgentRoost · June 7, 2026 · 7 min read · View as Markdown
AgentRoost — n8n Automation

Every time you publish a new article, the same manual loop starts: copy the title, craft a tweet that fits 280 characters, write a different intro for LinkedIn, paste a short blurb into Slack, maybe schedule a Mastodon post. It takes 15–20 minutes and it is the kind of repetitive work that quietly eats your mornings.

This guide shows you how to wire an n8n workflow that handles the whole loop automatically — detect the new post, let an AI node rewrite the blurb for each platform's tone and length, then publish. One workflow, every channel, zero manual steps after setup.

The Architecture in One Sentence

Poll your blog's RSS feed on a schedule → deduplicate (skip already-seen posts) → call the AI/LLM node once per channel to generate tailored copy → post to Twitter/X, LinkedIn, and Slack in parallel.

Nodes You Will Use

Node Purpose
Schedule Trigger Fire the workflow every 15–30 minutes
HTTP Request Fetch your RSS/Atom feed as XML
XML Parse the feed into JSON items
IF Skip GUIDs already stored in static data
Static Data (via Code node) Remember which GUIDs have been posted
AI / LLM node (OpenAI / Anthropic compatible) Generate per-channel copy
Twitter / X node Post the tweet
LinkedIn node Publish the company or personal update
Slack node Send a message to a channel

Step-by-Step Build

1. Trigger on a schedule

Add a Schedule Trigger node. Set interval to Every 15 minutes (or 30 if your blog publishes infrequently). This keeps the workflow always watching without hammering your server.

2. Fetch the RSS feed

Add an HTTP Request node.

  • Method: GET
  • URL: https://yourblog.com/rss.xml (or your Atom feed URL)
  • Response format: Text

3. Parse the XML

Add an XML node connected to HTTP Request.

  • Source: {{ $json.data }}
  • Output key: feed

After this node each item in feed.rss.channel.item is a JSON object with fields like title, link, pubDate, and guid.

4. Deduplicate with a Code node + IF

The tricky part: your workflow runs every 15 minutes, but a post sits in the feed for days. Without deduplication you will re-post it hundreds of times.

Add a Code node (Run Once for All Items mode):

const seen = $getWorkflowStaticData('global');
if (!seen.guids) seen.guids = [];

const items = $input.all();
const newItems = items.filter(item => {
  const guid = item.json.guid?.['_'] ?? item.json.guid ?? item.json.link;
  return !seen.guids.includes(guid);
});

// mark as seen immediately (even before posting, to avoid double-post on retry)
newItems.forEach(item => {
  const guid = item.json.guid?.['_'] ?? item.json.guid ?? item.json.link;
  seen.guids.push(guid);
  if (seen.guids.length > 500) seen.guids.shift(); // rolling window
});

return newItems;

Connect this to an IF node that checks {{ $json }} is not empty (i.e., there are actually new items). The false branch ends the execution silently.

5. Generate per-channel copy with the AI node

Add a Basic LLM Chain (or AI Agent) node for each channel. You can branch with a Split In Batches or just run three separate AI nodes in sequence.

Twitter/X prompt (system message):

You are a copywriter. Write a tweet (max 240 characters, no hashtag spam) 
that teases the key insight of this article and ends with the URL.
Article title: {{ $json.title }}
Article URL: {{ $json.link }}
Article description: {{ $json.description }}

LinkedIn prompt (system message):

Write a 3-sentence LinkedIn post for this article. 
Open with a specific hook (a question or a surprising fact), 
summarize the key takeaway in one sentence, 
and close with a call to read the full piece.
Article title: {{ $json.title }}
Article URL: {{ $json.link }}
Article description: {{ $json.description }}

Slack prompt (system message):

Write a short Slack message announcing this article to a technical team.
One sentence summary + the URL. Casual tone.
Article title: {{ $json.title }}
Article URL: {{ $json.link }}

Each AI node returns {{ $json.text }} (or {{ $json.output }} depending on the node version) — that is the ready-to-post copy.

6. Post to each channel

  • Twitter/X node: Action → Create a Tweet, Text → {{ $json.text }}
  • LinkedIn node: Action → Create a Share, Text → {{ $json.text }}, visibility PUBLIC
  • Slack node: Action → Send a Message, Channel → #content or #marketing, Text → {{ $json.text }}

Wire all three in parallel after their respective AI nodes. If one channel fails (e.g., a Slack API blip), the others still succeed — n8n's branching keeps them independent.

7. Error handling (optional but recommended)

Add an Error Trigger node at the workflow level and connect it to a Slack node pointing to a #errors channel. You will know immediately if posting breaks without having to check logs manually.

Tips and Pitfalls

"Why did my post appear twice?"
The static data write in the Code node happens before posting on purpose. If you write it after and the workflow crashes mid-run, n8n retries from scratch and posts a duplicate. Writing the GUID first makes the workflow idempotent.

"LinkedIn keeps failing auth."
LinkedIn OAuth tokens expire after 60 days. Set a calendar reminder to re-authenticate the credential before the deadline, or check n8n's credential expiry warnings.

"The tweet is over 280 characters."
Add a temperature of 0.3 to the Twitter AI node and include "IMPORTANT: stay under 240 characters" at the top of the system prompt. Lower temperature means less creative risk-taking and more reliable length discipline.

Feed with no description field
Some minimal RSS feeds omit <description>. Substitute {{ $json.title }} alone in the prompt and ask the AI to infer context from the title — it usually does a reasonable job.

Run It on AgentRoost — No DevOps Required

The workflow above runs 24/7 on your own n8n instance. Getting that instance running is where most people get stuck: Docker Compose, SSL certs, domain DNS, reverse proxy, environment variables, updates. It is a weekend of setup and an ongoing maintenance surface.

On AgentRoost, your n8n instance is yours from minute one — you own the login, the workflows, and the data — and the infrastructure is already running. Here is the actual path:

  1. Go to AgentRoost and sign up (email/password, Google, Microsoft, or Discord).
  2. Choose the n8n framework, give your instance a name.
  3. Your private n8n editor opens at https://<your-id>.agentroost.app — your login, no one else's.
  4. Import the workflow above or build it node by node.
  5. The AI/LLM node already has credits wired in. No OpenAI API key to generate, no billing account to configure on a separate service. The AI nodes just work.

Starting at $19.99/mo all-in, that covers the compute, the SSL, the domain routing, and the included AI credits that power the LLM nodes. There is no separate API bill to worry about when your cross-posting workflow runs every 15 minutes and calls the AI three times per new post. Compare plans to see which tier fits your publishing volume, and there is a 14-day money-back guarantee if it is not the right fit.

Every major competitor — n8n Cloud, Elestio, Sliplane — is bring-your-own-API-key. You pay for the hosting AND for OpenAI/Anthropic separately. On AgentRoost the AI credits are bundled. The AI nodes in this exact workflow work out of the box.

What to Automate Next

Once this workflow is running, the same RSS → AI → publish pattern extends naturally:

  • Newsletter digest: collect a week of posts, summarize them with the AI node, send via the Mailchimp or Brevo node.
  • SEO internal linking: when a new post is detected, search your existing content index (HTTP Request to your CMS API) and have the AI suggest internal links to add.
  • Repurposing queue: write a "thread" version of the article for X (7 tweets), store each tweet as a separate item, and schedule them over 7 days with a Wait node.

The workflow you built here is the foundation. Each extension adds one or two nodes — no new infrastructure.

Frequently asked questions

Do I need an OpenAI or Anthropic API key to use the AI node in this workflow?

Not on AgentRoost. AI/LLM credits are included in the subscription, so the AI node is pre-wired and ready to use the moment your instance spins up. On self-hosted n8n or n8n Cloud you would need to supply your own API key and pay a separate bill.

How does deduplication work — will it re-post if I restart the workflow?

The workflow uses n8n's static data (persisted in the workflow's metadata, not in memory) to store a rolling list of posted GUIDs. Static data survives workflow restarts and n8n server restarts, so a post that was already distributed will not be re-sent.

Can I add more channels — Instagram, Mastodon, a newsletter?

Yes. Each additional channel is another AI node (with a channel-appropriate prompt) plus the corresponding publish node. n8n has native nodes for Mastodon, Mailchimp, Brevo, and others. Channels that lack a native node can be reached via the HTTP Request node with their API.

What happens to my n8n workflows if I cancel my AgentRoost subscription?

n8n stores all workflows as JSON. Before cancelling, export your workflows from the n8n editor (Settings → Export) — you get a JSON file you can import into any other n8n instance. Your data is yours; AgentRoost does not lock you in.

How often should I poll the RSS feed to avoid missing posts?

Every 15 minutes is a reliable default — fast enough to distribute within minutes of publishing, and light enough that it never creates meaningful load on your blog server. If you publish several times a day and want near-instant distribution, 5 minutes is fine too.