AutomationFlowsEmail & Gmail › Consolidate Daily Google Form Submissions Into One Gmail Recap

Consolidate Daily Google Form Submissions Into One Gmail Recap

ByYassin Zehar @yassinzehar on n8n.io

Receive one clean Gmail recap each day with all Google Forms submissions. The workflow reads your Form-linked Google Sheets, compiles every request submitted today, and sends a single, structured email at your chosen time—keeping your inbox tidy.

Event trigger★★★★☆ complexity6 nodesGmailGoogle Sheets Trigger
Email & Gmail Trigger: Event Nodes: 6 Complexity: ★★★★☆ Added:

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

This workflow follows the Gmail → Googlesheetstrigger 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": "4PkzGnVzhzmFcQas",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Google Form Daily Recap to Email",
  "tags": [
    {
      "id": "5iQR5Cw05Bzz7Aqt",
      "name": "Google",
      "createdAt": "2025-08-02T17:36:32.751Z",
      "updatedAt": "2025-08-02T17:36:32.751Z"
    },
    {
      "id": "PlBq4GrfRsEhR6mN",
      "name": "google form",
      "createdAt": "2025-08-14T09:57:38.641Z",
      "updatedAt": "2025-08-14T09:57:38.641Z"
    },
    {
      "id": "S94PaeZJiPKn5Ei9",
      "name": "gmail",
      "createdAt": "2025-08-14T09:57:18.678Z",
      "updatedAt": "2025-08-14T09:57:18.678Z"
    },
    {
      "id": "Unbn35P90TtJuAQC",
      "name": "email",
      "createdAt": "2025-08-14T09:57:13.394Z",
      "updatedAt": "2025-08-14T09:57:13.394Z"
    },
    {
      "id": "h2TBJOs7feXDIfbL",
      "name": "google sheet",
      "createdAt": "2025-08-14T09:57:22.041Z",
      "updatedAt": "2025-08-14T09:57:22.041Z"
    },
    {
      "id": "rYuINsb3Y1XjrgNv",
      "name": "Productivity",
      "createdAt": "2025-08-02T17:36:49.812Z",
      "updatedAt": "2025-08-02T17:36:49.812Z"
    }
  ],
  "nodes": [
    {
      "id": "1c6d9187-1442-4098-a300-11b22e1183c2",
      "name": "Sum up email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1040,
        0
      ],
      "parameters": {
        "sendTo": "email",
        "message": "={{$json.html}}",
        "options": {},
        "subject": "The requests you received today"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b619b991-d0cd-41be-84f8-3e2a0db82fea",
      "name": "Trigger data for new row",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        416,
        0
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {
          "dataLocationOnSheet": {
            "values": {
              "range": "A1:Z1000",
              "rangeDefinition": "specifyRangeA1"
            }
          }
        },
        "pollTimes": {
          "item": [
            {
              "hour": 17
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "id"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "url"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "0ca891c0-477f-4f23-918e-73b016f2c3b7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -304
      ],
      "parameters": {
        "color": 3,
        "content": "## Required\n\n\n- Google account\n- Google Form\n- Google Sheet linked to the form"
      },
      "typeVersion": 1
    },
    {
      "id": "25843c2b-29e3-4bcd-8922-f25f8f903200",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        -304
      ],
      "parameters": {
        "color": 2,
        "width": 416,
        "height": 848,
        "content": "## 1.Workflow trigger et data gathering\n\nThe workflow is **triggered automatically** everyday at 5pm. \n\nHow to setup:\n- Set up your Google form and link it to a google sheet\n- link the google sheet to this workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "804f4951-61b5-4fa1-a959-66a92ce525b5",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        -304
      ],
      "parameters": {
        "color": 4,
        "width": 560,
        "height": 848,
        "content": "## 2. Send the email\n\nThe code node, will create the message and gather all the informations wanted about the row added during the day and will list them (row newly added). So a full sum um will be sent in one message only.\n\n\nHow to setup:\n- Connect with your Gmail account credentials."
      },
      "typeVersion": 1
    },
    {
      "id": "d889b4e6-7b66-4272-92a1-406771c5803b",
      "name": "Generate the email",
      "type": "n8n-nodes-base.code",
      "position": [
        832,
        0
      ],
      "parameters": {
        "jsCode": "const rows = $input.all().map(i => i.json);\n\n// helper: get eh first existing key\nconst pick = (obj, keys) => {\n  for (const k of keys) if (k in obj && obj[k] != null && obj[k] !== '') return obj[k];\n  return undefined;\n};\n\nconst categories = {};\nfor (const row of rows) {\n  const category = pick(row, ['Cat\u00e9gorie', 'Category']) || 'Non class\u00e9';\n  const question = pick(row, ['Question', 'Please write your request', 'Please write your re', 'Request', 'Message']) || '(no question)';\n  const from     = pick(row, ['Nom', 'Name', 'Full Name', 'Adresse e-mail', 'Email Address', 'Email']) || 'Anonymous';\n\n  if (!categories[category]) categories[category] = [];\n  categories[category].push({ question, from });\n}\n\nlet html = `<h2>\ud83d\udcec Questions of the day received (${rows.length})</h2>`;\nfor (const [cat, items] of Object.entries(categories)) {\n  html += `<h3>${cat} (${items.length})</h3><ul>`;\n  for (const it of items) {\n    html += `<li><strong>${it.from}</strong><br>${it.question}</li>`;\n  }\n  html += `</ul>`;\n}\n\nreturn [{ json: { html, count: rows.length } }];\n"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "0eeda259-9205-4ec9-8dcb-f39e515f579a",
  "connections": {
    "Generate the email": {
      "main": [
        [
          {
            "node": "Sum up email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger data for new row": {
      "main": [
        [
          {
            "node": "Generate the email",
            "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

Receive one clean Gmail recap each day with all Google Forms submissions. The workflow reads your Form-linked Google Sheets, compiles every request submitted today, and sends a single, structured email at your chosen time—keeping your inbox tidy.

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

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

This workflow sends an instant email alert when a task in a Google Sheet is marked as Urgent, and then sends a Telegram reminder notification after 2 hours if the task still hasn’t been updated. Then

Gmail, Google Sheets Trigger, Google Sheets +2
Email & Gmail

Workflow starts from a manual trigger or form submission with project details. It extracts key input data like client name, email, project type, deadline, and brand folder (optional). A Google Drive f

Google Drive, Slack, Gmail +1
Email & Gmail

Get a single Gmail notification immediately whenever someone submits your Google Forms. The workflow watches the Form-linked Google Sheets for new rows and sends a clean, readable email within about a

Google Sheets Trigger, Gmail
Email & Gmail

Transform your Google Form into an intelligent customer support system that automatically analyzes, prioritizes, and responds to every inquiry with AI-powered personalization.

Google Sheets Trigger, OpenAI, Gmail +2
Email & Gmail

This workflow runs every Monday at 8 AM and automatically monitors your Jira project, measures progress against the active sprint, and delivers a structured report to stakeholders — with zero manual e

Postgres, Jira, N8N Nodes Htmlcsstopdf +1