Gmail + LinkedIn to WhatsApp, meeting briefs ready
You show up to a call, and five minutes in you realize you’ve already asked the same question in the last email thread. Again. It’s not your fault. The context is scattered across Gmail, calendar invites, and a half-remembered LinkedIn post you skimmed on your phone.
This Gmail LinkedIn WhatsApp automation hits account managers and founders the hardest, honestly. But consultants doing back-to-back discovery calls feel it too. The win is simple: you walk into meetings with a short, private brief that reminds you who’s who and what’s changed since you last spoke.
Below, you’ll see exactly what this workflow does, what you need to run it, and how the moving parts fit together (without getting buried in technical details).
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Gmail + LinkedIn to WhatsApp, meeting briefs ready
flowchart LR
subgraph sg0["Execute Workflow Flow"]
direction LR
n0@{ icon: "mdi:message-outline", form: "rounded", label: "Get Message Contents", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Simplify Emails", pos: "b", h: 48 }
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Execute Workflow Trigger", pos: "b", h: 48 }
n6@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n7@{ icon: "mdi:message-outline", form: "rounded", label: "Get Last Correspondence", pos: "b", h: 48 }
n8@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model1", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return LinkedIn Success", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return LinkedIn Error", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return Email Error", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return Email Success", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Router", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return LinkedIn Error1", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Has Emails?", pos: "b", h: 48 }
n21@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return Email Error1", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Sections To List", pos: "b", h: 48 }
n23@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set LinkedIn Cookie", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Has Email Address?", pos: "b", h: 48 }
n27@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Has LinkedIn URL?", pos: "b", h: 48 }
n31@{ icon: "mdi:cog", form: "rounded", label: "Activities To Array", pos: "b", h: 48 }
n32["<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/html.dark.svg' width='40' height='40' /></div><br/>Extract Profile Metadata"]
n33@{ icon: "mdi:swap-vertical", form: "rounded", label: "Activities To List", pos: "b", h: 48 }
n34["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>APIFY Web Scraper"]
n35["<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/html.dark.svg' width='40' height='40' /></div><br/>Get Activity Details"]
n36["<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/html.dark.svg' width='40' height='40' /></div><br/>Get Sections"]
n37@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get About Section", pos: "b", h: 48 }
n38@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get Activity Section", pos: "b", h: 48 }
n39["<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/html.dark.svg' width='40' height='40' /></div><br/>Extract Activities"]
n40["<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/>Merge1"]
n41@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Is Scrape Successful?", pos: "b", h: 48 }
n42["<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/html.dark.svg' width='40' height='40' /></div><br/>Extract About"]
n44@{ icon: "mdi:robot", form: "rounded", label: "Correspondance Recap Agent", pos: "b", h: 48 }
n46@{ icon: "mdi:robot", form: "rounded", label: "LinkedIn Summarizer Agent", pos: "b", h: 48 }
n40 --> n46
n18 --> n26
n18 --> n27
n20 --> n0
n20 --> n14
n36 --> n37
n36 --> n38
n42 --> n40
n1 --> n44
n22 --> n36
n34 --> n41
n37 --> n42
n27 --> n23
n27 --> n19
n6 -.-> n44
n33 --> n35
n39 --> n33
n26 --> n7
n26 --> n21
n8 -.-> n46
n31 --> n40
n23 --> n34
n35 --> n31
n38 --> n39
n0 --> n1
n41 --> n32
n41 --> n13
n7 --> n20
n5 --> n18
n32 --> n22
n46 --> n12
n44 --> n15
end
subgraph sg1["Schedule Flow"]
direction LR
n2@{ icon: "mdi:location-exit", form: "rounded", label: "Check For Upcoming Meetings", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model2", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Extract Attendee Information", pos: "b", h: 48 }
n9@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model3", pos: "b", h: 48 }
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/whatsapp.svg' width='40' height='40' /></div><br/>WhatsApp Business Cloud"]
n11@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Route Email", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Route Linkedin", pos: "b", h: 48 }
n24@{ icon: "mdi:swap-vertical", form: "rounded", label: "Attendees to List", pos: "b", h: 48 }
n25@{ icon: "mdi:swap-vertical", form: "rounded", label: "Merge Attendee with Summaries", pos: "b", h: 48 }
n28@{ icon: "mdi:cog", form: "rounded", label: "Get Correspondance", pos: "b", h: 48 }
n29["<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"]
n30@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Attendees", pos: "b", h: 48 }
n43@{ icon: "mdi:cog", form: "rounded", label: "Get LinkedIn Profile & Activ..", pos: "b", h: 48 }
n45@{ icon: "mdi:robot", form: "rounded", label: "Attendee Research Agent", pos: "b", h: 48 }
n29 --> n25
n16 --> n28
n11 --> n2
n24 --> n16
n24 --> n17
n28 --> n29
n3 -.-> n4
n9 -.-> n45
n17 --> n43
n30 --> n45
n45 --> n10
n2 --> n4
n4 --> n24
n25 --> n30
n43 --> n29
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 n5,n11 trigger
class n44,n46,n4,n45 ai
class n6,n8,n3,n9 aiModel
class n18,n20,n26,n27,n41 decision
class n34 api
classDef customIcon fill:none,stroke:none
class n32,n34,n35,n36,n39,n40,n42,n10,n29 customIcon
Why This Matters: Walking Into Meetings Cold
Meeting prep sounds easy until you have more than a couple calls a week. The invite lands, you tell yourself you’ll review it “later,” and later turns into two minutes before the call. So you search Gmail, skim the last thread, miss the key detail buried three replies down, then open LinkedIn and get distracted by everyone else’s posts. It’s a mental tax. Worse, the cost shows up as awkward openers, repeated questions, and opportunities you could’ve spotted if you’d remembered what mattered.
It adds up fast. Here’s where it usually breaks down.
- Finding the most relevant Gmail thread per attendee is slow, especially when names don’t match email addresses cleanly.
- LinkedIn context is useful, but checking profiles manually before every call is the first thing to get skipped.
- When prep lives in five tabs, you’ll forget details under pressure and default to generic small talk.
- Doing this for a day with 4–6 meetings can burn about an hour you don’t really have.
What You’ll Build: WhatsApp Meeting Briefs from Gmail + LinkedIn
This workflow acts like a quiet meeting assistant that watches your calendar, gathers context, and sends you a simple brief where you’ll actually read it: WhatsApp. Every hour, it checks for upcoming meetings on your personal calendar. When it finds one, it looks at the invitees and uses an AI agent to figure out who’s relevant and what info it should collect. For each attendee, it pulls your latest Gmail correspondence and also fetches recent LinkedIn activity using a scrape step. Then another AI step summarizes everything into a short “here’s what you need to remember” prep note. Finally, it sends that note to your WhatsApp, giving you time to review before you join the call.
The workflow starts on a schedule, so you don’t need to remember to run anything. In the middle, it combines two streams of context (email history and LinkedIn updates) and turns them into something readable. At the end, you get one discreet message that’s easy to scan on your phone.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you have 4 meetings tomorrow with 2 attendees each. Manually, you might spend about 10 minutes per attendee searching Gmail and another 5 minutes checking LinkedIn, which is roughly 2 hours total prep. With this workflow, the schedule trigger runs automatically, the AI summarization happens in the background, and you spend maybe 2 minutes per meeting reading the WhatsApp brief. That’s around 90 minutes back on a busy day, and your openers get noticeably sharper.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Calendar for upcoming meetings and attendee emails.
- Gmail to fetch recent email correspondence.
- WhatsApp Business to receive private meeting briefs.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll connect accounts, add API keys, and copy a LinkedIn cookie string (or ask a technical teammate to help).
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
Calendar check runs hourly. A scheduled trigger fires and looks up upcoming events in Google Calendar, focusing on personal meetings where prep actually matters.
Attendees get parsed and validated. An AI extractor pulls attendee details from the invite, then the workflow checks if each person has a usable email address and a LinkedIn URL (or at least enough info to search).
Email and LinkedIn context gets gathered in parallel. One subflow searches Gmail for the latest correspondence and condenses the thread. Another subflow uses an HTTP request scrape (via Apify) to pull profile sections and recent activity, then summarizes it. If a source fails, the workflow inserts a polite fallback note rather than crashing.
A meeting prep brief is generated and delivered. All attendee summaries are merged, an AI agent turns them into a short prep message, and WhatsApp sends it to you so it’s waiting before the meeting.
You can easily modify the schedule cadence to match your calendar habits, or switch the trigger to “on-demand” using a webhook. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Set the automation cadence for pulling upcoming meetings and starting attendee processing.
- Add and open Scheduled Automation Trigger.
- Set the Rule to run every hour using the existing interval configuration.
- Confirm Scheduled Automation Trigger connects to Retrieve Upcoming Meetings.
Step 2: Connect Google Calendar and Parse Attendees
Pull the next meeting and extract attendee details for downstream routing and enrichment.
- Open Retrieve Upcoming Meetings and set Operation to
getAllwith Limit set to1. - Set Calendar to
[YOUR_EMAIL]and keep the time window filters: Time Min{{$now.toUTC()}}and Time Max{{$now.toUTC().plus(1, 'hour')}}. - Credential Required: Connect your googleCalendarOAuth2Api credentials in Retrieve Upcoming Meetings.
- Open Parse Attendee Details and confirm the Text field contains the structured meeting string with expressions like
{{ $json.start.dateTime }}and{{ $json.attendees.filter(item => !item.organizer).map(item => item.email).join(',') }}. - Ensure LLM Chat Engine A is connected as the language model for Parse Attendee Details and select openAiApi credentials on LLM Chat Engine A.
Step 3: Configure Attendee Routing and Sub-Workflows
Split attendees and branch to email and LinkedIn sub-workflows in parallel.
- In Expand Attendee List, set Field To Split Out to
output.attendees. - Expand Attendee List outputs to both Assign Email Route and Assign LinkedIn Route in parallel.
- In Assign Email Route, keep JSON Output as
{{ Object.assign({ "route": "email" }, $json) }}. - In Assign LinkedIn Route, keep JSON Output as
{{ Object.assign({ "route": "linkedin" }, $json) }}. - Open Run Sub-Workflow (Configure Req) and Run Sub-Workflow (Configure Req) 2 and select the appropriate sub-workflow IDs for each path.
- Verify both sub-workflows merge in Combine Streams with Mode set to
combineand Combine By set tocombineByPosition.
Step 4: Set Up Email Recap Processing
Fetch and summarize the latest email thread per attendee, with fallbacks for missing data.
- In Route by Condition, keep both rules that check
{{ $json.route }}equalsemailandlinkedin. - In Validate Email Address, ensure the condition checks
{{ $json.email }}exists. - Open Fetch Latest Correspondence and set Sender to
{{ $json.email }}with Limit1. - Credential Required: Connect your gmailOAuth2 credentials in Fetch Latest Correspondence and Fetch Email Content.
- In Fetch Email Content, set Message ID to
{{ $json.id }}and Operation toget. - In Condense Email Fields, keep assignments like from
{{ $json.from.value[0].name }} ({{ $json.from.value[0].address }})and to{{ $json.to.value[0].name }} ({{ $json.to.value[0].address }}). - Open Email Recap Agent and keep the Text template that includes
{{ $json.text }}, then confirm LLM Chat Engine B is connected as its language model with openAiApi credentials. - Ensure fallback nodes Email Fallback Notice and Email Missing Notice remain connected for empty results.
Step 5: Configure LinkedIn Enrichment and Summary
Scrape LinkedIn, extract profile sections, and summarize activity for meeting prep.
- In Validate LinkedIn URL, confirm the condition checks
{{ $json.linkedin_url }}exists. - Set Set LinkedIn Session values: linkedin_profile_url to
{{ $json.linkedin_url }}and linkedin_cookies to[CONFIGURE_YOUR_TOKEN]. - Open Apify Web Scrape Call and keep the URL as
https://api.apify.com/v2/acts/apify~web-scraper/run-sync-get-dataset-itemsand the JSON body with expressions like{{ $json.linkedin_profile_url }}and{{ $json.linkedin_cookies.match(/li_at=([^;]+)/)[1] }}. - Credential Required: Connect your httpQueryAuth credentials in Apify Web Scrape Call.
- In Check Scrape Success, keep the condition checking
{{ $json.body }}exists and route failures to LinkedIn Fallback Notice. - Configure the HTML extraction chain: Extract Profile Details → Split Sections List → Extract Section Blocks, then note Extract Section Blocks outputs to both Select About Section and Select Activity Section in parallel.
- Keep the section selectors in Select About Section and Select Activity Section as the provided expression blocks; they feed Extract About Content and Parse Activity Items respectively.
- Ensure the activity chain continues through Split Activities List → Extract Activity Details → Aggregate Activity List and merges with Extract About Content in Combine Profile Data.
- Open LinkedIn Summary Agent and verify its Text includes content from Extract Profile Details and activity items, then confirm LLM Chat Engine C is connected as its language model with openAiApi credentials.
- Finish with Provide LinkedIn Summary to set linkedin_summary to
{{ $json.text }}.
Step 6: Aggregate Attendees and Generate Meeting Prep Summary
Merge email and LinkedIn outputs per attendee and generate a meeting prep message.
- In Combine Attendee Summaries, keep JSON Output as
{{ Object.assign({}, $('Expand Attendee List').item.json, $json) }}to merge per-attendee results. - Aggregate all attendees in Aggregate Attendee Data using Aggregate
aggregateAllItemDataand Destination Field Nameattendees. - Open Meeting Prep Agent and verify the Text template pulls meeting details from Retrieve Upcoming Meetings and includes attendee summaries.
- Ensure LLM Chat Engine D is connected as the language model for Meeting Prep Agent with openAiApi credentials.
Step 7: Configure the WhatsApp Notification Output
Send the final meeting prep summary to WhatsApp.
- Open Send WhatsApp Notification and set Text Body to
{{ $json.text }}. - Set Phone Number ID to
[YOUR_ID]and Recipient Phone Number to[YOUR_PHONE]. - Credential Required: Connect your whatsAppApi credentials in Send WhatsApp Notification.
Step 8: Test and Activate Your Workflow
Run a manual test to confirm end-to-end outputs, then turn on the schedule for production use.
- Click Execute Workflow to trigger Scheduled Automation Trigger and verify Retrieve Upcoming Meetings returns a meeting.
- Confirm parallel routing from Expand Attendee List produces both email and LinkedIn branches and merges in Combine Streams.
- Validate successful outputs: Provide Email Summary and Provide LinkedIn Summary should populate summaries per attendee, and Meeting Prep Agent should produce a final message.
- Check that Send WhatsApp Notification sends the meeting prep summary to your phone.
- Turn on the workflow using the Active toggle once the test succeeds.
Troubleshooting Tips
- Gmail credentials can expire or need specific permissions. If things break, check the connected Google account and OAuth scopes in n8n credentials first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Quick Answers
Plan for about 45 minutes if your accounts and API keys are ready.
No. You’ll connect accounts and paste in a few credentials. The “hard part” is mostly configuration, not programming.
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 OpenAI API costs (often a few cents per brief, depending on prompt size and how many attendees you process).
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 probably should. You can replace the scheduled trigger with a Webhook + “Respond to Webhook” to make an on-demand brief, and you can swap the LinkedIn scrape step (the HTTP Request/Apify call) for a different data source. Common tweaks include sending the brief to Telegram instead of WhatsApp, adding company lookups, and changing the AI prompt to match your tone.
Usually it’s expired OAuth permissions or the wrong Google account connected. Reconnect Gmail in n8n credentials, then verify the workflow is allowed to read the mailbox you expect. If it fails only for some attendees, it can also be because the workflow can’t confidently match a name to an email thread.
If you self-host, there’s no hard execution limit; it mostly depends on your server and how fast LinkedIn scraping returns. On n8n Cloud, your plan sets monthly execution limits, and multi-attendee meetings can trigger several runs per event. Practically, most people run this for personal calendars and a handful of meetings per day, because the scrape and AI calls are the pacing factors.
Often, yes. This workflow has branching, sub-workflows, fallback paths, and multi-step AI summarization, which is the kind of logic that gets awkward (and expensive) in simpler tools. n8n also gives you more control over how you merge attendee data, and you can self-host to avoid per-task pricing. Zapier or Make can still work if you only want a basic “calendar event → send reminder” flow, but this is more of a meeting assistant than a reminder. If you want help deciding, Talk to an automation expert.
You set it up once, and the workflow keeps you ready without extra tabs, extra notes, or extra effort. Walk into the call with context, then focus on the conversation.
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.