Transformer ses mails en todo list avec un agent IA n8n

Tutoriel n8n complet : un agent IA qui lit tes emails labellisés, les transforme en tâches Todoist priorisées, et te fait gagner 1h par semaine.

Mon inbox Gmail a été un cimetière pendant des années. Je laissais traîner des mails « non lus » pour me souvenir d’agir, j’archivais ceux que je voulais traiter « plus tard », et au final je me retrouvais à 23h avec 80 onglets ouverts dans la tête.

L’inbox zéro à coups de discipline pure ? Mensonge. Je l’ai testé. Je ne tiens pas trois semaines.

Ce qui marche, en revanche : un système qui prend ce mail-tâche et le sort de Gmail pour le poser ailleurs, dans le seul outil où je regarde réellement quoi faire ensuite — ma todo list.

J’ai donc construit un agent IA n8n qui fait exactement ça. Tu déplaces un mail dans un label, l’agent l’analyse, en sort une tâche actionnable avec deadline et priorité, la pousse dans Notion ou Todoist, et archive le mail. Une heure récupérée par semaine, mesurée. Et surtout : zéro charge mentale.

Play

Voici comment le construire en 45 minutes.


Le vrai problème : un mail = une tâche déguisée

Un mail n’est presque jamais juste un mail. C’est :

  • Une demande d’un client (« peux-tu m’envoyer la facture ? »)
  • Un retour à donner (« qu’en penses-tu ? »)
  • Un truc à lire pour plus tard (newsletter dense, doc partagé)
  • Une décision à prendre (« on signe ou pas ? »)

Quatre intentions qui appellent quatre actions différentes — mais Gmail les présente toutes pareil, en ligne dans une boîte. Tu lis, tu te dis « je m’en occupe », tu n’as pas le temps maintenant, tu archives ou tu laisses non-lu, et la charge mentale s’accumule parce que tu sais qu’il y a quelque chose à faire mais tu ne sais plus quoi exactement ni quand.

L’astuce, ce n’est pas de mieux gérer ses mails. C’est d’arrêter de les gérer. On les sort de Gmail dès qu’ils représentent une tâche, on les transforme en truc actionnable, et on les oublie.


La logique du système en 4 étapes

[Mail dans Gmail]
  → Tu le déplaces dans le label "agent-todo"
  → n8n détecte (toutes les heures)
  → Un agent IA analyse + crée une tâche Todoist priorisée
  → Le label est retiré, le mail est archivé

Le geste humain : 1 clic pour déplacer le mail dans un label. Pas plus. Pas de prompt, pas de copier-coller, pas de saisie. Juste « ce mail = une chose à faire » → drag.

Le reste se passe sans toi. Quand tu ouvres Todoist le matin, tu vois ta journée. Plus besoin de retourner dans Gmail pour « vérifier si y’a un truc important ».


Stack et pourquoi je l’ai choisie

ComposantChoixPourquoi
Plateforme automationn8n Cloud (plan starter)Pas d’hébergement à gérer, OAuth Google natif, ~20€/mois
Source mailsGmail TriggerPolling natif, filtre par label gratuit
Modèle IALlama 3 70B via GroqVitesse fulgurante (LPU), coût ~ gratuit en usage perso
Destination tâchesTodoist (ou Notion)API simple, app mobile excellente, tu peux remplacer par ce que tu veux

Tutoriel pas-à-pas

Étape 1 — Préparer Gmail

Crée un label dans Gmail. Je l’appelle agent-todo (le nom n’importe pas, mais évite les espaces et accents pour simplifier le filtre). C’est ce label qui va devenir ton geste « je veux que ce mail devienne une tâche ».

Tu peux le binder à un raccourci clavier Gmail (paramètres > raccourcis) pour aller encore plus vite.

Étape 2 — Le Gmail Trigger

Dans n8n, ajoute un node Gmail Trigger, configuré ainsi :

  • Authentification : OAuth2 sur ton compte Google (5 minutes de setup)
  • Polling : Every Hour (largement suffisant pour ce use case, et économique en exécutions n8n)
  • Filters : label:agent-todo dans le champ Search

Ce trigger ne se déclenche que pour les mails portant ton label. Le reste de ton inbox est ignoré.

Étape 3 — Nettoyer le HTML

Les mails contiennent souvent un HTML monstrueux (signatures images, tracking pixels, CSS inline). Si tu balances ça brut au LLM, tu vas (a) cramer des tokens pour rien et (b) confuser le modèle.

Ajoute un node Code (JavaScript) après le Gmail Trigger :

const stripHtml = (html) =>
  html
    .replace(/<style[\s\S]*?<\/style>/gi, '')
    .replace(/<script[\s\S]*?<\/script>/gi, '')
    .replace(/<[^>]+>/g, ' ')
    .replace(/&nbsp;/g, ' ')
    .replace(/&amp;/g, '&')
    .replace(/\s+/g, ' ')
    .trim();

