This workflow corresponds to n8n.io template #7968 — we link there as the canonical source.
This workflow follows the Agent → Chainllm 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "5a367261-b56f-49f7-a447-43f82af7c428",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
144
],
"parameters": {
"color": 7,
"width": 696,
"height": 917,
"content": "## Research meeting attendees and prepare daily agenda in Slack\n\nThis workflow automatically researches your meeting attendees every morning and sends you a comprehensive brief in Slack with context about who you're meeting, their company, and key talking points.\n\n### Who's it for\n- Sales professionals who need quick context before meetings\n- Executives with packed calendars who need meeting preparation\n- Customer success teams managing multiple client relationships\n- Anyone who wants to be better prepared for their daily meetings\n\n### How it works\n1. **Daily Trigger**: Runs every weekday morning at 6 AM to analyze your calendar\n2. **Calendar Analysis**: Fetches all meetings for the day from Google Calendar\n3. **Attendee Research**: For each external meeting:\n - Searches your CRM (Attio) for existing contact information\n - Uses AI to research attendees via web search, Gmail history, and past meetings\n - Searches company information via Apollo.io\n - Creates new CRM records if contacts don't exist\n4. **Brief Generation**: Compiles all research into a scannable meeting brief\n5. **Slack Delivery**: Sends formatted brief to your designated Slack channel\n\n### Setup Requirements\n- Google Calendar access (OAuth2)\n- Slack workspace with bot permissions\n- Attio CRM account (optional - for contact management)\n- Apollo.io API access (optional - for company research)\n- OpenRouter API key for AI processing\n- Gmail access for email history search\n\n### How to customize\n1. **Adjust Schedule**: Change the Schedule Trigger to your preferred time\n2. **Modify Research Tools**: Add or remove research sources based on your needs\n3. **Customize Output Format**: Edit the formatting prompt in \"Format Daily Meeting Brief\"\n4. **Change Delivery Method**: Replace Slack with email, Teams, or another channel"
},
"typeVersion": 1
},
{
"id": "2409b8bd-2305-41fa-82f1-a97e68d9df43",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"notes": "Runs Monday-Friday at 6 AM",
"position": [
192,
576
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 6 * * 1-5"
}
]
}
},
"notesInFlow": true,
"typeVersion": 1.2
},
{
"id": "19c5762b-ed9e-47db-80d7-0806c772a2a2",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
304,
352
],
"parameters": {
"width": 383.52941176470586,
"height": 145.88235294117646,
"content": "### Step 1: Calendar Integration\nFetches today's meetings from your Google Calendar. The workflow filters for external meetings (those with attendees other than yourself)."
},
"typeVersion": 1
},
{
"id": "edb6a777-cc4d-4326-9418-6b311a69e3dd",
"name": "Filter External Meetings",
"type": "n8n-nodes-base.filter",
"notes": "Keep only events with attendees",
"position": [
640,
576
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "filter-external",
"operator": {
"type": "array",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.attendees }}",
"rightValue": ""
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2,
"alwaysOutputData": true
},
{
"id": "2f8d687c-ce54-4a8b-93d9-86ca545fcdd7",
"name": "Has External Meetings?",
"type": "n8n-nodes-base.if",
"position": [
864,
576
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "has-meetings",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.id }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a9b3151a-62f3-4b74-b590-62ce0381c755",
"name": "No Meetings Message",
"type": "n8n-nodes-base.slack",
"position": [
1072,
768
],
"parameters": {
"text": "Good morning! No external meetings scheduled for today. Enjoy your focus time!",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "="
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "9404e80f-e34f-4160-bbad-b96e8526d0b1",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1184,
192
],
"parameters": {
"width": 612.3529411764707,
"height": 232.94117647058826,
"content": "### Step 2: AI Research\nFor each meeting, the AI agent researches attendees using multiple sources:\n- Web search for recent news\n- Gmail history for past interactions\n- Calendar for previous meetings\n- CRM for existing contact info\n- Apollo.io for company data"
},
"typeVersion": 1
},
{
"id": "001125d5-7aac-4aa3-a3d3-42b1f660b557",
"name": "Split Events for Individual Processing",
"type": "n8n-nodes-base.splitOut",
"position": [
1088,
480
],
"parameters": {
"include": "allOtherFields",
"options": {},
"fieldToSplitOut": "id"
},
"typeVersion": 1
},
{
"id": "f815d71c-0f8b-4221-a980-da233b22eb79",
"name": "AI Agent - Meeting Research",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1568,
496
],
"parameters": {
"text": "=You are a meeting preparation assistant. Analyze this meeting and prepare comprehensive research:\n\nMeeting Details:\n- Summary: {{ $json.summary }}\n- Start: {{ $json.start.dateTime }}\n- End: {{ $json.end.dateTime }}\n- Attendees: {{ $json.attendees.filter(a => a.email !== $('User Configuration').item.json.user_email).map(a => a.email).join(', ') }}\n\nYour tasks:\n1. Research each attendee using the available tools\n2. Identify the company they work for and research the company\n3. Find any previous interactions or context\n4. Prepare key talking points and questions\n5. Identify potential goals and outcomes for this meeting\n\nProvide a comprehensive meeting preparation report.",
"options": {
"systemMessage": "You are an expert meeting preparation assistant with access to CRM, email, calendar, and company research tools. Your goal is to help the user be fully prepared for their upcoming meetings by providing comprehensive research and context."
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "9fcd10f0-3300-4a7a-8f94-21b0a237db87",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1312,
720
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "42f7e6c1-6b51-42b6-af8c-cf46c4d91d94",
"name": "Search Gmail History",
"type": "n8n-nodes-base.gmailTool",
"position": [
1568,
720
],
"parameters": {
"simple": "={{ $fromAI('Simplify', '', 'boolean') }}",
"filters": {
"q": "={{ $fromAI('Search', '', 'string') }}"
},
"options": {},
"operation": "getAll",
"returnAll": "={{ $fromAI('Return_All', '', 'boolean') }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "be673ca9-f382-4b12-b7ec-ff562dcebde7",
"name": "Web Search Tool",
"type": "n8n-nodes-base.httpRequestTool",
"onError": "continueRegularOutput",
"position": [
1696,
720
],
"parameters": {
"url": "https://api.anthropic.com/v1/messages",
"method": "POST",
"options": {},
"jsonBody": "={{ $fromAI('JSON', '{\"model\": \"claude-sonnet-4-20250514\", \"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"{web_search_question}\"}], \"tools\": [{\"type\": \"web_search_20250305\", \"name\": \"web_search\", \"max_uses\": 5}]}', 'json') }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"toolDescription": "Searches the internet for current information. Use for finding recent news, press releases, blog posts, and other public information about the company or person.",
"headerParameters": {
"parameters": [
{
"name": "anthropic-version",
"value": "2023-06-01"
},
{
"name": "content-type",
"value": "application/json"
}
]
},
"nodeCredentialType": "anthropicApi"
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "832369d1-242f-4a81-bc94-0de71425ed2e",
"name": "Search Attio CRM",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
1824,
720
],
"parameters": {
"url": "https://api.attio.com/v2/objects/people/records/query",
"method": "POST",
"options": {},
"jsonBody": "={\"filter\": {\"email_addresses\": \"{{ $fromAI('single_email_address', 'Email address to find', 'string') }}\"}, \"limit\": 1, \"offset\": 0}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"toolDescription": "Search CRM for information on a person by email address",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "31aeddca-5379-4b25-8393-84258b49e3bc",
"name": "Search Apollo Company Data",
"type": "n8n-nodes-base.httpRequestTool",
"onError": "continueRegularOutput",
"position": [
1952,
720
],
"parameters": {
"url": "https://api.apollo.io/api/v1/mixed_companies/search",
"method": "POST",
"options": {},
"jsonBody": "={{ $fromAI('JSON', '', 'json') }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"toolDescription": "Retrieves company data including industry, employee count, revenue, and technologies used",
"headerParameters": {
"parameters": [
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "accept",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "182e4b7c-0b87-4ee3-9d17-85751bb71c0d",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2400,
144
],
"parameters": {
"width": 370.58823529411774,
"height": 176.47058823529412,
"content": "### Step 3: CRM Integration\nFor each attendee:\n- Check if they exist in your CRM\n- Create new contact records if needed\n- Add meeting preparation notes to their profile"
},
"typeVersion": 1
},
{
"id": "a052e367-d9c3-412a-be03-2ec28f0bafe6",
"name": "Clean Meeting Research Content",
"type": "n8n-nodes-base.code",
"position": [
2160,
496
],
"parameters": {
"jsCode": "const items = $input.all();\n\nreturn items.map((item, index) => {\n let content = item.json.markdown_content || item.json.output || item.json.content || '';\n \n content = content.replace(/\"/g, '');\n content = content.replace(/'/g, '');\n content = content.replace(/\\r\\n/g, '\\n');\n content = content.replace(/\\r/g, '\\n');\n content = content.trim();\n content = content.split(/\\n/).map(line => line.trim()).join('\\n');\n content = content.replace(/\\n\\s*\\n\\s*\\n/g, '\\n\\n');\n \n return {\n json: {\n ...item.json,\n cleaned_content: content\n },\n pairedItem: { item: index }\n };\n});"
},
"typeVersion": 2
},
{
"id": "62579c3f-9b3d-4345-b96b-8a13e31690f8",
"name": "Extract External Attendees",
"type": "n8n-nodes-base.set",
"position": [
2384,
336
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "22f8e8d1-b14f-47f5-ab45-4cfad5d27bbc",
"name": "attendees",
"type": "array",
"value": "={{ $('Split Events for Individual Processing').item.json.attendees.filter(a => a.email !== $('User Configuration').item.json.user_email) }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "b237a783-5952-42be-9773-5941d837d556",
"name": "Split Attendees for CRM Check",
"type": "n8n-nodes-base.splitOut",
"position": [
2672,
336
],
"parameters": {
"include": "allOtherFields",
"options": {},
"fieldToSplitOut": "attendees"
},
"typeVersion": 1
},
{
"id": "2d9f8608-8a4a-473f-b55f-c7fa191d162b",
"name": "Find Person in Attio",
"type": "n8n-nodes-base.httpRequest",
"position": [
2960,
336
],
"parameters": {
"url": "https://api.attio.com/v2/objects/people/records/query",
"method": "POST",
"options": {},
"jsonBody": "={\"filter\": {\"email_addresses\": \"{{ $json.attendees.email }}\"}, \"limit\": 1, \"offset\": 0}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "4222a379-96ff-4e54-ad0d-b65431964300",
"name": "Person Exists in CRM?",
"type": "n8n-nodes-base.if",
"position": [
3184,
336
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "person-exists",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.data[0].id.record_id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "562e986a-6880-4c91-88c5-aa48947d72ef",
"name": "Create Person Record",
"type": "n8n-nodes-base.httpRequest",
"position": [
3408,
416
],
"parameters": {
"url": "https://api.attio.com/v2/objects/people/records",
"method": "POST",
"options": {},
"jsonBody": "={\"data\": {\"values\": {\"email_addresses\": [{\"email_address\": \"{{ $json.attendees.email }}\"}]}}}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "2f21cf2b-dda2-4cba-a364-d0a85d0c2532",
"name": "Merge CRM Results",
"type": "n8n-nodes-base.merge",
"position": [
3632,
336
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "f368504d-7fd3-4cef-af4b-5bb5bd80e4b1",
"name": "Create Note on Person",
"type": "n8n-nodes-base.httpRequest",
"position": [
3856,
336
],
"parameters": {
"url": "https://api.attio.com/v2/notes",
"method": "POST",
"options": {},
"jsonBody": "={\"data\": {\"parent_object\": \"people\", \"parent_record_id\": \"{{ $json.data[0].id.record_id }}\", \"title\": \"Meeting Prep\", \"content\": \"{{ $('Clean Meeting Research Content').item.json.cleaned_content.replaceAll('\\n','\\\\n') }}\", \"format\": \"markdown\"}}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "222c778d-75e7-469e-8fd8-482f644726e5",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2848,
800
],
"parameters": {
"width": 370.58823529411774,
"height": 137.6470588235294,
"content": "### Step 4: Brief Generation & Delivery\nAll research is compiled into a formatted meeting brief and sent to your Slack channel"
},
"typeVersion": 1
},
{
"id": "5cb71809-ea9b-49e4-a031-e151edf05981",
"name": "Aggregate Research Results",
"type": "n8n-nodes-base.aggregate",
"position": [
2384,
640
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "output"
}
]
}
},
"typeVersion": 1
},
{
"id": "87e79d10-28e4-46a4-8e77-c13d4f034af2",
"name": "Format Daily Meeting Brief",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2608,
640
],
"parameters": {
"text": "=Create a scannable meeting brief for my meetings today. I have {{ $json.output.length }} meetings.\n\nFor EACH meeting, use this EXACT format:\n\n*[TIME] Meeting Title*\n*Who:* [Name, Company/Role]\n*Purpose:* [2-5 sentences - why this meeting matters]\n*Key Context:* [1-2 critical facts about them/company]\n*Action:* [Your main goal for this meeting]\n*Watch For:* [One thing to pay attention to]\n\nRules:\n- Focus only on actionable intelligence\n- Be extremely concise\n- No introductions or conclusions\n\nMeeting data:\n{{ $json.output.map((m, i) => `\\n========== MEETING ${i + 1} ==========\\n${JSON.stringify(m, null, 2)}\\n========== END MEETING ${i + 1} ==========\\n`).join('\\n\\n') }}",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "2c5ecb97-be42-4747-8389-27c58c0426f6",
"name": "OpenRouter Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
2688,
864
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "049bb3cf-26ac-4c2e-88cf-60f0f5de1111",
"name": "Send Daily Brief to Slack",
"type": "n8n-nodes-base.slack",
"position": [
2960,
640
],
"parameters": {
"text": "={{ $json.text }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "="
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "4c574d01-0175-442b-8dd2-292d03831a4f",
"name": "Get many events",
"type": "n8n-nodes-base.googleCalendar",
"position": [
400,
576
],
"parameters": {
"options": {},
"timeMax": "={{ $today.plus({ day: 1 }) }}",
"timeMin": "={{ $today }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "user@example.com",
"cachedResultName": "OneTwo Growth Studio"
},
"operation": "getAll"
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "87459aa2-afa3-4597-939c-97b30a0aa2f8",
"name": "Get many events in Google Calendar",
"type": "n8n-nodes-base.googleCalendarTool",
"position": [
1440,
800
],
"parameters": {
"limit": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Limit', ``, 'number') }}",
"options": {},
"timeMax": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Before', ``, 'string') }}",
"timeMin": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('After', ``, 'string') }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": ""
},
"operation": "getAll"
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
}
],
"connections": {
"Get many events": {
"main": [
[
{
"node": "Filter External Meetings",
"type": "main",
"index": 0
}
]
]
},
"Web Search Tool": {
"ai_tool": [
[
{
"node": "AI Agent - Meeting Research",
"type": "ai_tool",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get many events",
"type": "main",
"index": 0
}
]
]
},
"Search Attio CRM": {
"ai_tool": [
[
{
"node": "AI Agent - Meeting Research",
"type": "ai_tool",
"index": 0
}
]
]
},
"Merge CRM Results": {
"main": [
[
{
"node": "Create Note on Person",
"type": "main",
"index": 0
}
]
]
},
"Create Person Record": {
"main": [
[
{
"node": "Merge CRM Results",
"type": "main",
"index": 1
}
]
]
},
"Find Person in Attio": {
"main": [
[
{
"node": "Person Exists in CRM?",
"type": "main",
"index": 0
}
]
]
},
"Search Gmail History": {
"ai_tool": [
[
{
"node": "AI Agent - Meeting Research",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent - Meeting Research",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Person Exists in CRM?": {
"main": [
[
{
"node": "Merge CRM Results",
"type": "main",
"index": 0
}
],
[
{
"node": "Create Person Record",
"type": "main",
"index": 0
}
]
]
},
"Has External Meetings?": {
"main": [
[
{
"node": "Split Events for Individual Processing",
"type": "main",
"index": 0
}
],
[
{
"node": "No Meetings Message",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model1": {
"ai_languageModel": [
[
{
"node": "Format Daily Meeting Brief",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Filter External Meetings": {
"main": [
[
{
"node": "Has External Meetings?",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Research Results": {
"main": [
[
{
"node": "Format Daily Meeting Brief",
"type": "main",
"index": 0
}
]
]
},
"Extract External Attendees": {
"main": [
[
{
"node": "Split Attendees for CRM Check",
"type": "main",
"index": 0
}
]
]
},
"Format Daily Meeting Brief": {
"main": [
[
{
"node": "Send Daily Brief to Slack",
"type": "main",
"index": 0
}
]
]
},
"Search Apollo Company Data": {
"ai_tool": [
[
{
"node": "AI Agent - Meeting Research",
"type": "ai_tool",
"index": 0
}
]
]
},
"AI Agent - Meeting Research": {
"main": [
[
{
"node": "Clean Meeting Research Content",
"type": "main",
"index": 0
}
]
]
},
"Split Attendees for CRM Check": {
"main": [
[
{
"node": "Find Person in Attio",
"type": "main",
"index": 0
}
]
]
},
"Clean Meeting Research Content": {
"main": [
[
{
"node": "Extract External Attendees",
"type": "main",
"index": 0
},
{
"node": "Aggregate Research Results",
"type": "main",
"index": 0
}
]
]
},
"Get many events in Google Calendar": {
"ai_tool": [
[
{
"node": "AI Agent - Meeting Research",
"type": "ai_tool",
"index": 0
}
]
]
},
"Split Events for Individual Processing": {
"main": [
[
{
"node": "AI Agent - Meeting Research",
"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.
anthropicApigmailOAuth2googleCalendarOAuth2ApihttpBearerAuthhttpHeaderAuthopenRouterApislackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically researches your meeting attendees every morning and sends you a comprehensive brief in Slack with context about who you're meeting, their company, and key talking points. Sales professionals who need quick context before meetings Executives with…
Source: https://n8n.io/workflows/7968/ — 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.
This n8n template transforms your daily meeting preparation by automatically researching attendees and generating comprehensive briefing documents. Every weekday morning, it analyzes your calendar eve
Who is this for? Agencies, consultants, and service providers who conduct discovery calls and need to quickly turn conversations into professional proposals.
Who’s it for This template is ideal for busy professionals, students, or anyone with a dynamic schedule who wants to optimize their brief periods of free time. If you frequently find yourself with une
Complete PostgreSQL-backed system: Keyword scoring → AI research → Multi-part content generation → fal.ai Nano Banana image generation → WordPress publishing
This workflow automates the creation, rendering, approval, and posting of TikTok-style POV (Point of View) videos to Instagram, with cross-posting to Facebook and YouTube. It eliminates manual video p