Google Sheets + Slack, consistent news posts done
Publishing “consistent” news content usually means a messy loop of searching, copying links, checking what you already covered, writing from scratch, then posting and reporting it all. And somehow you still end up with repeats, thin articles, or a Slack channel full of “did this go out?” messages.
This Sheets Slack automation hits content marketers first, but founders running a niche blog and agency leads managing client publishing calendars feel it too. You get a steady stream of news posts without babysitting the process every day.
Below, you’ll see how the workflow discovers fresh news, prevents duplicates using Google Sheets, turns snippets into full articles with GPT‑4, publishes to your CMS, and then sends clean Slack updates so you always know what shipped.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Slack, consistent news posts done
flowchart LR
subgraph sg0["Daily Schedule 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/code.svg' width='40' height='40' /></div><br/>Prepare Publishing Data1"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Publish to CMS1"]
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Daily Schedule 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Search Recent Articles"]
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/>Extract Best Article"]
n5@{ icon: "mdi:robot", form: "rounded", label: "Generate Original Article", 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/slack.svg' width='40' height='40' /></div><br/>Send Slack Notification"]
n7@{ icon: "mdi:database", form: "rounded", label: "Log to Google Sheets2", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet in Googl..", pos: "b", h: 48 }
n10@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Skip problems"]
n8 --> n3
n11 --> n5
n1 --> n7
n10 -.-> n8
n4 --> n11
n7 --> n6
n2 --> n8
n3 --> n4
n0 --> n1
n5 --> n0
n9 -.-> n8
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 n2 trigger
class n5,n8 ai
class n10 aiModel
class n7,n9 database
class n1,n3 api
class n0,n4,n11 code
classDef customIcon fill:none,stroke:none
class n0,n1,n3,n4,n6,n11 customIcon
The Problem: News publishing turns into daily busywork
Keeping a news page or industry blog active sounds simple until you try to do it every single week. You search for stories, open 10 tabs, skim, pick one, and then the real time sink starts: rewriting it into something original, formatting it for your CMS, adding SEO metadata, and logging what you published so you don’t accidentally repeat yourself next week. Miss one small step and it snowballs. A duplicate post slips out. A “blocked by anti-bot” site wastes your time. Or you forget to notify the team and nobody knows the content is live.
The friction compounds. Here’s where it breaks down in the real world.
- Checking “have we covered this already?” turns into a manual spreadsheet search, which gets skipped when you’re busy.
- Finding articles from the last 7 days takes longer than it should because you bounce between search, feeds, and newsletters.
- Writing a credible 2,000+ word post in a consistent style eats a big chunk of a morning, especially when you also need SEO formatting.
- Publishing, logging, and sharing in Slack becomes three separate tasks, so you do two and forget the third.
The Solution: Discover, write, publish, and log news automatically
This workflow runs on a schedule (every 8 hours) and builds a reliable “news pipeline” for you. It starts by using an AI agent to generate smart search queries tailored to your niche, while also checking your Google Sheet history so it doesn’t chase the same topics again and again. Then it hits the Google Custom Search API to pull recent articles from the last 7 days, selects a top candidate, and filters out sources that are likely to block scraping. From there, GPT‑4 turns the available content (full text when possible, snippets when not) into an original, professional article in a Reuters/Bloomberg-style voice. Finally, the workflow formats everything into a publishing payload, posts to your CMS endpoint, appends a clean log row to Google Sheets, and sends a detailed Slack update so your team sees what went live.
The workflow starts with scheduled discovery. It moves through duplicate prevention and source filtering, then hands off to GPT‑4 for long-form writing and SEO-ready formatting. At the end, your CMS gets a new post, Google Sheets gets the record, and Slack gets the “it’s done” message.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you aim for 2 news posts per day. Manually, it’s easy to spend about 30 minutes searching and vetting sources, then about 2 hours writing and formatting, plus 10 minutes publishing and logging. That’s roughly 5 hours a day for two posts. With this workflow, the trigger is automatic, query generation is instant, and the system does the searching, drafting, publishing, and logging while you do a quick editorial pass when you want. For many teams, “daily news content” goes from a half-day chore to a light review task.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for duplicate prevention and publishing logs
- Slack to send publishing updates to your channel
- Google Custom Search API key + Search Engine ID (get them in Google Cloud Console and Custom Search Engine)
- OpenAI API key (GPT‑4) (get it from your OpenAI API dashboard)
- CMS API endpoint for publishing posts to your site
Skill level: Intermediate. You’ll connect a few accounts, paste API keys, and update the CMS endpoint fields.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A schedule kicks things off. The workflow runs every 8 hours, which means you can publish multiple times per day without remembering to “go find something to post.”
Google Sheets acts like your system memory. Before it searches the web, the workflow looks up prior rows (queries, titles, URLs, and statuses) so it can avoid topics you already used and keep a clean audit trail.
Search, selection, and source filtering happen in one pass. n8n pulls recent results through Google Custom Search, chooses a top article, and then skips sources that tend to block bots, so the run keeps moving instead of failing halfway through.
GPT‑4 writes and the CMS publishes. The workflow composes a long-form article, formats the publishing payload (including SEO metadata), posts it to your CMS endpoint, appends the final status and word count to Google Sheets, then sends a Slack update with the important details.
You can easily modify the publishing cadence and article style to match your niche and editorial standards. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Daily Trigger
This workflow starts on a daily schedule and kicks off the content discovery process.
- Add and open Scheduled Daily Trigger.
- Set the trigger rule to run daily at
07:00by configuring Trigger At Hour to7. - Confirm the node outputs to Content Query Agent as the first step in the execution flow.
Step 2: Connect Google Sheets
Google Sheets is used to both look up previously processed queries and log published articles.
- Open Lookup Sheet Rows and set Document to
[YOUR_ID]and Sheet togid=0. - Set the lookup filter query to
{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('values0_Value', ``, 'string') }}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials for Lookup Sheet Rows. This is an AI tool for Content Query Agent, so ensure credentials are configured on the parent tool connection. - Open Append Sheet Log and set Document to
[YOUR_ID]and Sheet togid=0. - Verify the append mappings use expressions such as
{{ $json.article.slug }}and{{ $('Format Publishing Payload').item.json.article.focusKeyphrase }}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials for Append Sheet Log.
Step 3: Set Up Content Discovery and Search
This section generates a unique search query and pulls recent articles from Google Custom Search.
- Open Content Query Agent and confirm the Prompt text is set to the multi-line query instruction block.
- Ensure OpenAI Chat Engine is connected as the language model for Content Query Agent and uses model
gpt-4-turbo-preview. - Credential Required: Connect your
openAiApicredentials for OpenAI Chat Engine. - Open Fetch Recent Articles and set URL to
https://www.googleapis.com/customsearch/v1. - Configure query parameters: key to
[CONFIGURE_YOUR_API_KEY], cx to[YOUR_ID], q to{{ $json.output }}, dateRestrict tod7, and num to5. - Confirm the flow order: Scheduled Daily Trigger → Content Query Agent → Fetch Recent Articles → Select Top Article → Filter Blocked Sources.
[CONFIGURE_YOUR_API_KEY] and [YOUR_ID] in Fetch Recent Articles must be replaced with your Google Custom Search API key and CX ID or the search will fail.Step 4: Set Up Article Generation and Formatting
These nodes generate the original article and normalize the JSON payload for publishing.
- Open Compose Original Article and set Model to
gpt-4-turbo-preview, Max Tokens to4096, and Temperature to0.7. - Review the message template to confirm it includes the expressions like
{{ $json.content }},{{ $json.title }}, and{{ $json.source }}. - Credential Required: Connect your
openAiApicredentials for Compose Original Article. - Open Format Publishing Payload and keep the provided JavaScript Code that parses and formats the response into publishing, SEO, and metadata fields.
- Verify the flow order: Filter Blocked Sources → Compose Original Article → Format Publishing Payload.
Step 5: Configure Publishing and Notifications
The final stage posts the formatted article to your CMS, logs results to Google Sheets, and sends a Slack update.
- Open Post to CMS Endpoint and set URL to
webhook_urland Method toPOST. - Set JSON Body to the full expression payload beginning with
{ "title": {{ JSON.stringify($json.article.title) }}, "slug": {{ JSON.stringify($json.publishing.slug) }}, ... }. - Confirm the request sends Content-Type header as
application/json. - Open Append Sheet Log and confirm it appends after Post to CMS Endpoint.
- Open Dispatch Slack Update and set Channel to
[YOUR_ID]and Text to the templated message using expressions like{{ $('Post to CMS Endpoint').item.json.article.title }}. - Credential Required: Connect your
slackOAuth2Apicredentials for Dispatch Slack Update.
Step 6: Test and Activate Your Workflow
Run a full test to validate the content pipeline before turning on daily publishing.
- Click Execute Workflow and verify Content Query Agent outputs a short search phrase.
- Confirm Fetch Recent Articles returns results, Select Top Article parses them, and Filter Blocked Sources outputs at least one valid article.
- Check Compose Original Article outputs a JSON-formatted article and Format Publishing Payload builds publishing fields correctly.
- Verify Post to CMS Endpoint returns a successful response, then confirm Append Sheet Log writes a new row and Dispatch Slack Update posts in Slack.
- When satisfied, switch the workflow to Active so Scheduled Daily Trigger runs it every morning.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the credential status in n8n and confirm the spreadsheet is shared with the connected Google account 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 an hour if your API keys and CMS endpoint are ready.
No. You’ll mainly connect accounts and paste API keys. The only “technical” part is filling in your CMS endpoint details.
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 OpenAI API costs (often a few dollars per long article) and Google Custom Search usage.
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 prompt inside the Content Query Agent so it generates queries for your niche, then adjust the Compose Original Article (GPT‑4) instructions to match your tone (technical, casual, executive brief, and so on). You can also tweak the “last 7 days” freshness logic in the search request and change how many results are considered before Select Top Article picks a winner.
Usually it’s expired OAuth access or the connected Google account doesn’t have permission to the sheet. Reconnect Google Sheets in n8n, then confirm the spreadsheet ID is correct and the file isn’t in a restricted Shared Drive. If failures happen only on busy days, you may also be hitting Google API quotas, so slowing the schedule or reducing processed results can help.
It depends on your n8n plan and your API limits, but most small sites can comfortably publish a few posts per day with this setup.
For long-form publishing pipelines, n8n is often the better fit because it handles branching logic, code steps, and “agent + LLM” workflows cleanly. It’s also easier to keep a full audit trail (Sheets logging, payload formatting, error handling) without duct-taping five separate Zaps together. If you want to self-host, that’s another practical win when volume grows. Zapier or Make can still be fine for lightweight “send me a digest” automations. If you want a quick recommendation based on your publishing volume and tools, Talk to an automation expert.
Once this is running, your publishing machine stops depending on someone having a “free morning.” The workflow handles the repetitive parts, and you keep control where it matters.
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.