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 Corp also matches every article that mentions "acme" and "corp" separately.
  • Google News operators work: "Acme" -jobs, intitle:acme, site:techcrunch.com.
  • edition sets country and language; 18 editions are supported (US, UK, Germany, France, Japan...).
  • Every article comes back with title, source, publishedAt and the original publisher URL. Google News RSS only gives you news.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: true and add an LLM step: "Summarise in two sentences and rate the sentiment towards our brand."
  • Tiered alerts: a Filter node that pings @channel only when source is 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

Questions or ideas for the next recipe? Leave a comment.