Google Alerts still exists, but it has been unreliable for years: late, incomplete, and stuck in your inbox. What I actually wanted was simpler: every morning, one Slack message with what was published about our brand and our competitors in the last 24 hours, with links to the original articles, and nothing I have already seen.
This is the n8n workflow that does it. It has five nodes, takes about five minutes to set up and costs around $1.50 a month.
Disclosure: the news data comes from the Google News Scraper on Apify, which I built. Prices and limits are below.
The result
News digest 2026-10-20: 19 new article(s)
OpenAI (10)
- OpenAI races to raise $30 billion at $1.4 trillion valuation ahead of Anthropic IPO (CTech)
- EXCLUSIVE: OpenAI seeks to accelerate fundraising ahead of Anthropic IPO, sources say (Reuters)
- Lawsuit alleges OpenAI 'stole' children's user data (Mashable)
...
Anthropic (9)
- Former Google CEO Schmidt owns 1% stake in Anthropic, Bloomberg reports (Reuters)
- Anthropic is AI trade's last big hope for a major IPO this year (CNBC)
...
That is real output from a test run, with "OpenAI" and "Anthropic" as example queries. In Slack every headline is a link to the publisher's page, not to a Google redirect.
The workflow
Schedule (daily 7:30)
→ HTTP Request: Google News Scraper
→ Remove Duplicates (previous executions, by URL)
→ Code: build digest
→ Slack (+ optional e-mail)
1. Search Google News
An HTTP Request node calls the Actor through Apify's synchronous endpoint (run-sync-get-dataset-items), which runs it and returns the results in one request:
{
"queries": ["\"OpenAI\"", "\"Anthropic\""],
"edition": "US:en",
"timeRange": "1d",
"maxArticlesPerSource": 10,
"includeFullText": false
}
A few details that matter for monitoring:
-
Quotes make a query an exact phrase. Without them,
Acme Corpalso matches every article that mentions "acme" and "corp" separately. - Google News operators work:
"Acme" -jobs,intitle:acme,site:techcrunch.com. -
editionsets country and language; 18 editions are supported (US, UK, Germany, France, Japan...). - Every article comes back with
title,source,publishedAtand the original publisher URL. Google News RSS only gives younews.google.com/rss/articles/...redirect links; the Actor decodes them. That matters for the next step.
Authentication is an n8n Header Auth credential: Authorization: Bearer <Apify token>.
2. Only new articles
The 1d window overlaps from day to day, and big stories stay in the results for a while. The Remove Duplicates node in "Remove items processed in previous executions" mode, keyed on {{ $json.url }}, remembers every URL it has passed through and drops repeats. Because the URLs are the real publisher URLs, the key is stable.
Two caveats:
- The first run has an empty history, so it posts everything.
- The node keeps a limited history (I set 50,000 keys). If it ever fills up, n8n stops with "exceeds the maximum history size"; raise the limit or clear the history.
3. Build one message
I don't want 20 Slack notifications. A Code node groups the articles by query, sorts each group newest first, caps it at 10 and builds Slack mrkdwn plus an HTML version for e-mail:
const groups = {};
for (const a of articles) {
const key = String(a.query || a.topic || 'Other').replace(/"/g, '');
(groups[key] = groups[key] || []).push(a);
}
// ... `- <${a.url}|${title}> (${source})` per article
If there are no new articles the node returns an empty array, so no message is sent. Quiet days stay quiet.
4. Slack and e-mail
A standard Slack node posts {{ $json.text }} to #news-alerts. There is also a disabled Send Email node wired to the same output; enable it and add SMTP credentials to get the digest by mail as well.
Cost
The Actor charges $0.0025 per article (plus $0.0025 per article if you turn on full-text extraction and text was found). With two queries and a cap of 10 articles each, the worst case is 20 articles a day, about $1.50 a month. Quiet brands cost less. Note that duplicates are dropped in n8n after the run, so they are still paid for; set maxArticlesPerSource near the number of articles you realistically expect per day.
Apify's free plan includes $5 per month, enough for this and a few more workflows.
Ideas
-
Summaries and sentiment: set
includeFullText: trueand add an LLM step: "Summarise in two sentences and rate the sentiment towards our brand." -
Tiered alerts: a Filter node that pings
@channelonly whensourceis Reuters, Bloomberg or the FT. -
Industry radar: add
"topics": ["TECHNOLOGY"]to get the top headlines of whole sections. -
Several markets: duplicate the HTTP node with
"edition": "DE:de"and merge. - Archive: append every new article to Google Sheets for monthly reporting.
Get it
- Workflow JSON and setup guide: https://github.com/ichkifokkus/data-recipes/tree/main/2-daily-news-alert
- Actor: https://apify.com/fast_data_asap/google-news-scraper
Questions or ideas for the next recipe? Leave a comment.
Top comments (0)