FlowKit

Automatiser Google Docs avec n8n : générer des documents à la volée

Publié le 4 août 2026 · 7 min de lecture

Comptes rendus de réunion, propositions commerciales, contrats simples, briefs créatifs, documentation générée : une bonne partie des documents produits par une équipe suivent le même squelette, où seuls changent le nom du client, les dates et quelques paragraphes. Les rédiger à la main, c'est copier-coller le dernier en date et oublier une occurrence du précédent client au milieu de la page 3. Avec n8n, le duo Google Docs + Google Drive transforme cette corvée en pipeline : un événement déclencheur, un modèle dupliqué, des balises remplacées, un PDF envoyé. Ce guide couvre le node natif et ses limites, la méthode robuste des modèles avec replaceAllText, la génération du contenu par IA et l'export PDF final.

Prérequis : la credential OAuth2 Google

Le node Google Docs s'authentifie en OAuth2, exactement comme ses cousins Sheets et Drive. La marche à suivre complète — projet Google Cloud, écran de consentement, client OAuth, URL de redirection — est détaillée dans notre guide pour configurer OAuth2 Google dans n8n. Deux points spécifiques à Docs :

  • activez l'API Google Docs dans le projet Google Cloud (en plus de l'API Drive, dont vous aurez besoin pour la méthode des modèles) ;
  • le scope requis est https://www.googleapis.com/auth/documents — si la credential a été créée avant l'activation de l'API, reconnectez-la, sinon vous récolterez des erreurs 403 « insufficient authentication scopes ».

Comme toujours en production : un compte Google dédié à l'automatisation, avec accès aux seuls dossiers concernés.

Le node Google Docs natif : simple mais limité

Le node Google Docs couvre trois opérations :

  • Create : crée un document vierge, avec un titre et un dossier Drive de destination. Pratique pour générer un compte rendu daté au bon endroit (« CR réunion — {{date}} » dans le dossier du projet).
  • Get : récupère le contenu d'un document — utile pour relire un document généré ou alimenter un traitement aval.
  • Update : insère du texte dans le document, via une action Insert text.

C'est là que la limite apparaît : l'insertion se fait en texte brut. Pas de gras, pas de titres hiérarchisés, pas de tableaux, pas de logo — le node natif ne pilote pas la mise en forme riche de l'API Docs. Pour un compte rendu interne jetable, c'est suffisant. Pour une proposition commerciale qui part chez un client avec votre charte graphique, c'est rédhibitoire. D'où la méthode qui suit, celle qu'utilisent tous les pipelines documentaires sérieux.

La méthode robuste : dupliquer un modèle et remplacer des balises

Le principe : la mise en forme vit dans un modèle Google Docs créé une fois pour toutes à la main (titres, styles, logo, tableau de prix, mentions légales), et le workflow ne touche qu'au texte. Dans le modèle, chaque valeur variable devient une balise : {{client}}, {{date}}, {{montant}}, {{objet}}.

Trigger (formulaire, Sheets, CRM)
        │
        ▼
Google Drive — Copy          (duplique le modèle, nomme la copie)
        │
        ▼
HTTP Request — batchUpdate   (replaceAllText sur chaque balise)
        │
        ▼
Google Drive — Download      (export PDF)
        │
        ▼
Gmail — Send                 (envoi au destinataire)

Étape 1 — dupliquer le modèle. Le node Google Drive, opération Copy, prend l'ID du modèle et crée une copie dans le dossier cible, avec un nom construit à partir des données (« Proposition — Acme — 2026-08-04 »). La sortie du node contient l'ID de la copie : c'est lui qu'on manipule ensuite, jamais l'original. Les autres opérations du node Drive sont détaillées dans notre guide Google Drive avec n8n.

Étape 2 — remplacer les balises. Le node Google Docs natif ne propose pas le remplacement de texte, mais l'API Docs le fait très bien via batchUpdate et sa requête replaceAllText. Un node HTTP Request en POST, authentifié avec la même credential OAuth2 Google (option Predefined Credential Type → Google Docs), vers :

POST https://docs.googleapis.com/v1/documents/{{ $json.id }}:batchUpdate

avec le corps JSON suivant :

{
  "requests": [
    {
      "replaceAllText": {
        "containsText": { "text": "{{client}}", "matchCase": true },
        "replaceText": "Acme SARL"
      }
    },
    {
      "replaceAllText": {
        "containsText": { "text": "{{date}}", "matchCase": true },
        "replaceText": "4 août 2026"
      }
    },
    {
      "replaceAllText": {
        "containsText": { "text": "{{montant}}", "matchCase": true },
        "replaceText": "4 800 € HT"
      }
    }
  ]
}

Un seul appel remplace toutes les balises, dans tout le document, en préservant la mise en forme du modèle : si {{montant}} était en gras dans un tableau, « 4 800 € HT » ressort en gras dans le tableau. En pratique, vous construisez les replaceText avec des expressions n8n ({{ $json.nom_client }}) à partir des données du trigger ou d'un node amont.

Générer le contenu avec l'IA en amont

Pour les documents dont des sections entières varient — le contexte d'une proposition, la synthèse d'un compte rendu, les clauses spécifiques d'un brief — une chaîne Basic LLM Chain placée avant le batchUpdate rédige le texte à injecter. Le pattern : le prompt reçoit les données brutes (notes de réunion, champs du CRM, réponses de formulaire) et produit chaque section dans un champ dédié, que le replaceAllText insère dans sa balise ({{contexte}}, {{synthese}}).

