Gmail + Google Calendar to Slack, one morning brief
Your day starts in three places. Gmail, Google Calendar, and whatever Slack channel your team uses to coordinate. The problem is you still have to manually stitch it all together, and you usually realize what you missed after it matters.
This Slack morning brief automation hits marketing managers hard, but agency owners and ops leads feel it too. You walk in and instantly know which email threads need attention and which meetings are actually happening today.
This guide breaks down what the workflow does, what you need to connect, and how to think about customizing it so it fits your team instead of forcing new habits.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Gmail + Google Calendar to Slack, one morning brief
flowchart LR
subgraph sg0["AI Agent Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Cron", pos: "b", h: 48 }
n1@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n3@{ icon: "mdi:location-exit", form: "rounded", label: "Get many events in Google Ca..", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "AI Agent1", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Get weekly unread emails", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Get Names, emails and subject", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Restructure the data from sp.."]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Filter the emails"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Restructure the code from th.."]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Restructure the code from AI.."]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Append mails and events "]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send a message"]
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Restructure the code into sl.."]
n0 --> n5
n0 --> n2
n2 --> n10
n4 --> n9
n8 --> n4
n11 --> n13
n5 --> n6
n1 -.-> n2
n1 -.-> n4
n6 --> n7
n3 -.-> n2
n10 --> n11
n13 --> n12
n9 --> n11
n7 --> n8
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2,n4 ai
class n1 aiModel
class n6 database
class n7,n8,n9,n10,n13 code
classDef customIcon fill:none,stroke:none
class n7,n8,n9,n10,n11,n12,n13 customIcon
Why This Matters: Your “Morning Scan” Is a Trap
The “quick check” routine sounds harmless: skim unread emails, glance at today’s calendar, then jump into work. But it quietly steals focus. You bounce between tabs, open a thread, forget why you opened it, and miss the meeting that was buried under three invites. Worse, it’s inconsistent. Some mornings you’re thorough. Other mornings you’re reacting to pings from teammates who saw something you didn’t. That whiplash creates mistakes, slow replies, and a day that feels behind before it even starts.
It adds up fast. Here’s where it usually breaks down.
- You read the wrong emails first because inbox order is not priority order.
- Calendar changes happen overnight, so yesterday’s plan is already outdated.
- Important senders get lost in noise, especially when you’re copied on everything.
- Even if you “check,” you still don’t share context with the team, so people duplicate work.
What You’ll Build: A Daily Slack Briefing From Gmail + Calendar
This workflow runs automatically on a morning schedule and posts one clean briefing to Slack. First it pulls unread Gmail messages from the last 7 days, then compares them against a filter list you maintain in Google Sheets (names, email addresses, and subject keywords). Only the emails you care about make the cut. In parallel, it fetches today’s Google Calendar events and summarizes what’s coming up. Finally, an AI agent (Gemini in this workflow) turns both piles of raw data into concise bullet summaries, merges them, formats the message, and posts it to the Slack channel you choose. You start the day with clarity instead of scavenger-hunting.
The workflow begins with a scheduled Cron trigger. From there, Gmail and Google Calendar are summarized separately, then combined into one Slack-ready payload. The end result is a single message your team can scan in under a minute.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you start each day by scanning Gmail (about 20 minutes) and your calendar (another 10 minutes), then you paste highlights into Slack (5 more). That’s roughly 35 minutes per weekday. With this workflow, you spend maybe 5 minutes maintaining your Google Sheets filter list when needed, and the daily “scan” becomes a Slack message delivered automatically. Over a normal week, that’s close to 3 hours back, plus fewer dropped threads.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Gmail for fetching unread emails from inbox.
- Google Calendar to pull today’s scheduled events.
- Google Sheets to store the filter list.
- Slack to deliver the morning briefing to a channel.
- Gemini AI credentials (get it from Google AI Studio / your Gemini provider account).
Skill level: Beginner. You will connect accounts, choose a Slack channel, and edit one Google Sheet.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A scheduled morning trigger kicks everything off. The Cron node runs at your chosen time (like 8:30am on weekdays), so nobody has to remember to “run the report.”
Your inbox gets collected, then trimmed down to what matters. The workflow retrieves unread Gmail messages from the last 7 days, pulls your filter list from Google Sheets, normalizes the sheet data, and applies the rules so you’re not summarizing junk.
Your day’s meetings are summarized separately. Google Calendar events for the current day are fetched and formatted into readable blocks, then an AI agent turns it into a quick digest you can scan.
Everything is merged and posted to Slack. Email summary + calendar summary get combined, a Slack payload is assembled, and a single message lands in the channel your team already watches.
You can easily modify the filter logic to match your workflow (priority clients, specific internal threads, or certain subject patterns). See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Morning Trigger
Set the schedule that starts the workflow each morning and note the parallel branch execution.
- Add and open Scheduled Morning Trigger.
- Set Trigger Times to run at
08:00(hour8). - Confirm the execution path: Scheduled Morning Trigger outputs to both Retrieve Unread Emails and Calendar Summary Agent in parallel.
Step 2: Connect Gmail and Google Sheets
Configure email retrieval and load the filter list from Google Sheets to control which emails are summarized.
- Open Retrieve Unread Emails and set Operation to
getAll, Limit to100, and Simple tofalse. - In Filters, set Label IDs to
INBOX, Read Status tounread, and Received After to{{ $today.minus({ days: 7 }).toISODate() }}. - Open Pull Filter List and select the spreadsheet by setting Document ID to
=and choosing a Sheet Name. - Review Normalize Sheet Data to confirm it consolidates columns into
emails,name, andsubjects.
Step 3: Set Up Calendar Summarization with AI
Configure the AI calendar summary path that uses Gemini and the calendar tool.
- Open Gemini Chat Engine and connect it as the language model for both Calendar Summary Agent and Email Summary Agent.
- In Calendar Summary Agent, keep the Prompt Type as
defineand ensure the summary instructions match the current Text field. - Configure Fetch Calendar Events with Operation set to
getAll, Time Min to{{ $today.toISO() }}, and Time Max to{{ $today.plus({days: 1}).toISO() }}. - Verify that Calendar Summary Agent outputs to Format Calendar Blocks.
Step 4: Filter and Summarize Emails with AI
Use the filter list to select emails, summarize them with AI, and format for Slack blocks.
- In Apply Email Filter, keep the JavaScript logic that filters by blocked
emails,subjects, andnamefrom Normalize Sheet Data and references Retrieve Unread Emails. - Open Email Summary Agent and confirm the Text prompt generates JSON summaries using
{{ $json.text }},{{ $json.from.value[0].name }}, and{{ $json.subject }}. - Review Format Email Blocks to ensure it parses JSON and builds Slack
blocks.
Step 5: Assemble and Send the Slack Digest
Merge the email and calendar summaries, build the final Slack payload, and post the message.
- Confirm Format Email Blocks and Format Calendar Blocks both feed into Combine Summaries in parallel.
- Open Assemble Slack Payload and verify it flattens all incoming
blocksinto a single array. - In Post Slack Message, set Message Type to
block, choose the Channel, and set Blocks UI to{{ '{ "blocks": ' + JSON.stringify($json.blocks) + ' }' }}.
Step 6: Test and Activate Your Workflow
Validate the workflow with a manual run, then enable the schedule for production use.
- Click Execute Workflow to run the flow manually from Scheduled Morning Trigger.
- Verify that Post Slack Message sends a message containing both email and calendar Slack blocks.
- If the output is correct, toggle the workflow to Active to run daily at
08:00.
Troubleshooting Tips
- Google credentials (Gmail, Google Calendar, and Google Sheets) can expire or need specific permissions. If things break, check the n8n Credentials section and re-auth the Google account first.
- If you’re using AI summarization with external models, processing times vary. Bump up any wait/timeout settings (or simplify the prompt) if downstream nodes fail because the summary came back empty.
- Slack posts can fail quietly when the channel ID is wrong or the bot isn’t invited. Double-check the channel ID in the Slack node and confirm the app has permission to post in that channel.
Quick Answers
About 30 minutes if your Google and Slack accounts are ready.
No. You’ll connect credentials and edit a Google Sheet filter list. The built-in code steps are already included in the workflow.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Gemini/OpenAI-style model usage, which is usually a few cents per day at typical volumes.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. Most people customize the Google Sheets filter columns (Name, Email, Subject) and tweak the “Apply Email Filter” logic to match how their inbox is structured. You can also adjust the AI agent prompt so the summary comes out in your preferred format, like “Top 5 threads” plus “Meetings that require prep.” If you want to send the brief to a different place, swap the Slack node for email or Telegram while keeping the same summaries.
Usually the bot isn’t invited to the channel, or the channel ID in the “Post Slack Message” node is wrong. Reconnect the Slack credential in n8n, then confirm the app has permission to post where you’re sending the brief. If it works in one channel but not another, it’s almost always a channel access issue.
A normal inbox volume is fine, but if you’re trying to summarize hundreds of emails at once, you’ll want stricter filters and shorter prompts.
For this use case, n8n is often the better fit because the workflow has branching, filtering, and formatting steps that get clunky (and expensive) in simpler tools. You can keep everything in one place: pull from Gmail, read Google Sheets, summarize with an AI agent, then format a Slack-ready payload. Self-hosting also matters if you want unlimited runs without worrying about task counts. Zapier or Make can still work if you only need “calendar events → Slack message” without the filtering and summarization. Talk to an automation expert if you want help choosing.
Once it’s live, your day starts with one message and a clear plan. The workflow handles the scanning so you can get into real work faster.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.