AutomationFlowsAI & RAG › Generate Weekly Client Faq Updates Using Newsapi, Gpt-4.1 and Sheets

Generate Weekly Client Faq Updates Using Newsapi, Gpt-4.1 and Sheets

ByWeblineIndia @weblineindia on n8n.io

This workflow automatically generates weekly client-ready investment FAQs by combining market news (NewsAPI) and portfolio data (Google Sheets) using OpenAI GPT-4.1. The final FAQs are structured and saved back into Google Sheets. Import the workflow into n8n Add your NewsAPI…

Cron / scheduled trigger★★★★☆ complexityAI-powered17 nodesHTTP RequestGoogle SheetsOpenAI
AI & RAG Trigger: Cron / scheduled Nodes: 17 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Google Sheets → HTTP Request 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": "6zyHopCz7BIM3wHc",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Auto FAQ Generator for Clients",
  "tags": [],
  "nodes": [
    {
      "id": "5be8e21a-7a60-4ee5-9643-d8f9b0c8e03a",
      "name": "Fetch Market News",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        14576,
        2240
      ],
      "parameters": {
        "url": "https://newsapi.org/v2/top-headlines",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "sources",
              "value": "techcrunch"
            },
            {
              "name": "apiKey"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "a047cfeb-a244-4820-b36b-1aa98dea5c16",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16192,
        1952
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 752,
        "content": "## FAQ Storage & Usage\n\nThis stage formats and stores the final results.\n\nIt ensures:\n\nFAQs are structured into Q&A format (Q1\u2013Q5, A1\u2013A5)\nData is clean and consistent\nResults are saved to Google Sheets\n\nThis makes the output easy to access, reuse and share with clients."
      },
      "typeVersion": 1
    },
    {
      "id": "81bd75e0-d410-4c50-a923-04b2e51f8fcb",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        15488,
        1952
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 752,
        "content": "## AI-Powered FAQ Generation\n\nThis stage combines all prepared data into one context.\n\nIt uses AI to:\n\nAnalyze market trends and portfolio performance\nGenerate 5 relevant client questions\nProvide clear, one-line answers\n\nThe output is focused on practical and client-friendly insights."
      },
      "typeVersion": 1
    },
    {
      "id": "31736f47-5152-49c9-b5c1-a7393587ac33",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        14176,
        1936
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 736,
        "content": "## Automated Data Collection\n\nThis workflow runs every Monday at 8:00 AM.\n\nIt collects data from:\n\nMarket news via API\nPortfolio data from Google Sheets\n\nThese two sources provide the foundation for generating relevant client insights."
      },
      "typeVersion": 1
    },
    {
      "id": "db5b9cb0-725b-4bd5-b6c5-217182886f5e",
      "name": "Save FAQs to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        16496,
        2448
      ],
      "parameters": {
        "columns": {
          "value": {
            "A1": "={{$json[\"A1\"]}}",
            "A2": "={{ $json[\"A2\"] }}",
            "A3": "={{$json[\"A3\"]}}",
            "A4": "={{$json[\"A4\"]}}",
            "A5": "={{$json[\"A5\"]}}",
            "Q1": "={{$json[\"Q1\"]}}\n",
            "Q2": "={{$json[\"Q2\"]}}",
            "Q3": "={{$json[\"Q3\"]}}",
            "Q4": "={{$json[\"Q4\"]}}",
            "Q5": "={{$json[\"Q5\"]}}"
          },
          "schema": [
            {
              "id": "Q1",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Q1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "A1",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "A1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Q2",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Q2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "A2",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "A2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Q3",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Q3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "A3",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "A3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Q4",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Q4",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "A4",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "A4",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Q5",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Q5",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "A5",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "A5",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "index",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "index",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "message",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "logprobs",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "logprobs",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "finish_reason",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "finish_reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How can I check the current value of my investment?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How can I check the current value of my investment?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What does it mean if my investment shows a decrease in value?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What does it mean if my investment shows a decrease in value?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the risk level associated with my investment?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the risk level associated with my investment?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=Should I be concerned if my asset\u2019s value drops from last week?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=Should I be concerned if my asset\u2019s value drops from last week?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How can I diversify my investments to manage risk?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How can I diversify my investments to manage risk?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How much has my investment in Apple grown recently?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How much has my investment in Apple grown recently?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the risk level of my Tesla investment?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the risk level of my Tesla investment?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "How is my Google investment performing?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "How is my Google investment performing?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=Are my investments in low-risk assets doing well?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=Are my investments in low-risk assets doing well?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How much has Bitcoin increased in value?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How much has Bitcoin increased in value?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What does the risk level of my investment mean?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What does the risk level of my investment mean?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "How has my asset performed compared to last week?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "How has my asset performed compared to last week?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=What should I do if my investment is losing value?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=What should I do if my investment is losing value?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How much has my investment grown since I started?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How much has my investment grown since I started?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How is my investment performing?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How is my investment performing?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the risk level of my assets?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the risk level of my assets?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Can I see the current value of my investments?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Can I see the current value of my investments?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=What sectors are these investments in?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=What sectors are these investments in?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How much has my asset changed in value?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How much has my asset changed in value?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the risk level associated with my asset?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the risk level associated with my asset?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Did the value of my investment increase or decrease last week?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Did the value of my investment increase or decrease last week?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How much profit or loss have I made on my investments?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How much profit or loss have I made on my investments?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=Should I invest more in a high-risk asset like Tesla or Bitcoin?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=Should I invest more in a high-risk asset like Tesla or Bitcoin?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How has my investment in Apple performed?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How has my investment in Apple performed?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Is it risky to invest in high-risk assets like Tesla and Bitcoin?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Is it risky to invest in high-risk assets like Tesla and Bitcoin?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the current value of my Google investment?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the current value of my Google investment?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How has my gold ETF investment changed recently?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How has my gold ETF investment changed recently?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=Are my investments in banking and energy sectors performing well?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=Are my investments in banking and energy sectors performing well?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How has my Apple investment performed recently?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How has my Apple investment performed recently?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Is the Tesla stock a risky investment?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Is the Tesla stock a risky investment?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the current value of my Amazon holdings?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the current value of my Amazon holdings?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How did my Gold ETF perform last week?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How did my Gold ETF perform last week?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=What is the current value of my Bitcoin investment?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=What is the current value of my Bitcoin investment?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How can I check the current value of my investment?\\n",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How can I check the current value of my investment?\\n",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the risk level of my asset?\\n",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the risk level of my asset?\\n",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "How much has my investment grown compared to last week?\\n",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "How much has my investment grown compared to last week?\\n",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=Can I see the sector of my investment?\\n",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=Can I see the sector of my investment?\\n",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=What should I do if I want to sell my asset?\\n",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=What should I do if I want to sell my asset?\\n",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the risk level for my Tesla investment?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the risk level for my Tesla investment?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "How much did my Google investment change in value?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "How much did my Google investment change in value?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=What is the current value of my Gold ETF?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=What is the current value of my Gold ETF?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How has the Bitcoin investment performed this week?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How has the Bitcoin investment performed this week?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=How can I check my investment performance?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=How can I check my investment performance?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What is the risk level associated with my investments?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What is the risk level associated with my investments?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "How much has my Apple investment grown recently?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "How much has my Apple investment grown recently?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=Is there a way to get updates on my investments?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=Is there a way to get updates on my investments?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=What should I consider before investing in high-risk assets like Bitcoin?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=What should I consider before investing in high-risk assets like Bitcoin?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "What does the risk level 'Medium' mean for my investment?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "What does the risk level 'Medium' mean for my investment?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=Should I consider reallocating my investments based on the risk levels?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=Should I consider reallocating my investments based on the risk levels?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "=Why did the value of my asset change recently?",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "=Why did the value of my asset change recently?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1558419824,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cNPNmqkABsykQQuAsop_9-pqD-3OrjFvmTpdWRfdgfg/edit#gid=1558419824",
          "cachedResultName": "ANswer"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1cNPNmqkABsykQQuAsop_9-pqD-3OrjFvmTpdWRfdgfg",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cNPNmqkABsykQQuAsop_9-pqD-3OrjFvmTpdWRfdgfg/edit?usp=drivesdk",
          "cachedResultName": "FAQS"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2ba42834-444f-4db9-a369-dc9f89c7aa22",
      "name": "Extract FAQs (Structured Output)",
      "type": "n8n-nodes-base.set",
      "position": [
        16256,
        2448
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "=Q1",
              "value": "={{$json[\"message\"][\"content\"].match(/Q1:\\s*(.*?)\\nA1:/s)?.[1]}}"
            },
            {
              "name": "A1",
              "value": "={{$json[\"message\"][\"content\"].match(/A1:\\s*(.*?)\\nQ2:/s)?.[1]}}"
            },
            {
              "name": "Q2",
              "value": "={{$json[\"message\"][\"content\"].match(/Q2:\\s*(.*?)\\nA2:/s)?.[1]}}"
            },
            {
              "name": "A2",
              "value": "={{$json[\"message\"][\"content\"].match(/A2:\\s*(.*?)\\nQ3:/s)?.[1]}}"
            },
            {
              "name": "Q3",
              "value": "={{$json[\"message\"][\"content\"].match(/Q3:\\s*(.*?)\\nA3:/s)?.[1]}}"
            },
            {
              "name": "A3",
              "value": "={{$json[\"message\"][\"content\"].match(/A3:\\s*(.*?)\\nQ4:/s)?.[1]}}"
            },
            {
              "name": "Q4",
              "value": "={{$json[\"message\"][\"content\"].match(/Q4:\\s*(.*?)\\nA4:/s)?.[1]}}"
            },
            {
              "name": "A4",
              "value": "={{$json[\"message\"][\"content\"].match(/A4:\\s*(.*?)\\nQ5:/s)?.[1]}}"
            },
            {
              "name": "Q5",
              "value": "={{$json[\"message\"][\"content\"].match(/Q5:\\s*(.*?)\\nA5:/s)?.[1]}}"
            },
            {
              "name": "A5",
              "value": "={{ $json[\"message\"][\"content\"].match(/A5:(.*)/s)[1].trim() }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "866732b2-2058-4058-afe2-049124e56e74",
      "name": "Generate Client FAQs (AI)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        15808,
        2448
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-nano",
          "cachedResultName": "GPT-4.1-NANO"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "=You are an assistant that generates client FAQs based on provided context. Output **exactly 5 FAQs only** with short, simple answers. Do not generate more than 5."
            },
            {
              "content": "=Here is the client portfolio:{{ $json.Portfolio }}  and news context:{{ $json[\"Prepare News\"] }}\n\nYou are a financial assistant.\n\nBased on news + portfolio context, generate 5 FAQs clients may ask this week.\n\nRules:\n- Focus on trends, risks, opportunities\n- Keep answers very simple (1 line)\n- Avoid generic questions\n- Make them practical for investors\nSTRICT FORMAT (do not change):\nQ1: question\nA1: answer\nQ2: question\nA2: answer\nQ3: question\nA3: answer\nQ4: question\nA4: answer\nQ5: question\nA5: answer"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2e29ba94-51f6-4b2d-ace6-20ff584f9744",
      "name": "Merge News + Portfolio Context",
      "type": "n8n-nodes-base.merge",
      "position": [
        15568,
        2448
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "8d562271-9d62-40c1-916c-5e93c9f2ecf4",
      "name": "Fetch Portfolio Data (Google Sheets)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        14560,
        2512
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cNPNmqkABsykQQuAsop_9-pqD-3OrjFvmTpdWRfdgfg/edit#gid=0",
          "cachedResultName": "FAQS"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1cNPNmqkABsykQQuAsop_9-pqD-3OrjFvmTpdWRfdgfg",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1cNPNmqkABsykQQuAsop_9-pqD-3OrjFvmTpdWRfdgfg/edit?usp=drivesdk",
          "cachedResultName": "FAQS"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "5319de63-b50e-4eb8-b34d-678e72e87260",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        13408,
        1424
      ],
      "parameters": {
        "color": "#F5D224",
        "width": 662,
        "height": 1072,
        "content": "## Auto FAQ Generator for Clients\n### Overview\n\nThis workflow automatically generates weekly client-ready investment FAQs by combining real-time market news with portfolio performance data. It ensures clients receive timely, relevant and easy-to-understand insights\u2014helping you stay proactive and consistent in communication.\n\n### How It Works:\nThe workflow runs every Monday at 8:00 AM\nIt fetches the latest tech-focused market news\nIt pulls current and historical portfolio data from a spreadsheet\nIt analyzes portfolio risk levels and performance changes\nBoth datasets are formatted and merged into a single context\nAn AI model generates 5 practical FAQs with simple answers\nThe structured FAQs are extracted and saved to Google Sheets for use or sharing\n\n### Setup Steps: \n1. Schedule Trigger\nConfigure the workflow to run weekly (Monday at 8:00 AM)\n\n2. Collect Market News\nUse an HTTP Request node to fetch top headlines (e.g., TechCrunch)\nAdd a fallback message if no news is available\n\n3. Retrieve Portfolio Data\nConnect Google Sheets to load portfolio data\nFormat asset details (current value, last week value, risk level)\n\n4. Analyze Portfolio\nCalculate:\n\nNumber of high-risk assets\nAssets losing value\n\n5. Combine Data\nMerge news data and portfolio insights into one structured input\n\n6. Generate FAQs\nUse an AI node to:\n\nCreate exactly 5 relevant client questions\nProvide short, clear, one-line answers\nFocus on trends, risks and opportunities\n\n7. Structure Output\nParse the AI response into structured Q&A fields (Q1\u2013Q5, A1\u2013A5)\n\n8. Store Results\nSave FAQs into Google Sheets for tracking or reuse\n\n9. (Optional) Share Output\nDistribute FAQs via email, dashboard or client communication tools"
      },
      "typeVersion": 1
    },
    {
      "id": "ba60dafc-543f-4fae-a558-cf957e611847",
      "name": "Weekly Portfolio & News Trigger (Mon 8AM)",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        14224,
        2368
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "f213fd5c-3ac5-4e63-a0b7-abaf7c0648ce",
      "name": "Check News Availability",
      "type": "n8n-nodes-base.if",
      "position": [
        14816,
        2240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5660d4e7-906c-46f2-9394-bf4b42eeaa37",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ !!$json[\\\"articles\\\"] && $json[\\\"articles\\\"].length > 0 }}",
              "rightValue": 0
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.3
    },
    {
      "id": "a3b72e3a-e2aa-4e93-acd2-844ea12ad925",
      "name": "Format Top News",
      "type": "n8n-nodes-base.set",
      "position": [
        15232,
        2224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "79367086-a290-48e9-b2ee-5262cab15fbc",
              "name": "Prepare News",
              "type": "string",
              "value": "={{ ($json.articles || []).slice(0,5).map(a => a.title + \": \" + (a.description || \"\")).join(\"\\n\") }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "8a04a043-ba0a-460d-9642-75499c143e6d",
      "name": "Fallback News Message",
      "type": "n8n-nodes-base.set",
      "position": [
        15056,
        2352
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4519518c-ac38-407d-b6a6-b26f710d04e7",
              "name": "Prepare News",
              "type": "string",
              "value": "No major market news this week. Focus on portfolio performance"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "2e7b39f5-f1f8-42c3-ab96-a8bc992ed7cb",
      "name": "Format Portfolio Summary",
      "type": "n8n-nodes-base.set",
      "position": [
        14816,
        2512
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "48efab47-204f-4571-82d3-89cb805194f6",
              "name": "Portfolio",
              "type": "string",
              "value": "={{ $input.all().map(item => \n  item.json[\"Asset\"] + \n  \" | Current: \" + item.json[\"Current Value\"] + \n  \" | Last Week: \" + item.json[\"Last Week Value\"] + \n  \" | Risk: \" + item.json[\"Risk Level\"]\n).join(\"\\n\") }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "8b300b45-e535-4805-b48e-96fb7c341823",
      "name": "Analyze Portfolio Risk & Loss",
      "type": "n8n-nodes-base.code",
      "position": [
        15232,
        2512
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\n\nlet highRisk = 0;\nlet losses = 0;\n\nitems.forEach(item => {\n  const current = Number(item.json[\"Current Value\"]);\n  const last = Number(item.json[\"Last Week Value\"]);\n  const risk = item.json[\"Risk Level\"];\n\n  if (risk === \"High\") highRisk++;\n  if (current < last) losses++;\n});\n\nreturn [{\n  json: {\n    PortfolioSummary: `\nHigh Risk Assets: ${highRisk}\nAssets Losing Value: ${losses}\n`\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "b54c48b3-4cd8-43cd-8d9b-89bce4489331",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        14768,
        1952
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 752,
        "content": "## Data Preparation & Portfolio Analysis\n\nThis stage prepares and enriches the collected data.\n\nIt includes:\n\nFormatting news into readable summaries\nHandling missing news with a fallback message\nStructuring portfolio data (current value, past value, risk level)\nAnalyzing portfolio trends (high-risk assets, declining assets)\n\nThis ensures the data is clean, structured and insight-ready."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "c003b477-c354-4dd5-9197-6bec92e35602",
  "connections": {
    "Format Top News": {
      "main": [
        [
          {
            "node": "Merge News + Portfolio Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Market News": {
      "main": [
        [
          {
            "node": "Check News Availability",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check News Availability": {
      "main": [
        [
          {
            "node": "Format Top News",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Fallback News Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Portfolio Summary": {
      "main": [
        [
          {
            "node": "Analyze Portfolio Risk & Loss",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Client FAQs (AI)": {
      "main": [
        [
          {
            "node": "Extract FAQs (Structured Output)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Portfolio Risk & Loss": {
      "main": [
        [
          {
            "node": "Merge News + Portfolio Context",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge News + Portfolio Context": {
      "main": [
        [
          {
            "node": "Generate Client FAQs (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract FAQs (Structured Output)": {
      "main": [
        [
          {
            "node": "Save FAQs to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Portfolio Data (Google Sheets)": {
      "main": [
        [
          {
            "node": "Format Portfolio Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Weekly Portfolio & News Trigger (Mon 8AM)": {
      "main": [
        [
          {
            "node": "Fetch Market News",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Portfolio Data (Google Sheets)",
            "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 weekly client-ready investment FAQs by combining market news (NewsAPI) and portfolio data (Google Sheets) using OpenAI GPT-4.1. The final FAQs are structured and saved back into Google Sheets. Import the workflow into n8n Add your NewsAPI…

Source: https://n8n.io/workflows/15065/ — 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

AI Institutional Stock Valuation Engine with Risk Scoring & Scenario Targets

Google Sheets, XML, HTTP Request +3
AI & RAG

Overview This is a production-grade, fully automated stock analysis system built entirely in n8n. It combines institutional-level financial analysis, dual AI model consensus, and a self-improving back

Google Sheets, XML, HTTP Request +3
AI & RAG

This automation is a complete end-to-end system designed to find, qualify, and contact B2B leads — fully automated and powered by AI. Searches for target companies on LinkedIn via Ghost Genius API, us

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

This comprehensive n8n automation template orchestrates a complete end-to-end workflow for generating engaging short-form Point-of-View (POV) style videos using multiple AI services and automatically

HTTP Request, OpenAI, Google Drive +4
AI & RAG

A professional AI equity analysis automation built on n8n that transforms structured financial data and real-time news into disciplined, risk-adjusted price targets and actionable BUY/HOLD/SELL signal

Google Sheets, OpenAI, XML +3