---
title: "Turn RSS Feeds into AI-Written Social Posts with n8n"
description: "Build an n8n workflow that turns RSS feed items into LinkedIn and X posts using an AI node — no API keys, no manual writing, runs 24/7 on your instance."
canonical: https://agentroost.app/en/blog/rss-to-social-posts-n8n-ai
date: 2026-06-12T12:00:00Z
---

[Canonical URL](https://agentroost.app/en/blog/rss-to-social-posts-n8n-ai)

Most content marketing playbooks boil down to the same manual loop: read an article, open a doc, write three variations, pick one, paste it into a scheduler, repeat. That cycle is exactly what n8n was built to automate — and once you add an AI node, the quality bar is high enough to actually publish.

This post walks through a concrete n8n workflow that watches RSS feeds, rewrites each new item into a platform-appropriate social post, and hands it off to your scheduling tool or posting node. Every node, field name, and config choice is real.

---

## What the workflow does

1. Runs on a schedule (e.g., every 30 minutes or every hour).
2. Reads one or more RSS feeds.
3. Filters out items it has already processed.
4. Sends each new item to an AI/LLM node with a platform-specific prompt.
5. Posts the result to LinkedIn, X, or a Buffer/Airtable queue.

Total nodes: 5–7. Total setup time: under 30 minutes.

---

## Step 1 — Schedule Trigger

Drop a **Schedule Trigger** node and set it to your cadence. For a busy tech news feed, every 30 minutes makes sense. For a slower industry blog, once or twice a day is fine.

```json
{
  "rule": {
    "interval": [{ "field": "minutes", "minutesInterval": 30 }]
  }
}
```

One trigger node can kick off checks across multiple feeds if you chain them with a **Merge** node later, but start with a single feed to keep things debuggable.

---

## Step 2 — RSS Read node

Add an **RSS Read** node. Point it at any valid RSS or Atom URL. For example:

- `https://feeds.arstechnica.com/arstechnica/index` (tech news)
- `https://hnrss.org/frontpage` (Hacker News)
- Your own blog's `/feed.xml`

The node returns an array of items. Each item has fields like `title`, `link`, `content`, `pubDate`, and `guid`. You'll reference `guid` in the next step.

**Tip:** Enable "Return All Items" only if you want to backfill on the first run. For ongoing use, leave it at the default limit (usually 10 items per run) — you only want recent entries.

---

## Step 3 — Deduplicate with an IF or Deduplication node

Without this step the flow reposts the same articles on every run. You have two options:

**Option A — Deduplication node (n8n 1.22+):**

Add a **Deduplication** node, set the key to `{{ $json.guid }}`, and choose "Remove items seen in previous executions." n8n stores seen keys internally so no external database is needed.

**Option B — IF node + date check:**

If your feed always has a reliable `pubDate`, add an **IF** node:

- Condition: `{{ DateTime.fromISO($json.pubDate) > $now.minus({ minutes: 35 }) }}`

Items older than the window are dropped; fresh ones pass through.

---

## Step 4 — AI / LLM node (the core of the workflow)

Add an **AI / LLM** (or **OpenAI Message Model** / **Basic LLM Chain**) node. This is where the rewriting happens.

### Prompt structure

The system prompt sets the persona and constraints. The user message injects the article data. Here's a working example for a LinkedIn post:

**System prompt:**
```
You are a B2B content marketer. Write LinkedIn posts that are direct, insight-led,
and end with a single clear takeaway or question. No hashtag spam — at most 3 relevant
hashtags. 150–220 words. Do not start with "I" or with a generic observation.
Write in first person as if the reader is sharing their own opinion.
```

**User message (use n8n expressions):**
```
Article title: {{ $json.title }}
Article summary: {{ $json.contentSnippet }}
Source URL: {{ $json.link }}

Write a LinkedIn post that shares the key insight from this article.
```

For X (Twitter), swap the system prompt for one that demands 240 characters or fewer, a punchy opener, and no filler phrases.

You can create separate branches with an **IF** node to route LinkedIn-bound items to one prompt and X-bound items to another — same article, two different rewrites, queued to two different platforms.

### Model choice

Pick a model that balances cost and quality for short-form copy. `claude-3-5-haiku` and `gpt-4o-mini` are both fast and cheap for this task. You can change the model any time from the node's dropdown — no code change required.

---

## Step 5 — Post or queue the output

You have two main paths:

**Direct posting:**
- **LinkedIn node** → "Create Post" → set the `text` field to `{{ $json.output }}` (the AI node's output field) → authenticate via OAuth.
- **X (Twitter) node** → "Create Tweet" → same pattern.

**Queue for review first (recommended when starting out):**
- **Airtable node** → append a row with `post_text`, `platform`, `source_url`, and `status = "pending"`. A human (or a second workflow) picks up pending rows and publishes them.
- **Google Sheets node** → same idea, useful if your team already lives in Sheets.

Queueing for review is the safer default. Once you've seen 20–30 outputs and you're happy with the quality, switch to direct posting.

---

## Optional: Set node for metadata

Before hitting the AI node, add a **Set** node to normalize the fields you'll reference in prompts. This keeps expressions readable:

```json
{
  "title": "{{ $json.title }}",
  "summary": "{{ $json.contentSnippet || $json.content.slice(0, 500) }}",
  "url": "{{ $json.link }}",
  "feedName": "Hacker News"
}
```

---

## Run this on AgentRoost

The workflow above needs to run continuously on a schedule — which means it needs an always-on n8n instance. Running n8n on your laptop or a spare cloud VM means it goes dark when you close the lid or the instance sleeps.

On [AgentRoost](/en/agents/n8n) you get your own n8n instance — your login, your workflows, your data — running around the clock and accessible at `https://<your-id>.agentroost.app`.

**The part that matters for this workflow:** the AI/LLM node works out of the box because LLM credits are included in the subscription. Every competitor (n8n Cloud, Elestio, Sliplane, Hostinger) is bring-your-own-API-key. Here, you just wire up the node and hit "Execute" — no OpenAI account, no Anthropic account, no billing to set up on the side.

How to get started:

1. Sign up at AgentRoost (email, Google, Microsoft, or Discord).
2. Pick the **n8n** framework, name your instance.
3. Your private n8n editor opens at `https://<your-id>.agentroost.app` — usually within two minutes.
4. Import the workflow JSON or build it node by node from this guide.
5. Activate the Schedule Trigger. Done.

Plans start at **$19.99/mo all-in** — that's the server, the n8n instance, and the LLM credits bundled. 14-day money-back guarantee, cancel anytime.

[Compare plans](/en/pricing) — or go straight to the [n8n framework page](/en/agents/n8n) to see what's included.

---

## Common pitfalls

**The AI output includes the source URL — LinkedIn will still show a preview card.** That's fine, but if you want a clean post without a duplicate link in the text, strip `{{ $json.url }}` from the prompt's user message and let the LinkedIn node attach the URL as a separate field.

**Feed items with no `contentSnippet`.** Some feeds only give a `title` and `link`. Add a fallback in the Set node: `{{ $json.contentSnippet || $json.title }}`. For more depth, add an **HTTP Request** node to fetch and parse the article body before the AI node.

**Token limits on long articles.** If `content` is a full article (5,000+ words), the AI node's context window fills up. Truncate in the Set node: `{{ $json.content.slice(0, 1500) }}` — the first 1,500 characters usually contain the lede and key points.

**Rate limits on posting APIs.** LinkedIn's API allows 100 posts per day per member token. For most use cases that's not a constraint, but if you're pulling from 20 feeds and posting everything, add a **Wait** node between posts.

---

## What you end up with

A workflow that runs on a schedule, reads the feeds you care about, skips what it's already seen, writes a platform-appropriate post for each new item, and either publishes it directly or drops it in a review queue — without you touching a keyboard. The AI node handles the rewriting, and on AgentRoost it does so without requiring you to manage a single API key.
