AutomationFlowsAI & RAG › Daily Google Analytics Report with Gpt-4 Mini Summaries, Whatsapp Alerts &…

Daily Google Analytics Report with Gpt-4 Mini Summaries, Whatsapp Alerts &…

Original n8n title: Daily Google Analytics Report with Gpt-4 Mini Summaries, Whatsapp Alerts & Clickup Tasks

ByMohamed Abubakkar @mohamed-abubakkar on n8n.io

The workflow runs automatically every day and collects analytics data for both today and yesterday. It cleans and standardizes both datasets in the same way so they are easy to compare. After that, it measures how performance has changed from one day to the next and interprets…

Cron / scheduled trigger★★★★☆ complexityAI-powered25 nodesGoogle AnalyticsTool CalculatorOpenAIWhatsAppEmail SendGoogle SheetsClickUp
AI & RAG Trigger: Cron / scheduled Nodes: 25 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Emailsend → Google Sheets 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": "9Q99YtjJeHGJfQj6",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Google Analytics Alert n8n",
  "tags": [
    {
      "id": "Z7L0f1AkNk8PRVAq",
      "name": "n8n",
      "createdAt": "2025-12-11T04:51:48.351Z",
      "updatedAt": "2025-12-11T04:51:48.351Z"
    }
  ],
  "nodes": [
    {
      "id": "b1d9cdc3-5542-413e-a5a0-7b50dd208c8e",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -816,
        -64
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fbfe639e-2ec1-4856-baee-9767f997cc8b",
      "name": "Today's Report",
      "type": "n8n-nodes-base.googleAnalytics",
      "position": [
        -512,
        -160
      ],
      "parameters": {
        "dateRange": "today",
        "returnAll": true,
        "metricsGA4": {
          "metricValues": [
            {},
            {
              "listName": "userEngagementDuration"
            },
            {
              "listName": "sessionsPerUser"
            },
            {
              "listName": "sessions"
            },
            {
              "listName": "screenPageViews"
            }
          ]
        },
        "propertyId": {
          "__rl": true,
          "mode": "list",
          "value": "420608804",
          "cachedResultUrl": "https://analytics.google.com/analytics/web/#/your/",
          "cachedResultName": "your-a7330"
        },
        "dimensionsGA4": {
          "dimensionValues": [
            {}
          ]
        },
        "additionalFields": {}
      },
      "credentials": {
        "googleAnalyticsOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "1ed41054-d7c7-432b-ae69-96c47fea8bae",
      "name": "Yesterday's Report",
      "type": "n8n-nodes-base.googleAnalytics",
      "position": [
        -512,
        32
      ],
      "parameters": {
        "dateRange": "yesterday",
        "metricsGA4": {
          "metricValues": [
            {},
            {
              "listName": "screenPageViews"
            },
            {
              "listName": "userEngagementDuration"
            },
            {
              "listName": "sessions"
            },
            {
              "listName": "sessionsPerUser"
            }
          ]
        },
        "propertyId": {
          "__rl": true,
          "mode": "list",
          "value": "420608804",
          "cachedResultUrl": "https://analytics.google.com/analytics/web/#/your/",
          "cachedResultName": "your-a7330"
        },
        "dimensionsGA4": {
          "dimensionValues": [
            {}
          ]
        },
        "additionalFields": {}
      },
      "credentials": {
        "googleAnalyticsOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "fea0b4e4-2457-40cd-813e-d7ae3b0651de",
      "name": "Calculator",
      "type": "@n8n/n8n-nodes-langchain.toolCalculator",
      "position": [
        784,
        -192
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "05d43788-639c-4a9f-b7d3-1e311f53761b",
      "name": "Combine Today & Yesterday",
      "type": "n8n-nodes-base.merge",
      "position": [
        0,
        -80
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "c74defc5-4d0e-4c08-bec2-4fc53703fe49",
      "name": "Normalize & Convert Types",
      "type": "n8n-nodes-base.code",
      "position": [
        -304,
        -160
      ],
      "parameters": {
        "jsCode": "const data = $input.first().json;\nfunction formatGADate(gaDate) {\n  if (!gaDate) return null;\n\n  const year = gaDate.substring(0, 4);\n  const month = gaDate.substring(4, 6);\n  const day = gaDate.substring(6, 8);\n\n  return `${year}-${month}-${day}`;\n}\ndata.date = formatGADate(data.date);\n\nreturn[{\n  date: (data.date),\n  users: Number(data.totalUsers),\n  userEngagement: Number(data.userEngagementDuration),\n  sessionsPerUser: Number(data.sessionsPerUser),\n  sessions: Number(data.sessions),\n  screenPageViews: Number(data.screenPageViews)\n}]"
      },
      "typeVersion": 2
    },
    {
      "id": "74147616-bdfe-427d-a557-08872111e7f4",
      "name": "Normalize & Convert Types1",
      "type": "n8n-nodes-base.code",
      "position": [
        -288,
        32
      ],
      "parameters": {
        "jsCode": "const data = $input.first().json;\nfunction formatGADate(gaDate) {\n  if (!gaDate) return null;\n\n  const year = gaDate.substring(0, 4);\n  const month = gaDate.substring(4, 6);\n  const day = gaDate.substring(6, 8);\n\n  return `${year}-${month}-${day}`;\n}\ndata.date = formatGADate(data.date);\n\nreturn[{\n  date: (data.date),\n  users: Number(data.totalUsers),\n  userEngagement: Number(data.userEngagementDuration),\n  sessionsPerUser: Number(data.sessionsPerUser),\n  sessions: Number(data.sessions),\n  screenPageViews: Number(data.screenPageViews)\n}]"
      },
      "typeVersion": 2
    },
    {
      "id": "92eb428a-79c5-463b-87a5-9e04540642e9",
      "name": "Calculate Percent Changes",
      "type": "n8n-nodes-base.code",
      "position": [
        208,
        -80
      ],
      "parameters": {
        "jsCode": "const todayData = $input.all()[0].json;\nconst yesterdayData = $input.all()[1].json;\n\n\nfunction percentChange(today, yesterday) {\n  today = Number(today);\n  yesterday = Number(yesterday);\n  \n  if(!yesterday || yesterday === 0) return 0;\n  if (yesterday === 0) return 100;\n  const change = ((today - yesterday) / yesterday) * 100;\n  console.log(change)\n  return Number(change.toFixed(1));\n}\n\nreturn {\n  users: percentChange(todayData.users, yesterdayData.users),\n  session: percentChange(todayData.sessions, yesterdayData.sessions),\n  pageViews: percentChange(todayData.screenPageViews, yesterdayData.screenPageViews),\n  todayUser: todayData.users,\n  yesterdayUser: yesterdayData.users,\n  todayDate: todayData.date\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "3117362c-7bcf-4dba-a8bf-660d64bbe972",
      "name": "Add Trend Arrows & Low-Traffic Handling",
      "type": "n8n-nodes-base.code",
      "position": [
        416,
        -80
      ],
      "parameters": {
        "jsCode": "const row = $input.all()[0].json;\n\nfunction trendArrow(change){\n  if(change === null) return '===';\n  return change > 0 ? '\u2b06\ufe0f' : change < 0 ? '\u2b07\ufe0f' : '===';\n}\n\nreturn {\n  users: `${row.users}% ${trendArrow(row.users)}`,\n  session: `${row.session}% ${trendArrow(row.session)}`,\n  pageView: `${row.pageViews}% ${trendArrow(row.pageViews)}`,\n  todayUser: row.todayUser,\n  yesterdayUser: row.yesterdayUser,\n  lowTraffic: row.todayUser < row.yesterdayUser,\n  todayDate: row.todayDate\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "7a90da7e-d0de-4995-a89b-79a21957f86a",
      "name": "Generate AI Summary",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        752,
        -320
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {
          "truncation": true
        },
        "responses": {
          "values": [
            {
              "content": "=You are a professional web analytics expert. \n\nAnalyze the following GA metrics and generate a concise, human-friendly daily report suitable for sending via WhatsApp or email. Include:\n\n1. A short summary of the traffic trends.\n2. Highlight significant drops or increases.\n3. Provide actionable recommendations if possible.\n4. If traffic is very low (less than 10 users), mention that explicitly and avoid over-analyzing percentage changes.\n5. Keep the tone professional, clear, and concise.\n\nHere is the data:\n\n[\n  {\n    \"users\": {{ $json.users }},\n    \"session\": {{ $json.session }},\n    \"pageView\": {{ $json.pageView }},\n    \"todayUser\": {{ $json.todayUser }},\n    \"yesterdayUser\": {{ $json.yesterdayUser }},\n    \"lowTraffic\": {{ $json.lowTraffic }}\n  }\n]\n"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "09d7d619-1610-430a-923e-54837f16d7bb",
      "name": "Format Message for WhatsApp / Email",
      "type": "n8n-nodes-base.set",
      "position": [
        1136,
        -416
      ],
      "parameters": {
        "options": {
          "dotNotation": false,
          "ignoreConversionErrors": false
        },
        "assignments": {
          "assignments": [
            {
              "id": "01103b83-ec2a-4088-91f0-d5e5c112680a",
              "name": "output[0].content[0].text",
              "type": "string",
              "value": "={{ $json.output[0].content[0].text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "494dcb21-988f-4465-9381-11ae5a09c188",
      "name": "Send message",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        1424,
        -352
      ],
      "parameters": {
        "textBody": "={{ $json[\"output[0].content[0].text\"] }}",
        "operation": "send",
        "additionalFields": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "43171b06-e5ca-472e-bdd6-347b02ed3368",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        768,
        -80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "aeefe422-239e-4600-b289-8bf4c1a9ae20",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.lowTraffic }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "3b80f891-d2a1-473a-82bd-01fafcd7f487",
      "name": "Send email to dedicated person",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1424,
        -512
      ],
      "parameters": {
        "html": "={{ $json[\"output[0].content[0].text\"] }}",
        "options": {},
        "subject": "Daily Web Analytics Report",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "496b244b-1586-43b7-a164-c7814579a3fe",
      "name": "Send email to marketing team",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1136,
        -224
      ],
      "parameters": {
        "html": "=<p>\ud83d\udcca <strong>Daily Web Analytics Report</strong> Today </p>\n\n<h3>Traffic Summary:</h3>\n<ul>\n  <li>Users today: {{ $json.todayUser }} (Change: {{ $json.users }})</li>\n  <li>Sessions today: {{ $json.session }})</li>\n  <li>Page Views today: {{ $json.pageView }} </li>\n</ul>\n\n\n<p>\u2139\ufe0f Traffic is very low, so percentage changes may not be statistically significant.</p>\n\n<p>\ud83d\udd0d Action Needed: The user count dropped compared to yesterday. Please investigate any recent website or marketing changes.</p>\n\n\n<p>\ud83d\udccc Recommendation:</p>\n<ul>\n  <li>Check recent marketing campaigns</li>\n  <li>Verify tracking implementation</li>\n  <li>Consider promoting content to increase user engagement</li>\n</ul>",
        "options": {},
        "subject": "Need attention to review the report",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "1c054737-c053-46ae-a05a-ba1e4d092195",
      "name": "Add log to High Traffic Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1136,
        16
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 989497976,
          "cachedResultUrl": "https://docs.google.com/yoursheet",
          "cachedResultName": "High Traffic Reports"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/yoursheet"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "86480632-9e77-44d7-9ecd-6d62474e1abb",
      "name": "Add log to Less Traffic",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1392,
        -96
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/yoursheet",
          "cachedResultName": "Less Traffic Reports"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/yoursheet"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "69154211-58b9-4b07-bc22-a40ee0916592",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        768,
        112
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "users",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "users",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "session",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "session",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "pageView",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "pageView",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "todayUser",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "todayUser",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "yesterdayUser",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "yesterdayUser",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "lowTraffic",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "lowTraffic",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "todayDate",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "todayDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1213242540,
          "cachedResultUrl": "https://docs.google.com/yoursheet",
          "cachedResultName": "Daily Traffic Report"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/yoursheet"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "56ebd751-2a73-4d5f-943c-54ddec25c96d",
      "name": "Create a task",
      "type": "n8n-nodes-base.clickUp",
      "position": [
        1136,
        224
      ],
      "parameters": {
        "list": "901814204536",
        "name": "n8n_TestReport",
        "team": "90182193057",
        "space": "90188728700",
        "folderless": true,
        "authentication": "oAuth2",
        "additionalFields": {
          "content": "={{ $json.users }}\n{{ $json.session }}\n{{ $json.pageView }}\n"
        }
      },
      "credentials": {
        "clickUpOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a1e3d162-80cb-4def-9d73-0f6bde65e089",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1712,
        -576
      ],
      "parameters": {
        "width": 704,
        "height": 880,
        "content": "## Workflow Overview\n\nThis workflow automates a daily traffic report and communication process. It compares today's and yesterday's analytics data, calculates percentage changes, identifies trends and distributes insights through emails, WhatsApp, Google Sheets and task management tools, It's designed for marketing and operations teams to monitor traffic, act on trends, and maintain logs automatically.\n\n## Key Features:\n\n Fetch and normalize Google Analytics reports for today and yesterday.\nCompare the data and calculate percent changes.\nHandle trend analysis and flag low-traffic scenarios.\nGenerate AI-powered summaries of trends.\nSend notifications via email and WhatsApp.\nMaintain logs in Google Sheets for both high and low traffic.\nAutomatically create tasks in ClickUp for action items.\n\n## Process Steps\n\n1. Fetch traffic data for today and yesterday from Google Analytics Data\n2. Normalize and combine the data\n3. Calculate changes and visualize trends.\n4. Use Gpt AI to generate a summary of key insights.\n5. Log all the data for record keeping and reporting\n6. Notify the relevant teams via email/WhatsApp\n7. Create tasks on ClickUp if any follow-up is required for everyday.\n\n## Credentials.\n\n1. Google Analytics API (fetch all the information about the traffic).\n2. Google Sheets (store the logs for audit).\n3. Email SMTP /  Gmail.\n4. GPT-4 mini OpenAI API.\n5. WhatsApp API Integration.\n6. ClickUp API."
      },
      "typeVersion": 1
    },
    {
      "id": "80f5f910-5966-4480-b550-810192a28441",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -608,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 352,
        "content": "## Analytics Report & Normalize\n\nFetch google analytics data for today and yesterday from node and get users, sessions, pageViews, sessionPerPage and etc.\n\nNormalize the response from the analytics. It converts the G4 date into readable date YYYY-MM-DD format and forces all metric fields into numbers so downstream calculations behave correctly."
      },
      "typeVersion": 1
    },
    {
      "id": "12abaf28-dd50-4750-a223-21dbd29d6bc7",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 352,
        "content": "## Combine and Calculation\n\nThis merge node appends both normalized records into one data stream so the workflow can compare two time snapshots in a single execution context.\n\nThe calculate function calculates day-over-day percentage differences for users, sessions, and views while safely handling zero or missing values to prevent invalid calculations.\n\nAdd the trend arrows and low traffic handling to the node that converts numeric changes into human-readable trends and flags low-traffic cases so alerting and logging logic can react differently"
      },
      "typeVersion": 1
    },
    {
      "id": "e41b8fa3-34e0-4fb2-aceb-72eb72306001",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -912
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 432,
        "content": "## Generate and format message for email / WhatsApp\n\nThis AI node turns the final processed metrics and trends into concise natural-language performance summary suitable for dedicated teams or persons\n\nThe format function reshapes the AI outputs into channel-specific text for ready to send. Based on your structure you can change the format in the Email subject.\n\nWhatsApp node are purely delivery endpoints, this is just additional notification platform while already received from the mail.\n\nGet the WhatsApp API from Meta and replace with your real whatspp api from getting this report.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "41cfbf04-9db4-4fdc-90bb-4de04ecf69b7",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1568,
        -192
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 256,
        "content": "## Check the report traffics & Notify users & Logs\n\nIF Node checks whether today's users are lower than yesterday, If percentage is less than yesterday the trigger alerts emails to dedicated persons or teams and log into the google sheet `Less Traffic Sheet` for record-keeping\n\nIf false that means traffic is higher than today so it keep the record in `High Traffic Sheet` for record-keeping.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bff9188c-5e62-4219-b75d-30f8fa5739ce",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1344,
        176
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 256,
        "content": "## Create Log & Create Task\n\nThis node is store all daily metrics for tracking and historical analysis. It keep all records in `Daily Traffic Sheet` for help marketing or analytics teams to monitor traffic drops efficiently.\n\nOnce records are stored to Google Sheet additionally it creates the task on ClickUp for more professionally to notify the dedicated teams to notify the metrics\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d31409c3-6e03-4ddd-9abc-5aed20c55450",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Send email to marketing team",
            "type": "main",
            "index": 0
          },
          {
            "node": "Add log to Less Traffic",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Add log to High Traffic Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculator": {
      "ai_tool": [
        [
          {
            "node": "Generate AI Summary",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Today's Report": {
      "main": [
        [
          {
            "node": "Normalize & Convert Types",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Today's Report",
            "type": "main",
            "index": 0
          },
          {
            "node": "Yesterday's Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Yesterday's Report": {
      "main": [
        [
          {
            "node": "Normalize & Convert Types1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate AI Summary": {
      "main": [
        [
          {
            "node": "Format Message for WhatsApp / Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Percent Changes": {
      "main": [
        [
          {
            "node": "Add Trend Arrows & Low-Traffic Handling",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine Today & Yesterday": {
      "main": [
        [
          {
            "node": "Calculate Percent Changes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize & Convert Types": {
      "main": [
        [
          {
            "node": "Combine Today & Yesterday",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize & Convert Types1": {
      "main": [
        [
          {
            "node": "Combine Today & Yesterday",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Send email to marketing team": {
      "main": [
        []
      ]
    },
    "Append or update row in sheet": {
      "main": [
        [
          {
            "node": "Create a task",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Message for WhatsApp / Email": {
      "main": [
        [
          {
            "node": "Send email to dedicated person",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Trend Arrows & Low-Traffic Handling": {
      "main": [
        [
          {
            "node": "Generate AI Summary",
            "type": "main",
            "index": 0
          },
          {
            "node": "If",
            "type": "main",
            "index": 0
          },
          {
            "node": "Append or update row in sheet",
            "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

The workflow runs automatically every day and collects analytics data for both today and yesterday. It cleans and standardizes both datasets in the same way so they are easy to compare. After that, it measures how performance has changed from one day to the next and interprets…

Source: https://n8n.io/workflows/11786/ — 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 retrieves Google Analytics data from the last 7 days and the same period in the previous year. The data is then prepared by AI as a table, analyzed and provided with a small summary. The

Google Analytics, Email Send, Telegram +2
AI & RAG

This workflow is an AI-powered business intelligence agent designed for founders and business owners. It automatically collects key business metrics, calculates performance KPIs, applies decision logi

Microsoft Sql, Google Analytics, Google Sheets +5
AI & RAG

Automate reminders, follow-ups, and client engagement for your pet grooming business with this simple n8n workflow by Hyrum Hurst, AI Automation Engineer at QuarterSmart. Sends personalized SMS and em

Google Sheets, OpenAI, Twilio +2
AI & RAG

This automation helps small business owners track income and expenses effortlessly, turning scattered emails and WhatsApp messages into structured financial data — all without manual entry.

Gmail, OpenAI, Google Sheets +1
AI & RAG

This workflow runs on a schedule to collect task data from ClickUp and evaluate employee performance using AI. Tasks are analyzed to generate structured summaries, productivity metrics, and KPI scores

ClickUp, OpenAI, Google Sheets