AutomationFlowsAI & RAG › Automate Daily Email Digest with Gmail and Gpt Summary Sent Every Afternoon

Automate Daily Email Digest with Gmail and Gpt Summary Sent Every Afternoon

ByPiotr Sobolewski @piotrsobolewski on n8n.io

How it works

Cron / scheduled trigger★★★★☆ complexityAI-powered6 nodesGmailOpenAI
AI & RAG Trigger: Cron / scheduled Nodes: 6 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Gmail → OpenAI 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
{
  "nodes": [
    {
      "name": "Afternoon Trigger (4 PM)",
      "type": "n8n-nodes-base.cron",
      "notes": {
        "text": "### 1. Trigger in the Afternoon\n\nThis `Cron` node is configured to run automatically every **day at 4:00 PM (16:00)** based on your n8n server's local time zone.\n\n**To change the schedule:** Adjust the 'Hour' and 'Minute' fields to your preferred time.",
        "position": "right"
      },
      "position": [
        240,
        300
      ],
      "parameters": {
        "mode": "everyDay",
        "value": {
          "hour": [
            16
          ],
          "minute": [
            0
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "name": "Calculate Today's Dates",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 2. Calculate Today's Dates\n\nThis `Function` node calculates the start of the current day (midnight) and the current time, which will be used to fetch emails received *today* up to the moment the workflow runs.\n\n**Output:** It generates two fields:\n* `minDate`: The ISO string for today's midnight (00:00:00).\n* `nowDate`: The ISO string for the current time (when the workflow runs).\n\n**No configuration needed here**; it automatically determines the dates.",
        "position": "right"
      },
      "position": [
        480,
        300
      ],
      "parameters": {
        "options": {},
        "function": "const DateTime = this.getNodeParameter('DateTime');\n\nconst now = DateTime.now();\n\n// Calculate the start of the current day (e.g., today at 00:00:00)\nconst startOfDay = now.startOf('day');\n\nreturn [{ json: { \n  minDate: startOfDay.toISO(),\n  nowDate: now.toISO()\n} }];"
      },
      "typeVersion": 1
    },
    {
      "name": "Get Today's Emails (Gmail)",
      "type": "n8n-nodes-base.gmail",
      "notes": {
        "text": "### 3. Get Today's Emails\n\nThis `Gmail` node fetches emails received in your inbox since the beginning of the current day until the workflow is triggered.\n\n**Setup:**\n1.  **Gmail Credential:** Click on 'Credentials' and select 'New Credential'. Choose 'Gmail API'. Follow the n8n instructions to connect your Gmail account.\n2.  **Query:** The 'Query' field uses Gmail's search operators (`after:` and `before:`) combined with the dates calculated in the previous node to ensure it only fetches today's emails.\n3.  **Max Results:** Adjust `Max Results` if you typically receive many more than 20 emails in a day that you'd want summarized. (Be mindful of AI token limits for very large inputs).\n\n**Important:** Ensure your Gmail API has the necessary read scope (`https://www.googleapis.com/auth/gmail.readonly` or full access).",
        "position": "right"
      },
      "position": [
        720,
        300
      ],
      "parameters": {
        "query": "after:{{ $json.minDate }} before:{{ $json.nowDate }}",
        "options": {
          "maxResults": 20
        },
        "emailType": "inbox",
        "operation": "getAll"
      },
      "credentials": {
        "gmailApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "name": "Combine Email Content",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 4. Combine Email Content\n\nThis `Function` node takes all the fetched emails and combines their sender, subject, and snippet (a short preview) into a single text string.\n\n**Purpose:** This consolidated text string will then be fed into the AI summarization node.\n\n**No configuration needed here**; it's pre-programmed to format your email data.",
        "position": "right"
      },
      "position": [
        960,
        300
      ],
      "parameters": {
        "options": {},
        "function": "let emailContent = \"\";\n\nif (items.length === 0) {\n  emailContent = \"No new emails received today.\";\n} else {\n  emailContent = \"Today's Emails Summary:\\n\\n\";\n  for (const item of items) {\n    const email = item.json;\n    const sender = email.payload.headers.find(h => h.name === 'From').value || 'Unknown Sender';\n    const subject = email.payload.headers.find(h => h.name === 'Subject').value || 'No Subject';\n    const snippet = email.snippet || 'No snippet available.';\n\n    emailContent += `From: ${sender}\\nSubject: ${subject}\\nSnippet: ${snippet}\\n---\\n`;\n  }\n}\n\nreturn [{ json: { combinedEmails: emailContent } }];"
      },
      "typeVersion": 1
    },
    {
      "name": "AI: Summarize Emails",
      "type": "n8n-nodes-base.openAi",
      "notes": {
        "text": "### 5. AI: Summarize Emails\n\nThis `OpenAI` node takes the combined email content and generates a high-level summary using artificial intelligence.\n\n**Setup:**\n1.  **OpenAI Credential:** Select your existing OpenAI API Key credential.\n2.  **Model:** You can choose `gpt-3.5-turbo` for cost-effectiveness or `gpt-4o` for potentially better and more nuanced summaries.\n3.  **Prompt:** The system prompt instructs the AI on how to summarize the emails, focusing on key topics and action items.\n\n**Output:** The AI-generated summary will be in `{{ $node[\"AI: Summarize Emails\"].json.choices[0].message.content }}`.",
        "position": "right"
      },
      "position": [
        1200,
        300
      ],
      "parameters": {
        "model": "gpt-3.5-turbo",
        "options": {},
        "messages": [
          {
            "role": "system",
            "content": "You are an AI assistant specialized in summarizing daily email communications. Your task is to read the provided email subjects and snippets, identify the most important topics and action items, and create a concise, readable summary. Group related emails if possible. If there are no emails, state that clearly."
          },
          {
            "role": "user",
            "content": "Summarize the following daily email content:\n\n{{ $json.combinedEmails }}"
          }
        ]
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Send Summary Email",
      "type": "n8n-nodes-base.gmail",
      "notes": {
        "text": "### 6. Send Summary Email\n\nThis `Gmail` node sends the final AI-generated summary to your specified email address.\n\n**Setup:**\n1.  **Gmail Credential:** Select your existing Gmail API credential.\n2.  **From Email:** Enter your Gmail address (this must be the same account you authenticated).\n3.  **To Email:** **IMPORTANT: Change `YOUR_RECIPIENT_EMAIL@example.com` to your actual email address!**\n4.  **Subject:** Includes the current date for easy reference.\n5.  **Text:** The email body contains the summary generated by the AI.\n\nAfter setting up, you can test by clicking 'Execute Workflow' (from the 'Afternoon Trigger' node) to receive an immediate summary of today's emails.",
        "position": "right"
      },
      "position": [
        1440,
        300
      ],
      "parameters": {
        "text": "Hello!\n\nHere's your daily email summary from n8n for today:\n\n{{ $node[\"AI: Summarize Emails\"].json.choices[0].message.content }}\n\n---\n\n*This is an automated summary generated by n8n. Please log into your inbox for full details.*",
        "options": {},
        "subject": "Daily Email Summary: {{ DateTime.now().toFormat('cccc, LLLL dd, yyyy') }}",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "gmailApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    }
  ],
  "version": 1,
  "connections": {
    "AI: Summarize Emails": {
      "main": [
        [
          {
            "node": "Send Summary Email",
            "type": "main"
          }
        ]
      ]
    },
    "Combine Email Content": {
      "main": [
        [
          {
            "node": "AI: Summarize Emails",
            "type": "main"
          }
        ]
      ]
    },
    "Calculate Today's Dates": {
      "main": [
        [
          {
            "node": "Get Today's Emails (Gmail)",
            "type": "main"
          }
        ]
      ]
    },
    "Afternoon Trigger (4 PM)": {
      "main": [
        [
          {
            "node": "Calculate Today's Dates",
            "type": "main"
          }
        ]
      ]
    },
    "Get Today's Emails (Gmail)": {
      "main": [
        [
          {
            "node": "Combine Email Content",
            "type": "main"
          }
        ]
      ]
    }
  }
}

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

How it works

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

Personalized Outreach & Follow-Up - Phase 2. Uses googleSheets, openAi, gmail, gmailTrigger. Scheduled trigger; 59 nodes.

Google Sheets, OpenAI, Gmail +2
AI & RAG

A scheduled process aggregates content from eight distinct data sources and standardizes all inputs into a unified format. AI models perform sentiment scoring, detect conspiracy or misinformation sign

HTTP Request, OpenAI, Postgres +2
AI & RAG

This workflow monitors filesystem sync and backup jobs by validating their execution logs, not by running or inspecting the jobs themselves.

Google Cloud Storage, Gmail, GitHub +2
AI & RAG

This advanced workflow automates brand monitoring and media coverage tracking for musicians, bands, and music labels. The system uses multiple search queries (dorky) to discover mentions across the we

Google Sheets, Gmail, @Brave/N8N Nodes Brave Search +1
AI & RAG

Stop wasting billable hours on manual time-tracking. AutoTimesheet Pro uses AI to collect emails, meetings, and GitHub work, then writes a clean timesheet straight into Google Sheets. Perfect for deve

Google Calendar, Gmail, GitHub +3