{
  "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
          }
        ]
      ]
    }
  }
}