Gmail Inbox Operations Digest: Open Threads + Calendar Load → Google Sheets → Slack
Every weekday at 7 AM: pull every unanswered Gmail thread older than 24h, count your meeting load from Google Calendar, and drop a structured ops digest into Slack before you've touched your inbox.
The stack in the order it runs — data flows from the source through to where it lands.
Founders operating solo or with a team of two lose 30–60 minutes every morning doing manual triage — open Gmail, scroll for unread threads, switch to Calendar to see how fragmented the day is, try to mentally prioritize. That context-switching is the tax. This workflow pays it for you and surfaces the output in Slack where your day already starts.
Gmail API's 'users.threads.list' with a query filter gives you exactly the threads that need attention — nothing from Promotions, nothing social, nothing younger than a day. Google Calendar API's 'events.list' gives you a structured schedule with computable gaps. The combination tells you two things at once: what's waiting on you, and how much uninterrupted time you actually have to act on it.
Google Sheets is in this stack for one reason: pattern detection. A single morning's data is useful. Four weeks of data tells you that you average 8 unanswered threads on Mondays, or that Wednesdays run 4.5 hours of meetings and you're effectively unavailable for async work. You won't see that without the history. The log is where the compounding value lives.
Two things to know before you build. First, this is a personal automation — Slack delivery should go to your own DM or a private channel you own, not a public team channel. Second, if you're on Outlook instead of Gmail, the API shape changes: use Microsoft Graph API ('/me/messages' and '/me/calendar/events') with OAuth2, but the rest of the workflow is identical. And skip the optional Claude narrative layer if any of your Gmail threads contain sensitive client information — don't send email subject lines to an external API without thinking through your confidentiality obligations.
The stack (5)
Calendar with a programmable API.
Calendar events drive reminders, prep docs, and follow-ups automatically.
The universal data scratchpad.
Still the fastest place to land tabular data everyone can read.
How it runs
- 1
Create a weekday-only Schedule Trigger
In n8n, create a workflow with a Schedule Trigger set to cron '0 7 * * 1-5' — 7 AM, Monday through Friday only. Shift the hour if you want a different time. The one rule: it should run before you open your laptop, not after. You want this waiting for you, not trailing behind you.
- 2
Query Gmail for unanswered threads via HTTP Request
Add an HTTP Request node pointed at 'https://gmail.googleapis.com/gmail/v1/users/me/threads'. Auth: OAuth2 using your Google account credentials configured in n8n's Google OAuth2 credentials. Query params: 'q' = 'is:unread -label:promotions -label:social -label:updates older_than:1d', 'maxResults' = 20. That call returns thread IDs. For each ID, make a second HTTP Request to 'https://gmail.googleapis.com/gmail/v1/users/me/threads/{id}?format=metadata&metadataHeaders=Subject&metadataHeaders=From' to pull subject and sender. Use an n8n Split In Batches node to process those lookups without hitting rate limits.
- 3
Query Google Calendar for today's events
Add an HTTP Request node to 'https://www.googleapis.com/calendar/v3/calendars/primary/events'. Params: 'timeMin' = today 00:00:00 UTC in RFC3339 format, 'timeMax' = today 23:59:59 UTC, 'singleEvents' = true, 'orderBy' = 'startTime'. From the response, compute four values: meeting_count (total events), total_meeting_minutes (sum of end minus start for each event), first_meeting_time (earliest start), and longest_gap_minutes (the largest gap between consecutive meetings — that's your deep work window). Filter out all-day events — those have a 'date' field instead of 'dateTime' in the start object. Drop them.
- 4
Build a combined ops summary in a Code node
Add a Code node that merges both API results into a single object: { date, unanswered_thread_count, oldest_unanswered_sender, oldest_unanswered_subject, thread_list (array of {from, subject, age_hours}), meeting_count, total_meeting_minutes, first_meeting_time, deep_work_window_minutes, deep_work_start_time }. Sort thread_list by age descending — oldest unanswered email first, that's the most urgent. Cap thread_list at 5 items for the Slack digest.
- 5
Append to Google Sheets daily log
Add a Google Sheets 'Append Row' node targeting your 'Daily Ops Log' tab. Store five columns: Date, Unanswered Thread Count, Meeting Count, Total Meeting Minutes, Deep Work Window Minutes. After 4 weeks of data, patterns surface — things like 'I average 8 unanswered threads on Mondays' or 'Wednesdays have 4.5h of meetings, I'm unavailable for async work.' You won't see any of that without the log.
- 6
Post digest to your Slack DM or private channel
Add a Slack 'Send Message' node. Target your own Slack user ID for a DM, or a private channel like #yogesh-ops. Message structure: header '🌅 Morning Ops Brief — [Day, Date]', then two sections — (1) '📧 Email: N unanswered threads — oldest from [sender] ([age]h ago)' followed by a bullet list of the top 5 thread subjects; (2) '📅 Calendar: N meetings today ([X] hours) — first at [time], best deep work window: [duration] starting [time]'. Keep the whole message under 20 lines. If it's longer, you're showing too much.
- 7
Add a meeting overload warning
After the digest Slack node, add an IF node: if total_meeting_minutes > 240 (4 hours of meetings), post a follow-up message in the same thread: '⚠️ Heavy meeting day — consider declining or shortening one meeting to protect focus time.' Four hours is the threshold where most operators lose the ability to do deep product work. Adjust it to your own baseline — but have a threshold. Without it, reactive days become the default and you won't notice until it's a habit.
Want me to build this for you instead?
Product Audit and CTO Mode run out of this same thinking. If you’re reading this thinking “I want this, but in my product” — let’s talk.
See servicesMore like this
Google Analytics 4 + HubSpot Lifecycle Stage: Weekly Acquisition-Quality Digest to Slack via Pipedream with Claude Narrative
Stop reporting traffic numbers. Report whether the traffic you paid for last week actually became pipeline — with a one-paragraph executive summary written by Claude.
Gmail Thread Aging + Stripe Invoice Overdue: Unified AR Follow-Up Digest to Slack via Zapier
Surface overdue Stripe invoices and the exact age of your last Gmail thread with that customer — every morning at 8:30, automatically — so AR follow-up stops living in someone's head.
Outlook Calendar Load + HubSpot Deal Velocity: Weekly Ops Digest to Microsoft Teams
Every Monday at 07:30, your revenue team gets one Teams card: last week's deal pipeline movement next to each rep's actual meeting load — so you stop guessing whether low close rates are a pipeline problem or a capacity problem.