📱 Create AI-curated news digests with GPT-5.1, NewsAPI, Tavily & Telegram

⚡ 296 views · 📱 Social Media & Email Marketing

Description

Overview

Staying up to date with fast-moving topics like AI, machine learning, research, or your specific industry can be tricky.

To solve this for myself (for me, it is mostly AI and automation topics), I built and use this n8n workflow: it pulls fresh articles using NewsAPI based on my topics of interest, lets an AI agent pick the 5 most relevant ones, enriches them with a Tavily search engine, and sends a clean, readable newsletter straight to Telegram - in the language you specify.

In this post, I’ll:

After following this guide, you’ll end up with a fully automated weekly newsletter that delivers relevant news on the topics you care about - without any manual work.

This is ideal if you already run n8n and want a mostly no‑code way to get a curated weekly digest in Telegram.

What this workflow does

At a high level, this workflow:

The result: every week you get an AI-picked, enriched mini-newsletter with the latest news based on your own interests - delivered in Telegram.

Requirements

To run this workflow, you need:

How it works

The exact logic of the workflow is as follows:

You are an assistant that selects the most relevant news articles for a user.

Instructions:  
1. Choose the **5 most relevant non-overlapping articles** based on the user topics.  
2. For each article, provide:  
   - title  
   - short summary (1–2 sentences)  
   - source name  
   - url
3. Output the results in the language specified by the user.

Output as a "articles" JSON array of objects, each with "title", "summary", "source" and "url".

User topics of interest: {{ $('Set topics and language').item.json.topics }}
Output language: {{ $('Set topics and language').item.json.language }}

NewsAPI articles:

{{ 
  $json.articles.map(
    article => 
      `Title: ${article.title}
Description: ${article.description}
Content: ${article.content}
Source: ${article.source.name}
URL: ${article.url}`
  ).join('\n---\n')
}}

The prompt instructs the model to read your topics and language, look at all articles from the NewsAPI call (it returns a maximum of 100), select the 5 most relevant, non-overlapping articles, and output a JSON array with title, summary, source and url.

You are a research writer that updates short news summaries into concise, factual articles.

**Input:**
Title: {{ $json["title"] }}
Summary: {{ $json["summary"] }}
Source: {{ $json["source"] }}
Original URL: {{ $json["url"] }}
Language: {{ $('Set topics and language').item.json.language }}

**Instructions:**

1. Use **Tavily Search** to gather 2–3 reliable, recent, and relevant sources on this topic.
2. Update the **title** if a more accurate or engaging one exists.
3. Write **1–3 sentences** summarizing the topic, combining the original summary and information from the new sources.
4. Return the original source name and url as well.

**Output (JSON):**

{
  "title": "final article title",
  "content": "concise 1–3 sentence article content",
  "source": "the name of the original source",
  "url": "the url of the original source"
}

**Rules:**

* Ensure the topic is relevant, informative, and timely.
* Translate the article if necessary to comply with the desired language {{ $('Set topics and language').item.json.language }}.

In particular, the prompt instructs the model to

  1. Use Tavily Search to gather 2–3 reliable, recent, and relevant sources on this topic.
  2. Update the title if a more accurate or engaging one exists
  3. Write 1–3 sentences summarizing the topic, combining the original summary and information from the new sources
  4. Reply in a pre-defined JSON format including the original source name and url. The Output Parser enforces a structured JSON output with title, content, source and url as fields.

Because the model is allowed to adjust titles, you may occasionally see slightly different titles than in the original feed; if you prefer minimal changes, you can tighten the prompt to only allow small tweaks.

> To adjust this workflow for your needs, open the Set topics and language node to tweak topics (comma-separated, like AI,startups,LLMs or web dev,TypeScript,n8n) and switch the language to any target language, then inspect the Schedule Trigger to adjust interval and time, e.g. weekly at 07:30. These two tweaks control the content topics of your newsletter and when you will receive it.

Why this workflow is powerful

Next steps

Here are concrete directions to take this workflow further:

Wrap-up

This workflow shows how I use n8n, NewsAPI, Tavily, OpenAI, and Telegram to create a personal weekly newsletter. It’s mostly no-code, easy to customize, and something I rely on myself to stay informed without spending time browsing news manually.

Contact me here, visit my website, or connect with me on LinkedIn.

Footnotes

  1. we do that here with the JS expression ={{ DateTime.fromISO($json.timestamp).minus({ days: 7 }) }}
  2. we do that here with the JS expression {{ $json.topics.replaceAll("," , " OR ") }}

đź”— Nodes Used

HTTP Request, Telegram, Schedule Trigger, AI Agent, OpenAI Chat Model, Structured Output Parser

📥 Import

Download workflow.json and import into n8n: Workflow menu → Import from File

📖 Importing guide · 🔑 Credential setup