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 PageChaque étape est documentée dans une note dédiée :
- Déduplication des flux RSS dans n8n — le pattern anti-join du nœud Merge qui évite les pages Notion dupliquées
- LLM comme nettoyeur de contenu — utiliser GPT-4o-mini pour supprimer le bruit HTML et normaliser le markdown
- Parser markdown vers blocs Notion — le parser JavaScript personnalisé qui convertit le markdown au format API de blocs Notion
Étape 1 : Déclenchement
Deux options de déclenchement s’exécutent en parallèle dans le workflow :
Déclencheur manuel — When 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 :
- Crée une page Notion placeholder avec les métadonnées (titre, auteur, pubDate, source, URL, type : “RSS”)
- Capture le nouvel ID de page
- Récupère le contenu complet de l’article via Jina AI
- Nettoie le contenu avec ChatGPT
- Convertit le markdown nettoyé en blocs Notion
- 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: truemaxTries: 5waitBetweenTries: 5000 # 5 secondes entre les tentativesLe 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 |
| Author | Utilise en cascade dc:creator, author, ou “no author” |
| Published At | {{ $json.pubDate }} |
| RSS feed name | Ré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 }}/childrenavec 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 :
| Service | Coût |
|---|---|
| n8n (auto-hébergé sur railway.app) | 5€/mois |
| Jina AI Reader | Tier gratuit (1M tokens) gère ~60-150K tokens/jour |
| OpenAI GPT-4o-mini | ~2€/mois à 20 articles/jour |
| Notion | Le 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
- Déduplication des flux RSS dans n8n
- LLM comme nettoyeur de contenu
- Parser markdown vers blocs Notion
- Article source : n8n-rss-vers-notion