AutomationFlowsEmail & Gmail › Create a Daily Digest From Gmail, Rss, and Todoist

Create a Daily Digest From Gmail, Rss, and Todoist

ByAI Incarnation @ai-incarnation on n8n.io

This workflow is designed to automatically generate a daily digest by aggregating information from your Gmail, RSS feeds, and Todoist. The digest summarizes your latest emails, top news headlines, and pending tasks, then sends a beautifully formatted email directly to your…

Cron / scheduled trigger★★★★☆ complexity7 nodesRSS Feed ReadGmailTodoist
Email & Gmail Trigger: Cron / scheduled Nodes: 7 Complexity: ★★★★☆ Added:

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

This workflow follows the Gmail → RSS Feed Read 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": "Glb4VNoQI44GT0p9",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "My workflow 4",
  "tags": [],
  "nodes": [
    {
      "id": "909a08a4-4cec-4987-9379-d4cdc2d92a53",
      "name": "RSS Feed: Times of India",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        680,
        240
      ],
      "parameters": {
        "url": "https://timesofindia.indiatimes.com/rssfeeds/-2128936835.cms",
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "471cc8ab-0074-4e25-b952-1899574398a9",
      "name": "Gmail: Fetch Emails",
      "type": "n8n-nodes-base.gmail",
      "position": [
        700,
        440
      ],
      "parameters": {
        "filters": {},
        "operation": "getAll"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "07a33739-0181-4ead-87bd-c1f0c3fc4999",
      "name": "TodoList: Fetch Tasks",
      "type": "n8n-nodes-base.todoist",
      "position": [
        700,
        620
      ],
      "parameters": {
        "limit": 5,
        "filters": {},
        "operation": "getAll"
      },
      "credentials": {
        "todoistApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "af295aad-f7e7-4d38-80e5-b79b79637b5f",
      "name": "Format Digest: Merge & Style Data",
      "type": "n8n-nodes-base.code",
      "position": [
        1280,
        440
      ],
      "parameters": {
        "jsCode": "const newsItems = $input.all().map(item => item.json);\nconst emails = $(\"Gmail: Fetch Emails\").all().map(item => item.json);\nconst tasks = $(\"TodoList: Fetch Tasks\").all().map(item => item.json);\n\n// Select top 5 items from each\nconst topNews = newsItems.slice(0, 5).map(item => ({\n  title: item.title,\n  link: item.link\n}));\n\nconst latestEmails = emails.slice(0, 5).map(item => ({\n  subject: item.Subject,\n  snippet: item.snippet\n}));\n\nconst topTasks = tasks.slice(0, 5).map(task => ({\n  content: task.content,\n  url: task.url,\n  emoji: task.emoji || '\ud83d\udd34',\n  due: task.due\n}));\n\n// Create the final JSON object with email subject and a formatted email body with inline CSS\nconst result = {\n  meta: {\n    generated_at: new Date().toISOString(),\n    time_emoji: \"\ud83c\udf1e\"\n  },\n  email: {\n    subject: `\ud83c\udf1e Daily Digest \u2022 \ud83d\udccb ${topTasks.length} Tasks \u26a0\ufe0f \u2022 \ud83d\udcf0 ${topNews.length} News Updates`,\n    body: `\n      <div style=\"max-width:600px; margin:0 auto; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; color:#333; background:#f4f7f9; padding:20px; border:1px solid #e1e8ed; border-radius:8px;\">\n         <div style=\"text-align:center; padding-bottom:20px;\">\n             <h1 style=\"margin:0; font-size:28px; color:#0073e6;\">Daily Digest</h1>\n             <p style=\"margin:10px 0 0; font-size:16px; color:#666;\">Your automated daily summary</p>\n         </div>\n         <hr style=\"border:none; border-top:1px solid #ddd; margin:20px 0;\">\n         <div style=\"margin-bottom:20px;\">\n             <h2 style=\"font-size:20px; color:#0073e6; margin-bottom:10px;\">Tasks (${topTasks.length})</h2>\n             <ul style=\"list-style:none; padding:0;\">\n               ${topTasks.map(task => `\n                 <li style=\"margin-bottom:10px; padding:10px; background:#fff; border:1px solid #e1e8ed; border-radius:4px;\">\n                   <span style=\"font-size:18px; margin-right:10px;\">${task.emoji}</span> \n                   <span style=\"font-size:16px;\">${task.content}</span> \n                   <span style=\"color:#999; font-size:14px; margin-left:5px;\">(Due: ${task.due})</span>\n                   <a href=\"${task.url}\" style=\"text-decoration:none; color:#0073e6; float:right;\">View Task</a>\n                 </li>\n               `).join('')}\n             </ul>\n         </div>\n         <div style=\"margin-bottom:20px;\">\n             <h2 style=\"font-size:20px; color:#0073e6; margin-bottom:10px;\">News (${topNews.length})</h2>\n             <ul style=\"list-style:none; padding:0;\">\n               ${topNews.map(news => `\n                 <li style=\"margin-bottom:10px; padding:10px; background:#fff; border:1px solid #e1e8ed; border-radius:4px;\">\n                   <a href=\"${news.link}\" style=\"text-decoration:none; font-size:16px; color:#0073e6;\">${news.title}</a>\n                 </li>\n               `).join('')}\n             </ul>\n         </div>\n         <div style=\"margin-bottom:20px;\">\n             <h2 style=\"font-size:20px; color:#0073e6; margin-bottom:10px;\">Emails (${latestEmails.length})</h2>\n             <ul style=\"list-style:none; padding:0;\">\n               ${latestEmails.map(email => `\n                 <li style=\"margin-bottom:10px; padding:10px; background:#fff; border:1px solid #e1e8ed; border-radius:4px;\">\n                   <strong style=\"font-size:16px; color:#0073e6;\">${email.subject}</strong>\n                   <p style=\"margin:5px 0 0; font-size:14px; color:#666;\">${email.snippet}</p>\n                 </li>\n               `).join('')}\n             </ul>\n         </div>\n         <div style=\"text-align:center; font-size:12px; color:#aaa; margin-top:20px;\">\n             <p>Digest generated at: ${new Date().toLocaleString()}</p>\n         </div>\n      </div>\n    `\n  },\n  tasks: topTasks,\n  news: topNews,\n  emails: latestEmails\n};\n\nreturn [{ json: result }];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "5399bee1-d0e7-4ed7-af7f-d0ddccb00b4d",
      "name": "Gmail: Send Digest",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1540,
        440
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "={{ $json.email.body }}",
        "options": {},
        "subject": "={{ $json.email.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "9f398bc2-e84c-4df4-8958-aaa1d7c2ed37",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        60
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9984d3c0-7469-4b79-8d31-1a06b8dd23b6",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1020,
        440
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "550f65e6-68ec-449a-9fb5-241acba42455",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Format Digest: Merge & Style Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "RSS Feed: Times of India",
            "type": "main",
            "index": 0
          },
          {
            "node": "Gmail: Fetch Emails",
            "type": "main",
            "index": 0
          },
          {
            "node": "TodoList: Fetch Tasks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail: Fetch Emails": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "TodoList: Fetch Tasks": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "RSS Feed: Times of India": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Digest: Merge & Style Data": {
      "main": [
        [
          {
            "node": "Gmail: Send Digest",
            "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 is designed to automatically generate a daily digest by aggregating information from your Gmail, RSS feeds, and Todoist. The digest summarizes your latest emails, top news headlines, and pending tasks, then sends a beautifully formatted email directly to your…

Source: https://n8n.io/workflows/3134/ — 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 is an automated invoice payment tracking and reminder system for the Polish accounting service iFirma.pl. It monitors unpaid and overdue invoices, then automatically sends escalating rem

HTTP Request, Stop And Error, Slack +1
Email & Gmail

Automatically extract structured information from emails using AI-powered document analysis. This workflow processes emails from specified domains, classifies them by type, and extracts structured dat

Gmail, HTTP Request, AWS S3 +1
Email & Gmail

This weekly workflow helps you stay on top of SEO visibility losses by automatically detecting when your previously strong keywords fall out of Google’s top 10 results.

N8N Nodes Dataforseo, Google Sheets, Gmail
Email & Gmail

What This Flow Does

Gmail, Google Sheets, HTTP Request +1
Email & Gmail

This n8n workflow sends personalized outreach emails automatically while enforcing strict safety rules such as email validation, spam checks, daily limits, and human-like delays.

Google Drive, Google Sheets, Gmail