return $input.all().map((item) => ({
  json: {
    messageId: item.json.id,
    from: item.json.from?.value?.[0]?.address ?? 'unknown',
    fromName: item.json.from?.value?.[0]?.name ?? '',
    subject: item.json.subject ?? '',
    body: stripHtml(item.json.text ?? item.json.html ?? '').slice(0, 4000),
  },
}));

Le .slice(0, 4000) évite les mails géants (newsletters de 30k caractères) qui exploseraient le contexte. 4000 caractères, c’est largement assez pour qu’un agent comprenne l’intention.

Étape 4 — L’AI Agent

Ajoute un node AI Agent. Connecte-lui :

  • Chat ModelGroq Chat Model avec llama-3.3-70b-versatile
  • ToolTodoist (on y vient à l’étape 6)

Dans le champ Prompt du AI Agent, mappe :

Email reçu de : {{ $json.fromName }} <{{ $json.from }}>
Sujet : {{ $json.subject }}

Corps :
{{ $json.body }}

Étape 5 — Le system prompt qui fait toute la différence

C’est la pièce centrale. Sans système prompt précis, l’agent fait du copier-coller du mail dans Todoist, sans priorité ni deadline. Inutile.

Voici celui que j’utilise (rédigé avec Claude pour itérer dessus) :

Tu es un assistant productivité expert. Ton job : transformer
chaque email reçu en UNE tâche actionnable dans Todoist.

Règles strictes :

1. PRIORITÉ — assigne P1, P2, P3 ou P4 selon cette grille :
   - P1 (urgent + critique) : deadline < 48h, client qui paie,
     blocage, problème de prod
   - P2 (important pas urgent) : deadline cette semaine, projet
     stratégique, opportunité business
   - P3 (à faire un jour) : tâche admin, follow-up, à lire
   - P4 (basse priorité) : feedback non bloquant, info

2. DEADLINE — extrais la date dans cet ordre :
   - Date explicitement mentionnée dans le mail (« avant vendredi »)
   - Sinon, déduis-la de la priorité :
     P1 → demain, P2 → vendredi de cette semaine,
     P3 → +7 jours, P4 → +14 jours

3. LABELS — assigne 1 à 2 labels parmi :
   "client", "admin", "tech", "contenu", "perso"

4. TITRE — reformule en VERBE D'ACTION + objet, max 80 caractères.
   ❌ Mauvais : "Re: Question facture #4521"
   ✅ Bon    : "Renvoyer la facture #4521 à Marie (Acme)"

5. DESCRIPTION — résume en 2 phrases max le contexte utile :
   qui demande, pourquoi, ce qu'il faut faire concrètement.
   Inclus l'email de l'expéditeur en fin de description.

Tu DOIS appeler l'outil "todoist_create_task" exactement
une fois par email. Jamais de réponse texte directe.

Les 3 mots-clés qui changent tout :

  • « VERBE D’ACTION + objet » → tu te retrouves avec des titres exécutables au lieu de copies de sujets de mails
  • « exactement une fois » → empêche les boucles où l’agent hésite
  • « Jamais de réponse texte » → force l’usage du tool, pas un résumé en chat

Étape 6 — Le tool Todoist (anti-hallucination)

C’est ici qu’on évite le piège classique. Si tu laisses l’AI Agent gérer le tool Todoist en mode « let the model decide », il invente des formats de date, des priorités hors plage, et tu te retrouves avec des erreurs API toutes les 3 exécutions.

La parade : configurer manuellement les paramètres du tool dans n8n.

Sur le node Todoist Tool :

  • Resource: Task
  • Operation: Create
  • Content (titre) : ={{ $fromAI('title', 'Titre tâche, 80 char max', 'string') }}
  • Description : ={{ $fromAI('description', 'Description tâche', 'string') }}
  • Priority : ={{ $fromAI('priority', 'Priorité 1-4', 'number') }}
  • Due Date : ={{ $fromAI('due_date', 'Date YYYY-MM-DD', 'string') }}
  • Labels : ={{ $fromAI('labels', 'Labels Todoist', 'string') }}

Le helper $fromAI() dit à n8n : « ne laisse pas l’agent envoyer ce qu’il veut, fais-lui remplir cette case précise ». Tu valides chaque champ, et tu peux même ajouter des transformations (lowercase, regex de validation date) avant l’appel API.

Étape 7 — Retirer les labels en sortie

Après création de la tâche Todoist, ajoute deux nodes Gmail en série :

  1. Remove Label : agent-todo (pour ne pas re-traiter le mail au prochain polling)
  2. Remove Label : INBOX (équivalent d’archiver le mail)

