AutomationFlowsAI & RAG › Generate Weekly Advisor Talking Points with Gemini, Gmail and Google Sheets

Generate Weekly Advisor Talking Points with Gemini, Gmail and Google Sheets

ByWeblineIndia @weblineindia on n8n.io

This workflow automatically generates a weekly financial advisory briefing every Monday at 8 AM. It fetches live market data (SPY), collects top financial news, uses Google Gemini AI to generate client-ready talking points and sends a formatted email via Gmail. It also logs all…

Cron / scheduled trigger★★★★☆ complexityAI-powered19 nodesHTTP RequestGoogle GeminiGmailGoogle Sheets
AI & RAG Trigger: Cron / scheduled Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #15666 — we link there as the canonical source.

This workflow follows the Gmail → Googlegemini 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 →

Download .json
{
  "id": "oKEdSrNkba2ZMnHi",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Weekly \u201cTalking Points\u201d Generator for Advisors",
  "tags": [],
  "nodes": [
    {
      "id": "f106c1bd-1c3d-4884-b4ed-e7e0ec8824e0",
      "name": "Every Monday at 8am",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        4304,
        3696
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "8b6efeb1-cab0-4c19-a39e-5a307380aa3e",
      "name": "Fetch SPY Market Data (Alpha Vantage)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4592,
        3600
      ],
      "parameters": {
        "url": "https://www.alphavantage.co/query",
        "options": {},
        "sendQuery": true,
        "sendHeaders": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "function",
              "value": "GLOBAL_QUOTE"
            },
            {
              "name": "symbol",
              "value": "SPY"
            },
            {
              "name": "apikey",
              "value": "5GKANTP5YWWC93DH"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "dc79f41d-5bd4-4f7a-aaed-84afc2f90871",
      "name": "Fetch Top 5 Financial News Headlines",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4592,
        3824
      ],
      "parameters": {
        "url": "https://newsapi.org/v2/everything",
        "options": {
          "redirect": {
            "redirect": {
              "maxRedirects": 5
            }
          }
        },
        "sendQuery": true,
        "sendHeaders": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "regulation"
            },
            {
              "name": "sortBy",
              "value": "publishedAt"
            },
            {
              "name": "pageSize",
              "value": "5"
            },
            {
              "name": "apiKey",
              "value": "9578df680cd04908989fd9d804f2e0d4"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            },
            {
              "name": "User-Agent",
              "value": "n8n-news-intelligence/1.0"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4750dd6a-56b5-48e9-abc9-1b6b5ddb651c",
      "name": "Merge Market and News Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        4832,
        3680
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3
    },
    {
      "id": "b0aa1b0a-acf5-4f9d-acb8-4bba487907d3",
      "name": "Set All Variables \u2013 Edit Here to Reconfigure",
      "type": "n8n-nodes-base.set",
      "position": [
        5120,
        3680
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "var-advisor-email",
              "name": "advisorEmail",
              "type": "string",
              "value": ""
            },
            {
              "id": "var-advisor-name",
              "name": "advisorName",
              "type": "string",
              "value": "Aishvarya"
            },
            {
              "id": "var-firm-name",
              "name": "firmName",
              "type": "string",
              "value": "Wealth Advisory Partners"
            },
            {
              "id": "var-week-date",
              "name": "weekOf",
              "type": "string",
              "value": "={{ new Date().toLocaleDateString('en-IN', { day: '2-digit', month: 'long', year: 'numeric' }) }}"
            },
            {
              "id": "var-spy-price",
              "name": "spyPrice",
              "type": "string",
              "value": "={{ $('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['05. price'] ?? 'N/A' }}"
            },
            {
              "id": "var-spy-change",
              "name": "spyChangePercent",
              "type": "string",
              "value": "={{ $('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['10. change percent'] ?? 'N/A' }}"
            },
            {
              "id": "var-spy-high",
              "name": "spyDayHigh",
              "type": "string",
              "value": "={{ $('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['03. high'] ?? 'N/A' }}"
            },
            {
              "id": "var-spy-low",
              "name": "spyDayLow",
              "type": "string",
              "value": "={{ $('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['04. low'] ?? 'N/A' }}"
            },
            {
              "id": "var-spy-volume",
              "name": "spyVolume",
              "type": "string",
              "value": "={{ $('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['06. volume'] ?? 'N/A' }}"
            },
            {
              "id": "var-news-headline-1",
              "name": "newsHeadline1",
              "type": "string",
              "value": "={{ $('Fetch Top 5 Financial News Headlines').item.json.articles?.[0]?.title ?? 'No headline' }}"
            },
            {
              "id": "var-news-headline-2",
              "name": "newsHeadline2",
              "type": "string",
              "value": "={{ $('Fetch Top 5 Financial News Headlines').item.json.articles?.[1]?.title ?? 'No headline' }}"
            },
            {
              "id": "var-news-headline-3",
              "name": "newsHeadline3",
              "type": "string",
              "value": "={{ $('Fetch Top 5 Financial News Headlines').item.json.articles?.[2]?.title ?? 'No headline' }}"
            },
            {
              "id": "var-news-headline-4",
              "name": "newsHeadline4",
              "type": "string",
              "value": "={{ $('Fetch Top 5 Financial News Headlines').item.json.articles?.[3]?.title ?? 'No headline' }}"
            },
            {
              "id": "var-news-headline-5",
              "name": "newsHeadline5",
              "type": "string",
              "value": "={{ $('Fetch Top 5 Financial News Headlines').item.json.articles?.[4]?.title ?? 'No headline' }}"
            },
            {
              "id": "var-news-source-1",
              "name": "newsSource1",
              "type": "string",
              "value": "={{ $('Fetch Top 5 Financial News Headlines').item.json.articles?.[0]?.source?.name ?? 'Unknown' }}"
            },
            {
              "id": "var-news-url-1",
              "name": "newsUrl1",
              "type": "string",
              "value": "={{ $('Fetch Top 5 Financial News Headlines').item.json.articles?.[0]?.url ?? '' }}"
            },
            {
              "id": "var-email-subject",
              "name": "emailSubject",
              "type": "string",
              "value": "={{ 'Weekly Advisor Briefing \u2013 Week of ' + new Date().toLocaleDateString('en-IN', { day: '2-digit', month: 'long', year: 'numeric' }) }}"
            },
            {
              "id": "var-ai-prompt",
              "name": "aiPrompt",
              "type": "string",
              "value": "={{ 'You are a senior wealth management advisor assistant. Based on the market data and news headlines below, generate a concise weekly briefing for a financial advisor to use in client conversations.\\n\\n--- MARKET DATA (SPY / S&P 500 ETF) ---\\nPrice: ' + ($('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['05. price'] ?? 'N/A') + '\\nChange: ' + ($('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['10. change percent'] ?? 'N/A') + '\\nDay High: ' + ($('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['03. high'] ?? 'N/A') + '\\nDay Low: ' + ($('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['04. low'] ?? 'N/A') + '\\nVolume: ' + ($('Fetch SPY Market Data (Alpha Vantage)').item.json['Global Quote']?.['06. volume'] ?? 'N/A') + '\\n\\n--- TOP FINANCIAL NEWS HEADLINES ---\\n1. ' + ($('Fetch Top 5 Financial News Headlines').item.json.articles?.[0]?.title ?? 'N/A') + '\\n2. ' + ($('Fetch Top 5 Financial News Headlines').item.json.articles?.[1]?.title ?? 'N/A') + '\\n3. ' + ($('Fetch Top 5 Financial News Headlines').item.json.articles?.[2]?.title ?? 'N/A') + '\\n4. ' + ($('Fetch Top 5 Financial News Headlines').item.json.articles?.[3]?.title ?? 'N/A') + '\\n5. ' + ($('Fetch Top 5 Financial News Headlines').item.json.articles?.[4]?.title ?? 'N/A') + '\\n\\n--- OUTPUT FORMAT ---\\nReturn EXACTLY in this format with no extra preamble:\\n\\nTALKING POINTS\\n1. [Point 1 \u2013 1 to 2 sentences, advisor-ready]\\n2. [Point 2]\\n3. [Point 3]\\n4. [Point 4]\\n5. [Point 5]\\n\\nCLIENT-FRIENDLY ANALOGIES\\n1. [Analogy 1 \u2013 simple, relatable, avoids jargon]\\n2. [Analogy 2]\\n\\nKeep the tone confident, clear and suitable for a wealth management advisor speaking to HNI clients.' }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "073e27c7-f1d8-41cc-86a0-f8ffee0e74c5",
      "name": "Generate Weekly Briefing with Gemini",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        5792,
        3664
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "={{ $json.aiPrompt }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "82adcd71-6962-439f-b3c2-9d83e936e327",
      "name": "Check \u2013 Did Gemini Return a Valid Response",
      "type": "n8n-nodes-base.if",
      "position": [
        6112,
        3664
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": false,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "check-gemini-output-not-empty",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.content?.parts?.[0]?.text ?? '' }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a912717e-2e48-44ca-a92e-1f32cd44d28a",
      "name": "Format AI Response as Clean HTML",
      "type": "n8n-nodes-base.set",
      "position": [
        6304,
        3600
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "fmt-briefing-html",
              "name": "briefingHtml",
              "type": "string",
              "value": "={{ $('Generate Weekly Briefing with Gemini').item.json.content?.parts?.[0]?.text?.trim().replace(/\\n\\n/g, '<br><br>').replace(/\\n/g, '<br>') ?? '' }}"
            },
            {
              "id": "fmt-advisor-email",
              "name": "advisorEmail",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.advisorEmail }}"
            },
            {
              "id": "fmt-advisor-name",
              "name": "advisorName",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.advisorName }}"
            },
            {
              "id": "fmt-firm-name",
              "name": "firmName",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.firmName }}"
            },
            {
              "id": "fmt-week-of",
              "name": "weekOf",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.weekOf }}"
            },
            {
              "id": "fmt-email-subject",
              "name": "emailSubject",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.emailSubject }}"
            },
            {
              "id": "fmt-spy-price",
              "name": "spyPrice",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyPrice }}"
            },
            {
              "id": "fmt-spy-change",
              "name": "spyChangePercent",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyChangePercent }}"
            },
            {
              "id": "fmt-spy-high",
              "name": "spyDayHigh",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyDayHigh }}"
            },
            {
              "id": "fmt-spy-low",
              "name": "spyDayLow",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyDayLow }}"
            },
            {
              "id": "fmt-spy-volume",
              "name": "spyVolume",
              "type": "string",
              "value": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyVolume }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6fb079e8-999c-472a-8dee-d1cf7ca03c47",
      "name": "Send Weekly Briefing Email via Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        6496,
        3600
      ],
      "parameters": {
        "sendTo": "={{ $json.advisorEmail }}",
        "message": "=Hi {{ $json.advisorName }},<br><br>\n\nHere is your <b>Weekly Market Briefing</b> for the week of <b>{{ $json.weekOf }}</b>.<br>\nUse these talking points in your client conversations this week.<br><br>\n\n<hr>\n\n<b>Market Snapshot (SPY)</b><br>\nPrice: <b>${{ $json.spyPrice }}</b> &nbsp;|&nbsp; Change: <b>{{ $json.spyChangePercent }}</b><br>\nHigh: ${{ $json.spyDayHigh }} &nbsp;|&nbsp; Low: ${{ $json.spyDayLow }} &nbsp;|&nbsp; Volume: {{ $json.spyVolume }}<br><br>\n\n<hr>\n\n{{ $json.briefingHtml }}<br><br>\n\n<hr>\n\n<i>This briefing was auto-generated by your n8n workflow. Review before sharing with clients.</i><br><br>\n\nRegards,<br>\n{{ $json.firmName }} Automation",
        "options": {
          "appendAttribution": false
        },
        "subject": "={{ $json.emailSubject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "42b9973e-49a8-461e-9468-2e6a4c6bc95e",
      "name": "Stop \u2013 AI Returned Empty Response",
      "type": "n8n-nodes-base.noOp",
      "position": [
        6320,
        3824
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5f25a075-b1a3-447a-b514-b1a3d327ada7",
      "name": "Data Collection Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4496,
        3392
      ],
      "parameters": {
        "color": 7,
        "width": 504,
        "height": 662,
        "content": "## Data Collection\nBoth HTTP requests run in parallel as soon as the trigger fires. Alpha Vantage returns SPY price, change, high, low and volume. NewsAPI returns the 5 latest headlines matching the search query. Results are merged by position before moving on."
      },
      "typeVersion": 1
    },
    {
      "id": "449bd5bf-719d-42d4-8059-67ac9588d5c0",
      "name": "Config Hub Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5056,
        3472
      ],
      "parameters": {
        "color": 7,
        "width": 612,
        "height": 438,
        "content": "## Configuration, Processing & Validation Hub\n\nThis section centralizes workflow control. The Set node defines all key variables including advisor details, market data, news headlines and AI prompt. The Code node then cleans and processes the data by removing invalid values and structuring headlines. Finally, the IF node validates critical inputs like SPY price before proceeding to AI, ensuring only accurate and reliable data is used for generating outputs."
      },
      "typeVersion": 1
    },
    {
      "id": "b2552361-5706-484b-9e94-9bf4cf27a460",
      "name": "AI and Delivery Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5760,
        3456
      ],
      "parameters": {
        "color": 7,
        "width": 1148,
        "height": 518,
        "content": "## AI Generation, Delivery & Logging\n\nGemini receives the structured prompt and generates the weekly briefing. An IF node checks whether the response is non-empty before proceeding. If valid, the output is formatted into clean HTML and sent via Gmail to the advisor. Finally, the workflow logs all key data, including AI output, market data and execution details, into Google Sheets for tracking, analysis and record-keeping. If empty, the workflow stops gracefully."
      },
      "typeVersion": 1
    },
    {
      "id": "6b3071ba-7a7d-4f07-a667-1b093183a240",
      "name": "Main Overview1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4160,
        2688
      ],
      "parameters": {
        "width": 636,
        "height": 600,
        "content": "## Weekly \u201cTalking Points\u201d Generator for Advisors\n\n## How it works:\nEvery Monday at 8am, the workflow fetches live SPY market data from Alpha Vantage and the top 5 financial news headlines from NewsAPI. Both run in parallel and are merged.\n\nThe data is then passed through a **Code node** for cleaning and preprocessing (removing empty headlines and validating market data). An **IF node** checks whether critical data (like SPY price) is available before proceeding.\n\nIf valid, the cleaned data is sent to Gemini AI, which generates 5 advisor talking points and 2 client-friendly analogies. The result is formatted into HTML and sent as an email via Gmail.\n\nFinally, all important data (market data, headlines, AI output and execution details) is stored in **Google Sheets** for tracking and analysis.\n\n---\n\n## Setup steps:\n1. Add your Alpha Vantage API key in the SPY fetch node  \n2. Add your NewsAPI key in the news fetch node  \n3. Connect your Google Gemini credential  \n4. Connect your Gmail OAuth2 credential  \n5. In **Set All Variables**, update: advisorEmail, advisorName, firmName  \n6. Ensure the **Code node and IF node** are correctly connected for data validation  \n7. Connect your **Google Sheets account** and verify column mappings  \n8. Activate the workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "84a3c5fe-2e0a-4c21-ab15-fedcb8957338",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4224,
        3616
      ],
      "parameters": {
        "color": 7,
        "height": 256,
        "content": "## Scheduler\nit run every morning at 8AM"
      },
      "typeVersion": 1
    },
    {
      "id": "d6362b1c-d16e-4be6-a88e-3db1f032d0c6",
      "name": "Clean & Prepare Market Data",
      "type": "n8n-nodes-base.code",
      "position": [
        5328,
        3680
      ],
      "parameters": {
        "jsCode": "const data = $json;\n\n// Collect headlines safely\nlet headlines = [\n  data.newsHeadline1,\n  data.newsHeadline2,\n  data.newsHeadline3,\n  data.newsHeadline4,\n  data.newsHeadline5\n].filter(h => h && h !== 'No headline');\n\n// Fallback if no news\nif (headlines.length === 0) {\n  headlines = [\"No major financial news this week\"];\n}\n\n// Clean SPY data\nconst spyPrice = data.spyPrice && data.spyPrice !== 'N/A' ? data.spyPrice : null;\n\n// Join headlines into one string\nconst allHeadlines = headlines.join(\" | \");\n\nreturn [{\n  ...data,\n  cleanedHeadlines: headlines,\n  allHeadlines: allHeadlines,\n  spyPriceValid: spyPrice\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "fc43e5cf-02e0-425b-88f2-443bc31f12d4",
      "name": "Validate Data Before AI",
      "type": "n8n-nodes-base.if",
      "position": [
        5536,
        3680
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "564d6f66-8f79-4bf4-8f77-6074a70fdd67",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.spyPriceValid }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "0567b1b4-21c2-4f6f-b237-74f711eaa576",
      "name": "Log Weekly Briefing to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        6704,
        3600
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $('Every Monday at 8am').item.json['Readable date'] }}",
            "Firm Name": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.firmName }}",
            "SPY Price": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyPrice }}",
            "SPY Volume": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyVolume }}",
            "SPY Day Low": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyDayLow }}",
            "Advisor Name": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.advisorName }}",
            "Email Status": "Sent",
            "SPY Change %": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyChangePercent }}",
            "SPY Day High": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.spyDayHigh }}",
            "Top Headline": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.newsHeadline1 }}",
            "All Headlines": "={{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.newsHeadline1 }} |{{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.newsHeadline2 }} | {{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.newsHeadline3 }} | {{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.newsHeadline4 }} | {{ $('Set All Variables \u2013 Edit Here to Reconfigure').item.json.newsHeadline5 }}",
            "Execution Time": "={{ new Date().toISOString() }}",
            "Full AI Output": "={{ $('Format AI Response as Clean HTML').item.json.briefingHtml }}"
          },
          "schema": [
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Advisor Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Advisor Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Firm Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Firm Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "SPY Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SPY Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "SPY Change %",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SPY Change %",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "SPY Day High",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SPY Day High",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "SPY Day Low",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SPY Day Low",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "SPY Volume",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SPY Volume",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Top Headline",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Top Headline",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "All Headlines",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "All Headlines",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full AI Output",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Full AI Output",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Execution Time",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Execution Time",
              "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/1eKDlU7vNI7xVqobzj2TnElxwdjdpyd_BIeP_-LtrFKs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1eKDlU7vNI7xVqobzj2TnElxwdjdpyd_BIeP_-LtrFKs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eKDlU7vNI7xVqobzj2TnElxwdjdpyd_BIeP_-LtrFKs/edit?usp=drivesdk",
          "cachedResultName": "News_Point"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e5e17405-26a8-4a97-9c4d-6cb2187b9eb5",
      "name": "Invalid Input",
      "type": "n8n-nodes-base.noOp",
      "position": [
        5552,
        3920
      ],
      "parameters": {},
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "f4e1a523-7194-4e35-8d78-0f2e2c68eb13",
  "connections": {
    "Every Monday at 8am": {
      "main": [
        [
          {
            "node": "Fetch SPY Market Data (Alpha Vantage)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Top 5 Financial News Headlines",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Data Before AI": {
      "main": [
        [
          {
            "node": "Generate Weekly Briefing with Gemini",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Invalid Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Market and News Data": {
      "main": [
        [
          {
            "node": "Set All Variables \u2013 Edit Here to Reconfigure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean & Prepare Market Data": {
      "main": [
        [
          {
            "node": "Validate Data Before AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format AI Response as Clean HTML": {
      "main": [
        [
          {
            "node": "Send Weekly Briefing Email via Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Top 5 Financial News Headlines": {
      "main": [
        [
          {
            "node": "Merge Market and News Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Generate Weekly Briefing with Gemini": {
      "main": [
        [
          {
            "node": "Check \u2013 Did Gemini Return a Valid Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Weekly Briefing Email via Gmail": {
      "main": [
        [
          {
            "node": "Log Weekly Briefing to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch SPY Market Data (Alpha Vantage)": {
      "main": [
        [
          {
            "node": "Merge Market and News Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check \u2013 Did Gemini Return a Valid Response": {
      "main": [
        [
          {
            "node": "Format AI Response as Clean HTML",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Stop \u2013 AI Returned Empty Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set All Variables \u2013 Edit Here to Reconfigure": {
      "main": [
        [
          {
            "node": "Clean & Prepare Market Data",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automatically generates a weekly financial advisory briefing every Monday at 8 AM. It fetches live market data (SPY), collects top financial news, uses Google Gemini AI to generate client-ready talking points and sends a formatted email via Gmail. It also logs all…

Source: https://n8n.io/workflows/15666/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow is a complete outbound automation system that discovers local businesses, extracts contact emails, generates personalized cold emails using AI, and runs a multi-step follow-up sequence —

Stop And Error, Google Sheets, HTTP Request +2
AI & RAG

This workflow automatically fetches the latest business news, analyzes its impact on clients using AI and sends alerts for high-impact articles while logging all processed data in Google Sheets. It en

HTTP Request, Google Gemini, Gmail +1
AI & RAG

This workflow automatically fetches daily stock market news, analyzes sentiment using Gemini AI, calculates impact scores, sends alerts for high-impact news and stores structured results in Google She

HTTP Request, Google Gemini, Gmail +1
AI & RAG

This workflow automatically generates a weekly sales performance report from Google Sheets data. It runs on a schedule, cleans and filters the dataset, and calculates week-over-week performance metric

Gmail, Google Sheets, HTTP Request +1
AI & RAG

AI Institutional Stock Valuation Engine with Risk Scoring & Scenario Targets

Google Sheets, XML, HTTP Request +3