Ce n'est pas qu'un gain de confort : une étude de Shakked Noy et Whitney Zhang publiée dans Science en 2023 (« Experimental evidence on the productivity effects of generative artificial intelligence »), menée en expérience contrôlée sur des tâches d'écriture professionnelle, montre que l'assistance d'un LLM réduit substantiellement le temps de rédaction tout en améliorant la qualité moyenne des documents produits. Le pipeline n8n pousse la logique un cran plus loin : l'IA rédige les sections variables, le modèle garantit la structure et la charte, et l'humain ne relit que ce qui compte.

Gardez néanmoins une étape de relecture pour les documents engageants (propositions, contrats) : une balise {{statut}} réglée sur « BROUILLON » dans le modèle, retirée manuellement après validation, est une garde simple et efficace.

Export PDF et envoi

Un Google Doc se partage mal hors de l'écosystème Google ; le livrable final est presque toujours un PDF. L'opération Download du node Google Drive, pointée sur l'ID de la copie, propose une conversion d'export pour les formats natifs Google : choisissez application/pdf et le binaire PDF arrive dans le workflow. Il ne reste qu'à l'envoyer en pièce jointe avec le node Gmail — la configuration est couverte dans notre guide Gmail avec n8n — ou à l'archiver dans le dossier du client.

Pour les documents chiffrés type devis et factures, où la numérotation et les totaux obéissent à des règles propres, notre guide sur la génération de devis et factures PDF avec n8n détaille un pipeline dédié.

Les déclencheurs typiques

  • Formulaire : un formulaire n8n multi-étapes qui collecte les besoins d'un prospect et déclenche la proposition commerciale dans la minute.
  • Nouvelle ligne Google Sheets : un tableur d'opportunités où chaque ligne « à envoyer » génère son document — le trigger et ses subtilités sont couverts dans notre guide Google Sheets avec n8n.
  • CRM : un webhook au passage d'une affaire à l'étape « proposition » (HubSpot, Pipedrive…), avec les champs de l'affaire comme données d'entrée.
  • Planifié : un compte rendu hebdomadaire généré chaque vendredi à partir des données de la semaine.

Erreurs courantes

  • Scopes OAuth insuffisants. L'erreur 403 « insufficient authentication scopes » signifie presque toujours que l'API Docs n'était pas activée à la création de la credential, ou que le token date d'avant. Activez l'API, reconnectez la credential, relancez.
  • Quota de l'API. L'API Docs applique des limites de requêtes par minute et par projet. Le batchUpdate aide beaucoup — une requête pour toutes les balises plutôt qu'un appel par balise — mais un rattrapage massif (regénérer 500 documents en boucle serrée) finira en erreur 429 : traitez par lots.
  • Balises non remplacées. Trois causes classiques : une balise tapée en plusieurs fois dans le modèle que Google a découpée en « runs » internes (retapez-la d'un seul tenant), des espaces divergents ({{ client }}{{client}}), ou un matchCase qui ne pardonne pas la casse. Astuce de robustesse : en fin de workflow, un Get sur le document et une vérification qu'il ne reste aucun {{ — s'il en reste, notification plutôt qu'envoi.
  • Modifier l'original au lieu de la copie. Si vos remplacements ciblent l'ID du modèle plutôt que celui de la copie, le modèle est détruit au premier passage. Verrouillez l'ID du modèle dans une variable dédiée et ne passez au batchUpdate que la sortie du node Copy.

Pour aller plus loin

Un document qui se génère seul, c'est la fin du copier-coller hasardeux et des propositions qui partent avec le nom du mauvais client. Le triptyque modèle Drive + replaceAllText + export PDF est la brique de base ; branchez-y un formulaire, une ligne Sheets ou un CRM en amont, une IA pour les sections rédigées, et Gmail en aval — et la production documentaire de l'équipe devient un flux, pas une corvée.

FAQ

Questions fréquentes

Peut-on mettre en forme du texte (gras, titres, tableaux) avec le node Google Docs de n8n ?

Pas directement : l'opération Update du node natif insère du texte brut, sans mise en forme riche. La bonne approche est de partir d'un modèle Google Docs déjà mis en forme (titres, logo, tableaux, styles) et de ne remplacer que des balises texte comme {{client}} ou {{montant}} via la requête replaceAllText de l'API batchUpdate, appelée avec un node HTTP Request. La mise en forme du modèle est préservée, seul le texte change.

Pourquoi mes balises {{client}} ne sont-elles pas remplacées dans le document ?

Le cas le plus fréquent : la balise du document ne correspond pas exactement à la chaîne envoyée dans replaceAllText. Google Docs peut couper une balise en plusieurs 'runs' invisibles si elle a été tapée en plusieurs fois ou corrigée — retapez-la d'un seul tenant dans le modèle. Vérifiez aussi les espaces ({{ client }} n'est pas {{client}}), la casse si matchCase est actif, et que vous ciblez bien la copie du modèle et non l'original.

Comment convertir un Google Doc en PDF avec n8n ?

Utilisez l'opération Download du node Google Drive sur l'ID du document : pour les formats natifs Google, elle propose une conversion d'export à la volée. Choisissez application/pdf comme format et n8n reçoit le binaire PDF, prêt à être envoyé en pièce jointe avec Gmail, archivé dans un dossier Drive ou transmis à un CRM.

Quel scope OAuth faut-il pour manipuler Google Docs depuis n8n ?

L'API Google Docs exige le scope https://www.googleapis.com/auth/documents (et l'API Docs activée dans le projet Google Cloud). Comme la méthode des modèles passe aussi par Drive (copie du modèle, export PDF), le scope Drive est nécessaire en pratique. Si vous obtenez une erreur 403 'insufficient authentication scopes', reconnectez la credential après avoir activé les API et vérifié les scopes : le token existant ne se met pas à jour tout seul.

Bundle FlowKit Complet

269 €