Slack + Google Gemini: blog drafts from RSS, ready to post
Content ideas are everywhere until you need one right now. Then it’s 12 tabs, half-finished notes, and that annoying feeling that you’re “working” without actually producing anything.
Slack Gemini drafts is for the person who has to ship, not just brainstorm. A marketing manager trying to keep a calendar full, a founder writing between meetings, or a content lead feeding writers and stakeholders. You’ll pull fresh RSS headlines into Slack, pick a topic in-thread, and get a publish-ready draft back without leaving the channel.
This workflow turns Slack into your content control hub. Below, you’ll see how it works, what you need, and what outcomes you can expect once it’s running.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Slack + Google Gemini: blog drafts from RSS, ready to post
flowchart LR
subgraph sg0["Slack Message Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Fetch Skift Feed", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Retrieve Google News Feed", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Pull Tech News Feed", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Slack Message Trigger"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse Slack Command"]
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route by Command", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Combine Feed Streams"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Build Headline Payload"]
n8@{ icon: "mdi:robot", form: "rounded", label: "Gemini Topic Clustering", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Normalize Topic Output"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Post Topic List"]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Get Thread Replies"]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Select Topic from Thread"]
n13@{ icon: "mdi:robot", form: "rounded", label: "Generate Draft Post", pos: "b", h: 48 }
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send Draft to Slack"]
n0 --> n6
n1 --> n6
n2 --> n6
n6 --> n7
n13 --> n14
n3 --> n4
n5 --> n2
n5 --> n1
n5 --> n0
n5 --> n11
n4 --> n5
n8 --> n9
n9 --> n10
n7 --> n8
n11 --> n12
n12 --> n13
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n3 trigger
class n8,n13 ai
class n5 decision
class n4,n7,n9,n12 code
classDef customIcon fill:none,stroke:none
class n3,n4,n6,n7,n9,n10,n11,n12,n14 customIcon
The Problem: Blog Ideation Gets Scattered (Fast)
RSS is great for staying informed, but it’s a terrible place to actually create. You read a headline, open it, then open two related links, then you copy a quote into a doc, then you try to turn that into a usable angle. Meanwhile, Slack keeps pinging, so you bounce back and lose your place. By the time you return to writing, the “easy post” has turned into an hour of context switching and a draft that still doesn’t have a hook.
It’s not one big issue. It’s a pile of small frictions that keep content from shipping.
- Headlines live in feed readers, but your decisions and approvals happen in Slack.
- Teams keep rewriting the same “trend” ideas, which means duplication and weaker originality.
- Drafts get started in one place and finished somewhere else, so nobody knows what’s current.
- Even a simple post can eat about 2 hours when you count sourcing, topic selection, and reformatting.
The Solution: Slack-First RSS-to-Draft Automation with Gemini
This n8n workflow pulls trending headlines from multiple RSS feeds and routes everything through Slack, so your ideation and drafting happen in the same place your team already works. You trigger it by typing a simple command in a Slack channel. n8n fetches fresh items from sources like Google News, Skift, and tech feeds, then combines them into one clean set. Google Gemini rewrites those raw headlines into unique topic options (not duplicates), and Slack posts them as a numbered list in a thread. You reply with the number you want, Gemini validates the angle and rewrites it slightly for originality, then generates a LinkedIn/blog-style draft and sends it right back into the same Slack thread.
The workflow starts with a Slack message trigger and a quick command parser. From there, RSS feeds are fetched and merged, Gemini turns headlines into usable topic options, and your selection in-thread becomes the input for a full draft. Finally, the draft lands back in Slack, already structured for publishing (markdown or plain text).
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish 3 posts a week. Before: you skim 3 feeds, open articles, copy headlines into a doc, and workshop angles, which is often about 2 hours per post once interruptions hit. After: you type start in Slack, scan a numbered list of topics, reply “gen 2,” then wait for the draft to come back (usually a few minutes). You still edit, obviously, but you get your starting point fast, and you keep the whole trail in one Slack thread.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Slack to trigger runs and receive drafts.
- Google Gemini API to generate topics and full drafts.
- Gemini API key (get it from Google AI Studio / your Google Cloud project)
Skill level: Intermediate. You’ll connect Slack credentials, paste an API key, and tweak prompts without breaking the logic.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Slack command kicks it off. You type something like “start” in a channel, and the Slack Message Trigger fires. A small parsing step interprets what you asked for so the workflow can route correctly.
RSS feeds are fetched and combined. n8n pulls the latest headlines from your configured sources (Google News, Skift, tech news in this version), then merges them into a single list. This prevents you from scanning three different places and missing the good stuff.
Gemini turns headlines into selectable topics. The workflow builds a clean payload and sends it to Google Gemini, which rewrites headlines into unique topic ideas and clusters similar ones. Slack then posts a numbered topic list back into the thread so you can choose quickly.
Your reply generates the draft. When you reply in the same thread with a number (or “gen 3”), n8n pulls thread replies, selects the chosen topic, and asks Gemini to write a structured draft (hook, 3–5 insights, closing takeaway/CTA). The finished content is sent right back into Slack.
You can easily modify the RSS sources to match your niche, or change the draft format to match your CMS requirements. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Slack Trigger
This workflow begins when a message is posted in Slack. You’ll connect the trigger and specify which channel to listen to.
- Add and open Slack Message Trigger.
- Credential Required: Connect your slackApi credentials.
- Set Trigger to
message. - Set Channel ID to your target channel (current value is
[YOUR_ID]).
⚠️ Common Pitfall: If the Slack app isn’t installed in the target channel, Slack Message Trigger will not fire. Ensure the app is invited to the channel.
Step 2: Route Commands and Build Parallel Feed Inputs
Slack messages are normalized, then routed into parallel feed fetches when the start command is received.
- Open Parse Slack Command and keep the provided jsCode to normalize Slack events into
cmd,pick, and thread metadata. - Open Route by Command and verify the rules use
{{$json.cmd}}with right valuesstart,gen,revise, anddone. - Route by Command outputs to Pull Tech News Feed, Retrieve Google News Feed, and Fetch Skift Feed in parallel.
Use the start command in Slack to kick off the parallel RSS fetch flow.
Step 3: Configure RSS Feed Sources
Each RSS node pulls headlines from a different source, then merges them into a single stream.
- Set Fetch Skift Feed URL to
https://skift.com/feed/. - Set Retrieve Google News Feed URL to
https://news.google.com/rss/search?q=hotel+technology+OR+hospitality+tech+when:7d&hl=en-US&gl=US&ceid=US:en. - Set Pull Tech News Feed URL to
https://news.google.com/rss/search?q=[CONFIGURE_YOUR_API_KEY]+when:7d&hl=en-US&gl=US&ceid=US:enand replace the placeholder with your query string. - Ensure Combine Feed Streams has Number of Inputs set to
3.
⚠️ Common Pitfall: If Pull Tech News Feed retains [CONFIGURE_YOUR_API_KEY], the request may return no results or fail parsing. Replace it with a valid query term.
Step 4: Prepare Headlines and Run Topic Clustering
Merged feed items are cleaned, deduplicated, and sent to Gemini for topic clustering.
- Open Build Headline Payload and confirm the script builds
articleTextand limits results withMAX_HEADLINES = 60. - Open Gemini Topic Clustering and verify Model is
models/gemini-1.5-flashwith JSON Output enabled. - Credential Required: Connect your googlePalmApi credentials in Gemini Topic Clustering.
- Ensure the prompt references
{{$json.articleText}}so the clustered topics are generated from the merged feeds.
Step 5: Normalize and Post Topics to Slack
The workflow parses Gemini’s JSON into a clean list and posts it into the Slack thread.
- Open Normalize Topic Output and keep the parser that converts Gemini output into
{ topics: [{ topic: "..." }] }. - Open Post Topic List and keep the Text expression set to
{{ (function () { ... })() }}to format the numbered list. - Credential Required: Connect your slackApi credentials in Post Topic List.
- Set Channel ID in Post Topic List to the same channel as the trigger (current value is
[YOUR_ID]). - Confirm Thread Timestamp uses
{{$node["Parse Slack Command"].json.thread_ts || $node["Parse Slack Command"].json.ts}}to keep replies in-thread.
Step 6: Generate the Draft Post from Thread Replies
When a user replies with a topic number, the workflow fetches thread replies, selects the topic, and generates a draft post with Gemini.
- Open Get Thread Replies and keep Operation as
replieswith TS set to{{$node["Parse Slack Command"].json.thread_ts || $node["Parse Slack Command"].json.ts}}. - Credential Required: Connect your slackApi credentials in Get Thread Replies.
- Review Select Topic from Thread to ensure it parses the numbered list and outputs
topicfor the next step. - Open Generate Draft Post and confirm the prompt uses
{{$json.topic}}and{{$json.articleText || ''}}. - Credential Required: Connect your googlePalmApi credentials in Generate Draft Post.
Step 7: Configure the Output to Slack
The draft post is sent back to the Slack thread for review.
- Open Send Draft to Slack and set Text to
{{$json.text || $json.content?.parts?.[0]?.text || 'No content generated.'}}. - Credential Required: Connect your slackApi credentials in Send Draft to Slack.
- Set Channel ID to the same Slack channel (current value is
[YOUR_ID]). - Ensure Thread Timestamp uses
{{$node["Parse Slack Command"].json.thread_ts || $node["Parse Slack Command"].json.ts}}to keep the draft in the thread.
Step 8: Test and Activate Your Workflow
Validate the workflow end-to-end, then activate it for production use.
- Click Execute Workflow and send
startin the configured Slack channel. - Confirm Post Topic List replies with a numbered list of topics in the same thread.
- Reply in-thread with a number like
2orgen 2and verify Send Draft to Slack posts a 250–350 word draft. - Once successful, toggle the workflow to Active for ongoing use.
Common Gotchas
- Slack credentials can expire or need specific permissions. If things break, check your n8n Slack credential status and the bot’s channel access first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your Slack bot and Gemini key are ready.
No. You’ll mostly connect accounts and edit prompts. The workflow logic is already built; you’re just configuring it for your feeds and voice.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Google Gemini API usage, which is usually small for a few drafts a week.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. Update the prompts in the Gemini Topic Clustering and Generate Draft Post nodes to match your tone, add your target audience, and specify formatting (markdown, sections, headings). Common tweaks include “sound like our newsletter,” “write for SaaS buyers,” and “include a short meta description plus 3 headline options.” You can also swap RSS feeds to match your niche without changing the rest of the workflow.
Usually it’s expired credentials or the bot not being invited to the channel you’re posting in. Reconnect the Slack credential in n8n, then confirm the bot has permission to read thread replies and post messages. If it fails only sometimes, rate limits or missing scopes are often the culprit.
If you self-host, it mostly depends on your server and how often you trigger it.
Often, yes, because this flow benefits from branching, merging multiple feeds, and doing “reply-in-thread” logic cleanly. n8n also gives you the option to self-host, which can be a big deal when you start generating lots of drafts or adding more feeds. Zapier or Make can still work if you’re doing a simpler version, like one RSS feed to one AI step to one Slack message. But once you want topic selection, validation, and structured drafting in the same thread, you’ll feel the limits. Talk to an automation expert if you want help choosing the simplest setup for your team.
Set this up once and your next “what should we write about?” moment becomes a Slack message, not a half-day project. The workflow handles the repetitive parts, so you can spend your time making the draft actually worth reading.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.