ServicesÀ proposNotesContact Me contacter →
EN FR
Note

Workflow n8n RSS vers Notion

Comment construire un lecteur RSS automatisé qui récupère, nettoie et stocke des articles dans Notion en utilisant n8n, Jina AI et ChatGPT.

Planté
automationai

n8n est un outil d’automatisation de workflows open-source qui permet de connecter différents services via des workflows visuels — une alternative auto-hébergée à Zapier ou Make, mais avec plus de flexibilité et sans tarification par tâche. Les workflows sont définis comme des nœuds connectés par des arêtes, où chaque nœud effectue une opération spécifique : faire des requêtes HTTP, transformer des données avec JavaScript, appeler des APIs.

Ce hub documente un workflow n8n de 14 nœuds qui transforme des flux RSS en base de connaissances personnelle dans Notion. Le workflow tourne quotidiennement à 5h, ne nécessite aucune intervention manuelle et coûte environ 2€/mois en appels API au LLM.

Le problème résolu

Les flux RSS sont l’un des meilleurs moyens d’agréger du contenu depuis des blogs, newsletters et sites d’actualités — mais les flux bruts viennent avec des frictions :

  • Fragmentation du contenu : il faut vérifier plusieurs lecteurs sur plusieurs applications
  • Bruit HTML : menus de navigation, bannières de cookies, CTAs de newsletters, contenu de pied de page se retrouvent mélangés avec l’article
  • Pas de déduplication : le même article apparaît à chaque rafraîchissement du flux
  • Effort manuel : sauvegarder des articles intéressants nécessite du copier-coller

Le workflow gère tout cela automatiquement. Récupérer, dédupliquer, extraire, nettoyer, stocker.

Vue d’ensemble de l’architecture

Les 14 nœuds s’organisent en quatre étapes :

Trigger → Fetch RSS Sources (Notion DB) → Get RSS Feed (HTTP) → Parse XML → Split Items
Filter Existing Articles (Merge/anti-join) → Create Notion Pages → Extract Page IDs
Fetch Article Content (Jina AI) → Build ChatGPT Prompt → Call OpenAI API
Markdown to Notion Blocks (JS) → Append Blocks to Notion Page

Chaque étape est documentée dans une note dédiée :

Étape 1 : Déclenchement

Deux options de déclenchement s’exécutent en parallèle dans le workflow :

Déclencheur manuelWhen clicking 'Execute workflow'. Utile pour les tests, les imports initiaux en masse, ou forcer une exécution en dehors du calendrier.

Déclencheur planifié — s’exécute quotidiennement à 5h00 en utilisant une syntaxe de type cron (triggerAtHour: 5). Le timing matinal signifie que le contenu de la veille est capturé avant le début de la journée de travail, et les appels API ont lieu durant les heures creuses.

Étape 2 : Gestion des sources RSS

Les URLs des sources RSS ne sont pas codées en dur dans le workflow — elles vivent dans une base de données Notion. Le nœud Get many sources from monitoring interroge cette base de données en filtrant pour type = "RSS". Cela permet d’ajouter ou supprimer des flux sans toucher au workflow.

Chaque enregistrement de source nécessite une propriété rss_link. La même base de données pourrait contenir d’autres types de contenu (podcasts, newsletters) en utilisant des valeurs de type différentes — le filtre les maintient séparés.

Le nœud Fetch RSS Feed fait une requête HTTP GET à chaque URL avec des en-têtes explicites :

{
"User-Agent": "Mozilla/5.0",
"Accept": "application/rss+xml, application/xml;q=0.9, */*;q=0.8"
}

Certains serveurs bloquent les requêtes headless sans User-Agent. Le format de réponse est text (XML brut) car le nœud suivant gère le parsing.

Le nœud XML to JSON convertit la structure RSS en JSON. Les flux RSS standard ressemblent à ceci avant le parsing :

<rss>
<channel>
<item>
<title>Article Title</title>
<link>https://example.com/article</link>
<pubDate>Thu, 14 Nov 2024 10:00:00 GMT</pubDate>
<dc:creator>Author Name</dc:creator>
</item>
</channel>
</rss>

Le nœud Split Out RSS Feed prend le tableau à rss.channel.item et crée un élément de sortie par article, afin que chacun puisse être traité indépendamment.

La déduplication intervient ensuite — voir déduplication des flux RSS dans n8n pour le fonctionnement de l’anti-join du nœud Merge.