Tu pourrais aussi ajouter un label processed pour audit, mais perso je trouve que c’est du bruit. Le mail est dans [Tous les messages], retrouvable via recherche si besoin.


Pourquoi Groq + Llama 3 70B pour ce cas précis

J’ai testé GPT-4o-mini, Claude Haiku 4.5 et Llama 3 70B sur Groq. Voici les chiffres après 200 mails traités :

ModèleLatence/mailCoût/mailQualité titreErreurs
Llama 3 70B (Groq)~0,8 s~0€ (free tier)9/101
GPT-4o-mini~3,2 s~0,002€9/100
Claude Haiku 4.5~2,1 s~0,003€10/100

Pour ce use case précis (transformation structurée d’un texte court en JSON), les trois sont équivalents en qualité — la différence se fait sur la latence et le coût. Groq, avec ses LPU, écrase la concurrence en vitesse, et le free tier (14 400 requêtes/jour) est largement suffisant pour traiter ses mails persos.


Les 4 erreurs que je vois sur 90% des reproductions

1. Filtrer le trigger sur la mauvaise condition

Beaucoup utilisent is unread au lieu d’un label. Le piège : à chaque mail lu, le trigger se déclenche, et tu te retrouves avec des centaines de tâches inutiles dans Todoist.

Fix : toujours un label dédié, jamais l’état unread.

2. Laisser le LLM construire le payload Todoist entier

Tu vas avoir des dates next monday, des priorités urgent, des labels en français quand l’API attend les IDs… 30% d’échecs.

Fix : $fromAI() sur chaque paramètre, validation côté n8n.

3. Pas de maxIterations

L’agent boucle, appelle Todoist 5 fois pour le même mail, crée des doublons.

Fix : dans le AI Agent node, set maxIterations: 2 et returnIntermediateSteps: false.

4. Polling toutes les minutes

Tentation : « je veux ça en temps réel ! ». Conséquence : tu cames ton quota d’exécutions n8n et ton API quota Gmail.

Fix : 1 fois par heure suffit largement. Tu ne déplaces pas un mail dans le label en attendant qu’il devienne tâche dans la seconde — tu déplaces et tu oublies.


Aller plus loin

Variante Notion

Remplace le tool Todoist par un node Notion en Database > Create Page. Avantages : tu peux ajouter des colonnes custom (projet associé, client, lien vers le mail). Inconvénient : moins fluide en mobile que Todoist pour cocher au fil de la journée.

Notes vocales avec Whisper

Tu peux dupliquer ce workflow pour traiter des mémos vocaux que tu t’envoies par mail. Ajoute un branchement : si le mail contient une pièce jointe .m4a ou .mp3, passe-la par un node OpenAI Whisper pour la transcrire, puis injecte le texte dans le même AI Agent. Ton trajet en voiture devient une session de planning.

Multi-comptes

Si tu as un Gmail pro + un Gmail perso, dupliquer le workflow est plus propre que de jouer avec des if. Chaque compte a son label, son OAuth, son trigger. Ça reste 5 minutes de copie.


Combien ça coûte vraiment

Setup pour mon usage perso (~30 mails labellisés/semaine, soit ~120/mois) :

PosteCoût mensuel
n8n Cloud Starter20 €/mois
Groq (Llama 3 70B)0 € (free tier)
Todoist Pro (déjà utilisé)4 €/mois
Total marginal~0 € (n8n et Todoist déjà payés)

Le coût marginal réel pour ce workflow est nul si tu as déjà n8n. C’est probablement le ROI le plus délirant de tous mes workflows perso : 0€ pour 50 heures récupérées par an.


Le mot de la fin

Le fichier JSON du workflow complet (Gmail Trigger + Code + AI Agent + Groq + Todoist + Remove Labels) est exportable depuis n8n en 2 clics — à toi de l’adapter à ton stack (remplace Todoist par Notion, Llama par Claude, ajoute des labels custom).

Et si tu commences à voir le potentiel de ce pattern (label Gmail → agent → action automatique), tu vas vouloir l’étendre : labels « facture » → création automatique dans Pennylane, label « commande » → ajout au CRM, label « devis » → génération PDF. C’est la même mécanique, des labels différents.

C’est exactement ce qu’on construit dans la formation.


Tu veux maîtriser n8n et les agents IA en pratique ? La formation n8n complète couvre 11 modules, des fondamentaux aux agents IA avec RAG, Tools et Mémoire. Premier Trainer Partner Make en France comme formateur, garantie 30 jours.

Reçois les prochains guides

Ce guide t'a aidé ? Reçois les prochains.

Un mail quand un nouveau guide sort. Pas de spam, désabonnement en 1 clic.

Confirmation par email · désabonnement en 1 clic.