This workflow corresponds to n8n.io template #10952 — we link there as the canonical source.
This workflow follows the Agent → Chainllm 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": "D164AwZVwkxOZA5z",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "AI Daily Newsletter Summary",
"tags": [],
"nodes": [
{
"id": "e3a8f9f7-ac0d-47fb-9135-2ac751e491ed",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1072,
-320
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "fdacee80-8dd9-41e8-8bf2-351011d940d9",
"name": "Scrape",
"type": "n8n-nodes-scrapegraphai.scrapegraphAiTool",
"position": [
1312,
-320
],
"parameters": {
"userPrompt": "Entra nell'url di ogni articolo e fai il summary con i concetti principali in italiano dell'articolo setesso",
"websiteUrl": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Website_URL', `Inserisci l'url dell'articolo`, 'string') }}"
},
"credentials": {
"scrapegraphAIApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "55b32a6d-9303-49fe-9ede-e1274a09a3c5",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1744,
-544
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "aa6a4e64-5fe0-4f84-b392-62e36f1abd48",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1952,
-336
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5-mini",
"cachedResultName": "gpt-5-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "648b042b-fcc2-42fb-a3cd-253a9d8ded33",
"name": "Get email",
"type": "n8n-nodes-base.gmail",
"position": [
608,
-528
],
"parameters": {
"simple": false,
"options": {},
"messageId": "={{ $json.id }}",
"operation": "get"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "4c320728-4489-4e2b-afe2-6ac35ee3672d",
"name": "Convert HTML to MD",
"type": "n8n-nodes-base.markdown",
"position": [
880,
-528
],
"parameters": {
"html": "={{ $json.textAsHtml }}",
"options": {},
"destinationKey": "md"
},
"typeVersion": 1
},
{
"id": "d0b96b4f-aa43-4d0e-b35a-93c49dd6eda4",
"name": "Scrape Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1120,
-528
],
"parameters": {
"text": "={{ $json.md }}",
"options": {
"systemMessage": "This document contains a collection of articles.\nSplit the text of this newsletter into individual articles and output a valid JSON \u2014 without any additional comments \u2014 that includes, for each article, the following fields:\n\n- title: the article\u2019s title\n- link: the article\u2019s URL\n- summary: a short summary of the article in Italian\n\nFor each URL, use the \"Scrape\" tool to analyze the page and produce a concise summary in Italian containing the main ideas."
},
"promptType": "define"
},
"typeVersion": 3
},
{
"id": "20d938a0-b4c8-4aee-91b5-be5ab8383379",
"name": "Validate Json",
"type": "n8n-nodes-base.code",
"position": [
1536,
-528
],
"parameters": {
"jsCode": "// Create output array\nconst outputItems = [];\n\n// Loop over input items\nfor (const item of $input.all()) {\n // Get the string and clean it\n let jsonString = item.json.output;\n \n // Remove ```json and ``` markers\n jsonString = jsonString.replace(/```json\\n?/g, '').replace(/```\\n?/g, '');\n \n // Parse the JSON\n const parsedData = JSON.parse(jsonString);\n \n // Create an item for each article\n for (const article of parsedData) {\n outputItems.push({\n json: {\n title: article.title,\n link: article.link,\n summary: article.summary\n }\n });\n }\n}\n\nreturn outputItems;"
},
"typeVersion": 2
},
{
"id": "e98e925b-98f6-4db1-8ff7-20e776e0d479",
"name": "Categorization Chain",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2000,
-528
],
"parameters": {
"text": "=Which category does it belong to?\n\nTitle: {{ $json.title }}\nSummary: {{ $json.summary }}",
"batching": {},
"messages": {
"messageValues": [
{
"message": "For each article, you will receive as input its Title and Summary. \n\nAnalyze them and assign the article to one and only one of the following categories. If multiple categories seem applicable, choose the one most specific to the main content of the article.\n\nList of categories:\n\n- \"LLM & Foundation Models\"\n- \"Developer Tools & Code Generation\"\n- \"AI Automation & WF\"\n- \"Data & RAG Systems\"\n- \"AI Infrastructure & APIs\"\n- \"AI Governance & Research\"\n- \"Events & Community\"\n\n"
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "f28a0818-870c-4c64-ae87-7f76fa87c91b",
"name": "Short url",
"type": "n8n-nodes-base.httpRequest",
"position": [
2384,
-528
],
"parameters": {
"url": "https://cleanuri.com/api/v1/shorten",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "url",
"value": "={{ $('Loop Over Items').item.json.link }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "2bfafff0-f1bf-425a-afe8-3548a3c22359",
"name": "Add article to sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2624,
-528
],
"parameters": {
"columns": {
"value": {
"DATE": "={{$now.format('dd/LL/yyyy')}}",
"LINK": "={{ $json.result_url }}",
"TITLE": "={{ $('Loop Over Items').item.json.title }}",
"SUMMARY": "={{ $('Loop Over Items').item.json.summary }}",
"CATEGORY": "={{ $('Categorization Chain').item.json.text }}"
},
"schema": [
{
"id": "DATE",
"type": "string",
"display": true,
"required": false,
"displayName": "DATE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "TITLE",
"type": "string",
"display": true,
"required": false,
"displayName": "TITLE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LINK",
"type": "string",
"display": true,
"required": false,
"displayName": "LINK",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "SUMMARY",
"type": "string",
"display": true,
"required": false,
"displayName": "SUMMARY",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CATEGORY",
"type": "string",
"display": true,
"required": false,
"displayName": "CATEGORY",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CvsUadsmoLKZUUYd2KEEGMnJidqRqnLW-BvIw66_LX4/edit#gid=0",
"cachedResultName": "Foglio1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1CvsUadsmoLKZUUYd2KEEGMnJidqRqnLW-BvIw66_LX4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CvsUadsmoLKZUUYd2KEEGMnJidqRqnLW-BvIw66_LX4/edit?usp=drivesdk",
"cachedResultName": "AI DAILY NEWS"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "dbd74fb3-f517-4d5a-94cc-bad33672dabc",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
-1200
],
"parameters": {
"width": 1120,
"height": 448,
"content": "## Automated DAily AI News Digest: Scrape, Categorize & Save to Google Sheets\nThis workflow is designed to automatically process AI news emails, extract and summarize articles, categorize them, and store the results in a structured Google Sheet for daily tracking and insights.\n\nThis automated workflow processes a daily AI newsletter from AlphaSignal, extracting individual articles, summarizing them, categorizing them, and saving the results to a Google Sheet.\n\nFirst please clone [this Google Sheet](https://docs.google.com/spreadsheets/d/15VKWMbd2cOb74uwYncfXkwLZam-dXD5sBiAttVpKIQw/edit?usp=sharing)\n\n## How it works:\nThe workflow triggers on incoming emails from Alphasignal, converts them to Markdown, and uses a Gemini-powered agent to extract and summarize articles. OpenAI categorizes each article, CleanURI shortens URLs, and results are saved to Google Sheets with titles, summaries, and categories.\n\n## Setup steps:\nConnect Gmail, Google Gemini, OpenAI, ScrapegraphAI, and Google Sheets via OAuth2 or API keys. Set sheet ID and sender filter, test credentials, then activate the workflow to auto-process newsletters into categorized entries."
},
"typeVersion": 1
},
{
"id": "29343127-daea-4dcc-abdc-a20600b3f4ae",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
-720
],
"parameters": {
"color": 7,
"width": 448,
"height": 368,
"content": "## STEP 1 - Get email and covert to MD\n\nGet the email and convert text from HTML to Markdown. **Email Credentials:** Set up a Gmail OAuth2 credential (named \"Gmail account\" in the workflow) to allow n8n to access and read emails from the specified inbox."
},
"typeVersion": 1
},
{
"id": "cef613bc-5480-4ec9-874a-2e659ca2addd",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1040,
-720
],
"parameters": {
"color": 7,
"width": 640,
"height": 368,
"content": "## STEP 2 - Split the text nto individual articles\n\nSplit the text of this newsletter into individual articles and output a valid JSON. **Scraping Tool:** Set up the [ScrapegraphAI account](https://dashboard.scrapegraphai.com/?via=n3witalia) credential with its required API key to enable the agent to access and scrape content from the article URLs."
},
"typeVersion": 1
},
{
"id": "84e499a5-a75c-482b-96b9-27d391827496",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1952,
-720
],
"parameters": {
"color": 7,
"width": 848,
"height": 368,
"content": "## STEP 3 - Categorization article and save to Google Sheet\nFor each article coming from the JSON, I categorize it using the Categorization Chain, generate a short URL from the newsletter link, and finally insert the article\u2019s content into the [Google Sheets archive](https://docs.google.com/spreadsheets/d/15VKWMbd2cOb74uwYncfXkwLZam-dXD5sBiAttVpKIQw/edit?usp=sharing).\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "3569ebcf-2dfa-4b46-a9a4-ec42bcc17c08",
"connections": {
"Scrape": {
"ai_tool": [
[
{
"node": "Scrape Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Get email": {
"main": [
[
{
"node": "Convert HTML to MD",
"type": "main",
"index": 0
}
]
]
},
"Short url": {
"main": [
[
{
"node": "Add article to sheet",
"type": "main",
"index": 0
}
]
]
},
"Scrape Agent": {
"main": [
[
{
"node": "Validate Json",
"type": "main",
"index": 0
}
]
]
},
"Validate Json": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Categorization Chain",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Categorization Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Convert HTML to MD": {
"main": [
[
{
"node": "Scrape Agent",
"type": "main",
"index": 0
}
]
]
},
"Add article to sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Categorization Chain": {
"main": [
[
{
"node": "Short url",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Scrape Agent",
"type": "ai_languageModel",
"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.
gmailOAuth2googlePalmApigoogleSheetsOAuth2ApiopenAiApiscrapegraphAIApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is designed to automatically process AI news emails, extract and summarize articles, categorize them, and store the results in a structured Google Sheet for daily tracking and insights.
Source: https://n8n.io/workflows/10952/ — 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.
The Multi-Model Agency Content Engine is a high-performance editorial system designed for agencies. It solves the "blank page" problem by alternating between real-world social proof and strategic expe
This workflow automates the creation, rendering, approval, and posting of TikTok-style POV (Point of View) videos to Instagram, with cross-posting to Facebook and YouTube. It eliminates manual video p
Send one WhatsApp message → Get AI-optimized content across 7+ social platforms.
🤖🧑💻 AI Agent for Top n8n Creators Leaderboard Reporting. Uses httpRequest, lmChatOpenAi, executeWorkflowTrigger, toolWorkflow. Event-driven trigger; 49 nodes.
🤖🧑💻 AI Agent for Top n8n Creators Leaderboard Reporting. Uses httpRequest, lmChatOpenAi, executeWorkflowTrigger, toolWorkflow. Event-driven trigger; 49 nodes.