This workflow corresponds to n8n.io template #16291 — we link there as the canonical source.
This workflow follows the Chainllm → 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": "6f3NU4D4g7UGtphc",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Daily Outbound Performance Digest (Claude)",
"tags": [],
"nodes": [
{
"id": "e360be33-feee-4f30-9dac-edb7a13270ff",
"name": "Sticky Note - Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
352,
80
],
"parameters": {
"color": 4,
"width": 420,
"height": 768,
"content": "## Daily Outbound Performance Digest (n8n + Claude)\n\n**Who it's for:** You run cold outbound and want a quick read each morning on what's working and who to chase, without digging through a spreadsheet.\n\n**What it does:** Every morning it reads your active campaign sheet and has Claude write a short digest: how things are going, a sentiment breakdown, and a ranked list of who to follow up with today. It lands in your inbox.\n\n**How it works:**\n1. The schedule trigger fires once a day.\n2. It reads rows from your active campaign sheet.\n3. An Aggregate node rolls them into one payload.\n4. Claude returns a summary, sentiment breakdown, and ranked follow-ups.\n5. Gmail sends the digest.\n\n**How to use:**\n- Connect Anthropic, Google Sheets and Gmail.\n- Replace the Sheet ID and recipient email.\n- Point Sheets at an active campaign tab, ideally current week or current campaign only.\n- Set the send time, test once, then turn it on."
},
"typeVersion": 1
},
{
"id": "356beaa7-1ce7-44a6-b412-3027ccea9f7e",
"name": "Sticky Note - Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
80
],
"parameters": {
"color": 5,
"width": 320,
"height": 332,
"content": "### Setup\nSet the recipient email and focus in **Config**. Replace the Sheet ID, point Sheets at the active campaign tab, and set the schedule time."
},
"typeVersion": 1
},
{
"id": "8425e158-c28c-4e22-9312-f8684bbaabb5",
"name": "Sticky Note - Data",
"type": "n8n-nodes-base.stickyNote",
"position": [
1344,
80
],
"parameters": {
"color": 7,
"width": 360,
"height": 336,
"content": "### 1. Pull and roll up the data\nReads every row from your tracker and rolls it into one payload so Claude sees the whole campaign at once."
},
"typeVersion": 1
},
{
"id": "676da8c9-48c7-49d2-9acc-9f5f57d6e0a7",
"name": "Sticky Note - AI",
"type": "n8n-nodes-base.stickyNote",
"position": [
1792,
80
],
"parameters": {
"color": 7,
"width": 360,
"height": 340,
"content": "### 2. Summarize and send\nAI returns a summary, a sentiment breakdown, and ranked follow-ups. Gmail formats it and sends it off."
},
"typeVersion": 1
},
{
"id": "b330a9a9-4d6c-4740-ae0f-c84413801ef3",
"name": "Every Morning",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
816,
256
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.2
},
{
"id": "186ac876-047f-42f5-a5aa-029f49f72f27",
"name": "Config (edit me)",
"type": "n8n-nodes-base.set",
"position": [
1072,
256
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a1",
"name": "digest_email",
"type": "string",
"value": "you@example.com"
},
{
"id": "a2",
"name": "focus",
"type": "string",
"value": "Prioritize accounts that replied but went quiet, and flag any negative sentiment that needs a human touch. Keep it short enough to read with coffee."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "70629eb2-d6e6-4b00-be24-d20d892f01d5",
"name": "Get Campaign Data",
"type": "n8n-nodes-base.googleSheets",
"position": [
1392,
256
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "Campaign",
"cachedResultName": "Campaign"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "304972b8-02e1-4a02-9e2f-3737a2b81112",
"name": "Aggregate Rows",
"type": "n8n-nodes-base.aggregate",
"position": [
1584,
256
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "bd9867a4-5e7c-42fd-aa3b-81ffff651c0d",
"name": "Summarize Campaign",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1808,
256
],
"parameters": {
"text": "=You are an outbound campaign analyst. Write a concise daily digest from the campaign data below.\n\nFOCUS:\n{{ $('Config (edit me)').item.json.focus }}\n\nCAMPAIGN DATA (JSON rows):\n{{ JSON.stringify($json.data) }}\n\nTASK:\n1. Write a 2-3 sentence summary of how the campaign is performing.\n2. Break down reply sentiment as counts (positive / neutral / negative).\n3. List up to 5 prioritized follow-ups, each with the company and why it matters today.\n4. Also return follow_ups_text as a plain text bullet list. If there are no priority follow-ups, return \"- No priority follow-ups today\".",
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.4
},
{
"id": "d227fb28-747b-497d-9c22-29f485c22876",
"name": "Anthropic Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
1776,
560
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-sonnet-4-6",
"cachedResultName": "Claude Sonnet 4.6"
},
"options": {
"temperature": 0.4
}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "71333998-0430-4b45-b3dd-77a717fb8894",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1984,
496
],
"parameters": {
"jsonSchemaExample": "{\n \"summary\": \"42 sends, 9 replies, 3 positive. Reply rate holding steady week over week.\",\n \"sentiment\": { \"positive\": 3, \"neutral\": 4, \"negative\": 2 },\n \"follow_ups\": [\n { \"company\": \"Acme Agency\", \"why\": \"Asked for pricing Tuesday, no reply sent yet.\" }\n ],\n \"follow_ups_text\": \"- Acme Agency: Asked for pricing Tuesday, no reply sent yet.\"\n}"
},
"typeVersion": 1.2
},
{
"id": "695f7a5c-92a6-4d85-998e-2914a0381bde",
"name": "Send Digest Email",
"type": "n8n-nodes-base.gmail",
"position": [
2048,
256
],
"parameters": {
"sendTo": "={{ $('Config (edit me)').item.json.digest_email }}",
"message": "={{ $json.output.summary }}\n\nSentiment\nPositive: {{ $json.output.sentiment.positive }} | Neutral: {{ $json.output.sentiment.neutral }} | Negative: {{ $json.output.sentiment.negative }}\n\nFollow-ups today:\n{{ $json.output.follow_ups_text }}",
"options": {},
"subject": "=Outbound digest for {{ $now.format('yyyy-MM-dd') }}",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "9562fa9e-6ffa-490f-b2b6-2ce5b9fbd177",
"name": "Sticky Note - Setup1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1712,
448
],
"parameters": {
"color": 5,
"width": 208,
"height": 252,
"content": "### Model Selection\nFeel free to swap this with an AI of your choosing"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"versionId": "40f24dca-f998-487d-940e-e1908786a487",
"nodeGroups": [],
"connections": {
"Every Morning": {
"main": [
[
{
"node": "Config (edit me)",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Rows": {
"main": [
[
{
"node": "Summarize Campaign",
"type": "main",
"index": 0
}
]
]
},
"Config (edit me)": {
"main": [
[
{
"node": "Get Campaign Data",
"type": "main",
"index": 0
}
]
]
},
"Get Campaign Data": {
"main": [
[
{
"node": "Aggregate Rows",
"type": "main",
"index": 0
}
]
]
},
"Summarize Campaign": {
"main": [
[
{
"node": "Send Digest Email",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "Summarize Campaign",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Summarize Campaign",
"type": "ai_outputParser",
"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.
anthropicApigmailOAuth2googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow runs every morning, pulls outbound campaign rows from Google Sheets, uses Anthropic Claude to generate a performance summary with sentiment counts and prioritized follow-ups, and sends the digest to a recipient via Gmail. Runs every morning at the scheduled hour.…
Source: https://n8n.io/workflows/16291/ — 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.
Template 7372. Uses googleSheets, outputParserStructured, lmChatAnthropic, n8n-nodes-serpapi. Scheduled trigger; 54 nodes.
📺 Full walkthrough video: https://youtu.be/dXz5OTbm4c8
[](https://youtu.be/sKJAypXDTLA)
This n8n workflow allows you to automatically archive your monthly Spotify liked tracks in a Google Sheet, along with playlist details and descriptions. Based on this data, Claude 3.5 is used to class
🚀 Create Pro-Level Social Media Carousels & Auto-Publish with Blotato Who is this for?