This workflow corresponds to n8n.io template #6126 — we link there as the canonical source.
This workflow follows the Gmail → Google Calendar 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 →
{
"id": "PfcCFOFQlF2xlsT2",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Auto-Generate Social Media Briefs for Sales Meetings Using AI & Google Calendar",
"tags": [],
"nodes": [
{
"id": "0fa99817-27e1-4e25-a643-7f22ce1099d2",
"name": "Enrich attendee company",
"type": "n8n-nodes-base.clearbit",
"position": [
900,
400
],
"parameters": {
"domain": "{{json.domain_name}}",
"additionalFields": {}
},
"credentials": {
"clearbitApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "4a8985d8-0e0d-4dd4-be7e-a2d853842eb7",
"name": "Schedule Trigger \u2013 5 AM",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-420,
400
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 5
}
]
}
},
"typeVersion": 1.1
},
{
"id": "639411ec-4cf6-4caa-b333-fc5b02d72e12",
"name": "Initialize Workflow",
"type": "n8n-nodes-base.set",
"position": [
-200,
400
],
"parameters": {
"fields": {
"values": [
{
"name": "linkedIn_API_Key"
},
{
"name": "emails"
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "93c5de17-7e38-4590-bd76-d4b2836971e9",
"name": "Fetch Today\u2019s Meetings from Google Calendar",
"type": "n8n-nodes-base.googleCalendar",
"position": [
20,
400
],
"parameters": {
"limit": 150,
"options": {
"timeMax": "={{ $today.plus({ days: 10 }) }}",
"timeMin": "={{ $today.minus({ days: 5 }) }}",
"singleEvents": true
},
"calendar": {
"__rl": true,
"mode": "id",
"value": "=abc@gmail.com"
},
"operation": "getAll"
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "25033b38-0417-4484-b783-f33aba39f74e",
"name": "Extract Attendee Email Domains",
"type": "n8n-nodes-base.set",
"position": [
240,
400
],
"parameters": {
"fields": {
"values": [
{
"name": "domain_name",
"type": "arrayValue",
"arrayValue": "={{ $json.attendees.filter(a => !a.organizer).map(a => a.email.split('@').pop()) }}"
},
{
"name": "attend_Emails",
"type": "arrayValue",
"arrayValue": "={{ $json.attendees.filter(a => !a.organizer).map(a => a.email) }}"
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "4718c1f2-2eb6-4ab1-9a55-255f735289ab",
"name": "Loop Through Attendees",
"type": "n8n-nodes-base.splitInBatches",
"position": [
460,
400
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "21f81aac-27a6-4d95-8581-114444fbd330",
"name": "Split Attendee Details",
"type": "n8n-nodes-base.splitOut",
"position": [
680,
400
],
"parameters": {
"include": "selectedOtherFields",
"options": {},
"fieldToSplitOut": "domain_name",
"fieldsToInclude": "attend_Emails, start"
},
"typeVersion": 1
},
{
"id": "d9b3fd55-f54a-4a8c-a503-75e2ef0e6d06",
"name": "Wait for Company Enrichment",
"type": "n8n-nodes-base.wait",
"position": [
1120,
400
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "70f9669b-ccbd-48cd-b8b3-0402708ef693",
"name": "Check Enrichment Status",
"type": "n8n-nodes-base.switch",
"position": [
1340,
400
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "linkedin",
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "4f3acc06-a758-4334-abf6-ce49e44f9300",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.linkedin.handle !== null }}",
"rightValue": ""
}
]
},
"renameOutput": true
}
]
},
"options": {
"allMatchingOutputs": true,
"looseTypeValidation": false
}
},
"typeVersion": 3
},
{
"id": "6545f48f-701c-4276-a56f-0e0b9d595bc8",
"name": "Fetch Latest LinkedIn Posts",
"type": "n8n-nodes-base.httpRequest",
"position": [
1560,
400
],
"parameters": {
"url": "https://fresh-linkedin-profile-data.p.rapidapi.com/get-company-posts",
"options": {
"batching": {
"batch": {
"batchSize": 150
}
}
},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "linkedin_url",
"value": "=https://www.linkedin.com/{{ $json.linkedin.handle }}"
},
{
"name": "sort_by",
"value": "recent"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "X-RapidAPI-Key",
"value": "={{ $('Initialize Workflow').item.json.linkedInAPIKey }}"
},
{
"name": "X-RapidAPI-Host",
"value": "fresh-linkedin-profile-data.p.rapidapi.com"
}
]
}
},
"typeVersion": 4.1
},
{
"id": "f09f953e-3ec2-4e87-8d18-6b90b14a1f9e",
"name": "Extract Key Post Insights",
"type": "n8n-nodes-base.set",
"position": [
1780,
400
],
"parameters": {
"fields": {
"values": [
{
"name": "linkedin_posts",
"type": "arrayValue",
"arrayValue": "={{ $input.item.json.data.slice(0, 10).map(d => { return { text: d.text, likes: d.num_likes, comments: d.num_comments, postedAt: d.posted } } ) }}"
},
{
"name": "name",
"stringValue": "={{ $('Check Enrichment Status').item.json.name }}"
},
{
"name": "meeting",
"type": "objectValue",
"objectValue": "={{ $('Split Attendee Details').item.json }}"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "2a8b6c8f-5964-4b07-8768-0a6cfeb1dceb",
"name": "Summarize Social Activity with AI",
"type": "n8n-nodes-base.set",
"position": [
2000,
500
],
"parameters": {
"fields": {
"values": [
{
"name": "attendeeEmail",
"stringValue": "={{ $json.meeting.attendeeEmails.find(a => a.endsWith($json.meeting.domain)) }}"
},
{
"name": "startHour",
"type": "numberValue",
"numberValue": "={{ DateTime.fromISO($json.meeting.start.dateTime).hour }}"
},
{
"name": "startMinute",
"type": "numberValue",
"numberValue": "={{ DateTime.fromISO($json.meeting.start.dateTime).minute }}"
}
]
},
"include": "selected",
"options": {},
"includeFields": "name, html_linkedin"
},
"typeVersion": 3.2
},
{
"id": "29d13d05-6525-4f4c-8b09-f81892ab3138",
"name": "Format Summary for Email",
"type": "n8n-nodes-base.openAi",
"position": [
2000,
300
],
"parameters": {
"prompt": {
"messages": [
{
"content": "=Please paste the actual JSON data (not {{ JSON.stringify($json) }}) so I can generate the summary based on the real company name and post content.\n\nOnce you provide the JSON, I\u2019ll return a short, impersonal email-style summary focusing on key sales-relevant insights from LinkedIn posts."
}
]
},
"options": {},
"resource": "chat",
"chatModel": "gpt-4",
"requestOptions": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "0a1d2f8f-99b6-41f7-b2f2-b9e9b36b9db7",
"name": "Merge Summary with Context",
"type": "n8n-nodes-base.merge",
"disabled": true,
"position": [
2220,
400
],
"parameters": {
"mode": "combine",
"options": {},
"combinationMode": "mergeByPosition"
},
"typeVersion": 2.1
},
{
"id": "0d8e7b58-ce7b-4704-9a06-4a1aceddfc7d",
"name": "Wait Before Sending",
"type": "n8n-nodes-base.wait",
"position": [
2440,
400
],
"parameters": {
"amount": 2
},
"typeVersion": 1.1
},
{
"id": "e9fe48eb-8297-4023-8d89-f4bc9b38974b",
"name": "Generate HTML Email Template",
"type": "n8n-nodes-base.html",
"position": [
2660,
400
],
"parameters": {
"html": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\" />\n <style>\n body {\n font-family: sans-serif;\n margin: 1em;\n }\n .summary {\n background-color: #f7f9fc;\n padding: 0.5em 1em;\n border-left: 4px solid #0073e6;\n margin-top: 0.5em;\n }\n </style>\n</head>\n<body>\n <h3>Meeting with {{ $json.attendeeEmail }} at {{ $json.startHour }}:{{ $json.startMinute < 10 ? `0${$json.startMinute}` : $json.startMinute }}h</h3>\n <p><strong>Quick summary of {{ $json.name }}'s social media activity:</strong></p>\n <div class=\"summary\">\n {{ $json.message.content }}\n </div>\n</body>\n</html>\n"
},
"typeVersion": 1.1
},
{
"id": "b12bf591-6975-4b7f-b01a-d02ccbb33243",
"name": "Send via WhatsApp",
"type": "n8n-nodes-base.whatsApp",
"position": [
2880,
300
],
"parameters": {
"textBody": "={{ $json.html }}",
"operation": "send",
"phoneNumberId": "=+91993388337733",
"additionalFields": {},
"recipientPhoneNumber": "+1234567890"
},
"credentials": {
"whatsAppApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b033a15f-4a08-4580-863a-67c78cb9d59b",
"name": "Send via Gmail",
"type": "n8n-nodes-base.gmail",
"position": [
2880,
500
],
"parameters": {
"sendTo": "={{ $('Initialize Workflow').first().json.emails }}",
"message": "={{ $json.html }}",
"options": {},
"subject": "=Latest social activity for: {{ $('Merge Summary with Context').item.json.name }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "551f69af-a07a-4b7a-9021-29810f9995b6",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-80,
-1440
],
"parameters": {
"color": 2,
"width": 1000,
"height": 1420,
"content": "## Workflow Purpose (Step-by-Step)\n\n### Schedule Trigger \u2013 5 AM\n\u2192 Triggers the workflow automatically every morning at 5 AM.\n\n### Initialize Workflow\n\u2192 Sets up default values or configurations needed for processing.\n\n### Fetch Today\u2019s Meetings from Google Calendar\n\u2192 Retrieves all meetings scheduled for the current day.\n\n### Extract Attendee Email Domains\n\u2192 Extracts email domains of meeting attendees for company identification.\n\n### Loop Through Attendees\n\u2192 Iterates over each attendee to perform enrichment and analysis.\n\n### Split Attendee Details\n\u2192 Separates individual attendee data for precise processing.\n\n### Enrich Company Information\n\u2192 Looks up company details using attendee email domains.\n\n### Wait for Company Enrichment\n\u2192 Adds a delay to ensure enrichment API finishes before next step.\n\n### Check Enrichment Status\n\u2192 Ensures only valid/enriched companies proceed to the next steps.\n\n### Fetch Latest LinkedIn & Twitter Posts\n\u2192 Retrieves the most recent social media posts for the company.\n### \nExtract Key Post Insights\n\u2192 Filters out non-relevant content and keeps business-useful data.\n\n### Summarize Social Activity with AI\n\u2192 Uses AI to generate a short, sales-relevant summary of the posts.\n\n### Format Summary for Email\n\u2192 Prepares the summary data in a readable format.\n\n### Merge Summary with Context\n\u2192 Wraps summary along with attendee, time, and company info.\n\n### Wait Before Sending\n\u2192 Optional pause to manage API rate or ensure proper timing.\n\n### Generate HTML Email Template\n\u2192 Builds a clean, short HTML email ready to send.\n\n### Send via WhatsApp\n\u2192 Sends the summary to WhatsApp for quick access on the go.\n\n### Send via Gmail\n\u2192 Sends the summary to email as a professional follow-up.\n\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "85e779a0-cba0-4c00-bcf0-740f108c3032",
"connections": {
"Send via WhatsApp": {
"main": [
[]
]
},
"Initialize Workflow": {
"main": [
[
{
"node": "Fetch Today\u2019s Meetings from Google Calendar",
"type": "main",
"index": 0
}
]
]
},
"Wait Before Sending": {
"main": [
[
{
"node": "Generate HTML Email Template",
"type": "main",
"index": 0
}
]
]
},
"Loop Through Attendees": {
"main": [
[
{
"node": "Split Attendee Details",
"type": "main",
"index": 0
}
],
[
{
"node": "Loop Through Attendees",
"type": "main",
"index": 0
}
]
]
},
"Split Attendee Details": {
"main": [
[
{
"node": "Enrich attendee company",
"type": "main",
"index": 0
}
]
]
},
"Check Enrichment Status": {
"main": [
[
{
"node": "Fetch Latest LinkedIn Posts",
"type": "main",
"index": 0
}
]
]
},
"Enrich attendee company": {
"main": [
[
{
"node": "Wait for Company Enrichment",
"type": "main",
"index": 0
}
]
]
},
"Format Summary for Email": {
"main": [
[
{
"node": "Merge Summary with Context",
"type": "main",
"index": 0
}
]
]
},
"Extract Key Post Insights": {
"main": [
[
{
"node": "Format Summary for Email",
"type": "main",
"index": 0
},
{
"node": "Summarize Social Activity with AI",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger \u2013 5 AM": {
"main": [
[
{
"node": "Initialize Workflow",
"type": "main",
"index": 0
}
]
]
},
"Merge Summary with Context": {
"main": [
[
{
"node": "Wait Before Sending",
"type": "main",
"index": 0
}
]
]
},
"Fetch Latest LinkedIn Posts": {
"main": [
[
{
"node": "Extract Key Post Insights",
"type": "main",
"index": 0
}
]
]
},
"Wait for Company Enrichment": {
"main": [
[
{
"node": "Check Enrichment Status",
"type": "main",
"index": 0
}
]
]
},
"Generate HTML Email Template": {
"main": [
[
{
"node": "Send via WhatsApp",
"type": "main",
"index": 0
},
{
"node": "Send via Gmail",
"type": "main",
"index": 0
}
]
]
},
"Extract Attendee Email Domains": {
"main": [
[
{
"node": "Loop Through Attendees",
"type": "main",
"index": 0
}
]
]
},
"Summarize Social Activity with AI": {
"main": [
[
{
"node": "Merge Summary with Context",
"type": "main",
"index": 1
}
]
]
},
"Fetch Today\u2019s Meetings from Google Calendar": {
"main": [
[
{
"node": "Extract Attendee Email Domains",
"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.
clearbitApigmailOAuth2googleCalendarOAuth2ApiopenAiApiwhatsAppApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This automated n8n workflow generates social media briefs for sales meetings by integrating with Google Calendar, enriching attendee data, and leveraging AI to summarize social media activity. The system delivers formatted summaries via email and WhatsApp to support sales…
Source: https://n8n.io/workflows/6126/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Stop wasting billable hours on manual time-tracking. AutoTimesheet Pro uses AI to collect emails, meetings, and GitHub work, then writes a clean timesheet straight into Google Sheets. Perfect for deve
This workflow is your personal CEO Brain. Every Saturday night, it automatically collects the past week’s activity across: 📩 Gmail: filters out spam, promos, receipts, etc. 📅 Google Calendar: grabs pa
A scheduled process aggregates content from eight distinct data sources and standardizes all inputs into a unified format. AI models perform sentiment scoring, detect conspiracy or misinformation sign
This workflow monitors filesystem sync and backup jobs by validating their execution logs, not by running or inspecting the jobs themselves.
Imagine a dedicated financial expert tirelessly working behind the scenes, sifting through every transaction, every investment move, and every accounting entry. That's exactly what this automated syst