Utiliser GPT-4 Insights et PDF.co pour générer des rapports marketing à partir de Google Sheets
Ceci est unDocument Extraction, Multimodal AIworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme Code, Merge, Aggregate, Summarize, PDFco Api. Générer des rapports marketing à partir de Google Sheets avec insights GPT-4 et PDF.co
- •Informations d'identification Google Sheets API
- •Clé API OpenAI
Nœuds utilisés (15)
{
"meta": {
"instanceId": "ad0113c344ee237399e44e9f11798b05baeb83a6196d514a9ae9d2ad71c3b5c9",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "ab1b7d2d-7eac-45eb-9e0a-36f14c56df14",
"name": "Lors du clic sur 'Exécuter le workflow'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
1728,
288
],
"parameters": {},
"typeVersion": 1
},
{
"id": "2015e3a3-026b-46af-adfc-1fcff0031e66",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2720,
608
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "4l6TDfLZVFS24g3X",
"name": "OpenAi account 4"
}
},
"typeVersion": 1.2
},
{
"id": "3bce7fdc-3fe1-451f-9e3f-ed37563a8fb5",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
3072,
576
],
"parameters": {
"jsonSchemaExample": "{\n\t\"summary\": \"summary\"\n}"
},
"typeVersion": 1.3
},
{
"id": "93cb6107-c70b-4a48-95e4-1ddda24d87e1",
"name": "Sticky Note53",
"type": "n8n-nodes-base.stickyNote",
"position": [
1632,
-272
],
"parameters": {
"color": 7,
"width": 2144,
"height": 1056,
"content": "# 📊 Marketing Spend Report → Google Sheets + PDF\n\nThis workflow pulls **marketing data from Google Sheets**, aggregates spend by channel, generates an **AI-written summary**, and outputs a formatted **PDF report** using a custom HTML template on **PDF.co**. \n\n"
},
"typeVersion": 1
},
{
"id": "00aba054-1dab-429e-beb4-2c18e21c7e3a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1184,
-272
],
"parameters": {
"width": 400,
"height": 1056,
"content": "\n## ⚙️ Setup Instructions\n\n### 1️⃣ Prepare Your Google Sheet \n- Copy this template into your Google Drive: [Sample Marketing Data](https://docs.google.com/spreadsheets/d/1UDWt0-Z9fHqwnSNfU3vvhSoYCFG6EG3E-ZewJC_CLq4/edit?gid=365710158#gid=365710158) \n- Add or update your marketing spend data in rows 2–100. \n\n#### Connect Google Sheets in n8n \n1. Go to **n8n → Credentials → New → Google Sheets (OAuth2)** \n2. Log in with your Google account and grant access \n3. Select the **Spreadsheet ID** and **Worksheet** in the workflow \n\n---\n\n### 2️⃣ Set Up PDF.co for PDF Reports \n1. Create a free account at [PDF.co](https://pdf.co/) \n2. In **PDF.co Dashboard → HTML to PDF Templates**, create a new **Mustache template** \n - Paste the HTML provided at the bottom of this description \n - Save, and note your **Template ID** \n3. In **n8n → Credentials → New → PDF.co API**, paste your **API Key** and save \n4. In the workflow, select your **PDF.co credential** in the `Create PDF` node \n5. Replace the `templateId` with your Template ID \n\n\n\n## 📬 Contact \nNeed help customizing this (e.g., filtering by campaign, sending reports by email, or formatting your PDF)? \n\n- 📧 **robert@ynteractive.com** \n- 🔗 **[Robert Breen](https://www.linkedin.com/in/robert-breen-29429625/)** \n- 🌐 **[ynteractive.com](https://ynteractive.com)** \n\n\n"
},
"typeVersion": 1
},
{
"id": "2d0dba31-964f-4b8c-94e4-215b5448f2b4",
"name": "Obtenir les données marketing",
"type": "n8n-nodes-base.googleSheets",
"position": [
1952,
464
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 365710158,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1UDWt0-Z9fHqwnSNfU3vvhSoYCFG6EG3E-ZewJC_CLq4/edit#gid=365710158",
"cachedResultName": "Data"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1UDWt0-Z9fHqwnSNfU3vvhSoYCFG6EG3E-ZewJC_CLq4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1UDWt0-Z9fHqwnSNfU3vvhSoYCFG6EG3E-ZewJC_CLq4/edit?usp=drivesdk",
"cachedResultName": "Sample Marketing Data - n8n"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "HlBW2puZbuCCq8jJ",
"name": "Google Sheets account 3"
}
},
"typeVersion": 4.7
},
{
"id": "385bdda8-e751-4c71-8ddc-ff1b93eb5698",
"name": "Somme des dépenses par canal",
"type": "n8n-nodes-base.summarize",
"position": [
2256,
288
],
"parameters": {
"options": {},
"fieldsToSplitBy": "Channel",
"fieldsToSummarize": {
"values": [
{
"field": "Spend ($)",
"aggregation": "sum"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "433d72c6-032c-43b9-9c34-36191d3181b5",
"name": "Somme totale des dépenses",
"type": "n8n-nodes-base.summarize",
"position": [
2256,
128
],
"parameters": {
"options": {},
"fieldsToSummarize": {
"values": [
{
"field": "Spend ($)",
"aggregation": "sum"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "dbcd16cf-f023-467b-bc92-d70c9110cf1b",
"name": "Rédiger le résumé",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2832,
304
],
"parameters": {
"text": "={{ $json.data }}",
"options": {
"systemMessage": "You are writing a daily update message about the marketing data. The data is provided. Output a 4 sentance summary. \n\nOutput like this. \n\n{\n\t\"summary\": \"summary\"\n}"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "4d2c9c31-7fc8-4a4b-a6ca-3b36777ff96b",
"name": "Combiner le tout",
"type": "n8n-nodes-base.merge",
"position": [
3136,
48
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition",
"numberInputs": 3
},
"typeVersion": 3.2
},
{
"id": "d6a77a5d-c9c4-4496-8a8e-520425b54400",
"name": "Convertir et télécharger en PDF",
"type": "n8n-nodes-base.code",
"position": [
3504,
-160
],
"parameters": {
"jsCode": "// n8n Code node (JavaScript)\n// Input: ONE item whose .json is the array you posted\n// Output: ONE item in correct n8n shape: [{ json: <object for HTML/Mustache> }]\n\nconst fmtUSD = (n) => Number(n || 0).toLocaleString('en-US', { style: 'currency', currency: 'USD' });\n\nconst items = $input.all();\nif (!items.length) {\n return [{ json: { error: 'No input data' } }];\n}\n\n// Handle your exact incoming shape (array with one object)\nlet root = items[0].json;\nif (Array.isArray(root)) root = root[0] || {};\n\nconst totalSpendRaw = Number(root[\"sum_Spend_($)\"] || 0);\nconst channelsRaw = Array.isArray(root.data) ? root.data : [];\nconst summary = (typeof root.output?.summary === 'string') ? root.output.summary : '';\n\n// Build channels list for the HTML template\nconst channels = channelsRaw.map(r => ({\n channel: r.Channel || 'Unknown',\n spendFmt: fmtUSD(Number(r[\"sum_Spend_($)\"] || 0)),\n}));\n\n// Final object expected by your HTML/Mustache\nconst out = {\n generatedDate: new Date().toISOString().slice(0, 10),\n totalSpendFmt: fmtUSD(totalSpendRaw),\n channelCount: channels.length,\n channels,\n summary,\n};\n\n// ✅ Return in proper n8n format\nreturn [{ json: out }];\n"
},
"typeVersion": 2
},
{
"id": "5d147144-87a1-4e6c-a03c-4366896deffe",
"name": "Créer un PDF",
"type": "n8n-nodes-pdfco.PDFco Api",
"position": [
3552,
560
],
"parameters": {
"operation": "URL/HTML to PDF",
"templateId": "12011",
"convertType": "htmlTemplateToPDF",
"templateData": "={{ JSON.stringify($json) }}\n",
"advancedOptions": {}
},
"credentials": {
"pdfcoApi": {
"id": "wGorcCULfsY1va25",
"name": "PDF.co account"
}
},
"typeVersion": 1
},
{
"id": "0a330ed9-9b83-4915-a867-432752e0a6fc",
"name": "Convertir en une seule ligne",
"type": "n8n-nodes-base.aggregate",
"position": [
2496,
224
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "a3ecc29f-ef2f-4325-b477-b4a536dc86d6",
"name": "Sticky Note59",
"type": "n8n-nodes-base.stickyNote",
"position": [
3440,
64
],
"parameters": {
"color": 3,
"width": 288,
"height": 624,
"content": "### 2️⃣ Connect PDF.co\n1. Create a free account at [PDF.co](https://pdf.co/) \n2. Copy your **API Key** from the dashboard \n3. In **n8n → Credentials → New → PDF.co API** \n - Paste your API Key → **Save** \n4. In the **PDF.co node**, select your credential and choose the **HTML Template to PDF** operation \n\n---\n\n### 3️⃣ Create Your PDF.co HTML Template\n1. In your [PDF.co dashboard](https://app.pdf.co/), go to **Templates → New Template** \n2. Paste in the HTML from the template section below \n3. Save the template and copy its **Template ID** \n4. Replace the `templateId` in the workflow with your new ID \n\n---\n"
},
"typeVersion": 1
},
{
"id": "2fe228de-8f55-4f3f-8856-a2d0216c3dd3",
"name": "Sticky Note60",
"type": "n8n-nodes-base.stickyNote",
"position": [
1888,
32
],
"parameters": {
"color": 3,
"width": 224,
"height": 576,
"content": "### 1️⃣ Prepare Your Google Sheet \n- Copy this template into your Google Drive: [Sample Marketing Data](https://docs.google.com/spreadsheets/d/1UDWt0-Z9fHqwnSNfU3vvhSoYCFG6EG3E-ZewJC_CLq4/edit?gid=365710158#gid=365710158) \n- Add or update your marketing spend data in rows 2–100. \n\n#### Connect Google Sheets in n8n \n1. Go to **n8n → Credentials → New → Google Sheets (OAuth2)** \n2. Log in with your Google account and grant access \n3. Select the **Spreadsheet ID** and **Worksheet** in the workflow \n"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"433d72c6-032c-43b9-9c34-36191d3181b5": {
"main": [
[
{
"node": "4d2c9c31-7fc8-4a4b-a6ca-3b36777ff96b",
"type": "main",
"index": 0
}
]
]
},
"4d2c9c31-7fc8-4a4b-a6ca-3b36777ff96b": {
"main": [
[
{
"node": "d6a77a5d-c9c4-4496-8a8e-520425b54400",
"type": "main",
"index": 0
}
]
]
},
"dbcd16cf-f023-467b-bc92-d70c9110cf1b": {
"main": [
[
{
"node": "4d2c9c31-7fc8-4a4b-a6ca-3b36777ff96b",
"type": "main",
"index": 2
}
]
]
},
"0a330ed9-9b83-4915-a867-432752e0a6fc": {
"main": [
[
{
"node": "4d2c9c31-7fc8-4a4b-a6ca-3b36777ff96b",
"type": "main",
"index": 1
},
{
"node": "dbcd16cf-f023-467b-bc92-d70c9110cf1b",
"type": "main",
"index": 0
}
]
]
},
"2015e3a3-026b-46af-adfc-1fcff0031e66": {
"ai_languageModel": [
[
{
"node": "dbcd16cf-f023-467b-bc92-d70c9110cf1b",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"2d0dba31-964f-4b8c-94e4-215b5448f2b4": {
"main": [
[
{
"node": "433d72c6-032c-43b9-9c34-36191d3181b5",
"type": "main",
"index": 0
},
{
"node": "385bdda8-e751-4c71-8ddc-ff1b93eb5698",
"type": "main",
"index": 0
}
]
]
},
"385bdda8-e751-4c71-8ddc-ff1b93eb5698": {
"main": [
[
{
"node": "0a330ed9-9b83-4915-a867-432752e0a6fc",
"type": "main",
"index": 0
}
]
]
},
"d6a77a5d-c9c4-4496-8a8e-520425b54400": {
"main": [
[
{
"node": "5d147144-87a1-4e6c-a03c-4366896deffe",
"type": "main",
"index": 0
}
]
]
},
"3bce7fdc-3fe1-451f-9e3f-ed37563a8fb5": {
"ai_outputParser": [
[
{
"node": "dbcd16cf-f023-467b-bc92-d70c9110cf1b",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"ab1b7d2d-7eac-45eb-9e0a-36f14c56df14": {
"main": [
[
{
"node": "2d0dba31-964f-4b8c-94e4-215b5448f2b4",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - Extraction de documents, IA Multimodale
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Robert Breen
@rbreenProfessional services consultant with over 10 years of experience solving complex business problems across industries. I specialize in n8n and process automation—designing custom workflows that integrate tools like Google Calendar, Airtable, GPT, and internal systems. Whether you need to automate scheduling, sync data, or streamline operations, I build solutions that save time and drive results.
Partager ce workflow