Slack to WordPress, posts published and logged in Sheets
Slack fills up with “can we write a post about…” messages, and then it gets messy. Ideas get buried, context goes missing, and you end up copying the same details into three different places just to get one article published.
This is the kind of Slack WordPress automation that saves marketing managers from constant follow-ups. It also helps agency owners who juggle multiple client blogs, and the content lead who needs a clean publishing trail. The outcome is simple: posts go live with consistent SEO structure, and every publish is logged in Google Sheets automatically.
Below, you’ll see how the workflow turns a Slack request into a researched article, publishes it to WordPress, and then writes the “paper trail” row to Sheets so you always know what shipped.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Slack to WordPress, posts published and logged in Sheets
flowchart LR
subgraph sg0["Workflow Input Start Flow"]
direction LR
n12@{ icon: "mdi:play-circle", form: "rounded", label: "Workflow Input Start", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "Generate Slug", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Generate Title", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Append Sheet Row", pos: "b", h: 48 }
n16@{ icon: "mdi:web", form: "rounded", label: "Google Trends Lookup", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Trend Fields", pos: "b", h: 48 }
n18@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Engine 2", pos: "b", h: 48 }
n19@{ icon: "mdi:robot", form: "rounded", label: "Select Top Keywords", pos: "b", h: 48 }
n20@{ icon: "mdi:robot", form: "rounded", label: "Draft Outline Plan", pos: "b", h: 48 }
n21@{ icon: "mdi:robot", form: "rounded", label: "Parse Structured Output", pos: "b", h: 48 }
n22["<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/perplexity.dark.svg' width='40' height='40' /></div><br/>Query Perplexity Model"]
n23@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Items A", pos: "b", h: 48 }
n24@{ icon: "mdi:cog", form: "rounded", label: "Limit Results", pos: "b", h: 48 }
n25@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Keyword Fields", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Items B", pos: "b", h: 48 }
n27@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Keywords", pos: "b", h: 48 }
n28["<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 Keyword Streams"]
n29@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Prior Posts", pos: "b", h: 48 }
n30@{ icon: "mdi:database", form: "rounded", label: "Fetch Previous Posts", pos: "b", h: 48 }
n31@{ icon: "mdi:robot", form: "rounded", label: "Compose Article Part A", pos: "b", h: 48 }
n32@{ icon: "mdi:robot", form: "rounded", label: "Compose Article Part B", pos: "b", h: 48 }
n33@{ icon: "mdi:swap-vertical", form: "rounded", label: "Finalize Article Fields", pos: "b", h: 48 }
n34["<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/markdown.dark.svg' width='40' height='40' /></div><br/>Convert to Markdown"]
n35["<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/wordpress.svg' width='40' height='40' /></div><br/>Publish WordPress Post"]
n36@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Response Output", pos: "b", h: 48 }
n13 --> n14
n14 --> n35
n24 --> n28
n28 --> n31
n34 --> n13
n27 --> n28
n23 --> n24
n26 --> n25
n17 --> n19
n35 --> n15
n25 --> n27
n33 --> n34
n30 --> n29
n22 --> n23
n22 --> n26
n22 --> n30
n20 --> n22
n15 --> n36
n16 --> n17
n31 --> n32
n32 --> n33
n18 -.-> n19
n12 --> n16
n21 -.-> n19
n19 --> n20
end
subgraph sg1["Slack Event Flow"]
direction LR
n0["<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 Event Trigger"]
n1["<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/telegram.svg' width='40' height='40' /></div><br/>Telegram Event Trigger"]
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Gmail Event Trigger", 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/whatsapp.svg' width='40' height='40' /></div><br/>WhatsApp Event Trigger"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Input Fields", pos: "b", h: 48 }
n5["<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/telegram.svg' width='40' height='40' /></div><br/>Dispatch Telegram Text"]
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/whatsapp.svg' width='40' height='40' /></div><br/>Post WhatsApp Message"]
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/slack.svg' width='40' height='40' /></div><br/>Send Slack Notification"]
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Dispatch Gmail Message", pos: "b", h: 48 }
n9@{ icon: "mdi:wrench", form: "rounded", label: "Invoke Workflow Tool", pos: "b", h: 48 }
n10@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Engine", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Blog Content Agent", pos: "b", h: 48 }
n11 --> n5
n11 --> n6
n11 --> n7
n11 --> n8
n4 --> n11
n2 --> n4
n0 --> n4
n1 --> n4
n3 --> n4
n10 -.-> n11
n9 -.-> n11
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 n12,n0,n1,n2,n3 trigger
class n13,n14,n19,n20,n21,n31,n32,n11 ai
class n18,n10 aiModel
class n9 ai
class n15,n30 database
class n16 api
class n3 disabled
class n6 disabled
classDef customIcon fill:none,stroke:none
class n22,n28,n34,n35,n0,n1,n3,n5,n6,n7 customIcon
The Challenge: Turning Slack Ideas Into Published Posts (Without Dropping Balls)
Most teams don’t struggle with “coming up with blog ideas.” They struggle with everything after the idea. A Slack message turns into a half-finished Google Doc, then into a WordPress draft, then into a publish that somebody forgets to log. Meanwhile, you’re answering the same questions again: What keyword are we targeting? Did we check competitors? Is there an internal link opportunity to an older post? Small misses become expensive because they compound across every post you ship.
It adds up fast. Here’s where it breaks down in the real world.
- A Slack request doesn’t carry a structured brief, so writers fill gaps with guesses and you spend time revising basics.
- Keyword research and competitor checks get “done later,” which usually means they don’t get done at all.
- Publishing becomes a multi-tab ritual, and it’s easy to miss essentials like slug format, headings, and meta-ready structure.
- Tracking is inconsistent, so nobody can answer “what did we publish last week?” without digging through WordPress.
The Fix: Slack → AI Research → WordPress Publish → Sheets Log
This workflow takes a simple request from Slack (or Telegram, WhatsApp, and Gmail if you want multiple intake channels) and turns it into a WordPress-ready post with research baked in. It starts by mapping the incoming message into a consistent set of fields so the rest of the system doesn’t depend on someone writing the “perfect” Slack request. Then AI agents generate a clean title and slug, pull in keyword ideas, and use research sources (including trends and a Perplexity query) to build an outline and supporting points. The article is written in two composed parts, finalized into publishable fields, converted into Markdown, and pushed directly to WordPress. Finally, the workflow appends a row to Google Sheets so you have an always-current log of what was published and when.
The workflow begins when a Slack message triggers the intake. From there it runs keyword selection, outline planning, and research, then composes the draft and publishes it. Once WordPress confirms the publish, Google Sheets gets the tracking row so your content pipeline stays visible.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you publish 3 posts a week. Manually, a typical flow looks like 30 minutes of keyword work, about 30 minutes of competitor scanning, 2 hours drafting, and another 30 minutes to format, publish, and log the details, so you’re at roughly 3.5 hours per post. With this workflow, the Slack request takes maybe 5 minutes to write, then the system handles research, outline, drafting, formatting, publishing, and the Google Sheets log while you review and tweak. You still edit, but you stop doing the repetitive parts.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Slack for capturing content requests as events.
- WordPress to publish posts automatically.
- Google Sheets to log each publish and metadata.
- OpenAI / OpenRouter key (get it from your OpenAI or OpenRouter dashboard).
- Perplexity API key (get it from your Perplexity account settings).
Skill level: Intermediate. You’ll be connecting accounts, adding API keys, and doing light field mapping, but you won’t be writing code.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A Slack message kicks it off. The workflow listens for a Slack event, then captures the request (topic, notes, priority cues) and standardizes it into a predictable brief.
Keyword and trend research get pulled in automatically. It looks up related trend signals and builds a keyword set, then narrows that down to the best targets for the post you’re trying to write.
The draft is written in a controlled way. The system creates an outline, queries research via Perplexity, and composes the article in two parts so it can stay structured and less rambly. It then finalizes fields like title and slug, and converts everything into Markdown for clean publishing.
WordPress publishes, then Sheets logs. The post is pushed to WordPress (publish now, or adapt it for drafts/scheduling), and a Google Sheets row is appended so you have a simple content database for reporting and internal linking.
You can easily modify the intake channel from Slack to Gmail or WhatsApp based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Trigger Nodes
This workflow can start from multiple inbound channels. Configure each trigger you plan to use so incoming messages map into the same pipeline.
- Open Slack Event Trigger and connect it to your Slack workspace. Credential Required: Connect your Slack credentials.
- Open Telegram Event Trigger and connect your Telegram bot. Credential Required: Connect your Telegram Bot credentials.
- Open Gmail Event Trigger and connect the mailbox you want to monitor. Credential Required: Connect your Gmail OAuth2 credentials.
- If you plan to receive WhatsApp inputs, enable WhatsApp Event Trigger (currently disabled) and add credentials. Credential Required: Connect your WhatsApp credentials.
- Confirm each trigger routes to Map Input Fields as shown in the connections.
Tip: If you don’t want a channel to trigger the workflow, leave that trigger disabled and remove its connection to Map Input Fields.
Step 2: Connect the Input Mapping and Agent Orchestration
The input from any trigger is normalized and passed into the AI agent for orchestration.
- Open Map Input Fields and define the fields you want to map from trigger payloads (e.g., message text, sender, channel).
- Open Blog Content Agent and verify it is connected to OpenRouter Chat Engine as the language model. Credential Required: Connect your OpenRouter credentials.
- Open Invoke Workflow Tool and confirm it is attached to Blog Content Agent. For tool sub-nodes, add credentials to the parent agent connection, not here.
⚠️ Common Pitfall: The AI tool sub-node Invoke Workflow Tool does not accept credentials directly—ensure credentials are set on the parent node connection used by Blog Content Agent.
Step 3: Set Up Trend Discovery and Keyword Planning
This branch starts from Workflow Input Start and builds a keyword plan using Google Trends, OpenRouter, and Perplexity with parallel branches.
- Open Workflow Input Start to confirm it routes to Google Trends Lookup.
- Open Google Trends Lookup and connect SerpAPI. Credential Required: Connect your SerpAPI credentials.
- Open Prepare Trend Fields and normalize the trends output for the LLM chain.
- Open Select Top Keywords and verify it uses OpenRouter Chat Engine 2 as its language model and Parse Structured Output as its parser. Credential Required: Connect your OpenRouter credentials on OpenRouter Chat Engine 2.
- Open Draft Outline Plan and connect your OpenAI credentials. Credential Required: Connect your OpenAI credentials.
- Open Query Perplexity Model and connect your Perplexity credentials. Credential Required: Connect your Perplexity credentials.
Query Perplexity Model outputs to Split Items A, Split Items B, and Fetch Previous Posts in parallel.
⚠️ Common Pitfall: The Parse Structured Output node is an AI sub-node—its configuration depends on the parent Select Top Keywords chain, so add credentials on the connected language model, not the parser.
Step 4: Process Keywords and Historical Context
Perplexity outputs are split, limited, and merged with prior posts to avoid repetition and create a refined keyword set.
- Open Split Items A and ensure it feeds into Limit Results, then into Combine Keyword Streams.
- Open Split Items B and map outputs in Format Keyword Fields before sending to Aggregate Keywords.
- Open Fetch Previous Posts to pull previous content from Google Sheets. Credential Required: Connect your Google Sheets credentials.
- Confirm Fetch Previous Posts outputs to Aggregate Prior Posts for summary context.
- Ensure Aggregate Keywords and Limit Results both feed into Combine Keyword Streams.
Tip: With multiple set nodes in this workflow, keep a consistent field naming scheme to avoid overwriting fields between Format Keyword Fields, Finalize Article Fields, and Map Input Fields.
Step 5: Generate the Article and Prepare Publishing Fields
The content is written in stages, finalized, converted to Markdown, and prepared for WordPress metadata.
- Open Compose Article Part A and connect your OpenAI credentials. Credential Required: Connect your OpenAI credentials.
- Open Compose Article Part B and connect your OpenAI credentials. Credential Required: Connect your OpenAI credentials.
- Open Finalize Article Fields to assemble title, body, tags, and metadata fields.
- Open Convert to Markdown to ensure the article body is formatted for WordPress.
- Open Generate Slug and Generate Title and connect OpenAI credentials. Credential Required: Connect your OpenAI credentials.
⚠️ Common Pitfall: There are five OpenAI-based nodes in this workflow. Ensure all of them (Draft Outline Plan, Compose Article Part A, Compose Article Part B, Generate Slug, Generate Title) use the correct OpenAI credentials to avoid inconsistent outputs.
Step 6: Publish and Log the Post
Publish the final article to WordPress and log details to Google Sheets for tracking.
- Open Publish WordPress Post and connect WordPress credentials. Credential Required: Connect your WordPress credentials.
- Confirm Publish WordPress Post receives the title and slug from Generate Title and Generate Slug.
- Open Append Sheet Row and connect Google Sheets credentials to log the published post. Credential Required: Connect your Google Sheets credentials.
- Open Set Response Output to configure any workflow response payloads for downstream calls.
Step 7: Configure Multi-Channel Notifications
After content is generated by Blog Content Agent, notifications are dispatched across multiple channels simultaneously.
- Verify that Blog Content Agent outputs to Dispatch Telegram Text, Post WhatsApp Message, Send Slack Notification, and Dispatch Gmail Message in parallel.
- Open Dispatch Telegram Text and connect Telegram credentials. Credential Required: Connect your Telegram Bot credentials.
- Open Send Slack Notification and connect Slack credentials. Credential Required: Connect your Slack credentials.
- Open Dispatch Gmail Message and connect Gmail credentials. Credential Required: Connect your Gmail OAuth2 credentials.
- If you plan to use WhatsApp, enable Post WhatsApp Message and connect WhatsApp credentials. Credential Required: Connect your WhatsApp credentials.
Blog Content Agent outputs to both Dispatch Telegram Text and Post WhatsApp Message and Send Slack Notification and Dispatch Gmail Message in parallel.
Tip: Keep message templates concise; these notifications are for alerts and previews, not the full article.
Step 8: Test and Activate Your Workflow
Run a controlled test to confirm the full pipeline—from triggers to WordPress publishing and notifications—works as expected.
- Click Execute Workflow and trigger the workflow using one channel (e.g., send a Slack message to Slack Event Trigger).
- Verify that Map Input Fields and Blog Content Agent receive normalized input and generate content.
- Check that the keyword pipeline reaches Compose Article Part A and Compose Article Part B, and that Publish WordPress Post creates a draft or post.
- Confirm a row is added in Append Sheet Row and a response is set in Set Response Output.
- Enable the workflow by toggling Active once test results look correct.
⚠️ Common Pitfall: If the workflow stops before publishing, check credential setup for OpenRouter Chat Engine, OpenRouter Chat Engine 2, Query Perplexity Model, and all OpenAI nodes.
Watch Out For
- WordPress credentials can expire or need specific permissions. If things break, check your WordPress application password (or user role permissions) 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.
Common Questions
About 30 minutes if your accounts and API keys are ready.
Yes. No coding required, but someone should be comfortable connecting Slack, WordPress, and Google Sheets accounts.
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 AI and research APIs (OpenAI/OpenRouter and Perplexity), which are usually a few dollars a month at typical blog volume.
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.
Start by swapping the intake trigger: you can keep Slack, or switch to Gmail/Telegram/WhatsApp by using the matching event trigger node and keeping the “Map Input Fields” step consistent. If you want drafts instead of immediate publishing, change the settings in the “Publish WordPress Post” node to create a draft or schedule. Common tweaks include adjusting the keyword selection prompt, changing the outline format in the “Draft Outline Plan” node, and logging extra columns in Google Sheets (like author, category, or content type).
Usually it’s an expired application password or a user role that can’t publish posts. Update the credentials in n8n, then confirm the WordPress user can create and publish content. If it fails only sometimes, you may also be hitting hosting security rules that block repeated API requests, so check your WordPress security plugin logs or your host’s firewall events.
On a typical n8n Cloud plan, you can run thousands of executions a month, and each post is usually a single execution chain. If you self-host, there’s no execution limit; capacity mostly depends on your server and how many AI calls you run at once. Practically, most small teams run this comfortably for a few posts per day, then scale up by adding queues or spacing runs out.
For this workflow, n8n has a few advantages: you can run complex logic (multiple research paths, merging streams, structured parsing) without paying for every extra step, and you can self-host for unlimited executions. It also handles AI agent-style flows more naturally, which matters when you’re doing outline → research → compose → finalize. Zapier or Make can still work if you want something simple, like “Slack message creates a draft,” but the moment you add multi-stage research and logging, it gets harder to maintain. If you’re on the fence, Talk to an automation expert and describe your volume and review process.
Once this is running, publishing becomes predictable again. The workflow handles the repeatable work, and you keep your attention for the parts that actually need judgment.
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.