Étape 3 : Extraction et nettoyage du contenu

Pour chaque nouvel article qui passe le filtre de déduplication, le workflow :

  1. Crée une page Notion placeholder avec les métadonnées (titre, auteur, pubDate, source, URL, type : “RSS”)
  2. Capture le nouvel ID de page
  3. Récupère le contenu complet de l’article via Jina AI
  4. Nettoie le contenu avec ChatGPT
  5. Convertit le markdown nettoyé en blocs Notion
  6. Ajoute les blocs à la page placeholder

Jina AI pour l’extraction de contenu

L’API Reader de Jina AI est conçue spécifiquement pour extraire du contenu propre depuis des pages web. On lui passe une URL, elle retourne l’article en markdown — supprimant automatiquement la navigation, les publicités et le chrome du site.

Le nœud est configuré avec une logique de retry :

retryOnFail: true
maxTries: 5
waitBetweenTries: 5000 # 5 secondes entre les tentatives

Le web scraping est intrinsèquement instable. Les timeouts, les limites de taux et les erreurs transitoires sont courants. Cinq tentatives avec backoff gèrent la plupart des cas sans intervention manuelle.

Jina retourne du markdown, qui est le format intermédiaire idéal : suffisamment structuré pour être parsé programmatiquement, lisible par l’humain, et facile à passer à un LLM pour le nettoyage. Voir LLM comme nettoyeur de contenu pour ce qui se passe ensuite.

Création de pages Notion

Le nœud Create a database page crée une page avec uniquement les métadonnées — pas encore de contenu :

PropriétéValeur
Title{{ $json.title }} depuis l’élément RSS
AuthorUtilise en cascade dc:creator, author, ou “no author”
Published At{{ $json.pubDate }}
RSS feed nameRéférence à l’enregistrement source
content_url{{ $json.link }}
Type”RSS” (pour filtrer plus tard)
Icon📰

L’ID de page depuis la réponse de Notion est capturé dans un nœud Set notion_page_id. Cet ID est utilisé dans la dernière étape pour ajouter le contenu.

Étape 4 : Écriture dans Notion

Après que le markdown a été nettoyé par ChatGPT, il doit être converti du markdown au format de blocs de Notion avant de pouvoir être ajouté. Notion n’accepte pas le markdown brut — il nécessite un tableau JSON d’objets « block ». Voir parser markdown vers blocs Notion pour le fonctionnement.

Le nœud HTTP Request final fait un PATCH à l’endpoint d’ajout de Notion :

PATCH https://api.notion.com/v1/blocks/{{ notion_page_id }}/children

avec le tableau de blocs comme corps. Ce nœud a également une logique de retry pour les échecs API transitoires.

Le résultat : une page Notion avec des propriétés de métadonnées et le contenu complet de l’article, proprement formaté.

Modèle de coût

Exécution quotidienne à ~20 articles/jour :

ServiceCoût
n8n (auto-hébergé sur railway.app)5€/mois
Jina AI ReaderTier gratuit (1M tokens) gère ~60-150K tokens/jour
OpenAI GPT-4o-mini~2€/mois à 20 articles/jour
NotionLe tier gratuit convient pour un usage personnel
Total~7€/mois

La plupart des lecteurs RSS payants coûtent 5-15€/mois sans fournir une base de données Notion consultable avec du contenu nettoyé.

Le coût LLM est faible car gpt-4o-mini est bon marché et la tâche est bien définie (nettoyer ce markdown). Les tokens d’entrée (prompt système + article) sont de 3-8K par article ; la sortie de 2-5K. À 600 articles/mois, cela représente environ 0,54€ d’entrée + 1,44€ de sortie.

Étendre le pattern

La même architecture gère bien plus que le RSS. Le pattern principal — récupérer depuis une source, dédupliquer, extraire le contenu, nettoyer avec un LLM, stocker de façon structurée — s’applique à :

  • Mises à jour de dépôts GitHub (nouveaux commits, releases, issues)
  • Messages Slack avec des mots-clés spécifiques
  • Descriptions de tickets Jira
  • Changements sur des sites de documentation
  • Publications de rapports sectoriels

L’approche de la base de données source Notion (filtrée par type = "RSS") anticipe déjà cela : on pourrait ajouter des lignes avec type = "github" ou type = "slack" et les router via des sous-workflows différents.

En lien