Google Calendar + Slack: meeting briefs ready to use
You open your calendar, see five external meetings, and realize you have zero context. Then you start the scramble: company site, LinkedIn, Google, maybe your CRM. It’s the same last-minute research loop, again.
This hits sales reps hardest, honestly. But account managers prepping renewals and founders running their own pipeline feel it too. Calendar Slack briefs automation gives you a ready-to-use brief in Slack before the day starts, so you stop walking into calls cold.
Below you’ll see exactly what this workflow does, what it replaces, and what you need to get it running reliably.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Calendar + Slack: meeting briefs ready to use
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:location-exit", form: "rounded", label: "Get many events", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n2["<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/>Extract External Company Dom.."]
n3@{ icon: "mdi:web", form: "rounded", label: "Explorium API: Match Business", pos: "b", h: 48 }
n4["<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/>Merge"]
n5@{ icon: "mdi:brain", form: "rounded", label: "Anthropic Chat Model", pos: "b", h: 48 }
n6@{ icon: "mdi:web", form: "rounded", label: "Explorium API: Match Prospect", pos: "b", h: 48 }
n7@{ icon: "mdi:web", form: "rounded", label: "Explorium API: Fetch Busines..", pos: "b", h: 48 }
n8@{ icon: "mdi:brain", form: "rounded", label: "Anthropic Chat Model1", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items2", pos: "b", h: 48 }
n14["<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/>Merge2"]
n15["<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/>Extract External Company Dom.."]
n16@{ icon: "mdi:web", form: "rounded", label: "Explorium API: Match Business1", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items1", pos: "b", h: 48 }
n18@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n19["<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 for External Meetings"]
n20["<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/>Cleans Merge Data Output"]
n21["<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"]
n22["<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/>Create List of All External .."]
n23["<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/>Cleans Enrichment Outputs"]
n24["<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/>Create Company Research Output"]
n25["<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/>Create Attendee Research Out.."]
n26@{ icon: "mdi:robot", form: "rounded", label: "Company Research Agent", pos: "b", h: 48 }
n27@{ icon: "mdi:robot", form: "rounded", label: "Attendee Research Agent", pos: "b", h: 48 }
n28@{ icon: "mdi:web", form: "rounded", label: "Explorium API: Prospect Enrich", pos: "b", h: 48 }
n29@{ icon: "mdi:web", form: "rounded", label: "Explorium API: Business Enrich", pos: "b", h: 48 }
n30@{ icon: "mdi:wrench", form: "rounded", label: "Explorium MCP1", pos: "b", h: 48 }
n31@{ icon: "mdi:wrench", form: "rounded", label: "Explorium MCP", pos: "b", h: 48 }
n9 --> n7
n9 --> n29
n9 --> n1
n10 --> n28
n10 --> n13
n4 --> n20
n14 --> n17
n31 -.-> n26
n30 -.-> n27
n21 --> n17
n0 --> n19
n1 --> n14
n1 --> n2
n17 --> n21
n13 --> n14
n13 --> n15
n18 --> n0
n5 -.-> n26
n8 -.-> n27
n26 --> n24
n27 --> n25
n20 --> n26
n11 -.-> n26
n23 --> n27
n12 -.-> n27
n19 --> n1
n19 --> n22
n3 --> n9
n6 --> n10
n24 --> n1
n29 --> n4
n16 --> n6
n28 --> n23
n25 --> n13
n2 --> n3
n15 --> n16
n7 --> n4
n22 --> n13
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 n18 trigger
class n11,n12,n26,n27 ai
class n5,n8 aiModel
class n30,n31 ai
class n9,n10 decision
class n3,n6,n7,n16,n28,n29 api
class n2,n15,n19,n20,n22,n23,n24,n25 code
class n18 disabled
classDef customIcon fill:none,stroke:none
class n2,n4,n14,n15,n19,n20,n21,n22,n23,n24,n25 customIcon
The Problem: Pre-meeting research steals your morning
Prepping for external meetings sounds simple until you do it every day. One meeting turns into six browser tabs, half-remembered notes, and a “good enough” opener you’re not proud of. Multiply that by a week of demos, partner calls, and renewal conversations, and your mornings become a research treadmill. Worse, the details that actually matter (recent funding, leadership changes, product launches, what the attendee posts about) are the first things to get skipped, because you’re racing the clock.
The friction compounds. Here’s where it breaks down.
- You spend about 15 minutes per meeting just figuring out who’s external and which company they’re from.
- Company research gets done inconsistently, so one rep shows up sharp and another shows up guessing.
- Attendee research is usually a quick LinkedIn skim, which misses signals like recent posts, role changes, or likely pain points.
- Notes live in random places (docs, Slack DMs, browser bookmarks), so there’s no repeatable “this is how we prep” standard.
The Solution: Daily Slack briefs built from your calendar
This workflow runs automatically every morning and turns your day’s calendar into Slack-ready meeting briefs. It pulls today’s events from Google Calendar (or Outlook), filters out internal-only meetings, and focuses only on meetings with external attendees. For each external company domain, it uses Explorium to match the business and enrich it with firmographics, technographics, and recent business events (think funding, partnerships, and product moves). In parallel, it enriches each external attendee by matching their professional profile and pulling contact/profile details plus recent LinkedIn activity. Finally, two AI agents analyze the company and attendee data and assemble a clean, readable brief that lands in Slack before you start your first call.
The workflow starts on a schedule (typically before business hours). From there it splits into two paths: company intelligence for the account context, and attendee intelligence for personalized openers. At the end, it merges everything per meeting and posts one combined brief to Slack, ready to skim.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you have 5 external meetings today. Manually, a realistic routine is about 10 minutes researching the company and another 10 minutes checking attendees (roles, recent posts, quick talking points), so roughly 20 minutes per meeting. That’s around 100 minutes before you’ve even replied to Slack. With this workflow, you spend maybe 5 minutes scanning the Slack briefs, and the rest happens automatically in the background while you do actual work.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Calendar for pulling daily meeting schedules
- Slack to deliver briefs to a channel or DM
- Explorium API key (get it from the Explorium Dashboard)
Skill level: Intermediate. You’ll connect credentials, update your company email domain in the filter node, and test with a real day of meetings.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A morning schedule kicks it off. n8n runs on a recurring schedule (often around 7 AM), so the briefs are waiting before the day gets busy. If you prefer, the same workflow can be triggered on-demand or from a webhook.
Your calendar is scanned for meetings that matter. It pulls events for the current day (plus a buffer window) and filters out internal-only meetings by checking attendee email domains. One important detail: you must set your own company domain in the filter logic so internal attendees don’t slip through.
Company and attendee research run in parallel. For companies, Explorium matches the domain to a business profile, enriches firmographics and technographics, then fetches recent business events. For attendees, Explorium matches each person to a prospect profile and enriches contacts, professional history, and recent LinkedIn posts.
AI turns enrichment into a brief you’ll actually read. Two AI agents analyze and summarize the structured data, then the workflow formats it into a clean output per meeting. Slack receives the final combined brief so you can skim it in a minute and jump into the call with a plan.
You can easily modify the schedule time and the output destination based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Trigger
Set the workflow to run on a schedule so your calendar is checked automatically for upcoming meetings.
- Add and open Scheduled Start.
- Configure the Rule interval to match your desired cadence (e.g., hourly or daily).
- Ensure the node is enabled (it is currently disabled in the workflow).
- Confirm the execution flow starts as Scheduled Start → Retrieve Calendar Events.
Step 2: Connect Google Calendar
Pull upcoming meetings from your calendar so the workflow can research external attendees.
- Open Retrieve Calendar Events.
- Set Operation to
getAll. - Set Time Max to
{{ $now.plus({ day: 0.75 }) }}. - Select the calendar you want to scan in the Calendar field.
- Credential Required: Connect your Google Calendar OAuth2 credentials.
Step 3: Filter External Meetings and Extract Domains
Filter out internal meetings and isolate external attendee domains for enrichment.
- Open Filter External Meetings and replace the internal domain in the code (currently
explorium.ai) with your company domain. - Note that Filter External Meetings outputs to both Iterate Meetings and Assemble Attendee Emails in parallel.
- Open Parse External Domains and confirm it collects unique external company domains.
- Open Assemble Attendee Emails to ensure it collects external attendee emails for downstream enrichment.
- Keep the batch processing in Iterate Meetings and Iterate Attendees enabled to loop through events and attendees.
Step 4: Set Up Company Matching and Enrichment
Match external company domains and enrich firmographic data and events in parallel.
- Open Explorium Match Company and confirm it matches businesses using
{{ $json.company_domain }}. - Review Validate Business Match to ensure the condition checks
{{ $json.matched_businesses[0].business_id }}. - Confirm Validate Business Match outputs to both Explorium Fetch Events and Explorium Business Enrich in parallel.
- Open Explorium Fetch Events and verify Timestamp From
2025-09-01T00:00:00and Timestamp To2025-11-04T17:30:00plus the event types list. - Open Explorium Business Enrich and confirm Enrichment includes
firmographicsandtechnographics. - Keep Combine Company Data and Normalize Company Merge connected to merge events with enrichment output.
Step 5: Set Up Attendee Matching and Enrichment
Match external attendee emails to prospects and enrich profiles for personalized insights.
- Open Extract Attendee Domain to confirm it creates
emailanddomainfields. - Open Explorium Match Company B and verify it matches with
{{ $json.domain }}. - Open Explorium Match Contact and verify it uses
{{ $('Extract Attendee Domain').item.json.email }}and{{ $json.matched_businesses[0].business_id }}. - Confirm Validate Prospect Match checks
{{ $json.matched_prospects[0].prospect_id }}before proceeding. - Open Explorium Prospect Enrich and confirm Enrichment includes
contacts,linkedin_posts, andprofiles. - Keep Normalize Prospect Enrich connected to format structured attendee data for AI analysis.
Step 6: Configure AI Research and Parsing
Generate structured company and attendee briefs using Anthropic models and structured output parsers.
- Open Anthropic Chat Engine and set the Model to
claude-sonnet-4-20250514. - Open Anthropic Chat Engine B and set the Model to
claude-sonnet-4-20250514. - Connect Anthropic Chat Engine as the language model for Company Insight Agent.
- Connect Anthropic Chat Engine B as the language model for Attendee Insight Agent.
- Verify Parse Company Output and Parse Attendee Output are connected as output parsers for their respective agents.
- Confirm Explorium MCP Tool is connected to Company Insight Agent and Explorium MCP Tool B is connected to Attendee Insight Agent.
Step 7: Format Briefs and Send Slack Updates
Format the AI outputs into readable briefs and deliver them to Slack.
- Open Build Company Brief and keep the formatting logic that uses
{{ $('Iterate Meetings').first().json.summary }}for the title. - Open Build Attendee Brief and confirm it pulls the domain from Extract Attendee Domain.
- Ensure Merge Email Domains is in Mode
combinewith advanced merge enabled. - Open Post Slack Update and set Text to
{{ $json.doc_content }} {{ $json.attendee_doc_content }}. - Select the target Slack user in User and keep Authentication set to
oAuth2. - Credential Required: Connect your Slack OAuth2 credentials in Post Slack Update.
Step 8: Test and Activate Your Workflow
Run the workflow manually to confirm outputs and then activate it for production use.
- Click Execute Workflow and verify Retrieve Calendar Events returns upcoming meetings.
- Confirm Filter External Meetings outputs meetings with external attendees and that the parallel branches populate both Iterate Meetings and Assemble Attendee Emails.
- Verify that Company Insight Agent and Attendee Insight Agent produce structured output via Parse Company Output and Parse Attendee Output.
- Check Slack for a combined message from Post Slack Update containing the company and attendee briefs.
- When everything looks correct, toggle the workflow to Active to run on schedule.
Common Gotchas
- Google Calendar OAuth credentials can expire or lack the right scope. If meetings stop loading, check n8n’s Credentials for Google Calendar and confirm it still has read access.
- If you’re using Wait nodes or external processing, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Explorium matching can return empty results when domains are unusual (subsidiaries, holding companies, personal email invites). When that happens, confirm your Explorium API key in n8n and consider adding a fallback rule for “no match” meetings.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 45 minutes if you already have the credentials.
No. You will connect accounts and paste in your company domain for the external-meeting filter.
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 Explorium and AI model usage costs, which depend on how many meetings and attendees you enrich each day.
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, but you’ll swap the calendar connector and re-check the attendee fields used in the filtering logic. The core structure stays the same: fetch events, filter external meetings, then run the company and attendee enrichment loops. Many teams also customize the Slack message format in the “Build Company Brief” and “Build Attendee Brief” steps so it matches their sales playbook.
Usually it’s expired OAuth authorization or missing calendar read permissions. Reconnect the Google Calendar credential in n8n, then run a test execution and confirm the “Get many events” node returns events. If it returns nothing, check that you’re querying the right calendar and that the time window still covers your meetings for the day.
On most n8n Cloud plans, handling a normal sales day of 10–30 meetings is fine, and self-hosting mainly depends on your server and API limits. The practical cap usually comes from Explorium and AI rate limits if you enrich lots of attendees at once.
It depends on how deep you want the brief to be. Zapier or Make can notify Slack when you have meetings, sure, and they’re quick for simple two-step flows. This workflow does heavier lifting: it filters meetings by domain, loops through companies and attendees, merges multiple enrichment endpoints, and then runs AI analysis before posting. That sort of branching logic can get expensive or awkward in simpler tools. If you’re unsure what fits your team, Talk to an automation expert.
Showing up prepared shouldn’t require a daily research sprint. Set this up once, and let Slack hand you the brief before the first meeting starts.
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.