by TOMOMITSU ASANO
{ "name": "IoT Sensor Data Aggregation with AI-Powered Anomaly Detection", "nodes": [ { "parameters": { "content": "## How it works\nThis workflow monitors IoT sensors in real-time. It ingests data via MQTT or a schedule, normalizes the format, and removes duplicates using data fingerprinting. An AI Agent then analyzes readings against defined thresholds to detect anomalies. Finally, it routes alerts to Slack or Email based on severity and logs everything to Google Sheets.\n\n## Setup steps\n1. Configure the MQTT Trigger with your broker details.\n2. Set your specific limits in the Define Sensor Thresholds node.\n3. Connect your OpenAI credential to the Chat Model node.\n4. Authenticate the Gmail, Slack, and Google Sheets nodes.\n5. Create a Google Sheet with headers: timestamp, sensorId, location, readings, analysis.", "height": 484, "width": 360 }, "id": "298da7ff-0e47-4b6c-85f5-2ce77275cdf3", "name": "Main Overview", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -2352, -480 ] }, { "parameters": { "content": "## 1. Data Ingestion\nCaptures sensor data via MQTT for real-time streams or runs on a schedule for batch processing. Both streams are merged for unified handling.", "height": 488, "width": 412, "color": 7 }, "id": "4794b396-cd71-429c-bcef-61780a55d707", "name": "Section: Ingestion", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -1822, -48 ] }, { "parameters": { "content": "## 2. Normalization & Deduplication\nSets monitoring thresholds, standardizes the JSON structure, creates a content hash, and filters out duplicate readings to prevent redundant API calls.", "height": 316, "width": 884, "color": 7 }, "id": "339e7cb7-491e-44c9-b561-983e147237d8", "name": "Section: Processing", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -1376, 32 ] }, { "parameters": { "content": "## 3. AI Anomaly Detection\nAn AI Agent evaluates sensor data against thresholds to identify anomalies, assigning severity levels and providing actionable recommendations.", "height": 528, "width": 460, "color": 7 }, "id": "ebcb7ca3-f70c-4a90-8a2a-f489e7be4c73", "name": "Section: AI Analysis", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -422, 24 ] }, { "parameters": { "content": "## 4. Routing & Archiving\nRoutes alerts based on severity (Critical = Email+Slack, Warning = Slack) and archives all data points to Google Sheets for historical analysis.", "height": 756, "width": 900, "color": 7 }, "id": "7f2b32a5-d3b2-4fea-844f-4b39b8e8a239", "name": "Section: Alerting", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 94, -196 ] }, { "parameters": { "topics": "sensors/+/data", "options": {} }, "id": "bc86720b-9de9-4693-b090-343d3ebad3a3", "name": "MQTT Sensor Trigger", "type": "n8n-nodes-base.mqttTrigger", "typeVersion": 1, "position": [ -1760, 88 ] }, { "parameters": { "rule": { "interval": [ { "field": "minutes", "minutesInterval": 15 } ] } }, "id": "1c38f2d0-aa00-447e-bdae-bffd08c38461", "name": "Batch Process Schedule", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [ -1760, 280 ] }, { "parameters": { "mode": "chooseBranch" }, "id": "f9b41822-ee61-448b-b324-38483036e0e1", "name": "Merge Triggers", "type": "n8n-nodes-base.merge", "typeVersion": 3, "position": [ -1536, 184 ] }, { "parameters": { "mode": "raw", "jsonOutput": "{\n \"thresholds\": {\n \"temperature\": {\"min\": -10, \"max\": 50, \"unit\": \"C\"},\n \"humidity\": {\"min\": 20, \"max\": 90, \"unit\": \"%\"},\n \"pressure\": {\"min\": 950, \"max\": 1050, \"unit\": \"hPa\"},\n \"co2\": {\"min\": 400, \"max\": 2000, \"unit\": \"ppm\"}\n },\n \"alertConfig\": {\n \"criticalChannel\": \"#iot-critical\",\n \"warningChannel\": \"#iot-alerts\",\n \"emailRecipients\": \"ops@example.com\"\n }\n}", "options": {} }, "id": "308705a8-edc7-4435-9250-487aa528e033", "name": "Define Sensor Thresholds", "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ -1312, 184 ] }, { "parameters": { "jsCode": "const items = $input.all();\nconst thresholds = $('Define Sensor Thresholds').first().json.thresholds;\nconst results = [];\n\nfor (const item of items) {\n let sensorData;\n try {\n sensorData = typeof item.json.message === 'string' \n ? JSON.parse(item.json.message) \n : item.json;\n } catch (e) {\n sensorData = item.json;\n }\n \n const now = new Date();\n const reading = {\n sensorId: sensorData.sensorId || sensorData.topic?.split('/')[1] || 'unknown',\n location: sensorData.location || 'Main Facility',\n timestamp: now.toISOString(),\n readings: {\n temperature: sensorData.temperature ?? null,\n humidity: sensorData.humidity ?? null,\n pressure: sensorData.pressure ?? null,\n co2: sensorData.co2 ?? null\n },\n metadata: {\n receivedAt: now.toISOString(),\n source: item.json.topic || 'batch',\n thresholds: thresholds\n }\n };\n \n results.push({ json: reading });\n}\n\nreturn results;" }, "id": "a2008189-5ace-418b-b0db-d51d63dcf2d8", "name": "Parse Sensor Payload", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -1088, 184 ] }, { "parameters": { "type": "SHA256", "value": "={{ $json.sensorId + '-' + $json.timestamp + '-' + JSON.stringify($json.readings) }}", "dataPropertyName": "dataHash" }, "id": "bf8db555-a10e-4468-a44a-cdc4c97e5b80", "name": "Generate Data Fingerprint", "type": "n8n-nodes-base.crypto", "typeVersion": 1, "position": [ -864, 184 ] }, { "parameters": { "compare": "selectedFields", "fieldsToCompare": "dataHash", "options": {} }, "id": "a45405e2-d211-449d-84d7-4538eaf56fcd", "name": "Remove Duplicate Readings", "type": "n8n-nodes-base.removeDuplicates", "typeVersion": 1, "position": [ -640, 184 ] }, { "parameters": { "text": "=Analyze this IoT sensor reading and determine if there are any anomalies:\n\nSensor ID: {{ $json.sensorId }}\nLocation: {{ $json.location }}\nTimestamp: {{ $json.timestamp }}\n\nReadings:\n- Temperature: {{ $json.readings.temperature }}°C (Normal: {{ $json.metadata.thresholds.temperature.min }} to {{ $json.metadata.thresholds.temperature.max }})\n- Humidity: {{ $json.readings.humidity }}% (Normal: {{ $json.metadata.thresholds.humidity.min }} to {{ $json.metadata.thresholds.humidity.max }})\n- CO2: {{ $json.readings.co2 }} ppm (Normal: {{ $json.metadata.thresholds.co2.min }} to {{ $json.metadata.thresholds.co2.max }})\n\nProvide your analysis in this exact JSON format:\n{\n \"hasAnomaly\": true/false,\n \"severity\": \"critical\"/\"warning\"/\"normal\",\n \"anomalies\": [\"list of detected issues\"],\n \"reasoning\": \"explanation of your analysis\",\n \"recommendation\": \"suggested action\"\n}", "options": { "systemMessage": "You are an IoT monitoring expert. Analyze sensor data and detect anomalies based on the provided thresholds. Be precise and provide actionable recommendations. Always respond in valid JSON format." } }, "id": "b60194ba-7b99-44e0-b0d7-9f1632dce4d4", "name": "AI Anomaly Detector", "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 1.7, "position": [ -416, 184 ] }, { "parameters": { "jsCode": "const item = $input.first();\nconst originalData = $('Remove Duplicate Readings').first().json;\n\nlet aiAnalysis;\ntry {\n const responseText = item.json.output || item.json.text || '';\n const jsonMatch = responseText.match(/\\{[\\s\\S]*\\}/);\n aiAnalysis = jsonMatch ? JSON.parse(jsonMatch[0]) : {\n hasAnomaly: false,\n severity: 'normal',\n anomalies: [],\n reasoning: 'Unable to parse AI response',\n recommendation: 'Manual review required'\n };\n} catch (e) {\n aiAnalysis = {\n hasAnomaly: false,\n severity: 'normal',\n anomalies: [],\n reasoning: 'Parse error: ' + e.message,\n recommendation: 'Manual review required'\n };\n}\n\nreturn [{\n json: {\n ...originalData,\n analysis: aiAnalysis,\n alertLevel: aiAnalysis.severity,\n requiresAlert: aiAnalysis.hasAnomaly && aiAnalysis.severity !== 'normal'\n }\n}];" }, "id": "a145a8c7-538c-411a-95c6-9485acdcb969", "name": "Parse AI Analysis", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ -64, 184 ] }, { "parameters": { "rules": { "values": [ { "conditions": { "options": { "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "critical", "operator": { "type": "string", "operation": "equals" }, "leftValue": "={{ $json.alertLevel }}", "rightValue": "critical" } ] }, "renameOutput": true, "outputKey": "Critical" }, { "conditions": { "options": { "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "warning", "operator": { "type": "string", "operation": "equals" }, "leftValue": "={{ $json.alertLevel }}", "rightValue": "warning" } ] }, "renameOutput": true, "outputKey": "Warning" } ] }, "options": { "fallbackOutput": "extra" } }, "id": "1ab9785d-9f7f-4840-b1e9-0afc62b00b12", "name": "Route by Severity", "type": "n8n-nodes-base.switch", "typeVersion": 3.2, "position": [ 160, 168 ] }, { "parameters": { "sendTo": "={{ $('Define Sensor Thresholds').first().json.alertConfig.emailRecipients }}", "subject": "=CRITICAL IoT Alert: {{ $json.sensorId }} - {{ $json.analysis.anomalies[0] || 'Anomaly Detected' }}", "message": "=CRITICAL IoT SENSOR ALERT\n\nSensor: {{ $json.sensorId }}\nLocation: {{ $json.location }}\nTime: {{ $json.timestamp }}\n\nReadings:\n- Temperature: {{ $json.readings.temperature }}°C\n- Humidity: {{ $json.readings.humidity }}%\n- CO2: {{ $json.readings.co2 }} ppm\n\nAI Analysis:\n{{ $json.analysis.reasoning }}\n\nDetected Issues:\n{{ $json.analysis.anomalies.join('\\n- ') }}\n\nRecommendation:\n{{ $json.analysis.recommendation }}", "options": {} }, "id": "28201a6c-10b5-4387-be89-10a57c634622", "name": "Send Critical Email", "type": "n8n-nodes-base.gmail", "typeVersion": 2.1, "position": [ 384, -80 ], "webhookId": "35b9f8fa-4a50-456e-b552-9fd20a25ccc5" }, { "parameters": { "select": "channel", "channelId": { "__rl": true, "mode": "name", "value": "#iot-critical" }, "text": "=🚨 CRITICAL IoT ALERT\n\nSensor: {{ $json.sensorId }}\nLocation: {{ $json.location }}\n\nReadings:\n• Temperature: {{ $json.readings.temperature }}°C\n• Humidity: {{ $json.readings.humidity }}%\n• CO2: {{ $json.readings.co2 }} ppm\n\nAI Analysis: {{ $json.analysis.reasoning }}\nRecommendation: {{ $json.analysis.recommendation }}", "otherOptions": {} }, "id": "c5a297be-ccef-40ba-9178-65805262efba", "name": "Slack Critical Alert", "type": "n8n-nodes-base.slack", "typeVersion": 2.2, "position": [ 384, 112 ], "webhookId": "19113595-0208-4b37-b68c-c9788c19f618" }, { "parameters": { "select": "channel", "channelId": { "__rl": true, "mode": "name", "value": "#iot-alerts" }, "text": "=⚠️ IoT Warning\n\nSensor: {{ $json.sensorId }} | Location: {{ $json.location }}\nIssue: {{ $json.analysis.anomalies[0] || 'Threshold approaching' }}\nRecommendation: {{ $json.analysis.recommendation }}", "otherOptions": {} }, "id": "5c3d7acf-0211-44dd-9f4b-a43d3796abb1", "name": "Slack Warning Alert", "type": "n8n-nodes-base.slack", "typeVersion": 2.2, "position": [ 384, 400 ], "webhookId": "37abfb19-f82f-4449-bd69-a65635b99606" }, { "parameters": {}, "id": "6bcbb42f-ec14-4f00-a091-babcc2d2d5c4", "name": "Merge Alert Outputs", "type": "n8n-nodes-base.merge", "typeVersion": 3, "position": [ 608, 184 ] }, { "parameters": { "operation": "append", "documentId": { "__rl": true, "mode": "list", "value": "" }, "sheetName": { "__rl": true, "mode": "list", "value": "" } }, "id": "6243aa23-408d-4928-a512-811eeb3b5f9e", "name": "Archive to Google Sheets", "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.5, "position": [ 832, 184 ] }, { "parameters": { "model": "gpt-4o-mini", "options": { "temperature": 0.3 } }, "id": "61081e8a-ebc9-465f-8beb-88af225e59f2", "name": "OpenAI Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "typeVersion": 1.2, "position": [ -344, 408 ] } ], "pinData": {}, "connections": { "MQTT Sensor Trigger": { "main": [ [ { "node": "Merge Triggers", "type": "main", "index": 0 } ] ] }, "Batch Process Schedule": { "main": [ [ { "node": "Merge Triggers", "type": "main", "index": 1 } ] ] }, "Merge Triggers": { "main": [ [ { "node": "Define Sensor Thresholds", "type": "main", "index": 0 } ] ] }, "Define Sensor Thresholds": { "main": [ [ { "node": "Parse Sensor Payload", "type": "main", "index": 0 } ] ] }, "Parse Sensor Payload": { "main": [ [ { "node": "Generate Data Fingerprint", "type": "main", "index": 0 } ] ] }, "Generate Data Fingerprint": { "main": [ [ { "node": "Remove Duplicate Readings", "type": "main", "index": 0 } ] ] }, "Remove Duplicate Readings": { "main": [ [ { "node": "AI Anomaly Detector", "type": "main", "index": 0 } ] ] }, "AI Anomaly Detector": { "main": [ [ { "node": "Parse AI Analysis", "type": "main", "index": 0 } ] ] }, "Parse AI Analysis": { "main": [ [ { "node": "Route by Severity", "type": "main", "index": 0 } ] ] }, "Route by Severity": { "main": [ [ { "node": "Send Critical Email", "type": "main", "index": 0 }, { "node": "Slack Critical Alert", "type": "main", "index": 0 } ], [ { "node": "Slack Warning Alert", "type": "main", "index": 0 } ], [ { "node": "Merge Alert Outputs", "type": "main", "index": 0 } ] ] }, "Send Critical Email": { "main": [ [ { "node": "Merge Alert Outputs", "type": "main", "index": 0 } ] ] }, "Slack Critical Alert": { "main": [ [ { "node": "Merge Alert Outputs", "type": "main", "index": 0 } ] ] }, "Slack Warning Alert": { "main": [ [ { "node": "Merge Alert Outputs", "type": "main", "index": 0 } ] ] }, "Merge Alert Outputs": { "main": [ [ { "node": "Archive to Google Sheets", "type": "main", "index": 0 } ] ] }, "OpenAI Chat Model": { "ai_languageModel": [ [ { "node": "AI Anomaly Detector", "type": "ai_languageModel", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "versionId": "", "meta": { "instanceId": "15d6057a37b8367f33882dd60593ee5f6cc0c59310ff1dc66b626d726083b48d" }, "tags": [] }
by Gtaras
Overview Manual financial reconciliation is tedious and prone to error. This workflow functions as an AI Financial Controller, automatically monitoring your inbox for invoices, receipts, and bills, extracting the data using OCR, and syncing it to Google Sheets for approval. Unlike simple scrapers, this workflow uses a "Guardrail" AI agent to filter out non-financial emails (like newsletters) before they are processed, ensuring only actual transactions are recorded. Who is it for? Finance Teams:** To automate the collection of vendor invoices. Freelancers:** To track expenses and receipts for tax season. Operations Managers:** To monitor budget spend and categorize costs automatically. How it works Ingest: The workflow watches a specific Gmail label (e.g., "INBOX") for new emails. Guardrail: A Gemini-powered AI agent analyzes the email text to determine if it is a valid financial transaction. If not, the workflow stops. Extraction (OCR): If an attachment exists: An AI Agent (GPT-4o) extracts data from the PDF. If no attachment: An AI Agent extracts data directly from the email body. Validation: Code nodes check for missing fields or invalid amounts. Business Logic: The system automatically assigns General Ledger (GL) categories (e.g., "Uber" -> "Travel") and sets approval statuses based on amount thresholds. Sync: Validated data is logged to Google Sheets, and a confirmation email is sent. Errors are logged to a separate error sheet. How to set up Google Sheets: Copy this Google Sheet template to your drive. It contains the necessary tabs (Invoices, Error Logs, Success Metrics). Configure Workflow: Open the node named "Configuration: User Settings". Paste your Google Sheet ID (found in the URL of your new sheet). Enter the Admin Email address where you want to receive error notifications. Credentials: Connect your Gmail account. Connect your Google Sheets account. Connect your OpenAI (for OCR) and Google Gemini/PaLM (for Guardrails) accounts. Requirements n8n version 1.0 or higher. Gmail account. OpenAI API Key. Google Gemini (PaLM) API Key.
by Simeon Penev
Who’s it for Marketing, growth, and analytics teams who want a decision-ready GA4 summary—automatically calculated, clearly color-coded, and emailed as a polished HTML report. How it works / What it does Get Client (Form Trigger)* collects *GA4 Property ID (“Account ID”), **Key Event, date ranges (current & previous), Client Name, and recipient email. Overall Metrics This Period / Previous Period (GA4 Data API)** pull sessions, users, engagement, bounce rate, and more for each range. Form Submits This Period / Previous Period (GA4 Data API)** fetch key-event counts for conversion comparisons. Code** normalizes form dates for API requests. AI Agent* builds a *valid HTML email**: Calculates % deltas, applies green for positive (#10B981) and red for negative (#EF4444) changes. Writes summary and recommendations. Produces the final HTML only. Send a message (Gmail)** sends the formatted HTML report to the specified email address with a contextual subject. How to set up 1) Add credentials: Google Analytics OAuth2, OpenAI (Chat), Gmail OAuth2. 2) Ensure the form fields match your GA4 property and event names; “Account ID” = GA4 Property ID. Property ID - https://take.ms/vO2MG Key event - https://take.ms/hxwQi 3) Publish the form URL and run a test submission. Requirements GA4 property access (Viewer/Analyst) • OpenAI API key • Gmail account with send permission. Resources Google OAuth2 (GA4) – https://docs.n8n.io/integrations/builtin/credentials/google/oauth-generic/ OpenAI credentials – https://docs.n8n.io/integrations/builtin/credentials/openai/ Gmail OAuth2 – https://docs.n8n.io/integrations/builtin/credentials/google/ GA4 Data API overview – https://developers.google.com/analytics/devguides/reporting/data/v1
by Charles
🚀 Daily IndieHackers Reddit Trend Analysis to Slack > Transform Reddit chaos into actionable startup intelligence > Get AI-powered insights from r/indiehackers delivered to your Slack every morning 🎯 Who's It For This template is designed for startup founders, growth teams, and product managers who need to: Stay ahead of indie hacker trends without manual Reddit browsing Understand what's working in the entrepreneurial community Get actionable insights for product and marketing decisions Keep their team informed about emerging opportunities Perfect for teams building products for entrepreneurs or anyone wanting to leverage community intelligence for competitive advantage. ✨ What It Does Transform your morning routine with automated intelligence gathering that delivers structured, AI-powered summaries of the hottest r/indiehackers discussions directly to your Slack channel. 🧠 Smart Analysis Features | Feature | Description | |---------|-------------| | 🔥 Hotness Scoring | Calculates engagement scores using time-decay algorithms | | 📊 Topic Extraction | Identifies key themes and trending subjects | | 💰 Traction Signals | Spots revenue, metrics, and growth indicators | | 🎯 Theme Clustering | Groups posts into actionable categories | | ⚡ Action Items | Generates specific recommendations for your team | 📱 Slack Integration Receive beautifully formatted messages with: Executive summaries and key takeaways Top 3 hottest posts with engagement metrics Interactive buttons for deeper exploration Team discussion prompts ⚙️ How It Works graph LR A[🕐 Daily 8AM Trigger] --> B[📱 Fetch Reddit Posts] B --> C[🔄 Process Data] C --> D[🤖 Gemini AI Analysis] D --> E[✨ Groq Slack Formatting] E --> F[💬 Deliver to Slack] 🔄 The Complete Process Step 1: Automated Trigger Every morning at 8 AM, the workflow springs into action Step 2: Reddit Data Collection Fetches the latest 5 posts from r/indiehackers with full metadata Step 3: Data Processing Structures raw Reddit data for optimal AI analysis Step 4: AI-Powered Analysis Gemini AI performs deep analysis calculating hotness scores, extracting topics, and identifying patterns Step 5: Slack Formatting Groq AI Agent transforms insights into beautiful Slack Block Kit messages Step 6: Team Delivery Your designated Slack channel receives the formatted analysis 🛠️ Requirements You'll need API access for: Reddit (OAuth2), Google Gemini, Groq, and Slack (OAuth2). All have free tiers available. 🚀 Setup Guide 1️⃣ Configure Your Credentials Add these credentials in n8n: Reddit OAuth2, Google Gemini, Groq, and Slack OAuth2. The workflow will guide you through each setup. 2️⃣ Customize the Schedule Default: Daily at 8:00 AM To modify: Edit the "Daily Schedule" cron trigger node // Example: Run at 9:30 AM { "triggerTimes": { "item": [{ "hour": 9, "minute": 30 }] } } 3️⃣ Set Your Slack Destination Open the "Send to Slack" node Select your target channel Configure notification preferences 4️⃣ Adjust Analysis Parameters Post Limit: Change from default 5 posts // In "Get many posts" Reddit node "limit": 10 // Recommended: 3-10 posts Context Customization: { "channel_type": "team", "audience": "Growth, Product, and Founders", "cta_link": "https://your-dashboard.com", "timeframe_label": "This Week" } 🎨 Customization Options 🔍 Analysis Focus Areas Transform the workflow for different insights: SaaS-Focused Analysis Add to Gemini prompt: "Focus on SaaS and B2B insights, prioritizing recurring revenue and product-market fit signals" Geographic Targeting Add: "Prioritize posts relevant to [your region/market]" Stage-Specific Insights Add: "Focus on [early-stage/growth-stage] startup challenges" 📈 Hotness Algorithm Tweaking Default Formula: (ups + 2*num_comments) * freshness_decay Emphasize Comments: (ups + 3*num_comments) * freshness_decay Include Upvote Ratio: (ups * upvote_ratio + 2*num_comments) * freshness_decay 🌐 Multi-Subreddit Analysis Expand beyond r/indiehackers: Additional Communities: r/startups r/entrepreneur r/SideProject r/buildinpublic r/nocode 💾 Data Storage Extensions Enhance with historical tracking: | Node Type | Purpose | Benefit | |-----------|---------|---------| | Google Sheets | Trend storage | Historical analysis | | Airtable | Advanced data management | Rich analytics | | Webhook | External analytics | Custom dashboards | 📊 Expected Output 📱 Daily Slack Message Structure 🚀 IndieHackers Trends — This Week 📋 TL;DR: [One-sentence key insight] 🔥 Hot Posts (Top 3) [Post Title] (Hotness: 8.7) Topics: SaaS launch, pricing strategy 💬 23 comments | 👍 156 ups | 📅 Posted 4 hours ago [Open Reddit Button] 🧭 Themes Summary Go-to-market tactics — 3 posts, hotness: 24.1 Product launches — 2 posts, hotness: 18.3 ✅ What to Do Now Test pricing page variations based on community feedback Consider cold email strategies mentioned in hot posts Validate product ideas using discussed frameworks [Open Dashboard Button] 💡 Pro Tips for Success 🎯 Optimization Strategies Week 1-2: Baseline Monitor output quality and team engagement Note which insights generate the most discussion Week 3-4: Refinement Adjust AI prompts based on feedback Fine-tune hotness scoring for your needs Month 2+: Advanced Usage Add historical trend analysis Create custom dashboards with stored data Build feedback loops for continuous improvement 🚨 Common Pitfalls to Avoid | Issue | Solution | |-------|---------| | API Rate Limits | Reduce post count or increase time intervals | | Poor Insight Quality | Refine prompts with specific examples | | Team Engagement Drop | Rotate focus areas and encourage thread discussions | | Information Overload | Limit to top 3 posts and key themes only | 🔧 Troubleshooting ❌ Common Issues & Solutions "Model not found" Error Cause: Gemini regional availability Fix: Check supported regions or switch to alternative AI model Slack Formatting Broken Cause: Invalid Block Kit JSON Fix: Validate JSON structure in AI Agent output Missing Reddit Data Cause: API credentials or rate limits Fix: Verify OAuth2 setup and check usage quotas AI Timeouts Cause: Too much data or complex prompts Fix: Reduce post count or simplify analysis requests ⚡ Performance Optimization Keep analysis under 10 posts for optimal speed Monitor execution times in n8n logs Add error handling nodes for production reliability Use webhook timeouts for external API calls 🌟 Advanced Use Cases 📈 Competitive Intelligence Modify prompts to track specific competitors or market segments mentioned in discussions 🎯 Product Validation Focus analysis on posts related to your product category for market research 📝 Content Strategy Use trending topics to inform your content calendar and thought leadership 🤝 Community Engagement Identify opportunities to participate in discussions and build relationships Ready to transform your startup intelligence gathering? 🚀 Deploy this workflow and start receiving actionable insights tomorrow morning!
by Incrementors
Overview: This n8n workflow automates the complete blog publishing process from topic research to WordPress publication. It researches topics, writes SEO-optimized content, generates images, publishes posts, and notifies teams—all automatically from Google Sheets input. How It Works: Step 1: Client Management & Scheduling Client Data Retrieval:** Scans master Google Sheet for clients with "Active" project status and "Automation" blog publishing setting Publishing Schedule Validation:** Checks if current day matches client's weekly frequency (Mon, Tue, Wed, Thu, Fri, Sat, Sun) or if set to "Daily" Content Source Access:** Connects to client-specific Google Sheet using stored document ID and sheet name Step 2: Content Planning & Selection Topic Filtering:** Retrieves rows where "Status for Approval" = "Approved" and "Live Link" = "Pending" Content Validation:** Ensures Focus Keyword field is populated before proceeding Single Topic Processing:** Selects first available topic to maintain quality and prevent API rate limits Step 3: AI-Powered Research & Writing Comprehensive Research:** Google Gemini analyzes search intent, competitor content, audience needs, trending subtopics, and LSI keywords Content Generation:** Creates 800-1000 word articles with natural keyword integration, internal linking, and conversational tone optimized for Indian investors Quality Assessment:** Evaluates content for human-like writing, conversational tone, readability, and engagement factors Content Optimization:** Automatically fixes grammar, punctuation, sentence flow, and readability issues while maintaining HTML structure Step 4: Visual Content Creation Image Prompt Generation:** OpenAI creates detailed prompts based on blog title and content for professional visuals Image Generation:** Ideogram AI produces 1248x832 resolution images with realistic styling and professional appearance Binary Processing:** Downloads and converts generated images to binary format for WordPress upload Step 5: WordPress Publication Media Upload:** Uploads generated image to WordPress media library with proper filename and headers Content Publishing:** Creates new WordPress post with title, optimized content, and embedded image Featured Image Assignment:** Sets uploaded image as post's featured thumbnail for proper display Category Assignment:** Automatically assigns posts to predefined category Step 6: Tracking & Communication Status Updates:** Updates Google Sheet with live blog URL in "Live Link" column using S.No. as identifier Team Notification:** Sends Discord message to designated channel with published blog link and review request Process Completion:** Triggers next iteration or workflow conclusion based on remaining topics Setup Steps: Estimated Setup Time: 45-60 minutes Required API Credentials: 1. Google Sheets API Service account with sheets access OAuth2 credentials for client-specific sheets Proper sharing permissions for all target sheets 2. Google Gemini API Active API key with sufficient quota Access to Gemini Pro model for content generation Rate limiting considerations for bulk processing 3. OpenAI API GPT-4 access for creative prompt generation Sufficient token allocation for daily operations Fallback handling for API unavailability 4. Ideogram AI API Premium account for quality image generation API key with generation permissions Understanding of rate limits and pricing 5. WordPress REST API Application passwords for each client site Basic authentication setup with proper encoding REST API enabled in WordPress settings User permissions for post creation and media upload 6. Discord Bot API Bot token with message sending permissions Channel ID for notifications Guild access and proper bot roles Master Sheet Configuration: Document Structure: Create primary tracking sheet with columns Client Name:** Business identifier Project Status:** Active/Inactive/Paused Blog Publishing:** Automation/Manual/Disabled Website URL:** Full WordPress site URL with trailing slash Blog Posting Auth Code:** Base64 encoded username: password On Page Sheet:** Google Sheets document ID for content planning WeeklyFrequency:** Daily/Mon/Tue/Wed/Thu/Fri/Sat/Sun Discord Channel:** Channel ID for notifications Content Planning Sheet Structure: Required Columns (exact naming required): S.No.:** Unique identifier for tracking Focus Keyword:** Primary SEO keyword Content Topic** Article title/subject Target Page:** Internal linking target Words:** Target word count Brief URL:** Content brief reference Content URL:** Draft content location Status for Approval:** Pending/Approved/Rejected Live Link:** Published URL (auto-populated) WordPress Configuration: REST API Activation:** Ensure wp-json endpoint accessibility User Permissions:** Create dedicated user with Editor or Administrator role Application Passwords:** Generate secure passwords for API authentication Category Setup:** Create or identify category ID for automated posts Media Settings:** Configure upload permissions and file size limits Security:** Whitelist IP addresses if using security plugins Discord Integration Setup: Bot Creation:** Create application and bot in Discord Developer Portal Permissions:** Grant Send Messages, Embed Links, and Read Message History Channel Configuration:** Set up dedicated channel for blog notifications User Mentions:** Configure user ID for targeted notifications Message Templates:** Customize notification format and content Workflow Features & Capabilities: Content Quality Standards: SEO Optimization:** Natural keyword integration with LSI keywords and related terms Readability:** Conversational tone with short sentences and clear explanations Structure:** Proper HTML formatting with headings, lists, and internal links Length:** Consistent 800-1000 word count for optimal engagement Audience Targeting:** Content tailored for Indian investor audience with relevant examples Image Generation Specifications: Resolution:** 1248x832 pixels optimized for blog headers Style:** Realistic professional imagery with human subjects Design:** Clean layout with heading text placement (bottom or left side) Quality:** High-resolution output suitable for web publishing Branding:** Light beige to gradient backgrounds with golden overlay effects Error Handling & Reliability: Graceful Failures:** Workflow continues even if individual steps encounter errors API Rate Limits:** Built-in delays and retry mechanisms for external services Data Validation:** Checks for required fields before processing Backup Processes:** Alternative paths for critical failure points Logging:** Comprehensive tracking of successes and failures Security & Access Control: Credential Encryption:** All API keys stored securely in n8n vault Limited Permissions:** Service accounts with minimum required access Authentication:** Basic auth for WordPress with encoded credentials Data Privacy:** No sensitive information exposed in logs or outputs Access Logging:** Track all sheet modifications and blog publications Troubleshooting: Common Issues: API Rate Limits:** Check your API quotas and usage limits WordPress Authentication:** Verify your basic auth credentials are correct Sheet Access:** Ensure Google Sheets API has proper permissions Image Generation Fails:** Check Ideogram API key and quotas Need Help?: For technical support or questions: Email: info@incrementors.com Contact Form: https://www.incrementors.com/contact-us/
by Rapiwa
Who Is This For? This n8n automation workflow is designed for sales teams, client managers, consultants, or anyone who regularly schedules and follows up on meetings — and wants to save time doing it. If you often find yourself juggling between Google Sheets, Google Calendar, email, and WhatsApp just to manage your meetings, confirmations, and follow-ups — this workflow is for you. What This Workflow Does This workflow is structured into two main, independently scheduled branches: 1. Create Event (Schedule Meetings) Trigger:** Starts automatically on a schedule (e.g., every minute). Data Source:* Fetches new meeting data from a *Google Sheet**. Event Creation:* Creates a new event in *Google Calendar** using the data. Confirmation:* Sends a confirmation message via *WhatsApp (Rapiwa)* and *Email (Gmail)**. Status Update:* Updates the source *Google Sheet** to mark the meeting as 'sent'. 2. Reminder Event (Schedule Follow-ups) Trigger:** Starts automatically on a schedule (e.g., every minute). Past Events:* Retrieves recent past events from *Google Calendar**. Deduplication:** Uses a "Mark as Seen" node to prevent processing the same event multiple times. Filtering:** Filters for specific events that require a follow-up ("Only Follow Ups" node). AI Follow-up:* An *AI Meeting Agent (using Gemini/LLM)* uses the details of the past meeting and the Calendar's *Availability** tool to find and suggest open slots for a future meeting. Communication:* Sends a message with the suggested slots via *WhatsApp (Rapiwa)* and *Email (Gmail)**. Key Features Scheduled Automation:** Both event creation and follow-up scheduling run on a recurring schedule. Data Synchronization:* Reads meeting details from and updates a *Google Sheet**. Google Calendar Integration:** Creates events and checks calendar availability. Multi-Channel Communication:* Sends confirmations/follow-ups via *WhatsApp (Rapiwa)* and *Email (Gmail)**. AI-Powered Follow-up:* Uses an *AI Agent (Gemini)** to intelligently find and format available slots for the next meeting, considering the details of the past meeting (day, time, duration). Idempotency:** The "Mark as Seen" node prevents duplicate follow-up attempts for the same event. Requirements n8n instance with nodes: Schedule Trigger, Google Sheets, Split In Batches, Date & Time, Code, Google Calendar, Rapiwa, Gmail, Filter, Agent (LangChain), LLM Chat (Google Gemini), Structured Output Parser (LangChain), Set, Remove Duplicates, Wait. Google Calendar** with an available calendar for event creation and availability checks. Google Sheets** for storing meeting details. Rapiwa** (WhatsApp API) account credentials. Gmail** account credentials. Google Gemini (PaLM) API** credentials for the AI agent. How to Use — Step-by-Step Setup Credentials Setup Google Sheets OAuth2: Configure to allow the workflow to read from and write to your Sheet. Google Calendar OAuth2: Configure to allow event creation and availability checks. Rapiwa API: Set up credentials for sending WhatsApp messages. Gmail OAuth2: Set up credentials for sending email confirmations/follow-ups. Google Gemini(PaLM) API: Set up credentials for the AI agent functionality. Configure "Create Event" Branch Get in sheet: Update the Document ID and Sheet Name to point to your meeting data spreadsheet. The node is set to filter by a status column. Create an event: Verify the correct Calendar ID is selected. The end time is dynamically generated by the previous Code node. Rapiwa / Send a message1: Update the recipient number/email address and customize the message templates. Update status in sheet: Ensure the correct Document ID, Sheet Name, and matching column (row\_number) are configured to update the status to "sent". Configure "Reminder Event" Branch Get Past Events: Verify the correct Calendar ID is selected. Only Follow Ups: Customize the filter condition if only a subset of past meetings needs follow-up (e.g., if you have a "Follow-up Status" column to check). Meeting Agent: Review the System Message to ensure the AI's logic for finding slots matches your business rules (e.g., preferred working hours, look-ahead period). Generate Message: Customize the message template, which formats the AI-suggested slots. Rapiwa1 / Send a message: Update the recipient number/email address for the follow-up messages. Google Sheet Required Columns The workflow expects a Google Sheet with meeting data to have at least the following columns: A Google Sheet formatted like this ➤ Sample Sheet | title | description | location | color_number | start time | end time | reminder status | status | | :-------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------- | :----------- | :----------------- | :----------------- | :-------------- | :------ | | 2025 Personal Planner & Events Calendar | Stay organized and never miss an important date! This calendar helps........ | Dhaka, Bangladesh | 4 | 10/28/2025 3:50:00 | 10/29/2025 5:30:00 | sent | checked | | 2026 Personal Planner & Events Calendar | Stay organized and never miss an important date! This calendar helps........ | Dhaka, Bangladesh | 2 | 10/29/2025 3:50:00 | 10/30/2025 5:30:00 | sent | checked | Useful Links Dashboard:** https://app.rapiwa.com Official Website:** https://rapiwa.com Documentation:** https://docs.rapiwa.com Support & Help WhatsApp**: Chat on WhatsApp Discord**: SpaGreen Community Facebook Group**: SpaGreen Support Website**: https://spagreen.net Developer Portfolio**: Codecanyon SpaGreen
by Harry Siggins
This n8n template transforms your daily meeting preparation by automatically researching attendees and generating comprehensive briefing documents. Every weekday morning, it analyzes your calendar events, researches each external attendee using multiple data sources, and delivers professionally formatted meeting briefs directly to your Slack channel. Who's it for Business professionals, sales teams, account managers, and executives who regularly attend meetings with external contacts and want to arrive fully prepared with relevant context, conversation starters, and strategic insights about their attendees. How it works The workflow triggers automatically Monday through Friday at 6 AM, fetching your day's calendar events and filtering for meetings with external attendees. For each meeting, an AI agent researches attendees using your CRM (Attio), email history (Gmail), past calendar interactions, and external company research via Perplexity when needed. The system then generates structured meeting briefs containing attendee background, relationship context, key talking points, and strategic objectives, delivering everything as a formatted Slack message to start your day. Requirements Google Calendar with OAuth2 credentials Gmail with OAuth2 credentials Slack workspace with bot token and channel access Attio CRM with API bearer token OpenRouter API key for AI model access (or other API credentials to connect AI to your AI agents) Perplexity API key for company research How to set up Configure credentials for all required services in your n8n instance Update personal identifiers in the workflow: Replace "YOUR_EMAIL@example.com" with your actual calendar email in both Google Calendar nodes Replace "YOUR_SLACK_CHANNEL_ID" with your target channel ID in both Slack nodes Adjust AI models in OpenRouter nodes based on your preferences and model availability Test the workflow manually with a day that contains external meetings Verify Slack formatting appears correctly in your channel How to customize the workflow Change meeting research depth: Modify the AI agent prompt to focus on specific research areas like company financial data, recent news, or technical background. Adjust notification timing: Update the cron expression in the Schedule Trigger to run at different times or days. Expand CRM integration: Add additional Attio API calls to capture more contact details or create follow-up tasks. Enhance Slack formatting: Customize the Block Kit message structure in the JavaScript code node to include additional meeting metadata or visual elements. Add more research sources: Connect additional tools like LinkedIn, company databases, or news APIs to the AI agent for richer attendee insights. The template uses multiple AI models through OpenRouter for different processing stages, allowing you to optimize costs and performance by selecting appropriate models for research tasks versus text formatting operations.
by Tom
This n8n workflow template simplifies the process of digesting cybersecurity reports by summarizing, deduplicating, organizing, and identifying viral topics of interest into daily emails. It will generate two types of emails: A daily digest with summaries of deduplicated cybersecurity reports organized into various topics. A daily viral topic report with summaries of recurring topics that have been identified over the last seven days. This workflow supports threat intelligence analysts digest the high number of cybersecurity reports they must analyse daily by decreasing the noise and tracking topics of importance with additional care, while providing customizability with regards to sources and output format. How it works The workflow follows the threat intelligence lifecycle as labelled by the coloured notes. Every morning, collect news articles from a set of RSS feeds. Merge the feeds output and prepare them for LLM consumption. Task an LLM with writing an intelligence briefing that summarizes, deduplicates, and organizes the topics. Generate and send an email with the daily digest. Collect the daily digests of the last seven days and prepare them for LLM consumption. Task an LLM with writing a report that covers 'viral' topics that have appeared prominently in the news. Store this report and send out over email. How to use & customization The workflow will trigger daily at 7am. The workflow can be reused for other types of news as well. The RSS feeds can be swapped out and the AI prompts can easily be altered. The parameters used for the viral topic identification process can easily be changed (number of previous days considered, requirements for a topic to be 'viral'). Requirements The workflow leverages Gemini (free tier) for email content generation and Baserow for storing generated reports. The viral topic identification relies on the Gemini Pro model because of a higher data quantity and more complex task. An SMTP email account must be provided to send the emails with. This can be through Gmail.
by Manav Desai
WhatsApp RAG Chatbot with Supabase, Gemini 2.5 Flash, and OpenAI Embeddings This n8n template demonstrates how to build a WhatsApp-based AI chatbot that answers user questions using document retrieval (RAG) powered by Supabase for storage, OpenAI embeddings for semantic search, and Gemini 2.5 Flash LLM for generating high-quality responses. Use cases are many: Turn your WhatsApp into a knowledge assistant for FAQs, customer support, or internal company documents — all without coding. Good to know The workflow uses OpenAI embeddings for both document embeddings and query embeddings, ensuring accurate semantic search. Gemini 2.5 Flash LLM** is used to generate user-friendly answers from the retrieved context. Messages are processed in real-time and sent back directly to WhatsApp. Workflow is modular — you can split document ingestion and query handling for large-scale setups. Supabase and WhatsApp API credentials must be configured before running. How it works Trigger: A new WhatsApp message triggers the workflow via webhook. Message Check: Determines if the message is a query or a document upload. Document Handling: Fetch file URL from WhatsApp. Convert binary to text. Generate embeddings with OpenAI and store them in Supabase. Query Handling: Generate query embeddings with OpenAI. Retrieve relevant context from Supabase. Pass context to Gemini 2.5 Flash LLM to compose a response. Response: Send the answer back to the user on WhatsApp. Optional: Add Gmail node to forward chat logs or daily summaries. How to use Configure WhatsApp Business API webhook for incoming messages. Add your Supabase and OpenAI credentials in n8n’s credentials manager. Upload documents via WhatsApp to populate the Supabase vector store. Ask queries — the bot retrieves context and answers using Gemini 2.5 Flash. Requirements WhatsApp Business API** (or Twilio WhatsApp Sandbox) Supabase account** (vector storage for embeddings) OpenAI API key** (for generating embeddings) Gemini API access** (for LLM responses) Customising this workflow Swap WhatsApp with Telegram, Slack, or email for different chat channels. Extend ingestion to other sources like Google Drive or Notion. Adjust the number of retrieved documents or prompt style in Gemini for tone control. Add a Gmail output node to send logs or alerts automatically.
by Akshay
Overview This project is an AI-powered hotel receptionist built using n8n, designed to handle guest queries automatically through WhatsApp. It integrates Google Gemini, Redis, MySQL, and Google Sheets via LangChain to create an intelligent conversational system that understands and answers booking-related questions in real time. A standout feature of this workflow is its AI model-switching system — it dynamically assigns users to different Gemini models, balancing traffic, improving performance, and reducing API costs. How It Works WhatsApp Trigger The workflow starts when a hotel guest sends a message through WhatsApp. The system captures the message text, contact details, and session information for further processing. Redis-Based Model Management The workflow checks Redis for a saved record of the user’s previously assigned AI model. If no record exists, a Model Decider node assigns a new model (e.g., Gemini 1 or Gemini 2). Redis then stores this model assignment for an hour, ensuring consistent routing and controlled traffic distribution. Model Selector The Model Selector routes each user’s request to the correct Gemini instance, enabling parallel execution across multiple AI models for faster response times and cost optimization. AI Agent Logic The LangChain AI Agent serves as the system’s reasoning core. It: Interprets guest questions such as: “Who checked in today?” “Show me tomorrow’s bookings.” “What’s the price for a deluxe suite for two nights?” Generates safe, read-only SQL SELECT queries. Fetches the requested data from the MySQL database. Combines this with dynamic pricing or promotions from Google Sheets, if available. Response Delivery Once the AI Agent formulates an answer, it sends a natural-sounding message back to the guest via WhatsApp, completing the interaction loop. Setup & Requirements Prerequisites Before deploying this workflow, ensure the following: n8n Instance** (local or hosted) WhatsApp Cloud API** with messaging permissions Google Gemini API Key** (for both models) Redis Database** for user session and model routing MySQL Database** for hotel booking and guest data Google Sheets Account** (optional, for pricing or offer data) Step-by-Step Setup Configure Credentials Add all API credentials in n8n → Settings → Credentials (WhatsApp, Redis, MySQL, Google). Prepare Databases MySQL Tables Example: bookings(id, guest_name, room_type, check_in, check_out) rooms(id, type, rate, status) Ensure the MySQL user has read-only permissions. Set Up Redis Create Redis keys for each user: llm-user:<whatsapp_id> = { "modelIndex": 0 } TTL: 3600 seconds (1 hour). Connect Google Sheets (Optional) Add your sheet under Google Sheets OAuth2. Use it to manage room rates, discounts, or seasonal offers dynamically. WhatsApp Webhook Configuration In Meta’s Developer Console, set the webhook URL to your n8n instance. Select message updates to trigger the workflow. Testing the Workflow Send messages like “Who booked today?” or a voice message. Confirm responses include real data from MySQL and contextual replies. Key Features Text & voice support** for guest interactions Automatic AI model-switching** using Redis Session memory** for context-aware conversations Read-only SQL query generation** for database safety Google Sheets integration** for live pricing and availability Scalable design** supporting multiple LLM instances Example Guest Queries | Guest Query | AI Response Example | |--------------|--------------------| | “Who checked in today?” | “Two guests have checked in today: Mr. Ahmed (Room 203) and Ms. Priya (Room 410).” | | “How much is a deluxe room for two nights?” | “A deluxe room costs $120 per night. The total for two nights is $240.” | | “Do you have any discounts this week?” | “Yes! We’re offering a 10% weekend discount on all deluxe and suite rooms.” | | “Show me tomorrow’s check-outs.” | “Three check-outs are scheduled tomorrow: Mr. Khan (101), Ms. Lee (207), and Mr. Singh (309).” | Customization Options 🧩 Model Assignment Logic You can modify the Model Decider node to: Assign models based on user load, region, or priority level. Increase or decrease TTL in Redis for longer model persistence. 🧠 AI Agent Prompt Adjust the system prompt to control tone and response behavior — for example: Add multilingual support. Include upselling or booking confirmation messages. 🗂️ Database Expansion Extend MySQL to include: Staff schedules Maintenance records Restaurant reservations Then link new queries in the AI Agent node for richer responses. Tech Stack n8n** – Workflow automation & orchestration Google Gemini (PaLM)** – LLM for reasoning & generation Redis** – Model assignment & session management MySQL** – Booking & guest data storage Google Sheets** – Dynamic pricing reference WhatsApp Cloud API** – Messaging interface Outcome This workflow demonstrates how AI automation can transform hotel operations by combining WhatsApp communication, database intelligence, and multi-model AI reasoning. It’s a production-ready foundation for scalable, cost-optimized, AI-driven hospitality solutions that deliver fast, accurate, and personalized guest interactions.
by Yusuke Yamamoto
Daily AI News Summary & Gmail Delivery This n8n template demonstrates how to build an autonomous AI agent that automatically scours the web for the latest news, intelligently summarizes the top stories, and delivers a professional, formatted news digest directly to your email inbox. Use cases are many: Create a personalized daily briefing to start your day informed, keep your team updated on industry trends and competitor news, or automate content curation for your newsletter. Good to know At the time of writing, costs will depend on the LLM you select via OpenRouter and your usage of the Tavily Search API. Both services offer free tiers to get started. This workflow requires API keys and credentials for OpenRouter, Tavily, and Gmail. The AI Agent's system prompt is configured to produce summaries in Japanese. You can easily change the language and topics by editing the prompt in the "AI News Agent" node. How it works The workflow begins on a daily schedule, which you can configure to your preferred time. A Code node dynamically generates a search query for the current day's most important news across several categories. The AI Agent receives this query. It uses its attached tools to perform the task: It uses the Tavily News Search tool to find relevant, up-to-date articles from the web. It then uses the OpenRouter Chat Model to analyze the search results, identify the most significant stories, and write a summary for each. The agent's output is strictly structured into a JSON format, containing a main title and an array of individual news stories. Another Code node takes this structured JSON data and transforms it into a clean, professional HTML-formatted email. Finally, the Gmail node sends the beautifully formatted email to your specified recipient. How to use Before you start, you must add your credentials for OpenRouter, Tavily, and Gmail in their respective nodes. Customize the schedule in the "Schedule Trigger" node to set the daily delivery time. Change the recipient's email address in the final "Send a message" (Gmail) node. Requirements OpenRouter account (for access to various LLMs) Tavily AI account (for the real-time search API) Google account with Gmail enabled for sending emails via OAuth2 Customising this workflow Change the delivery channel:** Easily swap the final Gmail node for a Slack, Discord, or Telegram node to send the news summary to a team channel. Focus the news topics:** Modify the "Prepare News Query" node to search for highly specific topics, such as "latest advancements in artificial intelligence" or "financial news from the European market." Archive the news:** Add a node after the AI Agent to save the structured JSON data to a database or Google Sheet, allowing you to build a searchable news archive over time.
by Václav Čikl
Description: This sophisticated workflow automates personalized email campaigns for musicians and band managers. The system processes contact databases, analyzes previous Gmail conversation history, and uses AI to generate contextually appropriate emails tailored to different contact categories (venues, festivals, media, playlists). Key Features: Multi-category support**: Bookers, festivals, media, playlist curators Conversation context analysis**: Maintains relationship history from Gmail AI-powered personalization**: Custom prompts for each contact type Multi-language support**: Localized content and prompts Gmail integration**: Automatic draft creation with signatures Bulk processing**: Handle hundreds of contacts efficiently Use Cases: Album/single promotion campaigns Tour booking automation Festival submission management Playlist pitching campaigns Media outreach automation Venue relationship management Perfect For: Independent musicians and bands Music managers and booking agents Record labels with multiple artists PR agencies in music industry Festival organizers (for artist outreach) Required Setup: 1. Credentials & APIs: Gmail OAuth2** (read messages + create drafts permissions) Google Sheets API** (for AutomatizationHelper configuration) OpenAI API** or compatible LLM (for content generation) 2. Required Files: Contact Database** (CSV): Your venue/media/festival contacts AutomatizationHelper** (Google Sheets): Campaign configuration, prompts, links 3. Example Data: 📁 Download Example Files The folder contains: Sample contact database (CSV) AutomatizationHelper template (CSV + Google Sheets) Detailed setup instructions (README) Data Structure: Contact Database Fields: venue_name - Organization name category - booker/festival/media/playlisting email_1 - Primary email (required) email_2 - Secondary email (optional, for CC) active - active/inactive (for filtering) language - EN/DE/etc. (for localization) AutomatizationHelper Fields: LANGUAGE - Language code CATEGORY - Contact type LATEST_SINGLE - Spotify/Apple Music link LATEST_VIDEO - YouTube/Vimeo link EPK - Electronic Press Kit URL SIGNATURE - HTML email signature PROMPT - AI prompt for this category SUBJECT - Email subject template Setup Instructions: Step 1: Prepare Your Data Download example files from the Google Drive folder Replace sample data with your real contacts and band information Customize AI prompts for your communication style Update signature with your contact details Step 2: Configure APIs Set up Gmail OAuth2 credentials in n8n Configure Google Sheets API access Add OpenAI API key for content generation Step 3: Import & Configure Workflow Import the workflow JSON Connect your credentials to respective nodes Update Google Sheets URL in AutomatizationHelper node Test with a small contact sample first Step 4: Customize & Run Adjust AI prompts in AutomatizationHelper for your style Update contact categories as needed Run workflow - drafts will be created in Gmail for review Tips: Start small**: Test with 5-10 contacts first Review drafts**: Always review AI-generated content before sending Update regularly**: Keep your AutomatizationHelper current with latest releases Monitor responses**: Track which prompts work best for different categories Language mixing**: You can have contacts in multiple languages Important Notes: Emails are created as Gmail drafts - manual review recommended Respects Gmail API rate limits automatically Conversation history analysis works best with existing email threads HTML signatures are automatically added (Gmail API limitation workaround) Handles multiple languages simultaneously Maintains conversation context across campaigns Generates unique content for each contact Template Author: Questions or need help with setup? Email: xciklv@gmail.com LinkedIn: https://www.linkedin.com/in/vaclavcikl/