This workflow corresponds to n8n.io template #3302 — we link there as the canonical source.
This workflow follows the Agent → Gmail recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "l1wMIoms9BgoA2lV",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "\"E-Mail to article/blog post\" - converter",
"tags": [],
"nodes": [
{
"id": "e24d8d7a-88b2-4ee2-9c38-4b6f4a88102c",
"name": "Gmail Trigger",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
-100,
360
],
"parameters": {
"simple": false,
"filters": {
"sender": "*@somedia.ch"
},
"options": {
"downloadAttachments": true,
"dataPropertyAttachmentsPrefixName": "attachment_"
},
"pollTimes": {
"item": [
{
"mode": "everyX",
"unit": "minutes",
"value": 1
}
]
}
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"notesInFlow": false,
"typeVersion": 1.2
},
{
"id": "b265f364-b246-4244-ab77-9812b90817e1",
"name": "Extrahiere aus PDF1",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1120,
-80
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "2ff7ca6c-7ba6-4526-94fc-cb82b052648a",
"name": "HTTP Request2",
"type": "n8n-nodes-base.httpRequest",
"position": [
1260,
280
],
"parameters": {
"url": "=https://www.googleapis.com/drive/v3/files/{{$json[\"id\"]}}/copy\n",
"method": "POST",
"options": {},
"jsonBody": "{\n \"mimeType\": \"application/vnd.google-apps.document\"\n}\n",
"sendBody": true,
"jsonHeaders": "{\n \"Authorization\": \"Bearer {{$credentials.googleDriveOAuth2.access_token}}\",\n \"Content-Type\": \"application/json\"\n}\n",
"sendHeaders": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"specifyHeaders": "json",
"nodeCredentialType": "googleDocsOAuth2Api"
},
"credentials": {
"oAuth2Api": {
"name": "<your credential>"
},
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "1889bbb3-287b-4105-aea9-1b1f31e1bc1b",
"name": "HTTP Request3",
"type": "n8n-nodes-base.httpRequest",
"position": [
1480,
280
],
"parameters": {
"url": "=https://www.googleapis.com/drive/v3/files/{{$json[\"id\"]}}/export?mimeType=text/plain\n",
"options": {
"response": {
"response": {
"responseFormat": "text"
}
}
},
"jsonHeaders": "{\n \"Authorization\": \"Bearer {{$credentials.googleDriveOAuth2.access_token}}\"\n}\n",
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"specifyHeaders": "json",
"nodeCredentialType": "googleDocsOAuth2Api"
},
"credentials": {
"oAuth2Api": {
"name": "<your credential>"
},
"googleDocsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "f6f0d96f-f1c8-4d6a-88c5-bfe86ff6a359",
"name": "Anthropic Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
660,
740
],
"parameters": {
"model": "claude-3-5-sonnet-20241022",
"options": {}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "0f3fee05-3444-4046-96f6-b0978eb9d16e",
"name": "Anthropic Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
1780,
500
],
"parameters": {
"model": "claude-3-5-sonnet-20241022",
"options": {}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "34321fc9-ecaa-4f4c-a01c-b8cf0cd3df50",
"name": "Anthropic Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
1400,
80
],
"parameters": {
"model": "claude-3-5-sonnet-20241022",
"options": {}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "86315ae8-f456-4e06-a281-b04f75886232",
"name": "Code: delete all but pdf and word",
"type": "n8n-nodes-base.code",
"position": [
140,
360
],
"parameters": {
"jsCode": "const allItems = $input.all();\nlet data = [];\nallItems.forEach(item => {\n const binaryData = item.binary;\n if (binaryData) {\n Object.keys(binaryData).forEach(key => {\n // MIME-Types f\u00fcr PDF und Word\n const allowedMimeTypes = [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n ];\n \n if (allowedMimeTypes.includes(binaryData[key]?.mimeType)) {\n data.push({\n binary: { data: binaryData[key] },\n json: {\n fileName: binaryData[key].fileName,\n mimeType: binaryData[key].mimeType\n }\n });\n }\n });\n }\n});\nreturn data;"
},
"executeOnce": false,
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "6b95290e-4304-4187-8294-15f32e3227c9",
"name": "has attachment?",
"type": "n8n-nodes-base.if",
"position": [
380,
360
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "or",
"conditions": [
{
"id": "0cd4c70c-9562-486e-95bd-497ba4816aac",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ Object.keys($binary).length }}\n",
"rightValue": 0
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "59688c51-64aa-47bb-80e3-33185e358122",
"name": "PDF or WORD?",
"type": "n8n-nodes-base.if",
"position": [
680,
240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "or",
"conditions": [
{
"id": "0cd4c70c-9562-486e-95bd-497ba4816aac",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.mimeType }}",
"rightValue": "pdf"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "8d767385-4e77-434f-8c47-1e5bbaae807f",
"name": "OpenAI self assesment",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1020,
520
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Deine Aufgabe ist es, den gegebenen Input-Text mit dem Output-Artikel zu vergleichen.\nBewerte, ob alle wesentlichen Informationen aus dem Input-Text im Output-Artikel korrekt enthalten sind, ohne dass neue, nicht im Input vorhandene Informationen hinzugef\u00fcgt wurden.\nVorgehensweise:\n\n Vollst\u00e4ndigkeit pr\u00fcfen: Sind alle relevanten Informationen aus dem Input im Output enthalten?\n Genauigkeit bewerten: Wurde der Inhalt korrekt wiedergegeben, ohne \u00c4nderungen oder Auslassungen?\n Zus\u00e4tzliche Informationen erkennen: Wurden Inhalte hinzugef\u00fcgt, die nicht im Input vorhanden sind? Falls ja, welche?\n\nAusgabe:\n\n Bewertung (1 bis 5):\n 1 = Sehr schlecht (viele fehlende oder falsche Informationen, erhebliche neue Inhalte)\n 2 = Unzureichend (mehrere wichtige Auslassungen oder falsche Inhalte)\n 3 = Mittelm\u00e4\u00dfig (einige kleinere Fehler oder Erg\u00e4nzungen)\n 4 = Gut (fast alles korrekt, minimale Abweichungen)\n 5 = Sehr gut (vollst\u00e4ndige, korrekte \u00dcbereinstimmung)\n Textuelle Begr\u00fcndung: Eine kurze Analyse, warum diese Bewertung vergeben wurde.\n\n\nHier der Input:\n\n{{ $('Gmail Trigger').item.json.text }}\n\nUnd hier der Output:\n{{ $json.output }}"
},
{
"role": "assistant",
"content": "sei pedantisch"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "f9c7b8a8-2148-49f1-b604-4766deafadd1",
"name": "OpenAI self-assesment2",
"type": "@n8n/n8n-nodes-langchain.openAi",
"onError": "continueRegularOutput",
"position": [
1740,
-80
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Deine Aufgabe ist es, den gegebenen Input-Text mit dem Output-Artikel zu vergleichen.\nBewerte, ob alle wesentlichen Informationen aus dem Input-Text im Output-Artikel korrekt enthalten sind, ohne dass neue, nicht im Input vorhandene Informationen hinzugef\u00fcgt wurden.\nVorgehensweise:\n\n Vollst\u00e4ndigkeit pr\u00fcfen: Sind alle relevanten Informationen aus dem Input im Output enthalten?\n Genauigkeit bewerten: Wurde der Inhalt korrekt wiedergegeben, ohne \u00c4nderungen oder Auslassungen?\n Zus\u00e4tzliche Informationen erkennen: Wurden Inhalte hinzugef\u00fcgt, die nicht im Input vorhanden sind? Falls ja, welche?\n\nAusgabe:\n\n Bewertung (1 bis 5):\n 1 = Sehr schlecht (viele fehlende oder falsche Informationen, erhebliche neue Inhalte)\n 2 = Unzureichend (mehrere wichtige Auslassungen oder falsche Inhalte)\n 3 = Mittelm\u00e4\u00dfig (einige kleinere Fehler oder Erg\u00e4nzungen)\n 4 = Gut (fast alles korrekt, minimale Abweichungen)\n 5 = Sehr gut (vollst\u00e4ndige, korrekte \u00dcbereinstimmung)\n Textuelle Begr\u00fcndung: Eine kurze Analyse, warum diese Bewertung vergeben wurde.\n\n\nHier der Input:\n{{ $('Extrahiere aus PDF1').item.json.text }}\n{{ $('Gmail Trigger').item.json.text }}\n\nUnd hier der Output:\n {{ $json.output }}"
},
{
"role": "assistant",
"content": "sei pedantisch"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 1.8
},
{
"id": "0c2c1c4d-b3ec-4e1d-b663-27c43dddb523",
"name": "reply to sender (no attachment)",
"type": "n8n-nodes-base.gmail",
"position": [
1440,
520
],
"parameters": {
"message": "=***REDIGIERTER ARTIKEL*** !!!-CLAUDE-!!!\n\n{{ $('AI Article Writer 3').item.json.output }}\n\n***SELBSTKRITIK***\n\n{{ $json.message.content }}\n\n***ORIGINALNACHRICHT***\n\n{{ $('Gmail Trigger').item.json.text }}",
"options": {},
"emailType": "text",
"messageId": "={{ $('Gmail Trigger').item.json.id }}",
"operation": "reply"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "de88f6fb-0e75-41d9-8e0c-7377ca1bdca4",
"name": "reply to sender (word)",
"type": "n8n-nodes-base.gmail",
"position": [
2360,
280
],
"parameters": {
"message": "=***REDIGIERTER ARTIKEL*** !!!! CLAUDE !!!!\n\n\n{{ $('AI Article Writer 2').item.json.output }}\n\n***SELBSTKRITIK***\nBewertung: 1 (schlecht) bis 5 (sehr gut)\n{{ $json.message.content }}\n***ORIGINALNACHRICHT***\n\n{{ $('Gmail Trigger').item.json.text }}\n\n***INHALT ANHANG***\n\n{{ $('HTTP Request3').item.json.data }}",
"options": {},
"emailType": "text",
"messageId": "={{ $('Gmail Trigger').item.json.id }}",
"operation": "reply"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "0d9c55f9-3c53-44aa-b0d0-09141570b72b",
"name": "reply to sender (pdf)",
"type": "n8n-nodes-base.gmail",
"position": [
2140,
-80
],
"parameters": {
"message": "=*****REDIGIERTE NACHRICHT***** !!!!- CLAUDE -!!!\n{{ $('AI Article Writer 1').item.json.output }}\n\n*****SELBSTKRITIK****\nBewertung 1 (schlecht) bis 5 (sehr gut):\n{{ $json.message.content }}\n\n*****ORIGINAL-E-MAIL*****\n\n{{ $('Gmail Trigger').item.json.text }}\n\n\n*****TEXT AUS PDF*****\n\n{{ $('Extrahiere aus PDF1').item.json.text }}\n\n\n",
"options": {},
"emailType": "text",
"messageId": "={{ $('Gmail Trigger').item.json.id }}",
"operation": "reply"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "695e80d4-dbe2-4476-b680-b90732a6136a",
"name": "AI Article Writer 1",
"type": "@n8n/n8n-nodes-langchain.agent",
"onError": "continueRegularOutput",
"maxTries": 5,
"position": [
1380,
-80
],
"parameters": {
"text": "=Du bist Redakteur*in beim Schweizer Kulturmagazin Terra Grischuna. Erstelle aus den Textinformationen einen publikationsfertigen Artikel mit folgender Struktur und Vorgehensweise:\n\n Stil und Sprache\n \u2013 Schreibe in einer neutralen, reduzierten und klaren Sprache.\n \u2013 Verwende die Schweizer Rechtschreibung.\n \u2013 Halte dich an ein genderneutrales, aktives und verst\u00e4ndliches Wording.\n\n Form und Aufbau\n \u2013 Nutze die Form der umgekehrten Pyramide (wichtigste Informationen zuerst, abnehmende Wichtigkeit im Verlauf).\n \u2013 Verfasse einen Titel und klare Zwischentitel (keine Bulletpoints).\n \u2013 Bei Veranstaltungshinweisen beginne den Artikel mit einem Satz, der Wer, wann, wo, was beantwortet (z. B. \u201eFranz Tomaschett spricht am 5. Dezember in Chur \u00fcber das Thema Arbeit.\u201c).\n \u2013 Der Fliesstext sollte zwischen 250 und 500 W\u00f6rtern umfassen.\n\n Inhalte und Daten\n \u2013 Fasse alle relevanten Inhalte verst\u00e4ndlich zusammen.\n- halte dich an die Informationen aus der E-Mail. Erfinde nichts! Sei genau!\n- wenn dir Informationen fehlen, konstruiere keine neuen. \n \u2013 Ignoriere alle anderen Dateiformate (z. B. Bilder, Excel-Tabellen).\n \u2013 Verwende keine Aufz\u00e4hlungspunkte im finalen Artikel.\n- wenn subjektive oder streitbare Ansichten formuliert werden, attribuiere diese den Absendern dieser Ansichten. Nenne Quelle/Urheber solcher \u00c4usserungen. Beispiel: \"ZITAT in direkter oder indirekter Rede\", schreibt die Gruppe Wolf in ihrer Mitteilung. \n\n Zus\u00e4tzliche Anweisung\n \u2013 Extrahiere zun\u00e4chst alle wichtigen Daten, Personen und Schlagworte. Liste sie strukturiert (z. B. mit Abs\u00e4tzen oder klarer Trennung) vor dem eigentlichen Artikel auf. Z\u00e4hle zudem die Anzahl Zeichen und W\u00f6rter des Artikels.\n\nBeispielhafte Ausgabe-Struktur\n\nWichtige Daten und Personen\nNennehierknappundstrukturiertallerelevantenNamen,Daten,Orte,Termineetc.NennehierknappundstrukturiertallerelevantenNamen,Daten,Orte,Termineetc.\n\nTitel\nKurzer,pra\u00a8gnanterTitelKurzer,pra\u00a8gnanterTitel\n\n\nEinfu\u00a8hrenderAbsatzmitdenwichtigstenInfos(wer,wann,wo,was)Einfu\u00a8hrenderAbsatzmitdenwichtigstenInfos(wer,wann,wo,was)\n\nZwischentitel 1\nHintergrund,weitereZusammenha\u00a8nge,abnehmendwichtigeDetailsHintergrund,weitereZusammenha\u00a8nge,abnehmendwichtigeDetails\n\nZwischentitel 2\nRestlicheInformationen,kontextualisiertundzusammengefasstRestlicheInformationen,kontextualisiertundzusammengefasst\n\n(Ende des Artikels, maximal 500 W\u00f6rter.)\n\nNutze bitte diese Vorgaben, um den Artikel in hochwertiger, schweizkonformer Sprache zu verfassen.\n\nHier die Informationen aus dem E-Mail\n\n {{ $('Gmail Trigger').item.json.text }}\n\n{{ $json.text }}",
"options": {},
"promptType": "define"
},
"retryOnFail": true,
"typeVersion": 1.7
},
{
"id": "1d3988ea-b8ec-450a-a512-f5463953554b",
"name": "AI Article Writer 2",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1700,
280
],
"parameters": {
"text": "=Du bist Redakteur*in beim Schweizer Kulturmagazin Terra Grischuna. Erstelle aus den Textinformationen einen publikationsfertigen Artikel mit folgender Struktur und Vorgehensweise:\n\n Stil und Sprache\n \u2013 Schreibe in einer neutralen, reduzierten und klaren Sprache.\n \u2013 Verwende die Schweizer Rechtschreibung.\n \u2013 Halte dich an ein genderneutrales, aktives und verst\u00e4ndliches Wording.\n\n Form und Aufbau\n \u2013 Nutze die Form der umgekehrten Pyramide (wichtigste Informationen zuerst, abnehmende Wichtigkeit im Verlauf).\n \u2013 Verfasse einen Titel und klare Zwischentitel (keine Bulletpoints).\n \u2013 Bei Veranstaltungshinweisen beginne den Artikel mit einem Satz, der Wer, wann, wo, was beantwortet (z. B. \u201eFranz Tomaschett spricht am 5. Dezember in Chur \u00fcber das Thema Arbeit.\u201c).\n \u2013 Der Fliesstext sollte zwischen 250 und 500 W\u00f6rtern umfassen.\n\n Inhalte und Daten\n \u2013 Fasse alle relevanten Inhalte verst\u00e4ndlich zusammen.\n- halte dich an die Informationen aus der E-Mail. Erfinde nichts! Sei genau!\n- wenn dir Informationen fehlen, konstruiere keine neuen. \n \u2013 Ignoriere alle anderen Dateiformate (z. B. Bilder, Excel-Tabellen).\n \u2013 Verwende keine Aufz\u00e4hlungspunkte im finalen Artikel.\n- wenn subjektive oder streitbare Ansichten formuliert werden, attribuiere diese den Absendern dieser Ansichten. Nenne Quelle/Urheber solcher \u00c4usserungen. Beispiel: \"ZITAT in direkter oder indirekter Rede\", schreibt die Gruppe Wolf in ihrer Mitteilung. \n\n Zus\u00e4tzliche Anweisung\n \u2013 Extrahiere zun\u00e4chst alle wichtigen Daten, Personen und Schlagworte. Liste sie strukturiert (z. B. mit Abs\u00e4tzen oder klarer Trennung) vor dem eigentlichen Artikel auf. Z\u00e4hle zudem die Anzahl Zeichen und W\u00f6rter des Artikels.\n\nBeispielhafte Ausgabe-Struktur\n\nWichtige Daten und Personen\nNennehierknappundstrukturiertallerelevantenNamen,Daten,Orte,Termineetc.NennehierknappundstrukturiertallerelevantenNamen,Daten,Orte,Termineetc.\n\nTitel\nKurzer,pra\u00a8gnanterTitelKurzer,pra\u00a8gnanterTitel\n\n\nEinfu\u00a8hrenderAbsatzmitdenwichtigstenInfos(wer,wann,wo,was)Einfu\u00a8hrenderAbsatzmitdenwichtigstenInfos(wer,wann,wo,was)\n\nZwischentitel 1\nHintergrund,weitereZusammenha\u00a8nge,abnehmendwichtigeDetailsHintergrund,weitereZusammenha\u00a8nge,abnehmendwichtigeDetails\n\nZwischentitel 2\nRestlicheInformationen,kontextualisiertundzusammengefasstRestlicheInformationen,kontextualisiertundzusammengefasst\n\n(Ende des Artikels, maximal 500 W\u00f6rter.)\n\nNutze bitte diese Vorgaben, um den Artikel in hochwertiger, schweizkonformer Sprache zu verfassen.\n\nHier die Informationen aus dem E-Mail\n\n {{ $('Gmail Trigger').item.json.text }}{{ $json.data }}",
"options": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "99b5a06e-5d1b-4797-a934-2c37b49caf47",
"name": "AI Article Writer 3",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
660,
520
],
"parameters": {
"text": "=Du bist Redakteur*in beim Schweizer Kulturmagazin Terra Grischuna. Erstelle aus den Textinformationen einen publikationsfertigen Artikel mit folgender Struktur und Vorgehensweise:\n\n Stil und Sprache\n \u2013 Schreibe in einer neutralen, reduzierten und klaren Sprache.\n \u2013 Verwende die Schweizer Rechtschreibung.\n \u2013 Halte dich an ein genderneutrales, aktives und verst\u00e4ndliches Wording.\n\n Form und Aufbau\n \u2013 Nutze die Form der umgekehrten Pyramide (wichtigste Informationen zuerst, abnehmende Wichtigkeit im Verlauf).\n \u2013 Verfasse einen Titel und klare Zwischentitel (keine Bulletpoints).\n \u2013 Bei Veranstaltungshinweisen beginne den Artikel mit einem Satz, der Wer, wann, wo, was beantwortet (z. B. \u201eFranz Tomaschett spricht am 5. Dezember in Chur \u00fcber das Thema Arbeit.\u201c).\n \u2013 Der Fliesstext sollte zwischen 250 und 500 W\u00f6rtern umfassen.\n- wenn subjektive oder streitbare Ansichten formuliert werden, attribuiere diese den Absendern dieser Ansichten. Nenne Quelle/Urheber solcher \u00c4usserungen. Beispiel: \"ZITAT in direkter oder indirekter Rede\", schreibt die Gruppe Wolf in ihrer Mitteilung. \n\n Inhalte und Daten\n \u2013 Fasse alle relevanten Inhalte verst\u00e4ndlich zusammen.\n- halte dich an die Informationen aus der E-Mail. Erfinde nichts! Sei genau!\n- wenn dir Informationen fehlen, konstruiere keine neuen. \n \u2013 Ignoriere alle anderen Dateiformate (z. B. Bilder, Excel-Tabellen).\n \u2013 Verwende keine Aufz\u00e4hlungspunkte im finalen Artikel.\n\n Zus\u00e4tzliche Anweisung\n \u2013 Extrahiere zun\u00e4chst alle wichtigen Daten, Personen und Schlagworte. Liste sie strukturiert (z. B. mit Abs\u00e4tzen oder klarer Trennung) vor dem eigentlichen Artikel auf. Z\u00e4hle zudem die Anzahl Zeichen und W\u00f6rter des Artikels.\n\nBeispielhafte Ausgabe-Struktur\n\nWichtige Daten und Personen\nNennehierknappundstrukturiertallerelevantenNamen,Daten,Orte,Termineetc.NennehierknappundstrukturiertallerelevantenNamen,Daten,Orte,Termineetc.\n\nTitel\nKurzer,pra\u00a8gnanterTitelKurzer,pra\u00a8gnanterTitel\n\n\nEinfu\u00a8hrenderAbsatzmitdenwichtigstenInfos(wer,wann,wo,was)Einfu\u00a8hrenderAbsatzmitdenwichtigstenInfos(wer,wann,wo,was)\n\nZwischentitel 1\nHintergrund,weitereZusammenha\u00a8nge,abnehmendwichtigeDetailsHintergrund,weitereZusammenha\u00a8nge,abnehmendwichtigeDetails\n\nZwischentitel 2\nRestlicheInformationen,kontextualisiertundzusammengefasstRestlicheInformationen,kontextualisiertundzusammengefasst\n\n(Ende des Artikels, maximal 500 W\u00f6rter.)\n\nNutze bitte diese Vorgaben, um den Artikel in hochwertiger, Schweizkonformer Sprache zu verfassen.\n\nHier die Informationen aus dem E-Mail\n\n {{ $('Gmail Trigger').item.json.text }}",
"options": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "f7280703-4570-4771-8a53-cac3a661f416",
"name": "Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
960,
280
],
"parameters": {
"name": "={{ $json.fileName }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {
"useContentAsIndexableText": false
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "root",
"cachedResultName": "/ (Root folder)"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "a83189ab-027d-4ed7-aa69-82e29270cd7c",
"name": "OpenAI self-assesment",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
2020,
280
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Deine Aufgabe ist es, den gegebenen Input-Text mit dem Output-Artikel zu vergleichen.\nBewerte, ob alle wesentlichen Informationen aus dem Input-Text im Output-Artikel korrekt enthalten sind, ohne dass neue, nicht im Input vorhandene Informationen hinzugef\u00fcgt wurden.\nVorgehensweise:\n\n Vollst\u00e4ndigkeit pr\u00fcfen: Sind alle relevanten Informationen aus dem Input im Output enthalten?\n Genauigkeit bewerten: Wurde der Inhalt korrekt wiedergegeben, ohne \u00c4nderungen oder Auslassungen?\n Zus\u00e4tzliche Informationen erkennen: Wurden Inhalte hinzugef\u00fcgt, die nicht im Input vorhanden sind? Falls ja, welche?\n\nAusgabe:\n\n Bewertung (1 bis 5):\n 1 = Sehr schlecht (viele fehlende oder falsche Informationen, erhebliche neue Inhalte)\n 2 = Unzureichend (mehrere wichtige Auslassungen oder falsche Inhalte)\n 3 = Mittelm\u00e4\u00dfig (einige kleinere Fehler oder Erg\u00e4nzungen)\n 4 = Gut (fast alles korrekt, minimale Abweichungen)\n 5 = Sehr gut (vollst\u00e4ndige, korrekte \u00dcbereinstimmung)\n Textuelle Begr\u00fcndung: Eine kurze Analyse, warum diese Bewertung vergeben wurde.\n\n\nHier der Input:\n{{ $('HTTP Request3').item.json.data }}\n{{ $('Gmail Trigger').item.json.text }}\nUnd hier der Output:\n{{ $json.output }}"
},
{
"role": "assistant",
"content": "sei pedantisch"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
}
],
"active": false,
"settings": {
"timezone": "Europe/Rome",
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1"
},
"versionId": "0e0eba57-a154-48ee-a86a-d4c787805456",
"connections": {
"Google Drive": {
"main": [
[
{
"node": "HTTP Request2",
"type": "main",
"index": 0
}
]
]
},
"PDF or WORD?": {
"main": [
[
{
"node": "Extrahiere aus PDF1",
"type": "main",
"index": 0
}
],
[
{
"node": "Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Gmail Trigger": {
"main": [
[
{
"node": "Code: delete all but pdf and word",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request2": {
"main": [
[
{
"node": "HTTP Request3",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request3": {
"main": [
[
{
"node": "AI Article Writer 2",
"type": "main",
"index": 0
}
]
]
},
"has attachment?": {
"main": [
[
{
"node": "PDF or WORD?",
"type": "main",
"index": 0
}
],
[
{
"node": "AI Article Writer 3",
"type": "main",
"index": 0
}
]
]
},
"AI Article Writer 1": {
"main": [
[
{
"node": "OpenAI self-assesment2",
"type": "main",
"index": 0
}
]
]
},
"AI Article Writer 2": {
"main": [
[
{
"node": "OpenAI self-assesment",
"type": "main",
"index": 0
}
]
]
},
"AI Article Writer 3": {
"main": [
[
{
"node": "OpenAI self assesment",
"type": "main",
"index": 0
}
]
]
},
"Extrahiere aus PDF1": {
"main": [
[
{
"node": "AI Article Writer 1",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Article Writer 3",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Anthropic Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Article Writer 2",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Anthropic Chat Model2": {
"ai_languageModel": [
[
{
"node": "AI Article Writer 1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI self assesment": {
"main": [
[
{
"node": "reply to sender (no attachment)",
"type": "main",
"index": 0
}
]
]
},
"OpenAI self-assesment": {
"main": [
[
{
"node": "reply to sender (word)",
"type": "main",
"index": 0
}
]
]
},
"OpenAI self-assesment2": {
"main": [
[
{
"node": "reply to sender (pdf)",
"type": "main",
"index": 0
}
]
]
},
"Code: delete all but pdf and word": {
"main": [
[
{
"node": "has attachment?",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
anthropicApigmailOAuth2googleDocsOAuth2ApigoogleDriveOAuth2ApioAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This n8n workflow automates the transformation of press releases into polished articles. It converts the content of an email and its attachments (PDF or Word documents) into an AI-written article/blog post.
Source: https://n8n.io/workflows/3302/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This n8n workflow automates turning short user ideas into production-ready real-estate marketing assets (photorealistic images and optional 360° videos). A form submission seeds a prompt board → an LL
Enterprise-grade resume screening automation built for production environments. This workflow combines intelligent AI analysis with comprehensive error handling to ensure reliable processing of candid
This n8n workflow is designed for e-commerce businesses, digital marketers, and content creators who want to automatically generate professional 3D product videos from product images. It's perfect for
This workflow is the core of a three-part email automation system. It monitors your Gmail inbox in real time, classifies every inbound customer email with AI, retrieves contextually relevant data from
This template enriches a lead list by analyzing each contact’s LinkedIn activity and auto-generating a single personalized opening line for cold outreach. Drop a spreadsheet into a Google Drive folder