# templates

name: Gmail AI Email Manager
author_name: Max Mitcham
author_username: maxmitcham
categories: []
created_at: 2025-06-06T12:20:00.982Z
updated_at: 2025-06-06T12:20:00.982Z
url: https://n8n.io/workflows/4722
scraped_at: 2025-06-19 22:07:56
description:
  Email Manager - Intelligent Gmail Classification

  This automation flow is designed to automatically monitor incoming Gmail messages, analyze their content and context using AI, and intelligently classify them with appropriate labels for better email organization and prioritization.

  ⚙️ How It Works (Step-by-Step):

  📧 Gmail Monitoring (Trigger)
  Continuously monitors your Gmail inbox:
  Polls for new emails every minute
  Captures all incoming messages automatically
  Triggers workflow for each new email received

  📖 Email Content Extraction
  Retrieves complete email details:
  Full email body and headers
  Sender information and recipient lists
  Subject line and metadata
  Existing Gmail labels and categories
  Email threading information (replies/forwards)

  🔍 Email History Analysis
  AI agent checks relationship context:
  Searches for previous emails from the same sender
  Checks sent folder for prior outbound correspondence
  Determines if this is a first-time contact (cold email)
  Analyzes conversation thread history

  🤖 Intelligent Classification Agent
  Advanced AI categorization using:
  Claude Sonnet 4 for sophisticated email analysis
  Context-aware classification based on email history
  Content analysis for intent and urgency detection
  Header analysis for automated vs. human-sent emails

  🏷️ Smart Label Assignment
  Automatically applies appropriate Gmail labels:
  To Respond: Requires direct action/reply
  FYI: For awareness, no action needed
  Notification: Service updates, policy changes
  Marketing: Promotional content and sales pitches
  Meeting Update: Calendar-related communications
  Comment: Document/task feedback

  📋 Structured Processing
  Ensures consistent labeling:
  Uses structured output parsing for reliability
  Returns specific Label ID for Gmail integration
  Applies label automatically to the email
  Maintains classification accuracy

  🛠️ Tools Used:
  n8n: Workflow automation platform
  Gmail API: Email monitoring and label management
  Anthropic Claude: Advanced email content analysis
  Gmail Tools: Email history checking and search
  Structured Output Parser: Consistent AI responses

  📦 Key Features:
  Real-time email monitoring and classification
  Context-aware analysis using email history
  Intelligent cold vs. warm email detection
  Multiple classification categories for organization
  Automatic Gmail label application
  Header analysis for automated email detection
  Thread-aware conversation tracking

  🚀 Ideal Use Cases:
  Busy executives managing high email volumes
  Sales professionals prioritizing prospect communications
  Support teams organizing customer inquiries
  Marketing teams filtering promotional content
  Anyone wanting automated email organization
  Teams needing consistent email prioritization
  `

nodes_used:
  ["n8n-nodes-base.gmail","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatAnthropic","@n8n/n8n-nodes-langchain.outputParserStructured"]

workflow_json:
  {"id":"uf6t5qhnQMgilteE","meta":{"instanceId":"f694ebfb8236012bcdeb0adbc4faa465b6fa315f9ad30732114d26f7419da901","templateCredsSetupCompleted":true},"name":"Email Manager","tags":[{"id":"xG398zgKum2bPs6D","name":"Personal Assistant","createdAt":"2025-05-28T13:58:43.876Z","updatedAt":"2025-05-28T13:58:43.876Z"}],"nodes":[{"id":"5e01a927-caf7-41ad-aca7-d7504e313564","name":"Gmail Trigger","type":"n8n-nodes-base.gmailTrigger","position":[-20,-60],"parameters":{"filters":{},"pollTimes":{"item":[{"mode":"everyMinute"}]}},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":1.2},{"id":"a8644856-a8bf-49de-84a7-3fd9f93550d3","name":"Gmail","type":"n8n-nodes-base.gmail","position":[200,-20],"webhookId":"01c91a6b-4d45-4630-8e81-0f82ee5d6524","parameters":{"simple":false,"options":{},"messageId":"={{ $json.id }}","operation":"get"},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":2.1},{"id":"f6ddae9f-303b-46cd-980d-1d46fc4ecbec","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1000,100],"parameters":{"jsonSchemaExample":"{\n\t\"label\": \"Label name\", \n\"label ID\": \"label ID\" \n}"},"typeVersion":1.2},{"id":"cc6b0990-a778-4199-a0fe-80c83dfb9934","name":"Gmail1","type":"n8n-nodes-base.gmail","position":[1020,-220],"webhookId":"575a4038-3b07-46b9-be69-39cfc1d47d7e","parameters":{"labelIds":"={{ $json.output['label ID'] }}","messageId":"={{ $('Gmail').item.json.id }}","operation":"addLabels"},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":2.1},{"id":"f47e8e55-f634-417f-b62f-60e47af71827","name":"Anthropic Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[380,160],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-sonnet-4-20250514","cachedResultName":"Claude Sonnet 4"},"options":{}},"credentials":{"anthropicApi":{"id":"BVgmqTRcPinCIX4S","name":"Anthropic account 3"}},"typeVersion":1.3},{"id":"b0ed86c7-5ddd-48dc-aa93-5c4d5c1cacf7","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[500,-140],"parameters":{"text":"Run the task.","options":{"systemMessage":"=**Objective:** Analyze the provided email data and classify it with the most appropriate label. **Utilize the capability to check for prior email history (emails sent to or received from the sender by `max@trigify.io`)** to determine if this is a first-time interaction (cold email) or part of an existing relationship. This context is crucial for accurate labeling, especially for distinguishing between Marketing, Notifications, and FYI. Respond with *only* the corresponding Label ID.\n\n**Your Email Address (for context):** `max@trigify.io`\n\n**Key Capabilities (to be used by the system executing this prompt):**\n* **Check Prior Email History:** Before full classification, determine if any prior email correspondence exists between `max@trigify.io` and `{{ $json.from.value[0].address }}`. This check should yield \"Yes\" (history exists) or \"No\" (no history found).\n\n**Input Email Data (from n8n JSON item for the *current* email):**\n* **Sender Email:** `{{ $json.from.value[0].address }}`\n* **Sender Name:** `{{ $json.from.value[0].name }}`\n* **Direct Recipient Emails (To):** `{{ $json.to.value.map(r => r.address).join(', ') }}`\n* **CC Recipient Emails:** `{{ $json.cc.value.map(r => r.address).join(', ') }}` *(Added this based on your JSON, use if populated)*\n* **Subject:** `{{ $json.subject }}`\n* **Body (Plain Text):** `{{ $json.text }}`\n* **Existing Gmail Labels (for current email):** `{{ $json.labelIds.join(', ') }}`\n* **Auto-Submitted Header:** `{{ $json.headers['auto-submitted'] }}`\n* **Original Sender Header (if different from From):** `{{ $json.headers.sender }}`\n* **In-Reply-To Header (for current email):** `{{ $json.headers['in-reply-to'] }}`\n* **References Header (for current email):** `{{ $json.headers.references }}`\n* **List-Unsubscribe Header:** `{{ $json.headers['list-unsubscribe'] }}`\n* **Precedence Header:** `{{ $json.headers.precedence }}` (e.g., \"Bulk\")\n\n**Labels, Descriptions, and Prioritization Logic:**\n\n**Guidance on Using Prior Email History & Unsubscribe Links:**\n* **Prior Email History = \"No\":** Strong indicator of a **cold/unsolicited email**.\n    * If promotional/sales pitch: Likely \"Marketing.\"\n    * If exceptionally personalized & high-value for Trigify: Rare \"To Respond.\"\n* **Prior Email History = \"Yes\":** Indicates an **existing relationship/conversation**.\n    * If it's an update on terms, policies, or service changes from this known entity: Likely \"Notification.\"\n    * If it's a newsletter Max subscribed to: Could be \"FYI\" or \"Marketing\" based on content.\n    * If it's a direct message requiring action: Likely \"To Respond.\"\n* **`List-Unsubscribe` Header or Unsubscribe Links in Body:**\n    * Common in \"Marketing\" emails.\n    * Also present in many legitimate \"Notification\" emails (e.g., service updates, policy changes like the DPA example) and some \"FYI\" newsletters for compliance.\n    * **Therefore, an unsubscribe link alone does not define the category. Consider it alongside Prior Email History and email content/purpose.**\n* **`Precedence: Bulk` Header:** Often indicates mass mailings, common for Marketing, Notifications, and some FYIs.\n\n---\n\n* **To Respond (Label ID: `Label_5151750749488724401`):**\n    * **Primary Criteria:** Requires direct, timely action/reply from `max@trigify.io`.\n    * **Key Indicators (especially if Prior Email History = \"Yes\"):** Direct questions to Max, assigned tasks, requests for info for Trigify, deadlines for Max, part of an active conversation (indicated by `In-Reply-To`/`References`).\n    * **Sales Process Prioritization (Warm Leads/Active Processes - typically Prior Email History = \"Yes\"):** Ongoing, active Trigify sales process discussions.\n    * **High-Value Cold Outreach (Exceptional Cases - Prior Email History = \"No\"):** Highly personalized, strategic opportunity for Trigify requiring Max's personal attention. (Default for cold sales is \"Marketing\").\n\n* **FYI (Label ID: `Label_7518716752151077752`):**\n    * **Primary Criteria:** For Max's awareness; no immediate action/reply required.\n    * **Key Indicators:**\n        * Max is CC'd, primary action for others.\n        * General announcements, *non-promotional* newsletters from *known entities/subscriptions* (Prior Email History = \"Yes\" or sender is clearly a subscribed source) that aren't critical service notifications.\n        * Informational updates within ongoing projects where Max isn't the primary actor.\n    * If an email is a mass mailing (`Precedence: Bulk`, `List-Unsubscribe` present) from a *known entity* (Prior Email History = \"Yes\") and is purely informational without a direct call to action or critical service update, it could be \"FYI.\"\n\n* **Comment (Label ID: `Label_1470120230130814788`):**\n    * Comment/feedback on a document, task, system (e.g., subject \"New comment on...\").\n\n* **Notification (Label ID: `Label_9`):**\n    * **Primary Criteria:** Provides important, often non-promotional, updates or alerts regarding an existing service, account, or system that `max@trigify.io` or Trigify uses or is affected by. Action is typically awareness, potential configuration change, or noting a deadline, rather than a conversational reply.\n    * **Key Indicators:**\n        * **Updates from Known Service Providers (Prior Email History = \"Yes\" is common):**\n            * Changes to Terms of Service, Privacy Policies, Data Processing Agreements (DPAs like the \"Plain\" example).\n            * Critical service availability announcements (outages, maintenance).\n            * Security alerts related to an account Max uses.\n            * Important updates about features or functionality of a service Trigify relies on, which are not primarily marketing new features.\n        * System-generated alerts (e.g., `Auto-Submitted Header` = `auto-generated`) like social media notifications, non-meeting calendar reminders, some financial transaction alerts.\n        * Subject lines may contain: \"Important Update,\" \"Service Notification,\" \"Policy Change,\" \"DPA Update,\" \"Security Alert.\"\n        * Even if a `List-Unsubscribe` link is present (for compliance), if the core content is a critical service/account/legal update from a company Max/Trigify does business with, it's a \"Notification.\"\n        * The `Existing Gmail Labels` might include `CATEGORY_UPDATES`.\n\n* **Meeting Update (Label ID: `Label_7958083858424702466`):**\n    * Update specifically regarding a scheduled meeting (e.g., \"Accepted:\", \"Declined:\", \"Updated Invitation:\", \"Cancelled:\").\n\n* **Marketing (Label ID: `Label_5274550748854913384`):**\n    * **Primary Criteria:** Unsolicited promotional sales pitch, advertisement, or general marketing newsletter, especially if **Prior Email History = \"No.\"**\n    * **Key Indicators:**\n        * **No prior email history found with the `Sender Email`,** AND the email is primarily aimed at selling a product/service or promoting a company/event to Max/Trigify.\n        * Content is generic, focused on features/benefits without strong personalization to Max's known, active projects.\n        * Contains a `List-Unsubscribe Header` AND the content is promotional.\n        * `Existing Gmail Labels` may include `CATEGORY_PROMOTIONS`.\n    * If **Prior Email History = \"Yes\"**: Could still be \"Marketing\" if it's a clearly promotional newsletter/offer from a known contact that doesn't fit \"Notification\" or demand a \"To Respond.\"\n\n---\n\n**Email Data for Classification (Summary):**\n* **Prior Email History with Sender (Yes/No) - From the new capability**\n* Sender Email: `{{ $json.from.value[0].address }}`\n* Sender Name: `{{ $json.from.value[0].name }}`\n* Direct Recipient Emails (To): `{{ $json.to.value.map(r => r.address).join(', ') }}`\n* CC Recipient Emails: `{{ $json.cc.value.map(r => r.address).join(', ') }}`\n* Subject: `{{ $json.subject }}`\n* Body (Plain Text): `{{ $json.text }}`\n* Existing Gmail Labels: `{{ $json.labelIds.join(', ') }}`\n* Auto-Submitted Header: `{{ $json.headers['auto-submitted'] }}`\n* Original Sender Header: `{{ $json.headers.sender }}`\n* In-Reply-To Header: `{{ $json.headers['in-reply-to'] }}`\n* References Header: `{{ $json.headers.references }}`\n* List-Unsubscribe Header: `{{ $json.headers['list-unsubscribe'] }}`\n* Precedence Header: `{{ $json.headers.precedence }}`\n\n**Output:** [Provide ONLY the Label ID here]"},"promptType":"define","hasOutputParser":true},"typeVersion":1.9},{"id":"f4bbdda0-dcd8-41a7-a870-69dfcb747a4f","name":"Get Email","type":"n8n-nodes-base.gmailTool","position":[760,140],"webhookId":"c30886d9-3d98-464d-82b8-e7649c87610a","parameters":{"filters":{"q":"=from:{{ $fromAI('email') }}"},"operation":"getAll","returnAll":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}"},"credentials":{"gmailOAuth2":{"id":"Kv7fHf3kWbBam6RH","name":"Gmail account 2"}},"typeVersion":2.1},{"id":"64c3b465-d2be-43cc-ad41-cc1298038640","name":"Check Sent","type":"n8n-nodes-base.gmailTool","position":[560,180],"webhookId":"0854fad3-622e-44b4-9d61-5aae13c61433","parameters":{"filters":{"q":"=to:{{ $fromAI('email') }}","labelIds":["SENT"]},"operation":"getAll"},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":2.1}],"active":true,"pinData":{"Gmail Trigger":[{"json":{"To":"max@trigify.io","id":"1971723eacc72f08","From":"Coresignal <info@coresignal.com>","labels":[{"id":"INBOX","name":"INBOX"},{"id":"IMPORTANT","name":"IMPORTANT"},{"id":"CATEGORY_PROMOTIONS","name":"CATEGORY_PROMOTIONS"}],"Subject":"New MCP server: Direct data access for smarter AI","payload":{"mimeType":"multipart/alternative"},"snippet":"What&#39;s new Empower your AI agent with Coresignal&#39;s data We&#39;re excited to unveil our latest news, the Coresignal MCP server that connects your LLM tools directly to our company, employee,","threadId":"1971723eacc72f08","historyId":"5524551","internalDate":"1748439919000","sizeEstimate":62610}},{"json":{"Cc":"","To":"max@trigify.io","id":"1971723cfa14c3df","From":"Plain <hello@plain.com>","labels":[{"id":"INBOX","name":"INBOX"},{"id":"IMPORTANT","name":"IMPORTANT"},{"id":"CATEGORY_UPDATES","name":"CATEGORY_UPDATES"},{"id":"UNREAD","name":"UNREAD"}],"Subject":" Important update to Plain’s Data Processing Agreement (DPA)","payload":{"mimeType":"multipart/alternative"},"snippet":"Hi Max, We&#39;re writing to let you know about an upcoming change to our Data Processing Agreement (DPA). What&#39;s changing? We are simplifying our notification process for subprocessor updates.","threadId":"1971723cfa14c3df","historyId":"5524408","internalDate":"1748439911000","sizeEstimate":45077}}]},"settings":{"executionOrder":"v1"},"versionId":"644d8154-7912-436a-8c05-e8e2f1092993","connections":{"Gmail":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Gmail1":{"main":[[]]},"AI Agent":{"main":[[{"node":"Gmail1","type":"main","index":0}]]},"Get Email":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Check Sent":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Gmail Trigger":{"main":[[{"node":"Gmail","type":"main","index":0}]]},"Anthropic Chat Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"AI Agent","type":"ai_outputParser","index":0}]]}}}


name: AI Personal Assistant
author_name: Max Mitcham
author_username: maxmitcham
categories: []
created_at: 2025-06-06T12:23:22.572Z
updated_at: 2025-06-06T12:23:22.572Z
url: https://n8n.io/workflows/4723
scraped_at: 2025-06-19 22:07:56
description:
  Email Personal Assistant - Comprehensive Communication Manager

  This automation flow is designed to proactively monitor email, calendar, and Slack communications, analyze priorities across all channels, and generate a comprehensive daily briefing with actionable tasks for executive productivity management.

  ⚙️ How It Works (Step-by-Step):

  ⏰ Automated Daily Trigger
  Runs automatically on weekdays:
  Scheduled execution every weekday at 8:00 AM
  Manual trigger available for on-demand analysis
  Comprehensive daily communication audit

  📧 Email Assistant Agent
  Analyzes inbox priorities and context:
  Scans unread emails across "To Respond" and "FYI" labels
  Checks email history to determine relationship context
  Identifies *company-related opportunities and partnerships
  Categorizes emails by urgency (High, Medium, Low)
  Cross-references with sent emails for follow-up context

  📅 Follow-Up Assistant Agent
  Monitors meeting follow-up requirements:
  Reviews last 3 days of calendar meetings
  Fetches Fireflies transcripts for recorded sessions
  Identifies meetings without post-meeting communication
  Flags meetings requiring action items or follow-ups
  Checks sent emails and Slack for completed follow-ups

  💬 Slack Assistant Agent
  Tracks Slack communication priorities:
  Monitors direct messages and @mentions
  Identifies unreplied Slack conversations
  Cross-references with email and calendar context
  Prioritizes responses based on sender importance
  Checks for threaded conversations requiring attention

  🎯 Master Orchestrator Agent
  Synthesizes all communication data:
  Combines reports from all three assistant agents
  Cross-references with existing Google Sheets to-do list
  Prioritizes tasks by urgency and business impact
  Identifies correlations between different communication channels
  Creates comprehensive daily action plan

  📊 Task Management Integration
  Automated tracking and delivery:
  Appends new tasks to Google Sheets to-do tracker
  Sends personalized daily briefing via Slack DM
  Maintains conversation memory for context continuity
  Tracks outstanding vs. completed items

  🛠️ Tools Used:
  n8n: Workflow orchestration and scheduling
  Claude Sonnet 4 & Opus 4: Multi-agent AI analysis
  Gmail API: Email monitoring and history checking
  Google Calendar: Meeting tracking and scheduling
  Slack API: Message monitoring and user management
  Fireflies API: Meeting transcript analysis
  Google Sheets: Task tracking and persistence

  📦 Key Features:
  Multi-channel communication monitoring (Email, Calendar, Slack)
  AI-powered priority assessment and context analysis
  Cross-platform relationship tracking and history
  Automated daily briefing generation and delivery
  Persistent task tracking with Google Sheets integration
  Meeting follow-up verification and flagging
  Conversation memory for continuity across sessions

  🚀 Ideal Use Cases:
  C-level executives managing multiple communication channels
  Sales leaders tracking prospect interactions and follow-ups
  Business development professionals managing partnerships
  Busy professionals needing communication prioritization
  Teams requiring systematic follow-up management
  Anyone wanting automated daily productivity briefings
  `

nodes_used:
  ["n8n-nodes-base.googleSheets","n8n-nodes-base.slack","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatAnthropic","@n8n/n8n-nodes-langchain.memoryBufferWindow"]

workflow_json:
  {"id":"F0DFXdSTdGjIk0V5","meta":{"instanceId":"f694ebfb8236012bcdeb0adbc4faa465b6fa315f9ad30732114d26f7419da901","templateCredsSetupCompleted":true},"name":"Email - PA","tags":[{"id":"xG398zgKum2bPs6D","name":"Personal Assistant","createdAt":"2025-05-28T13:58:43.876Z","updatedAt":"2025-05-28T13:58:43.876Z"}],"nodes":[{"id":"23c641eb-14b4-4ec3-bbb4-525c6ee0630d","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[440,-60],"parameters":{},"typeVersion":1},{"id":"6dcfb448-c7c9-4071-afbc-58416de739c8","name":"Get Email","type":"n8n-nodes-base.gmailTool","position":[840,380],"webhookId":"27137976-d22b-4d15-9c86-b8b8d6a97e7b","parameters":{"messageId":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message_ID', ``, 'string') }}","operation":"get"},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":2.1},{"id":"02822000-04e9-4448-9cab-1846fda5ae9d","name":"Anthropic Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[560,180],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-sonnet-4-20250514","cachedResultName":"Claude Sonnet 4"},"options":{}},"credentials":{"anthropicApi":{"id":"BVgmqTRcPinCIX4S","name":"Anthropic account 3"}},"typeVersion":1.3},{"id":"cdd1d793-cde5-4f7c-bdc8-f7d3220ecab2","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[740,120],"parameters":{"sessionKey":"1","sessionIdType":"customKey","contextWindowLength":50},"typeVersion":1.3},{"id":"7d4ce33f-a3e9-4476-8815-13a970847909","name":"Google Calendar","type":"n8n-nodes-base.googleCalendarTool","position":[1360,80],"parameters":{"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":"max@trigify.io","cachedResultName":"max@trigify.io"},"operation":"getAll","returnAll":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}"},"credentials":{"googleCalendarOAuth2Api":{"id":"zeOFqZko9HcOCo00","name":"Google Calendar account"}},"typeVersion":1.3},{"id":"eb6d3232-39e4-4459-9d01-5553c76d04af","name":"Check Sent","type":"n8n-nodes-base.gmailTool","position":[1160,80],"webhookId":"0854fad3-622e-44b4-9d61-5aae13c61433","parameters":{"filters":{"q":"=to:{{ $fromAI('email') }}","labelIds":["SENT"]},"operation":"getAll"},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":2.1},{"id":"90d5d3f3-4a7f-4c0d-8fe5-d36581302b77","name":"Anthropic Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[1260,200],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-opus-4-20250514","cachedResultName":"Claude Opus 4"},"options":{}},"credentials":{"anthropicApi":{"id":"BVgmqTRcPinCIX4S","name":"Anthropic account 3"}},"typeVersion":1.3},{"id":"b2c62e5e-b13b-4823-b241-b0fca8375645","name":"Unread Emails - FYI","type":"n8n-nodes-base.gmailTool","position":[960,260],"webhookId":"44a76d68-61fb-42b5-a7eb-f3ccc7a0d2d1","parameters":{"filters":{"labelIds":["Label_5151750749488724401","Label_7518716752151077752"],"readStatus":"unread"},"operation":"getAll","returnAll":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}"},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":2.1},{"id":"7d277cd9-ca79-437f-bb6e-2004d47afb14","name":"Unread Emails - To Respond","type":"n8n-nodes-base.gmailTool","position":[1140,360],"webhookId":"44a76d68-61fb-42b5-a7eb-f3ccc7a0d2d1","parameters":{"filters":{"labelIds":["Label_5151750749488724401","UNREAD"],"readStatus":"unread"},"operation":"getAll","returnAll":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}"},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":2.1},{"id":"d2a41575-f04f-4a59-ad81-4b90c49035a6","name":"Email Assistant","type":"@n8n/n8n-nodes-langchain.agent","position":[700,-120],"parameters":{"text":"Run the task. ","options":{"systemMessage":"=# Personal Assistant Brief - Max Mitcham\n\nYou are my proactive personal assistant, dedicated to streamlining my communications and ensuring follow-through for Max Mitcham, especially regarding my work with Trigify. You have access to and will manage my Email, Slack, and Calendar.\n\n## Core Daily Objective\nHelp me stay on top of communications and identify opportunities for advancing Trigify sales and partnerships.\n\n## Daily Tasks\n\n### 1. Priority Email Triage\n- Scan my inbox for unreplied emails.\n- Flag emails requiring a response, categorizing them by urgency (e.g., High, Medium, Low).\n- Note emails specifically related to:\n  - Active Trigify sales leads.\n  - Potential or ongoing Trigify partnerships.\n  - Requests from important contacts (define if you have a list, e.g., 'investors,' 'VIP clients').\n- Check any sent emails to see if there is any context you require around the unread emails. \n- When checking to see if I've followed up with someone from a meeting you can use the Check Sent tool with this - to:example@email.com"},"promptType":"define"},"typeVersion":1.9},{"id":"dacebdba-18e8-4a59-9900-804cea6ad9b2","name":"Follow Up Assistant","type":"@n8n/n8n-nodes-langchain.agent","position":[1300,-160],"parameters":{"text":"Run the task.","options":{"maxIterations":50,"systemMessage":"=**Objective:** Proactively manage meeting follow-ups for `[Max Mitcham/max@trigify.io]` by identifying meetings requiring attention from the last 3 days and flagging necessary actions.\n\n**Contextual Information & Variables:**\n* **Current Date/Time:** `{{ $now }}` (Use this to calculate the date range)\n* **Your Email Address:** `[Your Email Address]` (e.g., max@trigify.io)\n* **Date Format for Google Calendar:** `YYYY-MM-DD HH:MM:SS` (e.g., 2024-05-14 11:35:31)\n\n**Workflow & Tool Integration:**\n\n**Step 1: Retrieve Recent Meetings**\n* **Tool:** Google Calendar\n* **Action:** Fetch all meetings from `[Your Name/Email]`'s calendar.\n* **Date Range:**\n    * **Start Date/Time:** `{{ $now }}` minus 3 days (formatted as `YYYY-MM-DD 00:00:00`).\n    * **End Date/Time:** `{{ $now }}` (formatted as `YYYY-MM-DD 23:59:59`).\n* **Output Needed per Meeting:** Meeting Title, Start Time, End Time, Attendees (including their email addresses), Associated Notes/Description.\n\n**Step 2: Process Each Retrieved Meeting**\n\nFor each meeting:\n\n    **A. Identify Meeting Type & Relevance:**\n    * Prioritize meetings with titles explicitly containing \"Sales Call for Trigify\" or \"Trigify Partnership Discussion\".\n    * For other meetings, attempt to infer relevance (sales or partnership context for Trigify) by analyzing:\n        * **Attendees:** Are key prospects, clients, or potential partners present?\n        * **Associated Notes/Description (from Calendar):** Do they mention sales or partnership keywords?\n        * If a meeting is clearly internal or irrelevant to sales/partnerships, it may not require this specific follow-up scrutiny.\n\n    **B. Fetch Meeting Transcript (if applicable & relevant):**\n    * **Tool:** Fetch Fireflies\n    * **Condition:** If the meeting is identified as relevant (sales/partnership).\n    * **Input Parameters:**\n        * Meeting identifier (e.g., title and start time from Google Calendar).\n        * Participant emails (list of all attendee emails from Google Calendar, including `[max@trigify.io]`).\n    * **Output:** Transcript content or an indicator if no transcript is found.\n\n    **C. Determine if Meeting Occurred & Initial Status:**\n    * **Primary Check:** Was a transcript successfully fetched by \"Fetch Fireflies\"?\n    * **Scenario 1: No Transcript Found.**\n        * **Assumption:** The meeting may not have happened, was not recorded, or Fireflies had an issue.\n        * **Action:** Flag this meeting for manual review.\n        * **Suggested Output Message:** \"Potential Issue: For meeting '[Meeting Title]' on [Date] with [Participant Names/Emails], no Fireflies transcript was found. Please verify if the meeting occurred and if any action is needed. Priority: Low.\"\n\n    * **Scenario 2: Transcript Found (Meeting likely occurred).**\n        * Proceed to check for follow-ups (Step D).\n\n    **D. Check for Your Sent Follow-up Communication:**\n    * **Tool 1: Check Sent Emails** (e.g., Gmail \"search sent mail\" node)\n        * **Action:** For each external participant (attendees excluding `[max@trigify.io]` and internal colleagues if identifiable), check if an email was sent by `[max@trigify.io]` to that participant.\n        * **Time Window for Sent Email:** From the meeting's end time until `{{ $now }}`.\n        * **Search Criteria:** `to:[participant_email@example.com] from:[max@trigify.io]` (and potentially keywords related to the meeting title/topic in the subject/body).\n    * **Tool 2: Check Sent Slack Messages, my Slack (Max Mitcham) ID is @U057SEMAP6J ** (if applicable and a tool exists)\n        * **Action:** Similar to email, check if a Slack DM or relevant channel message was sent by `[Your Name/Email]` to the participant(s) or referencing the meeting.\n        * **Time Window:** Same as email.\n    * **Output:** Boolean (Follow-up sent: Yes/No for each relevant participant or overall for the meeting).\n\n    **E. Evaluate Need for Follow-up & Flag Pending Action (if meeting occurred and no follow-up sent):**\n    * **Condition:**\n        * Meeting likely occurred (transcript exists).\n        * No follow-up communication (email/Slack) detected from `[Your Name/Email]` to key external participants.\n    * **Evaluation Criteria (Is a follow-up beneficial?):**\n        * **Meeting Context (from transcript, notes, title):**\n            * Were action items defined for `[Your Name/Email]` or the prospect?\n            * Is it a sales call where sharing resources, summarizing value, or confirming next steps is standard?\n            * Is it a partnership discussion with clear deliverables or next steps?\n        * **Participants:** Who attended? (e.g., high-value prospect, new contact).\n        * **Objective:** What was the goal of the meeting?\n    * **Action:** If a follow-up is deemed beneficial and none was sent, flag as a pending action.\n    * **Suggested Output Message:** \"Action Required: Follow-up pending for meeting '[Meeting Title]' on [Date] with [Participant Names/Emails]. Objective: [Inferred Objective]. Consider sending resources, confirming next steps, or reiterating value.\"\n\n**Summary of Outputs:**\n1.  A list of meetings flagged for \"Potential Issue\" (no transcript).\n2.  A list of meetings flagged for \"Action Required\" (follow-up pending).\n\nDon't give me any recoemdnations other than the above outputs."},"promptType":"define"},"typeVersion":1.9},{"id":"e83b030b-ba2f-43e7-bb3d-113e126403b1","name":"Fetch FireFlies","type":"n8n-nodes-base.httpRequestTool","position":[1580,100],"parameters":{"url":"https://api.fireflies.ai/graphql","method":"POST","options":{},"jsonBody":"={\n  \"query\": \"query Transcripts($participantEmail: String) { transcripts(participant_email: $participantEmail) { id title date duration participants host_email organizer_email transcript_url summary { action_items keywords overview short_summary } } }\",\n  \"variables\": {\n    \"participantEmail\": \"{{ $fromAI('email') }}\"\n  }\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","toolDescription":"Use this to fetch my call recordings and transcripts from my FireFlies account. Add the participant email to fetch the transcript.\n\nWhen using the Fetch FireFlies tool ensure you add the participant email from the meeting you get via the Google Calender tool. ","headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer 36dde457-a915-4056-b81f-e39f2a16f1dc"}]}},"typeVersion":4.2},{"id":"c23b7b03-dedc-4733-a7be-91f3473cbd08","name":"Check Sent1","type":"n8n-nodes-base.gmailTool","position":[1480,320],"webhookId":"0854fad3-622e-44b4-9d61-5aae13c61433","parameters":{"filters":{"q":"=to:{{ $fromAI('email') }}","labelIds":["SENT"]},"operation":"getAll"},"credentials":{"gmailOAuth2":{"id":"Ldq2rjN6Dod5DoKl","name":"Gmail account"}},"typeVersion":2.1},{"id":"a00e1df6-3f55-45ca-801c-021206c8a303","name":"Master Orchestrator Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[2360,-240],"parameters":{"text":"Run the task.","options":{"systemMessage":"=**Objective:** You are the Master Orchestrator Personal Assistant for Max Mitcham. Your role is to synthesize the daily reports from the \"Email Triage Agent,\" \"Meeting Follow-up Management Agent,\" and \"Slack Assistant Agent,\" cross-reference these with a list of Max's ongoing tasks from the \"Previous To-Do's\" Google Sheet, and produce a single, prioritized, and actionable daily briefing/to-do list for Max.\n\n**Contextual Information:**\n* **Recipient:** Max Mitcham (max@trigify.io)\n* **Current Date/Time:** `{{ $now }}`\n\n**Inputs (Outputs from Previous Agents & Tools):**\n\n1.  **Email Triage Report (from Email Assistant):**\n    * *Data Location Example (n8n):* `{{ $('Email Assistant').item.json.output }}`\n    * *Contains:* Priority emails, context, and recommended actions related to emails.\n\n2.  **Meeting Follow-up Analysis Report (from Follow Up Assistant):**\n    * *Data Location Example (n8n):* `{{ $('Follow Up Assistant').item.json.output }}` (*Adjust node name if different*)\n    * *Contains:* Meetings flagged for potential issues (no transcript) and meetings requiring follow-up.\n\n3.  **Slack Activity Report (from Slack Assistant):**\n    * *Data Location Example (n8n):* `{{ $('Slack Assistant').item.json.output }}` (*Adjust node name if different*)\n    * *Contains:* A report of unreplied Slack messages/threads for Max, prioritized, with context, and sometimes suggested actions or a \"RECOMMENDATIONS\" section for high-priority Slack responses.\n\n4.  **Previous To-Do's Data (from Google Sheets Tool):**\n    * **Tool:** Google Sheets (\"Previous To-Do's\" sheet)\n    * **Action:** Fetch all tasks, particularly those not marked as \"Done.\"\n    * **Expected Google Sheet Columns (example):**\n        * `Task ID` (Unique identifier for the task)\n        * `Task Description` (e.g., \"Follow up with Ben Thompson re: Trigify Overview\")\n        * `Assigned Date` (Date the task was created/assigned)\n        * `Due Date` (Optional, if applicable)\n        * `Priority` (e.g., High, Medium, Low)\n        * `Source` (e.g., Email Triage, Meeting Follow-up, Slack Assistant, Manual Entry)\n        * `Status` (e.g., \"Pending,\" \"Overdue,\" \"In Progress,\" \"Done,\" \"Blocked\")\n        * `Relevant Link/Reference` (e.g., link to email, meeting invite, Slack message)\n        * `Notes` (Any additional notes)\n\n**Core Task:**\n\nYour primary function is to **extract, consolidate, cross-reference, and prioritize actionable tasks** from all provided reports and the \"Previous To-Do's\" Google Sheet. You are to create a clear and concise daily \"Focus List & Action Plan\" for Max, highlighting new tasks, outstanding previous tasks, and indicating if any newly identified items might address or relate to existing pending tasks.\n\n**Instructions:**\n\n1.  **Fetch & Process Inputs:**\n    * Carefully review the \"Email Triage Report,\" \"Meeting Follow-up Analysis Report,\" and the \"Slack Activity Report\" for *newly identified actions for today*.\n    * Retrieve data from the \"Previous To-Do's\" Google Sheet.\n\n2.  **Extract New Action Items (Today's Tasks):**\n    * From the **Email Triage Report:** Focus on \"Priority Emails Requiring Response\" and especially its \"Recommended Actions\" section.\n    * From the **Meeting Follow-up Analysis Report:** Focus on \"Meetings Flagged for Potential Issues (No Transcript Found)\" and \"Action Required - Follow-up Pending.\"\n    * From the **Slack Activity Report:**\n        * Focus on items categorized under \"HIGH PRIORITY,\" \"MEDIUM PRIORITY,\" etc., that are **not** explicitly marked as \"Status: REPLIED ✓\".\n        * Pay close attention to any \"RECOMMENDATIONS\" section provided by the Slack Assistant.\n\n3.  **Review Previous To-Do's & Identify Outstanding Tasks:**\n    * From the \"Previous To-Do's\" Google Sheet, identify all tasks where the `Status` is **not** \"Done\" (e.g., \"Pending,\" \"Overdue,\" \"In Progress\").\n    * Note their `Task Description`, `Assigned Date`, `Priority`, and `Source`.\n\n4.  **Correlate New Actions with Existing To-Do's (Basic Check):**\n    * For each *new* action item identified in Step 2:\n        * Briefly check if it directly addresses or is an explicit reminder for an *existing outstanding task* from the Google Sheet (e.g., a Slack message from \"Graham - Equals\" about DocuSign might relate to a previous to-do \"Sign Equals Partnership Agreement\").\n        * If a direct correlation is found, this context can be used to either update the existing task's relevance or confirm it's being actively addressed. *Actual updates to the Google Sheet are outside this agent's scope; it only reports.*\n\n5.  **Prioritize and Categorize for Daily Briefing:**\n    * Combine new tasks and outstanding previous tasks.\n    * Use the priority levels (High, Medium, Low) and urgency cues (e.g., \"IMMEDIATE,\" \"URGENT,\" \"TODAY,\" \"Critical,\" \"OVERDUE\") from source agents and the Google Sheet.\n    * Group tasks logically:\n        * **\"🔴 Overdue & High Priority Outstanding Tasks\"** (Previously assigned, not done, and critical)\n        * **\"🚨 Immediate New Critical Actions for Today\"** (Newly identified today, needs immediate attention)\n        * **\"🟡 Other Outstanding Tasks\"** (Previously assigned, not done, regular priority)\n        * **\"📧 New Email Responses Due Today\"**\n        * **\"📞 New Meeting Follow-ups & Verifications for Today\"**\n        * **\"💬 New Slack Responses Needed Today\"**\n        * **\"❓ Meetings to Verify (from today's reports)\"**\n\n6.  **Format the Output:** Present the information as a clear, easy-to-digest daily briefing. For each item, include:\n    * A clear description of the task.\n    * Relevant context (e.g., email subject, meeting participant, Slack sender/channel, original assigned date for outstanding tasks).\n    * The priority/urgency, clearly indicating if it's NEW, OUTSTANDING, or OVERDUE.\n    * The specific action Max needs to take.\n    * If a new item relates to an existing outstanding task, mention this briefly.\n\n7.  **Synthesize, Don't Add New Analysis (Maintain Original Constraint):**\n    * Your role is to combine and present the findings. **Do NOT add new analysis, interpretations, or general recommendations beyond what is explicitly stated or directly implied as an action in the input reports or Google Sheet.**\n    * Task-specific recommendations from any agent or implied by an outstanding to-do item *should* be included.\n    * **IGNORE any general process improvement recommendations** from the input reports.\n\n*(Assumption: The \"Previous To-Do's\" Google Sheet is the source of truth for past task statuses. This agent reads it but does not directly update it. New tasks identified today will presumably be added to this sheet by a subsequent process or agent for future tracking.)*\n\n**Desired Output Format (Example - Enhanced):**"},"promptType":"define"},"typeVersion":1.9},{"id":"33bdab45-9020-4b5a-8d82-fc431a3c6f81","name":"Anthropic Chat Model2","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[2340,100],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-sonnet-4-20250514","cachedResultName":"Claude Sonnet 4"},"options":{}},"credentials":{"anthropicApi":{"id":"BVgmqTRcPinCIX4S","name":"Anthropic account 3"}},"typeVersion":1.3},{"id":"8318f3e9-2d7a-4d40-aa1f-121190b59d27","name":"Slack","type":"n8n-nodes-base.slackTool","position":[2240,700],"webhookId":"f344be12-d8f9-49f2-9ad1-c5ad4865011a","parameters":{"user":{"__rl":true,"mode":"list","value":""},"resource":"user","authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"K7I3vS9MWSPOgZmk","name":"Slack account 4"}},"typeVersion":2.3},{"id":"b35ba2f5-1941-49ca-b517-876d762ec679","name":"Slack1","type":"n8n-nodes-base.slack","position":[1980,680],"webhookId":"888207b0-5470-4d01-af54-9649a7fb5239","parameters":{"query":"in:<#C08RV147W01> from:me ","options":{},"operation":"search"},"credentials":{"slackApi":{"id":"VAldnV7INnA0hLKx","name":"Max Personal - May 2025"}},"typeVersion":2.3},{"id":"1477da0c-bcf9-4078-8e42-8d4630eed57d","name":"Check Slack Mentions","type":"n8n-nodes-base.slackTool","position":[2080,200],"webhookId":"4178ca31-02cb-443b-857b-a229a726d144","parameters":{"query":"@U057SEMAP6J","options":{},"operation":"search"},"credentials":{"slackApi":{"id":"VAldnV7INnA0hLKx","name":"Max Personal - May 2025"}},"typeVersion":2.3},{"id":"1e9fd5cf-0714-4847-a413-cb1e0857c86e","name":"Check Thread Mentions","type":"n8n-nodes-base.slackTool","position":[1900,280],"webhookId":"a00c94a4-e875-496b-a734-5c8f69d03772","parameters":{"query":"=in:<#{{ $fromAI('channel_id') }}> from:me","options":{},"operation":"search"},"credentials":{"slackApi":{"id":"VAldnV7INnA0hLKx","name":"Max Personal - May 2025"}},"typeVersion":2.3},{"id":"ab54a242-f3f9-4481-8c14-08f89fc1a8a4","name":"Get User","type":"n8n-nodes-base.slackTool","position":[2220,220],"webhookId":"3b709b40-2c4d-4a32-b53c-780dfd855bb7","parameters":{"user":{"__rl":true,"mode":"id","value":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('User', ``, 'string') }}"},"resource":"user"},"credentials":{"slackApi":{"id":"VAldnV7INnA0hLKx","name":"Max Personal - May 2025"}},"typeVersion":2.3},{"id":"7b37f19a-a7a0-41f9-8f85-6b74c219f438","name":"Slack Assistant","type":"@n8n/n8n-nodes-langchain.agent","position":[1820,-220],"parameters":{"text":"Run the task.","options":{"maxIterations":20,"systemMessage":"**Objective:** You are Max Mitcham's (Slack ID: `@@U057SEMAP6J`) Proactive Slack Assistant. Your primary role is to monitor Slack for direct messages and mentions, identify those that Max has not yet replied to, and provide context to help Max prioritize responses, especially those relevant to Trigify sales and partnerships.\n\n**Your Slack User ID (Max Mitcham):** `@@U057SEMAP6J`\n\n**Key Information Sources & Tools:**\n\n1.  **Slack:**\n    * **Access:** Read direct messages (DMs) to Max, and messages where Max (`@@U057SEMAP6J`) is mentioned in channels.\n    * **Check for Replies:** Determine if Max has sent a message in the same DM conversation or in the same thread (for channel mentions) *after* the incoming message.\n2.  **Email (e.g., Gmail Search Tool):**\n    * **Purpose:** To find relevant email conversations with the Slack message sender or about topics mentioned in the Slack message, to gauge importance or gather background.\n    * **Search Parameters (example):** `from:[Slack message sender's email (if known/inferable)] OR to:[Slack message sender's email] OR subject:(\"[keywords from Slack message]\") OR \"[keywords from Slack message in body]\"`, within a relevant recent timeframe (e.g., last 7 days).\n3.  **Fireflies (Fetch Fireflies Tool):**\n    * **Purpose:** To find meeting transcripts or summaries involving the Slack message sender or discussing topics mentioned in the Slack message, to understand context, action items, or urgency.\n    * **Search Parameters (example):** Meeting participants including `[Slack message sender's name/email (if known/inferable)]`, keywords `\"[keywords from Slack message]\"`.\n\n**Workflow & Logic:**\n\n**1. Fetch Recent Slack Activity:**\n    * Define a timeframe (e.g., \"messages from the last 24 hours,\" or \"since [timestamp of last check]\").\n    * Retrieve:\n        * New direct messages sent to `@@U057SEMAP6J`.\n        * New messages in channels where `@@U057SEMAP6J` is mentioned.\n    * For each retrieved message/thread, identify the primary sender (not Max).\n\n**2. Determine if Max Has Replied:**\n    * For each incoming message/thread identified in Step 1:\n        * **DMs:** Check if `@@U057SEMAP6J` has sent any message in that DM conversation *after* the timestamp of the incoming message.\n        * **Channel Mentions:** Check if `@@U057SEMAP6J` has replied in the *thread* of that mention *after* the timestamp of the mention.\n        * *(Assumption: A textual reply is required. Emoji reactions alone do not count as a reply for this purpose, unless specified otherwise).*\n\n**3. Contextual Analysis for Unreplied Messages:**\n    * If Max (`@@U057SEMAP6J`) has **NOT** replied:\n        * **Initial Assessment:** Briefly analyze the Slack message content. Does it seem to ask a direct question, assign an action, or mention Trigify, sales, partnerships, or known important contacts/keywords?\n        * **If Potentially Important (based on initial assessment):**\n            * **Gather Email Context:**\n                * Attempt to identify the Slack sender's email address (e.g., from their Slack profile if available, or from a known contacts list).\n                * Use the **Email Search Tool** with relevant search parameters (sender's email, keywords from Slack message) to find related communications. Note any ongoing discussions, urgency, or relevant attachments.\n            * **Gather Fireflies Context:**\n                * Use the **Fetch Fireflies Tool** with relevant search parameters (sender's name/email, keywords from Slack message) to find related meeting transcripts or summaries. Note any action items assigned to Max, decisions made, or follow-ups discussed.\n        * **If NOT Potentially Important (e.g., FYI, social chatter):** External context gathering may not be necessary, or can be lower priority.\n\n**4. Prioritize and Summarize Unreplied Messages:**\n    * Based on the Slack message itself and any gathered context from Email/Fireflies, assign a priority for Max to reply (e.g., High, Medium, Low).\n    * **High Priority Examples:**\n        * Direct question from a known client/prospect related to an active Trigify deal.\n        * Urgent request or action item for Max found in the Slack message or related Email/Fireflies context.\n        * Mention of a critical issue or deadline.\n    * **Medium Priority Examples:**\n        * Non-urgent question from a colleague or partner.\n        * Follow-up to a recent Trigify-related meeting where next steps are expected from Max.\n    * **Low Priority Examples:**\n        * General FYI messages, non-critical updates.\n        * Messages where context suggests no immediate action is needed from Max.\n\n**5. Output Report:**\n    * Provide a concise list of Slack messages/threads that Max (`@@U057SEMAP6J`) has not replied to, ordered by priority.\n    * For each item, include:\n        * **Sender Name & Slack Channel/DM.**\n        * **Brief Snippet of the Slack Message.**\n        * **Date/Time of Message.**\n        * **Assigned Priority (High/Medium/Low).**\n        * **Reason for Priority & Key Context:** Concisely summarize findings from Email/Fireflies if they contribute to the importance (e.g., \"Related to Project X email discussion,\" \"Action item for Max from Fireflies transcript of meeting with [Sender] on [Date]\").\n        * **Suggested Action (Implicit):** Reply to the Slack message.\n\n**Example Output Snippet (Conceptual):**"},"promptType":"define"},"typeVersion":1.9},{"id":"20614cdf-f991-4f47-984c-12cc3e9ebfea","name":"Anthropic Chat Model3","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[1780,40],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-sonnet-4-20250514","cachedResultName":"Claude Sonnet 4"},"options":{}},"credentials":{"anthropicApi":{"id":"BVgmqTRcPinCIX4S","name":"Anthropic account 3"}},"typeVersion":1.3},{"id":"d08fe78c-d123-40ac-9ec7-611bebc766c2","name":"Google Sheets","type":"n8n-nodes-base.googleSheets","position":[2760,-220],"parameters":{"columns":{"value":{"Date":"={{ $now }}","To-Do":"={{ $json.output }}"},"schema":[{"id":"Date","type":"string","display":true,"required":false,"displayName":"Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"To-Do","type":"string","display":true,"required":false,"displayName":"To-Do","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1YgZ6vFwDd1JHqIhOdtAUf5zNSmUuS2v-m2nKvhy0a24/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1YgZ6vFwDd1JHqIhOdtAUf5zNSmUuS2v-m2nKvhy0a24","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1YgZ6vFwDd1JHqIhOdtAUf5zNSmUuS2v-m2nKvhy0a24/edit?usp=drivesdk","cachedResultName":"To-Do's"}},"credentials":{"googleSheetsOAuth2Api":{"id":"h6BWkFrOpF4Fixzj","name":"Google Sheets account 4"}},"typeVersion":4.5},{"id":"47f36ebb-d421-46ef-999c-02eb242372a8","name":"Slack2","type":"n8n-nodes-base.slack","position":[3000,-280],"webhookId":"ac3567da-3389-455c-8046-c008deec1a89","parameters":{"text":"=Hi Max,  \n\n{{ $('Master Orchestrator Agent').item.json.output }}","user":{"__rl":true,"mode":"list","value":"U057SEMAP6J","cachedResultName":"max"},"select":"user","otherOptions":{}},"credentials":{"slackApi":{"id":"rMLcAY2NkEYMYzPi","name":"Jarvis Agent - May 2025"}},"typeVersion":2.3},{"id":"07c67d34-e353-4f1b-8684-898b10f90b94","name":"Previous To Do","type":"n8n-nodes-base.googleSheetsTool","position":[2620,-20],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1YgZ6vFwDd1JHqIhOdtAUf5zNSmUuS2v-m2nKvhy0a24/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1YgZ6vFwDd1JHqIhOdtAUf5zNSmUuS2v-m2nKvhy0a24","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1YgZ6vFwDd1JHqIhOdtAUf5zNSmUuS2v-m2nKvhy0a24/edit?usp=drivesdk","cachedResultName":"To-Do's"}},"credentials":{"googleSheetsOAuth2Api":{"id":"h6BWkFrOpF4Fixzj","name":"Google Sheets account 4"}},"typeVersion":4.5},{"id":"7c95c16f-f578-45c1-b718-407b81d6ac4f","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[440,-240],"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[1,2,3,4,5],"triggerAtHour":8}]}},"typeVersion":1.2}],"active":true,"pinData":{"When clicking ‘Test workflow’":[{"json":{}}]},"settings":{"executionOrder":"v1"},"versionId":"54c20437-4c0f-4453-b66c-a92679d682a6","connections":{"Slack":{"ai_tool":[[]]},"Get User":{"ai_tool":[[{"node":"Slack Assistant","type":"ai_tool","index":0}]]},"Get Email":{"ai_tool":[[{"node":"Email Assistant","type":"ai_tool","index":0}]]},"Check Sent":{"ai_tool":[[{"node":"Email Assistant","type":"ai_tool","index":0}]]},"Check Sent1":{"ai_tool":[[{"node":"Follow Up Assistant","type":"ai_tool","index":0}]]},"Google Sheets":{"main":[[{"node":"Slack2","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"Email Assistant","type":"ai_memory","index":0}]]},"Previous To Do":{"ai_tool":[[{"node":"Master Orchestrator Agent","type":"ai_tool","index":0}]]},"Email Assistant":{"main":[[{"node":"Follow Up Assistant","type":"main","index":0}]]},"Fetch FireFlies":{"ai_tool":[[{"node":"Follow Up Assistant","type":"ai_tool","index":0}]]},"Google Calendar":{"ai_tool":[[{"node":"Follow Up Assistant","type":"ai_tool","index":0}]]},"Slack Assistant":{"main":[[{"node":"Master Orchestrator Agent","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Email Assistant","type":"main","index":0}]]},"Follow Up Assistant":{"main":[[{"node":"Slack Assistant","type":"main","index":0}]]},"Unread Emails - FYI":{"ai_tool":[[{"node":"Email Assistant","type":"ai_tool","index":0}]]},"Anthropic Chat Model":{"ai_languageModel":[[{"node":"Email Assistant","type":"ai_languageModel","index":0}]]},"Check Slack Mentions":{"ai_tool":[[{"node":"Slack Assistant","type":"ai_tool","index":0}]]},"Anthropic Chat Model1":{"ai_languageModel":[[{"node":"Follow Up Assistant","type":"ai_languageModel","index":0}]]},"Anthropic Chat Model2":{"ai_languageModel":[[{"node":"Master Orchestrator Agent","type":"ai_languageModel","index":0}]]},"Anthropic Chat Model3":{"ai_languageModel":[[{"node":"Slack Assistant","type":"ai_languageModel","index":0}]]},"Check Thread Mentions":{"ai_tool":[[{"node":"Slack Assistant","type":"ai_tool","index":0}]]},"Master Orchestrator Agent":{"main":[[{"node":"Google Sheets","type":"main","index":0}]]},"Unread Emails - To Respond":{"ai_tool":[[{"node":"Email Assistant","type":"ai_tool","index":0}]]},"When clicking ‘Test workflow’":{"main":[[{"node":"Email Assistant","type":"main","index":0}]]}}}


name: Startup Founder Discovery and AI-Powered Outreach with CrunchBase and Gmail
author_name: Yaron Been
author_username: yaron-nofluff
categories: []
created_at: 2025-06-06T13:39:30.662Z
updated_at: 2025-06-06T13:39:30.662Z
url: https://n8n.io/workflows/4729
scraped_at: 2025-06-19 22:07:56
description:
  🚀 Automated Founder Discovery: CrunchBase to Gmail Outreach Workflow!

  Workflow Overview
  This cutting-edge n8n automation is a sophisticated founder intelligence and outreach tool designed to transform startup research into actionable networking opportunities. By intelligently connecting CrunchBase, OpenAI, and Gmail, this workflow:

  Discovers Startup Founders: 
     Automatically retrieves founder profiles
     Tracks latest company updates
     Eliminates manual research efforts

  Intelligent Profile Processing:
     Extracts key professional information
     Filters most relevant details
     Prepares comprehensive founder insights

  AI-Powered Summarization:
     Generates professional email-ready summaries
     Crafts personalized outreach content
     Ensures high-quality communication

  Seamless Email Distribution:
     Sends automated founder digests
     Integrates with Gmail
     Enables rapid professional networking

  Key Benefits
  🤖 Full Automation: Zero-touch founder research
  💡 Smart Profiling: Intelligent founder insights
  📊 Comprehensive Intelligence: Detailed professional summaries
  🌐 Multi-Platform Synchronization: Seamless data flow

  Workflow Architecture

  🔹 Stage 1: Founder Discovery
  Manual Trigger**: Workflow initiation
  CrunchBase API Integration**: Profile retrieval
  Intelligent Filtering**:
    Identifies key startup founders
    Prepares for detailed analysis

  🔹 Stage 2: Profile Extraction
  Detailed Information Capture**
  Key Field Mapping**
  Structured Data Preparation**

  🔹 Stage 3: AI Summarization
  OpenAI GPT Processing**
  Professional Summary Generation**
  Contextual Insight Creation**

  🔹 Stage 4: Email Distribution
  Gmail Integration**
  Automated Outreach**
  Personalized Communication**

  Potential Use Cases
  Venture Capitalists**: Startup scouting
  Sales Teams**: Lead generation
  Recruitment Specialists**: Talent discovery
  Networking Professionals**: Strategic connections
  Startup Ecosystem Researchers**: Market intelligence

  Setup Requirements
  CrunchBase API
     API credentials
     Configured access permissions
     Founder tracking setup

  OpenAI API
     GPT model access
     Summarization configuration
     API key management

  Gmail Account
     Connected email
     Outreach email configuration
     Appropriate sending permissions

  n8n Installation
     Cloud or self-hosted instance
     Workflow configuration
     API credential management

  Future Enhancement Suggestions
  🤖 Advanced founder scoring
  📊 Multi-source intelligence gathering
  🔔 Customizable alert mechanisms
  🌐 Expanded networking platform integration
  🧠 Machine learning insights generation

  Technical Considerations
  Implement robust error handling
  Use secure API authentication
  Maintain flexible data processing
  Ensure compliance with API usage guidelines

  Ethical Guidelines
  Respect professional privacy
  Maintain transparent outreach practices
  Ensure appropriate communication
  Provide opt-out mechanisms

  Hashtag Performance Boost 🚀
  #StartupNetworking #FounderDiscovery #AIOutreach #ProfessionalNetworking #TechInnovation #BusinessIntelligence #AutomatedResearch #StartupScouting #ProfessionalGrowth #NetworkingTech

  Workflow Visualization

  [Manual Trigger]
      ⬇️
  [Updated Profiles List]
      ⬇️
  [Founder Profiles]
      ⬇️
  [Extract Key Fields]
      ⬇️
  [AI Summarization]
      ⬇️
  [Send Email]

  Connect With Me

  Ready to revolutionize your professional networking?

  📧 Email: Yaron@nofluff.online

  🎥 YouTube: @YaronBeen

  💼 LinkedIn: Yaron Been

  Transform your founder research with intelligent, automated workflows!

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.gmail","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.outputParserStructured"]

workflow_json:
  {"id":"yNl6TycBIVr4r9Ef","meta":{"instanceId":"84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db","templateCredsSetupCompleted":true},"name":"Cruchbase email outreach","tags":[],"nodes":[{"id":"4a5a04cc-062d-4822-b690-61d072bf1e88","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1220,220],"parameters":{"jsonSchemaExample":"{\n  \"subject\": \"🚀 Startup Founder Highlights for Outreach - June 6, 2025\",\n  \"body\": \"🚀 Here's a summary of promising startup founders for potential outreach:\\n\\n🔹 **Jane Doe**\\nCo-Founder & CEO at Acme AI. She is a serial entrepreneur with over 10 years of experience in AI and SaaS startups. Educated at Stanford University with an MBA. You can find her on LinkedIn: https://www.linkedin.com/in/janedoe.\\n\\n🔹 **John Smith**\\nCTO at GreenLoop. Passionate about sustainable packaging innovation and technology leadership. Holds a Bachelor’s degree in Environmental Engineering from MIT. Connect on LinkedIn: https://www.linkedin.com/in/johnsmith.\"\n}\n"},"typeVersion":1.2},{"id":"05aaede3-213d-43f3-b42f-c1c7188c6b3b","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[1000,220],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"wYwTjEv45IzlAOAu","name":"OpenAi account 2"}},"typeVersion":1.2},{"id":"02c283da-ace1-41f0-a298-ac89882b0c1d","name":"Updated profiles List","type":"n8n-nodes-base.httpRequest","position":[220,0],"parameters":{"url":"https://api.crunchbase.com/api/v4/relationships/organizations/1234abcd-5678-efgh-ijkl-9012mnop3456/people","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"page","value":"1"}]},"headerParameters":{"parameters":[{"name":"X-Cb-User-Key","value":"YOUR_API_KEY_HERE"}]}},"typeVersion":4.2},{"id":"3f0723a9-73eb-43be-834b-bc2a8c5d9c50","name":"Founder Profiles by UUID","type":"n8n-nodes-base.httpRequest","position":[500,0],"parameters":{"url":"=https://api.crunchbase.com/api/v4/entities/people/{{ $json.data.items[0].uuid }}","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"X-Cb-User-Key","value":"YOUR_API_KEY_HERE"}]}},"typeVersion":4.2},{"id":"25dcbcc9-5155-4d61-b4b7-ce5e9646b56e","name":"Extract Key Profile Fields","type":"n8n-nodes-base.set","position":[720,0],"parameters":{"options":{},"assignments":{"assignments":[{"id":"eeff9c2c-fe9f-4f6c-a030-99ff87308529","name":"Full name","type":"string","value":"={{ $json.data.properties.full_name }}"},{"id":"1ba5a408-31b3-409e-a7bf-95f708b0374a","name":"Title","type":"string","value":"={{ $json.data.properties.title }}"},{"id":"c8344897-be61-47cd-b7fd-3d932644ad07","name":"biography","type":"string","value":"={{ $json.data.properties.biography }}"},{"id":"28ee7b7a-1d5d-46fd-aa35-b9e767626ba3","name":"Education","type":"string","value":"={{ $json.data.properties.education }}"},{"id":"10271203-a0c9-4b16-b88e-4999e210bf03","name":"Social Links","type":"string","value":"={{ $json.data.properties.social_links }}"},{"id":"6144bd09-cbf4-4c27-800b-3b0552c0f5ca","name":"Associated companies","type":"string","value":"={{ $json.data.properties.associated_companies }}"}]}},"typeVersion":3.4},{"id":"8734c81e-515f-481f-aa1e-70ef7bd4ddab","name":"Summarizer Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[1020,0],"parameters":{"text":"=Full name: {{ $json['Full name'] }}\nTitle: {{ $json.Title }}\nbiography: {{ $json.biography }}\nEducation: {{ $json.Education }}\nSocial Links: {{ $json['Social Links'] }}\nAssociated companies: {{ $json['Associated companies'] }}\n","options":{"systemMessage":"You are an expert at writing concise, professional summaries for business email outreach. Given detailed information about a person’s professional profile, your task is to generate a short summary focusing only on the most relevant information for outreach emails.\n\nOnly include:\n- Full name\n- Current title/role\n- Brief, relevant part of the biography (max 1-2 sentences)\n- Key education highlights (school and degree)\n- Social links (only LinkedIn or Twitter if available)\n- Most relevant associated company (name and role)\n\nDo NOT include unnecessary details. Make the summary clear, engaging, and suitable for a personalized outreach email introduction."},"promptType":"define","hasOutputParser":true},"typeVersion":1.9},{"id":"738f7615-bc05-4335-8a93-d4025c8cf885","name":"Send email for outreach","type":"n8n-nodes-base.gmail","position":[1380,0],"webhookId":"2aefe416-f9e3-4b15-82c0-3314acc97048","parameters":{"sendTo":"shahkar.genai@gmail.com","message":"={{ $json.output.body }}","options":{"appendAttribution":false},"subject":"=CrunchBase profile for outreach"},"credentials":{"gmailOAuth2":{"id":"noKcKj5FEpHHvboL","name":"Gmail account"}},"typeVersion":2.1},{"id":"d359f26d-fe8d-4d34-a96c-42b176b946a1","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[0,0],"parameters":{},"typeVersion":1},{"id":"3529f772-cb46-4145-ba2e-f115dce37db4","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-40,-1040],"parameters":{"color":7,"width":420,"height":1220,"content":"## 🔁 **SECTION 1: Trigger + Company Fetching**\n\n**🧱 Nodes:**\n\n* 🔘 **Manual Trigger**\n* 🌐 **HTTP Request – Fetch: Updated Companies List**\n\n---\n\n### 🚀 What This Section Does\n\n🔘 **Manual Trigger**\nThis allows you to manually run the automation anytime you want. Perfect for testing or when you only want to fetch founder data on demand (instead of a scheduled time).\n\n🌐 **HTTP Request – Fetch: Updated Companies List**\nThis node connects to the **Crunchbase API** to get a list of the latest startups or companies that have been updated recently.\n\n#### 🔧 What You Can Customize\n\n🛠️ **Page Query**:\nIn the URL or query parameters, you'll find something like `page=1`.\n➡️ You can manually change this to `page=2`, `page=3`, etc., to explore other sets of companies.\n\n🛠️ **Date Filter**:\nThe `updated_since` parameter can also be changed to look for startups updated within a certain time window.\n\n---\n\n"},"typeVersion":1},{"id":"c10bafbe-3d3b-4cce-b8a0-5d725a98ffb7","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[440,-1160],"parameters":{"color":3,"width":440,"height":1340,"content":"## 👤 **SECTION 2: Founder Profile Fetching + Field Mapping**\n\n**🧱 Nodes:**\n\n* 🌐 **HTTP Request – Fetch: Founder Profiles by UUID**\n* ✏️ **Edit Fields – Extract Key Profile Data**\n\n---\n\n### 🔎 What This Section Does\n\n🌐 **HTTP Request – Fetch: Founder Profiles by UUID**\nFor each company fetched in Section 1, this node pulls the **detailed profile** of one person (typically a founder, CEO, or C-level executive).\n\n✏️ **Edit Fields – Extract Key Profile Data**\nThis step takes the raw profile data and selects only the fields we care about:\n✅ Full Name,\n✅ Title,\n✅ Biography,\n✅ Education,\n✅ Social Links,\n✅ Associated Companies\n\n#### 🔧 What You Can Customize\n\n🔢 **Person Indexing**:\nIn this node’s configuration, you can find the list of people associated with a company.\n➡️ To switch from Founder #1 to Founder #2, change the **item number** or **array index** — for example, from `[0]` to `[1]`.\n\n💡 This is useful when a company has **multiple co-founders** or key executives you may want to evaluate separately.\n\n---\n\n"},"typeVersion":1},{"id":"e8c27235-f214-444e-8b1a-5e445e65e0af","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[940,-640],"parameters":{"color":6,"width":580,"height":1020,"content":"## 🤖📨 **SECTION 3: AI-Powered Summary + Email Outreach**\n\n**🧱 Nodes:**\n\n* 🤖 **AI Agent – Generate Email Summary**\n* 📧 **Gmail – Send Founder Digest**\n\n---\n\n### 🧠 What This Section Does\n\n🤖 **AI Agent – Generate Email Summary**\nThis uses **OpenAI’s GPT model** with a **Structured Output Parser** to turn the extracted profile into a polished, professional email-ready summary.\nIt's trained to output:\n\n> Jane Doe is currently Co-Founder & CEO at Acme AI. She is a serial entrepreneur with 10+ years in AI and SaaS. Educated at Stanford (MBA). Connect on LinkedIn: [https://linkedin.com/in/janedoe](https://linkedin.com/in/janedoe)\n\n📧 **Gmail – Send Founder Digest**\nFinally, this node **sends the email** — which could go to your team, your CRM, or even directly to your inbox — with a subject like:\n\n> 🚀 Startup Founder Highlights for Outreach - June 6, 2025\n\n"},"typeVersion":1},{"id":"fd781b49-45c0-4006-bb22-7d82ff3f4e31","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-1580,-1040],"parameters":{"color":4,"width":1300,"height":320,"content":"=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"},"typeVersion":1},{"id":"9b478bcf-5ba5-4edf-91a6-61e3fffa1078","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1580,-700],"parameters":{"color":4,"width":1289,"height":2558,"content":"## 🔁 **SECTION 1: Trigger + Company Fetching**\n\n**🧱 Nodes:**\n\n* 🔘 **Manual Trigger**\n* 🌐 **HTTP Request – Fetch: Updated Companies List**\n\n---\n\n### 🚀 What This Section Does\n\n🔘 **Manual Trigger**\nThis allows you to manually run the automation anytime you want. Perfect for testing or when you only want to fetch founder data on demand (instead of a scheduled time).\n\n🌐 **HTTP Request – Fetch: Updated Companies List**\nThis node connects to the **Crunchbase API** to get a list of the latest startups or companies that have been updated recently.\n\n#### 🔧 What You Can Customize\n\n🛠️ **Page Query**:\nIn the URL or query parameters, you'll find something like `page=1`.\n➡️ You can manually change this to `page=2`, `page=3`, etc., to explore other sets of companies.\n\n🛠️ **Date Filter**:\nThe `updated_since` parameter can also be changed to look for startups updated within a certain time window.\n\n---\n\n## 👤 **SECTION 2: Founder Profile Fetching + Field Mapping**\n\n**🧱 Nodes:**\n\n* 🌐 **HTTP Request – Fetch: Founder Profiles by UUID**\n* ✏️ **Edit Fields – Extract Key Profile Data**\n\n---\n\n### 🔎 What This Section Does\n\n🌐 **HTTP Request – Fetch: Founder Profiles by UUID**\nFor each company fetched in Section 1, this node pulls the **detailed profile** of one person (typically a founder, CEO, or C-level executive).\n\n✏️ **Edit Fields – Extract Key Profile Data**\nThis step takes the raw profile data and selects only the fields we care about:\n✅ Full Name,\n✅ Title,\n✅ Biography,\n✅ Education,\n✅ Social Links,\n✅ Associated Companies\n\n#### 🔧 What You Can Customize\n\n🔢 **Person Indexing**:\nIn this node’s configuration, you can find the list of people associated with a company.\n➡️ To switch from Founder #1 to Founder #2, change the **item number** or **array index** — for example, from `[0]` to `[1]`.\n\n💡 This is useful when a company has **multiple co-founders** or key executives you may want to evaluate separately.\n\n---\n\n## 🤖📨 **SECTION 3: AI-Powered Summary + Email Outreach**\n\n**🧱 Nodes:**\n\n* 🤖 **AI Agent – Generate Email Summary**\n* 📧 **Gmail – Send Founder Digest**\n\n---\n\n### 🧠 What This Section Does\n\n🤖 **AI Agent – Generate Email Summary**\nThis uses **OpenAI’s GPT model** with a **Structured Output Parser** to turn the extracted profile into a polished, professional email-ready summary.\nIt's trained to output:\n\n> Jane Doe is currently Co-Founder & CEO at Acme AI. She is a serial entrepreneur with 10+ years in AI and SaaS. Educated at Stanford (MBA). Connect on LinkedIn: [https://linkedin.com/in/janedoe](https://linkedin.com/in/janedoe)\n\n📧 **Gmail – Send Founder Digest**\nFinally, this node **sends the email** — which could go to your team, your CRM, or even directly to your inbox — with a subject like:\n\n> 🚀 Startup Founder Highlights for Outreach - June 6, 2025\n\n#### 🛠️ What You Can Customize\n\n* ✍️ Change the **recipient** to your sales or outreach inbox\n* 🖋️ Modify the **subject line** to match your brand or campaign\n* 📬 Send to **multiple emails** using a comma-separated list\n\n---\n\n## ✅ Final Thoughts: How You Can Use This\n\nThis workflow is perfect for:\n\n* 🚀 Startup Scouts\n* 📬 Cold Outreach Campaigns\n* 🧠 VC Analysts or Tech Researchers\n* 🧩 Enriching founder data in your CRM\n\n💥 **No more copy-pasting Crunchbase profiles manually!**\nJust trigger the workflow, skim the summaries, and reach out.\n\n---\n\n"},"typeVersion":1}],"active":false,"pinData":{"Updated profiles List":[{"json":{"data":{"items":[{"type":"person","uuid":"abc123-def456","identifier":{"value":"Jane Doe","api_path":"https://api.crunchbase.com/api/v4/entities/people/abc123-def456","image_id":null,"permalink":"person/jane-doe"},"properties":{"title":"Co-Founder & CEO","last_name":"Doe","created_at":"2024-06-01T10:00:00Z","first_name":"Jane","started_on":"2023-01-10","entity_def_id":"person"}},{"type":"person","uuid":"xyz789-pqr012","identifier":{"value":"John Smith","api_path":"https://api.crunchbase.com/api/v4/entities/people/xyz789-pqr012","image_id":null,"permalink":"person/john-smith"},"properties":{"title":"CTO","last_name":"Smith","created_at":"2024-06-01T10:30:00Z","first_name":"John","started_on":"2023-01-10","entity_def_id":"person"}}],"paging":{"total_items":2,"current_page":1}}}}],"Founder Profiles by UUID":[{"json":{"data":{"type":"person","uuid":"abc123-def456","identifier":{"value":"Jane Doe","api_path":"https://api.crunchbase.com/api/v4/entities/people/abc123-def456","permalink":"person/jane-doe"},"properties":{"title":"Co-Founder & CEO","biography":"Jane Doe is a serial entrepreneur with over 10 years of experience in AI and SaaS startups.","education":[{"degree":"MBA","end_year":2012,"start_year":2010,"school_name":"Stanford University","field_of_study":"Business Administration"}],"full_name":"Jane Doe","last_name":"Doe","created_at":"2024-06-01T10:00:00Z","first_name":"Jane","updated_at":"2024-06-10T12:00:00Z","social_links":{"twitter":"https://twitter.com/janedoe","linkedin":"https://www.linkedin.com/in/janedoe"},"associated_companies":[{"name":"Acme AI","role":"Co-Founder & CEO","uuid":"1234abcd-5678-efgh-ijkl-9012mnop3456","api_path":"https://api.crunchbase.com/api/v4/entities/organizations/1234abcd-5678-efgh-ijkl-9012mnop3456"},{"name":"NextGen Tech","role":"Advisor","uuid":"7890qrst-uvwx-1234-yzab-5678cdef9012","api_path":"https://api.crunchbase.com/api/v4/entities/organizations/7890qrst-uvwx-1234-yzab-5678cdef9012"}]}}}}]},"settings":{"executionOrder":"v1"},"versionId":"ddab3a6c-8291-44bb-87bb-9085d4ce845a","connections":{"Summarizer Agent":{"main":[[{"node":"Send email for outreach","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Summarizer Agent","type":"ai_languageModel","index":0}]]},"Updated profiles List":{"main":[[{"node":"Founder Profiles by UUID","type":"main","index":0}]]},"Founder Profiles by UUID":{"main":[[{"node":"Extract Key Profile Fields","type":"main","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Summarizer Agent","type":"ai_outputParser","index":0}]]},"Extract Key Profile Fields":{"main":[[{"node":"Summarizer Agent","type":"main","index":0}]]},"When clicking ‘Test workflow’":{"main":[[{"node":"Updated profiles List","type":"main","index":0}]]}}}


name: Automated Investor Intelligence: CrunchBase to Google Sheets Data Harvester
author_name: Yaron Been
author_username: yaron-nofluff
nodes_used: ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","n8n-nodes-base.code"]
categories: []
created_at: 2025-06-06T13:41:28.967Z
updated_at: 2025-06-06T13:41:28.967Z
url: https://n8n.io/workflows/4731
scraped_at: 2025-06-19 22:07:56
description:
  🚀 Automated Investor Intelligence: CrunchBase to Google Sheets Data Harvester!

  Workflow Overview
  This cutting-edge n8n automation is a sophisticated investor intelligence tool designed to transform market research into actionable insights. By intelligently connecting CrunchBase, data processing, and Google Sheets, this workflow:

  Discovers Investor Insights: 
     Automatically retrieves latest investor data
     Tracks key investment organizations
     Eliminates manual market research efforts

  Intelligent Data Processing:
     Filters investor-specific organizations
     Extracts critical investment metrics
     Ensures comprehensive market intelligence

  Seamless Data Logging:
     Automatically updates Google Sheets
     Creates real-time investor database
     Enables rapid market trend analysis

  Scheduled Intelligence Gathering:
     Daily automated tracking
     Consistent investor insight updates
     Zero manual intervention required

  Key Benefits
  🤖 Full Automation: Zero-touch investor research
  💡 Smart Filtering: Targeted investment insights
  📊 Comprehensive Tracking: Detailed investor intelligence
  🌐 Multi-Source Synchronization: Seamless data flow

  Workflow Architecture

  🔹 Stage 1: Investor Discovery
  Scheduled Trigger**: Daily market scanning
  CrunchBase API Integration**
  Intelligent Filtering**:
    Investor-specific organizations
    Key investment metrics
    Most recent data

  🔹 Stage 2: Data Extraction
  Comprehensive Metadata Parsing**
  Key Information Retrieval**
  Structured Data Preparation**

  🔹 Stage 3: Data Logging
  Google Sheets Integration**
  Automatic Row Appending**
  Real-Time Database Updates**

  Potential Use Cases
  Venture Capitalists**: Investment ecosystem mapping
  Startup Scouts**: Investor trend analysis
  Market Researchers**: Comprehensive investment insights
  Business Development**: Strategic partnership identification
  Investment Analysts**: Market intelligence gathering

  Setup Requirements
  CrunchBase API
     API credentials
     Configured access permissions
     Investor organization tracking setup

  Google Sheets
     Connected Google account
     Prepared tracking spreadsheet
     Appropriate sharing settings

  n8n Installation
     Cloud or self-hosted instance
     Workflow configuration
     API credential management

  Future Enhancement Suggestions
  🤖 Advanced investment trend analysis
  📊 Multi-source investor aggregation
  🔔 Customizable alert mechanisms
  🌐 Expanded investment stage tracking
  🧠 Machine learning insights generation

  Technical Considerations
  Implement robust error handling
  Use secure API authentication
  Maintain flexible data processing
  Ensure compliance with API usage guidelines

  Ethical Guidelines
  Respect business privacy
  Use data for legitimate research
  Maintain transparent information gathering
  Provide proper attribution

  Hashtag Performance Boost 🚀
  #InvestorIntelligence #VentureCapital #MarketResearch #AIWorkflow #DataAutomation #StartupEcosystem #InvestmentTracking #BusinessIntelligence #TechInnovation #StartupFunding

  Workflow Visualization

  [Daily Trigger]
      ⬇️
  [Fetch Investor Data]
      ⬇️
  [Extract Investor Fields]
      ⬇️
  [Log to Google Sheets]

  Connect With Me

  Ready to revolutionize your investor research?

  📧 Email: Yaron@nofluff.online

  🎥 YouTube: @YaronBeen

  💼 LinkedIn: Yaron Been

  Transform your market intelligence with intelligent, automated workflows!

workflow_json:
  {"id":"8hRFK0iEjVKmthLq","meta":{"instanceId":"84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db","templateCredsSetupCompleted":true},"name":"CrunchBase Invester Data","tags":[],"nodes":[{"id":"49130296-ad2e-43f6-8ec4-7f72161a3a1b","name":"Daily Investor Data Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[0,0],"parameters":{"rule":{"interval":[{"triggerAtHour":9}]}},"typeVersion":1.2},{"id":"24caa890-abba-435d-a385-18cdef03dfe2","name":"Fetch Crunchbase Investor Data","type":"n8n-nodes-base.httpRequest","position":[220,0],"parameters":{"url":"https://api.crunchbase.com/api/v4/searches/organizations","method":"POST","options":{},"jsonBody":"{\n  \"field_ids\": [\n    \"identifier\",\n    \"name\",\n    \"short_description\",\n    \"location_identifiers\",\n    \"investment_stage\"\n  ],\n  \"query\": [\n    {\n      \"type\": \"predicate\",\n      \"field_id\": \"organization_types\",\n      \"operator_id\": \"includes\",\n      \"values\": [\n        \"investor\"\n      ]\n    }\n  ],\n  \"limit\": 5\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_CRUNCHBASE_API_KEY"},{"name":"Authorization","value":"Bearer YOUR_CRUNCHBASE_API_KEY"}]}},"typeVersion":4.2},{"id":"4de0847b-6e11-457d-b04b-d03b4fb1e3c1","name":"Extract Investor Fields","type":"n8n-nodes-base.code","position":[540,0],"parameters":{"jsCode":"const entities = items[0].json.entities;\n\nreturn entities.map(entity => {\n  return {\n    json: {\n      name: entity.name,\n      short_description: entity.short_description,\n      location_identifiers: entity.location_identifiers,\n      investment_stage: entity.investment_stage\n    }\n  };\n});\n"},"typeVersion":2},{"id":"a7d08f10-1fde-4e99-9127-bf12926d4197","name":"Append to Investor Sheet","type":"n8n-nodes-base.googleSheets","position":[780,0],"parameters":{"columns":{"value":{"Name":"={{ $json.name }}","Location":"={{ $json.location_identifiers }}","Investment Stage":"={{ $json.investment_stage }}","Short description":"={{ $json.short_description }}"},"schema":[{"id":"Name","type":"string","display":true,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Short description","type":"string","display":true,"required":false,"displayName":"Short description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Location","type":"string","display":true,"required":false,"displayName":"Location","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Investment Stage","type":"string","display":true,"removed":false,"required":false,"displayName":"Investment Stage","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1XOUvOgrhDdOorEj0-TL4EiVygMd1wpD3cktI2_bm-Ww/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1XOUvOgrhDdOorEj0-TL4EiVygMd1wpD3cktI2_bm-Ww","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1XOUvOgrhDdOorEj0-TL4EiVygMd1wpD3cktI2_bm-Ww/edit?usp=drivesdk","cachedResultName":"CrunchBase Invester List"}},"credentials":{"googleSheetsOAuth2Api":{"id":"Rp7XiR3hxJfv03ZO","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"45c6eb29-4d24-49a6-b849-938b178b66c9","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-40,-1700],"parameters":{"color":5,"width":420,"height":1900,"content":"### 🔷 **SECTION 1: Getting the Data from Crunchbase**\n\n#### 🧩 Nodes:\n\n1. 🕒 **Daily Investor Data Trigger**\n2. 🌐 **Fetch Crunchbase Investor Data**\n\n---\n\n#### 🔍 What Happens in This Section?\n\nThis section is all about **automatically pulling investor data from Crunchbase** on a scheduled basis, without any manual effort.\n\n---\n\n#### 🕒 1. **Daily Investor Data Trigger**\n\n> *\"When should the automation run?\"*\n\n* This **Schedule Trigger** node starts your workflow automatically at your chosen time.\n* For example, it could run every day at 8 AM.\n* It removes the need to remember to check Crunchbase manually.\n\n✅ *Beginner Benefit:*\n\n> Even if you’re not technical, you just set the schedule and let n8n run this job every day while you sleep ☕📊\n\n---\n\n#### 🌐 2. **Fetch Crunchbase Investor Data**\n\n> *\"Where do we get the data from?\"*\n\n* This **HTTP Request** node sends a **POST request** to [Crunchbase’s API](https://data.crunchbase.com/docs).\n\n* It includes a **filter** for organization types like `investor` and requests fields like:\n\n  * `name`\n  * `short_description`\n  * `location_identifiers`\n  * `investment_stage`\n\n* Crunchbase replies with a **JSON** file full of matching investors.\n\n✅ *Beginner Benefit:*\n\n> You don’t need to open a browser or search anything. This step collects live investor data from Crunchbase and brings it into your workflow for you 🚀\n\n---\n\n### ✅ What This Section Gives You:\n\nA **live, up-to-date snapshot** of investor information, **automatically pulled** from Crunchbase, without coding or clicking.\n\n---\n\n"},"typeVersion":1},{"id":"2dd2de36-770c-4833-884b-1525c1411d46","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[480,-1400],"parameters":{"color":6,"width":460,"height":1600,"content":"### 🔷 **SECTION 2: Processing and Saving the Data**\n\n#### 🧩 Nodes:\n\n3. 🧮 **Extract Investor Fields**\n4. 📄 **Append to Investor Sheet**\n\n---\n\n#### 🔍 What Happens in This Section?\n\nNow that we have raw investor data, this section **cleans it up** and **stores it in a Google Sheet** for easy access and analysis.\n\n---\n\n#### 🧮 3. **Extract Investor Fields**\n\n> *\"Let’s clean and format the response.\"*\n\n* This **Code** node uses JavaScript to loop through the list of investors and extract just what you care about:\n\n  * ✅ Name\n  * 📝 Short description\n  * 🌍 Location\n  * 💰 Investment stage\n\n* Each investor becomes a **separate row-ready item** for Google Sheets.\n\n✅ *Beginner Benefit:*\n\n> You don’t need to look at messy data. This step reshapes it into a clean format automatically ✨\n\n---\n\n#### 📄 4. **Append to Investor Sheet**\n\n> *\"Store it somewhere useful.\"*\n\n* This **Google Sheets** node takes the cleaned data and **adds it to a selected sheet**.\n* It works like a magic assistant, typing the investor data into your spreadsheet row-by-row.\n* You now have a **running list** of investors to use for:\n\n  * 📈 Market research\n  * 🎯 Outreach planning\n  * 💡 Competitor benchmarking\n\n"},"typeVersion":1},{"id":"75231f28-c911-4bdc-a6a2-c6255d293eb3","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-1820,-1680],"parameters":{"color":4,"width":1300,"height":320,"content":"=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"},"typeVersion":1},{"id":"c8a8156f-946e-4a50-8789-aff9c66bd9b6","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1820,-1340],"parameters":{"color":4,"width":1289,"height":3278,"content":"## ✨ n8n Workflow: Investor Data Automation from Crunchbase to Google Sheets\n\n---\n\n### 🔷 **SECTION 1: Getting the Data from Crunchbase**\n\n#### 🧩 Nodes:\n\n1. 🕒 **Daily Investor Data Trigger**\n2. 🌐 **Fetch Crunchbase Investor Data**\n\n---\n\n#### 🔍 What Happens in This Section?\n\nThis section is all about **automatically pulling investor data from Crunchbase** on a scheduled basis, without any manual effort.\n\n---\n\n#### 🕒 1. **Daily Investor Data Trigger**\n\n> *\"When should the automation run?\"*\n\n* This **Schedule Trigger** node starts your workflow automatically at your chosen time.\n* For example, it could run every day at 8 AM.\n* It removes the need to remember to check Crunchbase manually.\n\n✅ *Beginner Benefit:*\n\n> Even if you’re not technical, you just set the schedule and let n8n run this job every day while you sleep ☕📊\n\n---\n\n#### 🌐 2. **Fetch Crunchbase Investor Data**\n\n> *\"Where do we get the data from?\"*\n\n* This **HTTP Request** node sends a **POST request** to [Crunchbase’s API](https://data.crunchbase.com/docs).\n\n* It includes a **filter** for organization types like `investor` and requests fields like:\n\n  * `name`\n  * `short_description`\n  * `location_identifiers`\n  * `investment_stage`\n\n* Crunchbase replies with a **JSON** file full of matching investors.\n\n✅ *Beginner Benefit:*\n\n> You don’t need to open a browser or search anything. This step collects live investor data from Crunchbase and brings it into your workflow for you 🚀\n\n---\n\n### ✅ What This Section Gives You:\n\nA **live, up-to-date snapshot** of investor information, **automatically pulled** from Crunchbase, without coding or clicking.\n\n---\n\n<br/>\n\n---\n\n### 🔷 **SECTION 2: Processing and Saving the Data**\n\n#### 🧩 Nodes:\n\n3. 🧮 **Extract Investor Fields**\n4. 📄 **Append to Investor Sheet**\n\n---\n\n#### 🔍 What Happens in This Section?\n\nNow that we have raw investor data, this section **cleans it up** and **stores it in a Google Sheet** for easy access and analysis.\n\n---\n\n#### 🧮 3. **Extract Investor Fields**\n\n> *\"Let’s clean and format the response.\"*\n\n* This **Code** node uses JavaScript to loop through the list of investors and extract just what you care about:\n\n  * ✅ Name\n  * 📝 Short description\n  * 🌍 Location\n  * 💰 Investment stage\n\n* Each investor becomes a **separate row-ready item** for Google Sheets.\n\n✅ *Beginner Benefit:*\n\n> You don’t need to look at messy data. This step reshapes it into a clean format automatically ✨\n\n---\n\n#### 📄 4. **Append to Investor Sheet**\n\n> *\"Store it somewhere useful.\"*\n\n* This **Google Sheets** node takes the cleaned data and **adds it to a selected sheet**.\n* It works like a magic assistant, typing the investor data into your spreadsheet row-by-row.\n* You now have a **running list** of investors to use for:\n\n  * 📈 Market research\n  * 🎯 Outreach planning\n  * 💡 Competitor benchmarking\n\n✅ *Beginner Benefit:*\n\n> You don’t copy-paste anything — n8n writes investor data into your sheet for you. It’s like having a personal assistant with no salary 📊🤖\n\n---\n\n### ✅ What This Section Gives You:\n\nA fully automated process that **cleans up Crunchbase data** and **stores it neatly** in Google Sheets — ready for analysis, dashboards, or reporting.\n\n---\n\n### 🎁 Final Outcome\n\n✅ No coding needed\n✅ Runs on autopilot\n✅ Clean data in your sheet\n✅ Use for strategy, marketing, or VC tracking\n\n---\n\n\n"},"typeVersion":1}],"active":false,"pinData":{"Fetch Crunchbase Investor Data":[{"json":{"paging":{"next_page":"cursor_string","total_items":1250,"current_page":1},"entities":[{"name":"Sequoia Capital","identifier":{"uuid":"12345","permalink":"sequoia-capital"},"investment_stage":["early_stage","seed"],"short_description":"Venture capital firm investing in early-stage companies.","location_identifiers":["united_states"]},{"name":"Andreessen Horowitz","identifier":{"uuid":"67890","permalink":"andreesen-horowitz"},"investment_stage":["seed","growth_stage"],"short_description":"Venture capital firm in Silicon Valley.","location_identifiers":["united_states"]}]}}]},"settings":{"executionOrder":"v1"},"versionId":"daeaf695-d4ae-460d-84b1-b4cdba520d28","connections":{"Extract Investor Fields":{"main":[[{"node":"Append to Investor Sheet","type":"main","index":0}]]},"Daily Investor Data Trigger":{"main":[[{"node":"Fetch Crunchbase Investor Data","type":"main","index":0}]]},"Fetch Crunchbase Investor Data":{"main":[[{"node":"Extract Investor Fields","type":"main","index":0}]]}}}


name: Daily Startup Intelligence: Crunchbase Updates to Email Digest with GPT
author_name: Yaron Been
author_username: yaron-nofluff
categories: []
created_at: 2025-06-06T13:43:04.848Z
updated_at: 2025-06-06T13:43:04.848Z
url: https://n8n.io/workflows/4732
scraped_at: 2025-06-19 22:07:56
description:
  🚀 Automated Startup Intelligence: CrunchBase Updates to Email Digest Workflow!

  Workflow Overview
  This cutting-edge n8n automation is a sophisticated startup intelligence tool designed to transform market research into actionable insights. By intelligently connecting CrunchBase, AI processing, and Gmail, this workflow:

  Discovers Startup Updates: 
     Automatically retrieves latest company information
     Tracks recent organizational changes
     Eliminates manual market research efforts

  Intelligent Data Processing:
     Filters and extracts key company details
     Generates AI-powered summaries
     Ensures comprehensive market intelligence

  Smart Summarization:
     Uses AI to create readable company updates
     Transforms complex data into digestible insights
     Provides professional, context-rich summaries

  Seamless Email Distribution:
     Automatically sends daily update digests
     Delivers insights directly to your inbox
     Enables rapid market awareness

  Key Benefits
  🤖 Full Automation: Zero-touch startup research
  💡 Smart Filtering: Targeted company insights
  📊 Comprehensive Tracking: Detailed market intelligence
  🌐 Multi-Source Synchronization: Seamless data flow

  Workflow Architecture

  🔹 Stage 1: Company Discovery
  Manual/Scheduled Trigger**: Market scanning
  CrunchBase API Integration**
  Intelligent Filtering**:
    Recent updates
    Specific time frames
    Key organizational information

  🔹 Stage 2: Data Extraction
  Comprehensive Metadata Parsing**
  Key Information Retrieval**
  Structured Data Preparation**

  🔹 Stage 3: AI Summarization
  OpenAI GPT Processing**
  Professional Summary Generation**
  Contextual Insight Creation**

  🔹 Stage 4: Email Distribution
  Gmail Integration**
  Automated Update Digest**
  Personalized Delivery**

  Potential Use Cases
  Venture Capitalists**: Startup ecosystem tracking
  Market Researchers**: Industry trend analysis
  Startup Founders**: Competitive intelligence
  Business Strategists**: Market opportunity identification
  Investors**: Real-time company insights

  Setup Requirements
  CrunchBase API
     API credentials
     Configured access permissions
     Company update tracking setup

  OpenAI API
     GPT model access
     Summarization configuration
     API key management

  Gmail Account
     Connected email
     Digest email configuration
     Appropriate sending permissions

  n8n Installation
     Cloud or self-hosted instance
     Workflow configuration
     API credential management

  Future Enhancement Suggestions
  🤖 Advanced company trend analysis
  📊 Multi-source intelligence gathering
  🔔 Customizable alert mechanisms
  🌐 Expanded industry tracking
  🧠 Machine learning insights generation

  Technical Considerations
  Implement robust error handling
  Use secure API authentication
  Maintain flexible data processing
  Ensure compliance with API usage guidelines

  Ethical Guidelines
  Respect business privacy
  Use data for legitimate research
  Maintain transparent information gathering
  Provide proper attribution

  Hashtag Performance Boost 🚀
  #StartupIntelligence #MarketResearch #AIWorkflow #CompanyUpdates #BusinessIntelligence #TechInnovation #DataAutomation #StartupEcosystem #InvestorInsights #TrendTracking

  Workflow Visualization

  [Manual/Scheduled Trigger]
      ⬇️
  [Fetch Crunchbase Updates]
      ⬇️
  [Extract Company Details]
      ⬇️
  [AI Summarization]
      ⬇️
  [Send Email Digest]

  Connect With Me

  Ready to revolutionize your startup intelligence?

  📧 Email: Yaron@nofluff.online

  🎥 YouTube: @YaronBeen

  💼 LinkedIn: Yaron Been

  Transform your market research with intelligent, automated workflows!

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.gmail","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.outputParserStructured"]

workflow_json:
  {"id":"wqZWgW8ymv4cC0Dk","meta":{"instanceId":"84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db","templateCredsSetupCompleted":true},"name":"Crunchbase Startup Activity Monitor","tags":[],"nodes":[{"id":"99e036b3-48e2-401d-91aa-e16a3b1951c2","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[760,260],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"wYwTjEv45IzlAOAu","name":"OpenAi account 2"}},"typeVersion":1.2},{"id":"815b5136-f670-4302-afd2-48bb799a6085","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1000,260],"parameters":{"jsonSchemaExample":"{\n  \"subject\": \"🚀 Crunchbase Company Updates - June 5, 2025\",\n  \"body\": \"🚀 Here's a summary of recent company updates from Crunchbase:\\n\\n🔹 **OpenAI**\\nAI research and deployment company.\\nIndustry: Artificial Intelligence, Machine Learning\\nLocation: San Francisco, USA\\nLast Updated: June 5, 2025\\n\\n🔹 **DeepMind**\\nSolving intelligence to benefit humanity.\\nIndustry: Deep Learning, Healthcare\\nLocation: London, GBR\\nLast Updated: June 5, 2025\"\n}\n"},"typeVersion":1.2},{"id":"c11c92e9-6ec1-42a9-885a-636677735131","name":"Trigger Manual Test","type":"n8n-nodes-base.manualTrigger","position":[0,0],"parameters":{},"typeVersion":1},{"id":"18b76b77-e9ec-4f57-a2d5-74d80daeaa14","name":"Fetch Crunchbase Updates","type":"n8n-nodes-base.httpRequest","position":[220,0],"parameters":{"url":"https://api.crunchbase.com/api/v4/entities/organizations","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"user_key","value":"YOUR_API_KEY"},{"name":"updated_since","value":"2025-06-05"}]},"headerParameters":{"parameters":[{"name":"Accept","value":"application/json"}]}},"typeVersion":4.2},{"id":"5a5391e9-99f2-4658-879f-8e3c29d10511","name":"Extract Company Details","type":"n8n-nodes-base.set","position":[440,0],"parameters":{"options":{},"assignments":{"assignments":[{"id":"4bebf879-2d02-4fa8-ac71-91b7d83d3ed9","name":"data.items[0].properties.name","type":"string","value":"={{ $json.data.items[0].properties.name }}"},{"id":"31995946-952d-4dc3-ad4d-1bd925c11716","name":"data.items[0].properties.short_description","type":"string","value":"={{ $json.data.items[0].properties.short_description }}"},{"id":"2e3bd9f3-0c2a-49f5-b556-a392bb221790","name":"data.items[0].properties.categories","type":"string","value":"={{ $json.data.items[0].properties.categories }}"},{"id":"6af96090-ee35-49bd-9c08-a41b7f0c2e64","name":"data.items[0].properties.city_name","type":"string","value":"={{ $json.data.items[0].properties.city_name }}"},{"id":"ccb2b151-9184-4a50-8c80-b12ba95a13b3","name":"data.items[0].properties.country_code","type":"string","value":"={{ $json.data.items[0].properties.country_code }}"},{"id":"839bd2ea-e287-4fb7-902c-b7ea702692aa","name":"data.items[0].properties.updated_at","type":"string","value":"={{ $json.data.items[0].properties.updated_at }}"}]}},"typeVersion":3.4},{"id":"76b02289-ec75-4fc1-887e-b2ba0bc4d814","name":"Summarizer Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[800,0],"parameters":{"text":"=Name: {{ $json.data.items[0].properties.name }}\nDescription: {{ $json.data.items[0].properties.short_description }}\ncategories: {{ $json.data.items[0].properties.categories }}\ncity name: {{ $json.data.items[0].properties.city_name }}\ncountry name: {{ $json.data.items[0].properties.country_code }}\nupdated at: {{ $json.data.items[0].properties.updated_at }}","options":{"systemMessage":"You are a helpful assistant that writes email-ready summaries of recent company updates from Crunchbase. \n\nThe input contains data about recently updated organizations including their name, description, categories, location, and update time.\n\nSummarize the companies clearly in a professional tone. Include:\n- Company name (bold or highlighted)\n- One-line description\n- Industry/categories (comma-separated)\n- Location (City, Country)\n- Last updated time (formatted)\n\nFormat it for a human reader in plain text or HTML for email use. Use line breaks or bullet points to separate companies.\nAvoid repeating keys or technical jargon.\n"},"promptType":"define","hasOutputParser":true},"typeVersion":1.9},{"id":"a6cd42af-6785-4b25-bdd9-f66badc98a65","name":"Send Email with Summary","type":"n8n-nodes-base.gmail","position":[1340,0],"webhookId":"99a34399-48a4-4133-a5d0-9852d7e383de","parameters":{"sendTo":"shahkar.genai@gmail.com","message":"={{ $json.output.body }}","options":{"appendAttribution":false},"subject":"={{ $json.output.subject }}"},"credentials":{"gmailOAuth2":{"id":"noKcKj5FEpHHvboL","name":"Gmail account"}},"typeVersion":2.1},{"id":"1036ea4c-3106-406f-b0c4-6b40b70a47f1","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-40,-1280],"parameters":{"color":3,"width":640,"height":1460,"content":"## 🔹 **SECTION 1: Data Collection & Preprocessing**\n\n### 📍 Nodes Involved:\n\n* ✅ `Trigger Manual Test`\n* 🌐 `Fetch Crunchbase Updates`\n* ✏️ `Extract Company Details`\n\n---\n\n### 🧩 1. `Trigger Manual Test` 🖱️\n\n**Purpose:** This node is just for testing. It lets you **manually start** your workflow with a click.\n\n> 💡 In production, replace this with a **cron node** ⏰ if you want this workflow to run **automatically every day**.\n\n---\n\n### 🌐 2. `Fetch Crunchbase Updates` (HTTP Request)\n\n**Purpose:** This node sends a request to the [Crunchbase API](https://data.crunchbase.com/docs) to **fetch companies updated in the last 24 hours**.\n\n🔧 Here's what it does:\n\n* Makes a **GET request** to:\n  `https://api.crunchbase.com/api/v4/entities/organizations`\n* Adds parameters:\n\n  * `user_key`: Your Crunchbase API key 🔐\n  * `updated_since`: Yesterday’s date 📅\n\n> ✅ It returns a **list of updated companies** including names, descriptions, locations, and industries.\n\n---\n\n### ✏️ 3. `Extract Company Details`\n\n**Purpose:** Crunchbase API data can be complex. This node simplifies things.\n\n🛠 It:\n\n* Extracts **essential fields only** like:\n\n  * Name 🏢\n  * Description 📖\n  * Location 📍\n  * Industry 🏭\n  * Last Updated Date 🗓️\n* Prepares this data for the AI summarizer in a clean format.\n\n> 💡 This step ensures only the relevant information is passed forward, saving processing time and cost.\n\n---\n\n"},"typeVersion":1},{"id":"ccbc1ef4-0dbe-40c1-9a33-e6f6787d64d1","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[680,-1220],"parameters":{"color":5,"width":500,"height":1640,"content":"## 🧠 **SECTION 2: AI Summary + Email Delivery**\n\n### 🤖 Nodes Involved:\n\n* 🧠 `Summarize Company Updates`\n* 💬 `OpenAI Chat (GPT-4 or GPT-3.5)`\n* 🔎 `Parse JSON Email Summary`\n\n---\n\n### 🤖 4. `Summarize Company Updates` (AI Agent)\n\n**Purpose:** This is where the **magic happens**. It takes the company data and feeds it to an AI to generate a **plain-English summary**.\n\n🛠 It connects with:\n\n* `OpenAI Chat Model` (GPT-4 / 3.5):\n  Generates clear, readable summaries.\n* `Structured Output Parser`:\n  Forces the AI to return a **valid JSON object** with:\n\n  * `subject`: for the email subject line\n  * `body`: the plain text of the email\n\n📜 **System Prompt Used**:\n\n```txt\nYou are a helpful assistant that summarizes Crunchbase company updates.\n\nOutput your response strictly as valid JSON with two properties: \n- \"subject\": a string for the email subject line.\n- \"body\": a string for the email content formatted in plain text. Use \"\\n\" for new lines inside the string.\n\nDo NOT output anything other than the JSON object.  \nEnsure the JSON is well-formed with no trailing commas or syntax errors.\n```\n\n---\n\n### 🔎 5. `Parse JSON Email Summary` (Structured Output Parser)\n\n**Purpose:** Ensures that the response from the AI is valid JSON and separates `subject` and `body`.\n\n✅ Without this, n8n can't reliably extract the email content from the AI's response.\n\n---\n\n\n"},"typeVersion":1},{"id":"4688303f-35a1-4f0c-bdf8-c66326c46eea","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1260,-360],"parameters":{"color":6,"width":300,"height":540,"content":"## 🧠 **SECTION 3: Send email with summary (Gmail)\n\n**Purpose:** Finally, this node sends you an email 📨 with the Crunchbase update summaries.\n\n🛠 It uses:\n\n* `{{$json.subject}}` for the email subject\n* `{{$json.body}}` for the content\n\n"},"typeVersion":1},{"id":"735ec384-c931-4ccd-8f10-5140beee552a","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-1460,-1280],"parameters":{"color":4,"width":1300,"height":320,"content":"=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"},"typeVersion":1},{"id":"208f299f-4fe1-406e-8014-82e47d0a9a2f","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1460,-940],"parameters":{"color":4,"width":1289,"height":3278,"content":" 🧠 Automating Crunchbase Insights with n8n\n\n### 📈 Get Daily Company Updates → 🤖 Summarize → 📧 Email Digest\n\nThis workflow helps you stay informed on the latest company activity (from Crunchbase) by automating the entire process — fetching updates, summarizing them with AI, and emailing them to you daily.\n\n---\n\n## 🔹 **SECTION 1: Data Collection & Preprocessing**\n\n### 📍 Nodes Involved:\n\n* ✅ `Trigger Manual Test`\n* 🌐 `Fetch Crunchbase Updates`\n* ✏️ `Extract Company Details`\n\n---\n\n### 🧩 1. `Trigger Manual Test` 🖱️\n\n**Purpose:** This node is just for testing. It lets you **manually start** your workflow with a click.\n\n> 💡 In production, replace this with a **cron node** ⏰ if you want this workflow to run **automatically every day**.\n\n---\n\n### 🌐 2. `Fetch Crunchbase Updates` (HTTP Request)\n\n**Purpose:** This node sends a request to the [Crunchbase API](https://data.crunchbase.com/docs) to **fetch companies updated in the last 24 hours**.\n\n🔧 Here's what it does:\n\n* Makes a **GET request** to:\n  `https://api.crunchbase.com/api/v4/entities/organizations`\n* Adds parameters:\n\n  * `user_key`: Your Crunchbase API key 🔐\n  * `updated_since`: Yesterday’s date 📅\n\n> ✅ It returns a **list of updated companies** including names, descriptions, locations, and industries.\n\n---\n\n### ✏️ 3. `Extract Company Details`\n\n**Purpose:** Crunchbase API data can be complex. This node simplifies things.\n\n🛠 It:\n\n* Extracts **essential fields only** like:\n\n  * Name 🏢\n  * Description 📖\n  * Location 📍\n  * Industry 🏭\n  * Last Updated Date 🗓️\n* Prepares this data for the AI summarizer in a clean format.\n\n> 💡 This step ensures only the relevant information is passed forward, saving processing time and cost.\n\n---\n\n## 🧠 **SECTION 2: AI Summary + Email Delivery**\n\n### 🤖 Nodes Involved:\n\n* 🧠 `Summarize Company Updates`\n* 💬 `OpenAI Chat (GPT-4 or GPT-3.5)`\n* 🔎 `Parse JSON Email Summary`\n* 📬 `Send Email with Summary`\n\n---\n\n### 🤖 4. `Summarize Company Updates` (AI Agent)\n\n**Purpose:** This is where the **magic happens**. It takes the company data and feeds it to an AI to generate a **plain-English summary**.\n\n🛠 It connects with:\n\n* `OpenAI Chat Model` (GPT-4 / 3.5):\n  Generates clear, readable summaries.\n* `Structured Output Parser`:\n  Forces the AI to return a **valid JSON object** with:\n\n  * `subject`: for the email subject line\n  * `body`: the plain text of the email\n\n📜 **System Prompt Used**:\n\n```txt\nYou are a helpful assistant that summarizes Crunchbase company updates.\n\nOutput your response strictly as valid JSON with two properties: \n- \"subject\": a string for the email subject line.\n- \"body\": a string for the email content formatted in plain text. Use \"\\n\" for new lines inside the string.\n\nDo NOT output anything other than the JSON object.  \nEnsure the JSON is well-formed with no trailing commas or syntax errors.\n```\n\n---\n\n### 🔎 5. `Parse JSON Email Summary` (Structured Output Parser)\n\n**Purpose:** Ensures that the response from the AI is valid JSON and separates `subject` and `body`.\n\n✅ Without this, n8n can't reliably extract the email content from the AI's response.\n\n---\n\n### 📧 6. `Send Email with Summary` (Gmail)\n\n**Purpose:** Finally, this node sends you an email 📨 with the Crunchbase update summaries.\n\n🛠 It uses:\n\n* `{{$json.subject}}` for the email subject\n* `{{$json.body}}` for the content\n\n> 💡 You can configure this to send it to your **team**, **investors**, or even yourself daily to stay updated.\n\n---\n\n## 🏁 What This Workflow Does for You\n\n✨ **Effortlessly monitor industry trends**\n📬 **Get a beautifully summarized digest every day**\n⏳ **Save hours of manual research**\n💡 **Perfect for startup founders, analysts, investors, and marketers**\n\n---\n\n## ✅ Bonus Tip for Beginners\n\nTo make this **run automatically every day**, add this node at the top:\n\n* 🕒 `Cron Node`\n  Set schedule: every day at 8 AM (or whenever you like)\n\n---\n"},"typeVersion":1}],"active":false,"pinData":{"Fetch Crunchbase Updates":[{"json":{"data":{"items":[{"type":"Organization","uuid":"123abc-456def","properties":{"name":"OpenAI","city_name":"San Francisco","categories":[{"name":"Artificial Intelligence"},{"name":"Machine Learning"}],"identifier":{"uuid":"123abc-456def","value":"OpenAI","image_id":"abcd1234","permalink":"openai"},"updated_at":"2025-06-05T12:34:56Z","country_code":"USA","short_description":"AI research and deployment company."}},{"type":"Organization","uuid":"789ghi-101jkl","properties":{"name":"DeepMind","city_name":"London","categories":[{"name":"Deep Learning"},{"name":"Healthcare"}],"identifier":{"uuid":"789ghi-101jkl","value":"DeepMind","image_id":"efgh5678","permalink":"deepmind"},"updated_at":"2025-06-05T09:12:45Z","country_code":"GBR","short_description":"Solving intelligence, to advance science and benefit humanity."}}],"paging":{"total_items":2,"current_page":1,"number_of_pages":1}}}}]},"settings":{"executionOrder":"v1"},"versionId":"5812b502-7fa9-4497-bcaa-3d0866c70c89","connections":{"Summarizer Agent":{"main":[[{"node":"Send Email with Summary","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Summarizer Agent","type":"ai_languageModel","index":0}]]},"Trigger Manual Test":{"main":[[{"node":"Fetch Crunchbase Updates","type":"main","index":0}]]},"Extract Company Details":{"main":[[{"node":"Summarizer Agent","type":"main","index":0}]]},"Fetch Crunchbase Updates":{"main":[[{"node":"Extract Company Details","type":"main","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Summarizer Agent","type":"ai_outputParser","index":0}]]}}}


name: Automated Job Hunter: Upwork Opportunity Aggregator & AI-Powered Notifier
author_name: Yaron Been
author_username: yaron-nofluff
categories: []
created_at: 2025-06-06T13:44:04.045Z
updated_at: 2025-06-06T13:44:04.045Z
url: https://n8n.io/workflows/4733
scraped_at: 2025-06-19 22:07:56
description:
  🚀 Automated Job Hunter: Upwork Opportunity Aggregator & AI-Powered Notifier!

  Workflow Overview
  This cutting-edge n8n automation is a sophisticated job discovery and notification tool designed to transform freelance job hunting into a seamless, intelligent process. By intelligently connecting Apify, OpenAI, Google Sheets, and Gmail, this workflow:

  Discovers Job Opportunities: 
     Automatically scrapes Upwork job listings
     Tracks recent freelance opportunities
     Eliminates manual job searching efforts

  Intelligent Data Processing:
     Filters and extracts key job details
     Structures job information
     Ensures comprehensive opportunity tracking

  AI-Powered Summarization:
     Generates concise job summaries
     Creates human-readable job digests
     Provides quick, actionable insights

  Seamless Notification:
     Automatically logs jobs to Google Sheets
     Sends personalized email digests
     Enables rapid opportunity assessment

  Key Benefits
  🤖 Full Automation: Zero-touch job discovery
  💡 Smart Filtering: Targeted job opportunities
  📊 Comprehensive Tracking: Detailed job market insights
  🌐 Multi-Platform Synchronization: Seamless data flow

  Workflow Architecture

  🔹 Stage 1: Job Discovery
  Scheduled Trigger**: Daily job scanning
  Apify Integration**: Upwork job scraping
  Intelligent Filtering**:
    Recent job postings
    Specific keywords
    Relevant opportunities

  🔹 Stage 2: Data Extraction
  Comprehensive Job Metadata Parsing**
  Key Information Retrieval**
  Structured Data Preparation**

  🔹 Stage 3: AI Summarization
  OpenAI GPT Processing**
  Professional Summary Generation**
  Contextual Job Insight Creation**

  🔹 Stage 4: Multi-Platform Distribution
  Google Sheets Logging**
  Gmail Integration**
  Automated Job Digest Delivery**

  Potential Use Cases
  Freelancers**: Opportunity tracking
  Job Seekers**: Automated job discovery
  Recruitment Agencies**: Market intelligence
  Skill Development Professionals**: Trend monitoring
  Career Coaches**: Client opportunity identification

  Setup Requirements
  Apify
     Upwork scraping actor
     API token
     Configured scraping parameters

  OpenAI API
     GPT model access
     Summarization configuration
     API key management

  Google Sheets
     Connected Google account
     Prepared job tracking spreadsheet
     Appropriate sharing settings

  Gmail Account
     Connected email
     Job digest configuration
     Appropriate sending permissions

  n8n Installation
     Cloud or self-hosted instance
     Workflow configuration
     API credential management

  Future Enhancement Suggestions
  🤖 Advanced job matching algorithms
  📊 Multi-platform job aggregation
  🔔 Customizable alert mechanisms
  🌐 Expanded job category tracking
  🧠 Machine learning job recommendation

  Technical Considerations
  Implement robust error handling
  Use secure API authentication
  Maintain flexible data processing
  Ensure compliance with platform guidelines

  Ethical Guidelines
  Respect job poster privacy
  Use data for legitimate job searching
  Maintain transparent information gathering
  Provide proper attribution

  Hashtag Performance Boost 🚀
  #FreelanceJobHunting #CareerAutomation #JobDiscovery #AIJobSearch #WorkflowAutomation #FreelanceTech #CareerIntelligence #JobMarketInsights #ProfessionalNetworking #TechJobSearch

  Workflow Visualization

  [Daily Trigger]
      ⬇️
  [Fetch Upwork Jobs]
      ⬇️
  [Format Job Fields]
      ⬇️
  [Log to Google Sheets]
      ⬇️
  [AI Summarization]
      ⬇️
  [Send Email Digest]

  Connect With Me

  Ready to revolutionize your job hunting strategy?

  📧 Email: Yaron@nofluff.online

  🎥 YouTube: @YaronBeen

  💼 LinkedIn: Yaron Been

  Transform your job search with intelligent, automated workflows!

nodes_used:
  ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","n8n-nodes-base.gmail","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.outputParserStructured"]

workflow_json:
  {"id":"Q4LhFRDraaQuorBs","meta":{"instanceId":"84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db","templateCredsSetupCompleted":true},"name":"Upwork Job Aggregator & Notifier","tags":[],"nodes":[{"id":"834d0a42-1398-4cd4-aaf3-b1164e00b4a8","name":"Daily Upwork Job Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[0,0],"parameters":{"rule":{"interval":[{"triggerAtHour":9}]}},"typeVersion":1.2},{"id":"a0d54dfe-fc68-4020-b2ed-d191a57d5897","name":"Fetch Upwork Jobs (Apify)","type":"n8n-nodes-base.httpRequest","position":[220,0],"parameters":{"url":"https://api.apify.com/v2/actor-tasks/<YOUR_TASK_ID>/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>","method":"POST","options":{}},"typeVersion":4.2},{"id":"a9812fc7-0fa5-492a-91aa-392d0c8ee43b","name":"Format Job Fields","type":"n8n-nodes-base.set","position":[440,0],"parameters":{"options":{},"assignments":{"assignments":[{"id":"24bd782a-a34f-4b98-8d8f-21763181677b","name":"title","type":"string","value":"={{ $json.title }}"},{"id":"ee879b3d-339a-44c2-9e11-f653edab2e7f","name":"url","type":"string","value":"={{ $json.url }}"},{"id":"b5ff7975-667b-4997-ac8f-acbe9a3b3b85","name":"description","type":"string","value":"={{ $json.description }}"},{"id":"29051fc3-e4f8-4e39-a024-d7b943271acc","name":"budget","type":"string","value":"={{ $json.budget }}"},{"id":"a6492128-a58a-4735-b427-12265f81da3a","name":"datePosted","type":"string","value":"={{ $json.datePosted }}"}]}},"typeVersion":3.4},{"id":"a996aa35-8f0d-4e1a-997b-4aadd402f65c","name":"Log Jobs to Google Sheet","type":"n8n-nodes-base.googleSheets","position":[740,0],"parameters":{"columns":{"value":{"url":"={{ $json.url }}","title":"={{ $json.title }}","budget":"={{ $json.budget }}","datePosted":"={{ $json.datePosted }}","description":"={{ $json.description }}"},"schema":[{"id":"title","type":"string","display":true,"required":false,"displayName":"title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"url","type":"string","display":true,"required":false,"displayName":"url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"description","type":"string","display":true,"required":false,"displayName":"description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"budget","type":"string","display":true,"required":false,"displayName":"budget","defaultMatch":false,"canBeUsedToMatch":true},{"id":"datePosted","type":"string","display":true,"required":false,"displayName":"datePosted","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1dEU6uMB4ehiGXjIExjtFQHvUjANRODawKMBGKDaTcEc/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1dEU6uMB4ehiGXjIExjtFQHvUjANRODawKMBGKDaTcEc","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1dEU6uMB4ehiGXjIExjtFQHvUjANRODawKMBGKDaTcEc/edit?usp=drivesdk","cachedResultName":"Upwork Scraper"}},"credentials":{"googleSheetsOAuth2Api":{"id":"v021NCWuTwSSSXPP","name":"Google Sheets account 2"}},"typeVersion":4.5},{"id":"e0cd68e5-4d6d-479a-8a48-1faccc9f3ff7","name":"Summarize Job Listings","type":"@n8n/n8n-nodes-langchain.agent","position":[960,0],"parameters":{"text":"=Provide a summary of the upwork jobs. It should be in email format\n\nTitle: {{ $json.title }}\nURL: {{ $json.url }}\nDescription:{{ $json.description }}\nBudget:{{ $json.budget }}\nDate posted: {{ $json.datePosted }}","options":{},"promptType":"define","hasOutputParser":true},"typeVersion":1.9},{"id":"30002e32-6046-4e5c-a27f-a0d58f380ae9","name":"Send Job Summary Email","type":"n8n-nodes-base.gmail","position":[1500,0],"webhookId":"6937d724-5ede-4c56-83fd-fde84496eabd","parameters":{"sendTo":"shahkar.genai@gmail.com","message":"={{ $json.output.Summary }}","options":{},"subject":"={{ $json.output.subject }}"},"credentials":{"gmailOAuth2":{"id":"YMHjS2nJsRGP7svY","name":"Gmail account"}},"typeVersion":2.1},{"id":"a1fb5d66-b780-4b6b-96be-3391b6196301","name":"OpenAI Job Summarizer","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[900,260],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"wYwTjEv45IzlAOAu","name":"OpenAi account 2"}},"typeVersion":1.2},{"id":"f79a7336-80fc-4832-862b-51d0d737d5a3","name":"Parse Summary Output","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1160,260],"parameters":{"jsonSchemaExample":"{\n  \"subject\": \"Upwork Job Opportunity: Webflow Expert Needed for Portfolio Website\",\n  \"Summary\": \"The client is seeking a designer with strong experience in Webflow to create a responsive and elegant portfolio site.\"\n}\n"},"typeVersion":1.2},{"id":"85465ead-0a06-455c-9308-866c092d8ef5","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-60,-560],"parameters":{"color":3,"width":640,"height":760,"content":"### 🔁 **Section 1: Job Fetch & Preparation**\n\n📦 **Group Name**: `📥 Fetch & Prepare Upwork Jobs`\n\n#### ✅ **Included Nodes:**\n\n1. `🕒 Daily Upwork Job Trigger`\n2. `🌐 Fetch Upwork Jobs (Apify)`\n3. `🛠️ Format Job Fields`\n\n#### 📋 **What this group does:**\n\nThis group is responsible for automatically triggering the job search, pulling fresh job data from Upwork (via Apify), and formatting that data into a clean, structured format.\n\n#### 📌 **Highlights:**\n\n* Uses Apify’s `run-sync-get-dataset-items` to ensure you get fresh job results in one go.\n* Ensures only the required fields (like title, URL, budget) are passed forward.\n* Keeps your data clean and minimal for logging and summarization.\n\n---"},"typeVersion":1},{"id":"3699ba73-75ee-4bf2-91eb-8d0d05143321","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[680,-620],"parameters":{"color":5,"width":620,"height":1040,"content":"### 📊 **Section 2: Data Logging & Summary Generation**\n\n📦 **Group Name**: `🧾 Log & Summarize Jobs`\n\n#### ✅ **Included Nodes:**\n\n1. `📈 Log Jobs to Google Sheet`\n2. `🤖 Summarize Job Listings`\n\n   * `🧠 OpenAI Job Summarizer`\n   * `📄 Parse Summary Output`\n\n#### 📋 **What this group does:**\n\nThis group handles the dual responsibility of:\n\n* Persistently logging all job entries to a **Google Sheet**\n* Generating a human-friendly **natural language summary** of the fetched jobs using the OpenAI model and parsing the result into clean output\n\n#### 💡 **Why this matters:**\n\n* Keeps historical records in Sheets ✅\n* Makes email digest more meaningful and less overwhelming for the reader 🧠\n\n---\n\n"},"typeVersion":1},{"id":"2289feb5-9ab1-4dbb-a77e-f4742f0f341d","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1400,-420],"parameters":{"color":6,"width":340,"height":600,"content":"## 📤 **Section 3: Job Summary Notification**\n\n📦 **Group Name**: `✉️ Notify via Email`\n\n#### ✅ **Included Node:**\n\n1. `📧 Send Job Summary Email`\n\n#### 📋 **What this group does:**\n\nSends a **summary email** to the desired recipient(s) with the content generated by the AI agent.\n\n"},"typeVersion":1},{"id":"95727922-4856-4481-acff-519638ac5d23","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-1520,-560],"parameters":{"color":4,"width":1300,"height":320,"content":"=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"},"typeVersion":1},{"id":"c161b105-70a6-431a-91e2-9031ccba8fe4","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1520,-220],"parameters":{"color":4,"width":1289,"height":3058,"content":"# ✅ n8n Automation: \"Upwork Job Aggregator & Notifier\"\n\n> **Purpose**: Automatically fetch job postings from Upwork with specific keywords, save them in Google Sheets, summarize them using AI, and email the results daily (or at any interval you want).\n\n---\n\n## 🧱 HIGH-LEVEL OVERVIEW\n\n| Feature         | Description                                          |\n| --------------- | ---------------------------------------------------- |\n| 🕐 Trigger      | Scheduled (e.g., every 6 hours)                      |\n| 🌐 Source       | [Apify](https://apify.com) actor for Upwork scraping |\n| 📄 Storage      | Google Sheets                                        |\n| 🧠 Summary      | OpenAI model with structured output                  |\n| 📬 Notification | Gmail with formatted job summary                     |\n\n---\n\n## 🧠 GROUP 1: 📥 Fetch & Prepare Upwork Jobs\n\n### 🟢 Nodes:\n\n1. `🕒 Daily Upwork Job Trigger`\n\n   * **Type**: Cron Trigger\n   * **Purpose**: Runs the flow automatically at your set interval (e.g., every 6 hours or daily)\n\n2. `🌐 Fetch Upwork Jobs (Apify)`\n\n   * **Type**: HTTP Request\n   * **Method**: POST\n   * **URL**: `https://api.apify.com/v2/actor-tasks/<TASK_ID>/run-sync-get-dataset-items?token=<API_TOKEN>`\n   * **Purpose**: Calls your Apify Upwork Scraper task to get the latest job listings\n   * **Output**: JSON array of job objects\n\n3. `🛠️ Format Job Fields`\n\n   * **Type**: Edit Fields (Set or Function Node)\n   * **Purpose**: Extracts needed job fields like `title`, `url`, `description`, `budget`, and `datePosted`\n   * **Reason**: Makes data uniform for Sheet storage and AI summary\n\n---\n\n## 📊 GROUP 2: 🧾 Log & Summarize Jobs\n\n### 🟢 Nodes:\n\n4. `📈 Log Jobs to Google Sheet`\n\n   * **Type**: Google Sheets → Append Sheet\n   * **Sheet Setup**: Must have headers like `Title`, `URL`, `Description`, `Budget`, `Date`\n   * **Purpose**: Appends each new job as a row in the sheet for historical tracking\n\n5. `🤖 Summarize Job Listings` (AI Agent node group)\n\n   * **Type**: Tools Agent (LangChain / OpenAI Integration)\n   * **Connected Sub-Nodes**:\n\n     * `🧠 OpenAI Job Summarizer` (OpenAI Chat Model)\n\n       * **Prompt** example:\n\n         ```\n         You are an assistant summarizing freelance job postings. Summarize each job in 1-2 lines. Include title, budget, and a short description.\n         ```\n     * `📄 Parse Summary Output` (Structured Output Parser)\n\n       * **Purpose**: Converts the AI response into structured n8n items\n   * **Input**: Job data from Google Sheets\n   * **Output**: A clear, natural language summary of all jobs\n\n---\n\n## 📤 GROUP 3: ✉️ Notify via Email\n\n### 🟢 Node:\n\n6. `📧 Send Job Summary Email`\n\n   * **Type**: Gmail → Send Message\n\n   * **Authentication**: Google OAuth2\n\n   * **To**: Yourself or your team\n\n   * **Subject**: `\"🚀 New Upwork Jobs Found!\"`\n\n   * **Body**:\n\n     ```\n     Hello,\n\n     Here’s a summary of the latest Upwork jobs matching your criteria:\n\n     {{summary from AI}}\n\n     ➕ View full job list here: [Google Sheet Link]\n\n     Best,  \n     Your Automation Bot 🤖\n     ```\n\n   * **Error Handling**: Add an IF node to prevent email if no jobs were returned (optional)\n\n---\n\n## 🗂 Suggested Color-Coded Groups in n8n:\n\n| Group                          | Nodes                                | Color     | Description                     |\n| ------------------------------ | ------------------------------------ | --------- | ------------------------------- |\n| 📥 Fetch & Prepare Upwork Jobs | Trigger, HTTP Request, Format Fields | 🟢 Green  | Gets data and prepares it       |\n| 🧾 Log & Summarize Jobs        | Google Sheets, AI Agent, Parser      | 🟡 Yellow | Logs + creates smart summaries  |\n| ✉️ Notify via Email            | Gmail                                | 🔴 Red    | Notifies you with clean summary |\n\n---\n\n## 🚀 ADVANTAGES\n\n✅ Completely automated\n✅ Saves all job history\n✅ AI-enhanced summaries\n✅ Instant email alerts\n✅ Easy to expand or customize\n\n---\n\n## 🧩 Bonus Enhancements (Optional)\n\n| Idea                      | Description                                                   |\n| ------------------------- | ------------------------------------------------------------- |\n| 🔍 Add keyword filters    | Add filters before saving to Sheets (e.g., only “React” jobs) |\n| 🕵️‍♂️ Prevent duplicates | Store job IDs and check before saving                         |\n| 📣 Add Slack alerts       | Add Slack node for team notification                          |\n| 📊 Dashboard              | Build Google Data Studio report over the Sheet                |\n\n---\n\n\n"},"typeVersion":1}],"active":false,"pinData":{"Fetch Upwork Jobs (Apify)":[{"json":{"url":"https://www.upwork.com/job/Looking-Webflow-Expert-Build-Portfolio-Website_~01abcd123456efghij","title":"Looking for a Webflow Expert to Build a Portfolio Website","budget":"$300","datePosted":"2025-06-03T08:45:00Z","description":"Need a designer with strong Webflow experience to create a responsive and elegant portfolio site."}},{"json":{"url":"https://www.upwork.com/job/React-Developer-Needed-SaaS-Dashboard_~0123abcd4567efghij","title":"React Developer Needed for SaaS Dashboard","budget":"$500","datePosted":"2025-06-03T06:30:00Z","description":"Looking for an experienced React developer to work on our SaaS product dashboard UI. Experience with Tailwind is a plus."}},{"json":{"url":"https://www.upwork.com/job/Copywriter-Landing-Page-Finance_~0a1b2c3d4e5f67890","title":"Copywriter for Landing Page Content (Finance Industry)","budget":"$150","datePosted":"2025-06-02T21:15:00Z","description":"We need SEO-optimized copy for a fintech landing page. Prior experience in finance writing preferred."}}]},"settings":{"executionOrder":"v1"},"versionId":"8c929fc6-2198-4adf-89c3-ff0a2b296fdd","connections":{"Format Job Fields":{"main":[[{"node":"Log Jobs to Google Sheet","type":"main","index":0}]]},"Parse Summary Output":{"ai_outputParser":[[{"node":"Summarize Job Listings","type":"ai_outputParser","index":0}]]},"OpenAI Job Summarizer":{"ai_languageModel":[[{"node":"Summarize Job Listings","type":"ai_languageModel","index":0}]]},"Summarize Job Listings":{"main":[[{"node":"Send Job Summary Email","type":"main","index":0}]]},"Daily Upwork Job Trigger":{"main":[[{"node":"Fetch Upwork Jobs (Apify)","type":"main","index":0}]]},"Log Jobs to Google Sheet":{"main":[[{"node":"Summarize Job Listings","type":"main","index":0}]]},"Fetch Upwork Jobs (Apify)":{"main":[[{"node":"Format Job Fields","type":"main","index":0}]]}}}


name: AI Blog Generator for Shopify Product listings: Using GPT-4o and Google Sheets
author_name: Kumar Shivam
author_username: shivam840708
categories: []
created_at: 2025-06-06T15:00:32.038Z
updated_at: 2025-06-06T15:00:32.038Z
url: https://n8n.io/workflows/4735
scraped_at: 2025-06-19 22:07:56
description:
  🧠 AI Blog Generator for Shopify Products using GPT-4o

  The AI Blog Generator is an advanced automation workflow powered by n8n, integrating GPT-4o and Google Sheets to generate SEO-rich blog articles for Shopify products. It automates the entire process — from pulling product data, analyzing images for nutritional information, to producing structured HTML content ready for publishing — with zero manual writing.

  💡 Key Advantages

  🔗 Shopify Product Sync**  
    Automatically pulls product data (title, description, images, etc.) via Shopify API.

  🤖 AI-Powered Nutrition Extraction**  
    Uses GPT-4o to intelligently analyze product images and extract nutritional information.

  ✍️ SEO Blog Generation**  
    GPT-4o generates blog titles, meta descriptions, and complete articles using both product metadata and extracted nutritional info.

  🗂️ Structured Content Output**  
    Produces well-formatted HTML with headers, bullet points, and nutrition tables for seamless Shopify blog integration.

  📄 Google Sheets Integration**  
    Tracks blog creation, manages retries, and prevents duplicate publishing using a centralized Google Sheet.

  📤 Shopify Blog API Integration**  
    Publishes the generated blog to Shopify using a two-step blog + article API call.

  ⚙️ How It Works

  Manual Trigger  
     Initiate the process using a test trigger or a scheduler.

  Fetch Products from Shopify  
     Retrieves all product details including descriptions and images.

  Extract Product Images  
     Splits and processes each image individually.

  OCR + Nutrition AI  
     GPT-4o reads nutrition facts from product images. Skips items without valid info.

  Check Existing Logs  
     References a Google Sheet to avoid duplicates and determine retry status.

  AI Blog Generation  
     Creates a blog with headings, bullet points, intro, and a nutrition table.

  Shopify Blog + Article Posting  
     Uses the Shopify API to publish the blog and its content.

  Update Google Sheet  
     Logs the blog URL, HTML content, errors, and status for future reference.

  🛠️ Setup Steps

  Shopify Node**: Connects to your Shopify store and fetches product data.  
  Split Out Node**: Divides product images for individual OCR processing.  
  OpenAI Node**: Uses GPT-4o to extract nutrition data from images.  
  If Node**: Filters for entries with valid nutrition information.  
  Edit Fields Node**: Formats the product data for AI processing.  
  AI Agent Node**: Generates SEO blog content.  
  Google Sheets Nodes**: Reads and updates blog creation status.  
  HTTP Request Nodes**: Posts the blog and article via Shopify’s API.

  🔐 Credentials Required

  Shopify Access Token** – For retrieving product data and posting blogs  
  OpenAI API Key** – For GPT-4o-based AI generation and image processing  
  Google Sheets OAuth** – For accessing the log sheet

  👤 Ideal For

  Ecommerce teams looking to automate content for hundreds of products  
  Shopify store owners aiming to boost organic traffic through blogging  
  Marketing teams building scalable, AI-driven content workflows

  💬 Bonus Tip

  The workflow is modular. You can easily extend it with internal linking, language translation, or even social media sharing — all within the same n8n flow.

nodes_used:
  ["n8n-nodes-base.shopify","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.memoryBufferWindow","@n8n/n8n-nodes-langchain.openAi"]

workflow_json:
  {"meta":{"instanceId":"d73282515b90623d4a8783919a2d772c706425d649e1512792f37ac51e07e4a8","templateCredsSetupCompleted":true},"nodes":[{"id":"096ccd11-0ae4-4e3d-aeac-d180c09512ae","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[300,180],"parameters":{},"typeVersion":1},{"id":"c95491ab-6e4e-4671-bfaf-b8a362d2ec01","name":"Shopify","type":"n8n-nodes-base.shopify","position":[580,180],"parameters":{"resource":"product","operation":"getAll","returnAll":true,"authentication":"accessToken","additionalFields":{}},"credentials":{"shopifyAccessTokenApi":{"id":"oPLCxaUiftgs7Mna","name":"Shopify Access Token account"}},"typeVersion":1},{"id":"1620e19b-cd01-4798-858c-8f2fb3d58087","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[840,180],"parameters":{"options":{},"fieldToSplitOut":"images"},"typeVersion":1},{"id":"944ab8ba-6e41-4e04-b442-9468ff341ba0","name":"OpenAI","type":"@n8n/n8n-nodes-langchain.openAi","position":[1060,180],"parameters":{"text":"=You are an expert OCR and nutrition facts extractor. You carefully extract only the exact nutritional data present in the image without fabricating or guessing. You can recognize nutritional facts tables, and you know how to distinguish between actual nutrition data and promotional or partial text. You return null if no clear nutrition facts table or readable nutritional information is present.\n\n\nYou will analyze an image containing a product's nutritional information. Extract all nutritional data exactly as shown in the image, including nutrient names, amounts, units, and daily values if present.\n\n- If the image clearly contains a nutritional facts table or full nutritional data, output it in clean JSON format, where each nutrient is a key and the value contains the amount, unit, and daily value if available.\n- If the image shows only partial, blurry, or promotional text like \"20% protein\" or any incomplete nutritional data, do NOT fabricate any values; instead, return null.\n- If there is no clear nutritional facts table or nutritional data visible in the image, return null.\n- Do not guess or invent any numbers.\n- Only include information that is confidently present and readable in the image.\n\nExample output when nutrition facts are present:\n\n{\n  \"Calories\": \"190\",\n  \"Total Fat\": {\n    \"amount\": \"8g\",\n    \"daily_value\": \"10%\"\n  },\n  \"Cholesterol\": {\n    \"amount\": \"0mg\",\n    \"daily_value\": \"0%\"\n  },\n  ...\n}\n\nExample output when no valid nutritional facts table or data is visible:\n\nnull\n","modelId":{"__rl":true,"mode":"list","value":"chatgpt-4o-latest","cachedResultName":"CHATGPT-4O-LATEST"},"options":{"detail":"auto","maxTokens":900},"resource":"image","imageUrls":"={{ $json.src }}","operation":"analyze"},"credentials":{"openAiApi":{"id":"OizdHUANhz9NIHyd","name":"OpenAi account"}},"typeVersion":1.8},{"id":"390bd7e4-b7bc-4575-9fe4-36a81445c7d3","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[1480,580],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"OizdHUANhz9NIHyd","name":"OpenAi account"}},"typeVersion":1.2},{"id":"de84b88d-e96e-4c3c-a9f9-71cfc413022e","name":"If","type":"n8n-nodes-base.if","position":[1240,180],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6aa4dfe1-d907-47e8-b97e-3a77bb30c1d0","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.content }}","rightValue":"null"}]}},"typeVersion":2.2},{"id":"9ef20e21-7ad8-409f-a13e-e1088ec4e4a3","name":"No Operation, do nothing","type":"n8n-nodes-base.noOp","position":[1240,440],"parameters":{},"typeVersion":1},{"id":"0cfadf47-06c7-4b00-b660-87241cc4bf4c","name":"Create Blog id","type":"n8n-nodes-base.httpRequestTool","position":[2500,620],"parameters":{"url":"=https://smartworkflow.myshopify.com/admin/api/2024-01/blogs.json","method":"POST","options":{},"jsonBody":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('JSON', ``, 'json') }}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"shopifyAccessTokenApi"},"credentials":{"shopifyAccessTokenApi":{"id":"oPLCxaUiftgs7Mna","name":"Shopify Access Token account"}},"typeVersion":4.2},{"id":"059199d7-0f80-40fc-9f45-ee4ef8d6475b","name":"Create Articles","type":"n8n-nodes-base.httpRequestTool","position":[2060,620],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","method":"POST","options":{},"jsonBody":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('JSON', ``, 'json') }}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"shopifyAccessTokenApi"},"credentials":{"shopifyAccessTokenApi":{"id":"oPLCxaUiftgs7Mna","name":"Shopify Access Token account"}},"typeVersion":4.2},{"id":"60d74f7d-cc66-4af6-bb8d-686c3eb320cb","name":"Read Sheet","type":"n8n-nodes-base.googleSheetsTool","position":[1880,600],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8/edit#gid=0","cachedResultName":"blog_details"},"documentId":{"__rl":true,"mode":"list","value":"1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8/edit?usp=drivesdk","cachedResultName":"Blog update sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"0RSJGMBcFzxY9GkS","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"75976a59-7017-4e2c-ab12-d2e3448b6566","name":"Update Sheet","type":"n8n-nodes-base.googleSheetsTool","position":[2280,600],"parameters":{"columns":{"value":{"Error":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Error', ``, 'string') }}","Retry":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Retry', ``, 'string') }}","Blog url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Blog_url', ``, 'string') }}","Blog Html":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Blog_Html', ``, 'string') }}","Timestamp":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Timestamp', ``, 'string') }}","Product Id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Product_Id', ``, 'string') }}","Blog title ":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Blog_title_', ``, 'string') }}","Proudct name":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Proudct_name', ``, 'string') }}"},"schema":[{"id":"Timestamp","type":"string","display":true,"required":false,"displayName":"Timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Product Id","type":"string","display":true,"removed":false,"required":false,"displayName":"Product Id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Proudct name","type":"string","display":true,"required":false,"displayName":"Proudct name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Blog title ","type":"string","display":true,"required":false,"displayName":"Blog title ","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Blog url","type":"string","display":true,"required":false,"displayName":"Blog url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Blog Html","type":"string","display":true,"required":false,"displayName":"Blog Html","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Retry","type":"string","display":true,"required":false,"displayName":"Retry","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Error","type":"string","display":true,"removed":false,"required":false,"displayName":"Error","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["Product Id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8/edit#gid=0","cachedResultName":"blog_details"},"documentId":{"__rl":true,"mode":"list","value":"1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1m4yPuz7d0HYJQ1nC-v_oTN5jmYMoDy38beDGLB273B8/edit?usp=drivesdk","cachedResultName":"Blog update sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"0RSJGMBcFzxY9GkS","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"49448095-a73a-4fdb-9354-f3e442f100b4","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[1700,580],"parameters":{"sessionKey":"={{ $('Main Product info').item.json.id }}","sessionIdType":"customKey","contextWindowLength":20},"typeVersion":1.3},{"id":"adc154d2-a1b0-4f27-b1fd-689484132308","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[500,40],"parameters":{"width":260,"height":360,"content":"## Get Products \n\n\nIt get all the product details from the shopify store"},"typeVersion":1},{"id":"d7de0bdd-2544-45fd-b4ac-264fed0d6c25","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[780,-80],"parameters":{"color":3,"height":500,"content":"## Fetches Product Image url \n\nEach Product can have multiple images it fetches image url for further step."},"typeVersion":1},{"id":"f51c03f3-a137-48ae-9b44-dee4505d1bb8","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1040,-80],"parameters":{"color":6,"width":380,"height":500,"content":"## OCR :\nCollects Nutrients Facts \n\n* It collects Nutrients information from the product image and outputs in json format and send along the true branch of the if node.\n\n* If the image doesn't contain any related info it returns null."},"typeVersion":1},{"id":"486be3b5-dc25-4c5a-bde7-daaeff56308e","name":"Main Product info","type":"n8n-nodes-base.set","position":[1540,160],"parameters":{"options":{},"assignments":{"assignments":[{"id":"93cb8cc0-cdcd-44da-8187-9df85b770293","name":"title","type":"string","value":"={{ $('Shopify').item.json.title }}"},{"id":"95990abc-b64d-4cb4-8d4e-88145395a3fc","name":"id","type":"number","value":"={{ $('Shopify').item.json.id }}"},{"id":"d833cfa1-9abf-4a9d-86ed-a713acbc1974","name":"body_html","type":"string","value":"={{ $('Shopify').item.json.body_html }}"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"894b47e8-7da2-4a3c-b6ec-afe2e4d6f4cf","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1460,-140],"parameters":{"color":4,"width":920,"height":460,"content":"## Shopify Products Blog Mechanism:\n\n\n* It creates Seo Freindly Blog and Blog Title and post the content or article after creating blog of a       \n   specific category which can be seen on the Shopify blog section inside the store via http calls.\n\n* It first checks whether the product is already available or not in the sheet then checks whether      \n   there is need to retry the posting if there is any error. If there is error it retries posting it \n   change the retry value as no.\n* It takes two http tool call to make a blog one is Blog id creation and other is article posting via \n  Create Articles inside that particular Id.\n* Once the blog is posted all the details are updated via Update Sheet tool. If there is any error it updates it accordingly with the error message in error column"},"typeVersion":1},{"id":"6d708bbb-9c9c-419a-883b-d7e48e89e82a","name":"AI Blog Poster","type":"@n8n/n8n-nodes-langchain.agent","position":[1760,160],"parameters":{"text":"=Product id : {{ $json.id }}\nProduct title : {{ $json.title }}    \n\nProduct Description html : {{ $json.body_html }}\n\nProduct Nutrition Facts : {{ $json.content }}\n\n","options":{"systemMessage":"=You are an AI agent responsible for automating blog creation for Shopify products using Google Sheets as a tracking system.\n\n## Step-by-step Workflow:\n\n### 1. Read Google Sheet\nBefore doing anything, call the Read Sheet tool to check if a blog has already been created for the Product ID. The sheet contains columns:\n\n- Timestamp\n- Product Id\n- Product name\n- Blog title\n- Blog url\n- Blog Html\n- Retry\n- Error\n\nCall this tool first and look up the row with the same Product Id.\n\n### 2. Check Conditions:\n- If the Product Id exists and Retry = No, skip this item.\n- If Retry = Yes, retry blog creation from Step 3.\n- If the Product Id is not found, proceed to Step 3 to generate and post a new blog.\n\n---\n\n### 3. Generate Blog Content\nBased on the following provided in the user message:\n- Product ID\n- Product Title\n- Product Description HTML\n- Product Nutrition Facts \n\nGenerate:\n- SEO-Friendly Blog Title\n- Meta Description\n- Formatted Blog Content in clean, structured HTML:\n  - Introduction summary\n  - H2/H3 subheadings\n  - Bullet points (key benefits, nutrients)\n  - Nutrient callouts or tables (if available)\n  - Closing paragraph or CTA\n  - Add internal keywords (tags)\n\n---\n\n### 4. Create Blog (HTTP Tool Call)\nCall the Shopify API to create a blog:\n\njson\n{\n  \"tool_call\": {\n    \"tool\": \"http\",\n    \"name\": \"Create Blog\",\n    \"method\": \"POST\",\n    \"url\": \"https://smartworkflow.myshopify.com/admin/api/2024-01/blogs.json\",\n    \"body\": {\n      \"blog\": {\n        \"title\": \"[SEO Blog Title]\"\n      }\n    }\n  }\n}\nOnce the blog.id is returned, post the article to:\n\n\nhttps://smartworkflow.myshopify.com/admin/api/2024-01/blogs/{{blog.id}}/articles.json\njson\nCopy\nEdit\n{\n  \"tool_call\": {\n    \"tool\": \"http\",\n    \"name\": \"Create Article\",\n    \"method\": \"POST\",\n    \"url\": \"https://smartworkflow.myshopify.com/admin/api/2024-01/blogs/{{blog.id}}/articles.json\",\n    \"body\": {\n      \"article\": {\n        \"title\": \"[Same Blog Title]\",\n        \"body_html\": \"[Generated HTML content]\",\n        \"tags\": \"nutrition, wellness, product, shopify\",\n        \"published\": false\n      }\n    }\n  }\n}\n6. Update Google Sheet\nIf Blog is Posted Successfully\nCall Update Sheet tool and set:\n\n\n{\n  \"Timestamp\":{{ $now }} ,\n  \"Product Id\": \"{{ $json.id }}\",\n  \"Product name\": \"{{ $json.title }}\",\n  \"Blog title\": \"[SEO Blog Title]\",\n  \"Blog url\": \"[Generated URL from blog.id and article.id]\",\n  \"Blog Html\": \"[Generated HTML]\",\n  \"Retry\": \"No\",\n  \"Error\": \"\"\n}\nIf Blog or Article Fails\nLog the error in Error column and set Retry = Yes.\n\n\n{\n  \"Product Id\": \"{{ $json.id }}\",\n  \"Retry\": \"Yes\",\n  \"Error\": \"[Detailed error message]\"\n}\n\nNotes:\nAlways call Read Sheet first before blog generation.\n\nRetry logic is based strictly on the Retry column.\n\nAll tool call responses should be handled using proper try-catch/error-check patterns.\n\nEnsure HTML is clean and includes correct spacing, paragraphs, H2s, bullet lists, and optionally nutrient tables.\n"},"promptType":"define"},"typeVersion":1.9},{"id":"3538388e-7222-48e1-bec8-daf882e8c316","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-160,-100],"parameters":{"color":4,"width":380,"height":520,"content":"## Author \n## Kumar Shivam\n\n\nI'm an automation specialist who helps startups, agencies, and growth teams save time and scale faster using n8n. I design smart, reliable workflows that connect tools like HubSpot, Slack, OpenAI, Claude, Pipedrive, Google Ads, and vector databases (Qdrant, Pinecone). Whether it's auto-assigning leads, generating AI-powered reports, triggering Slack alerts, or syncing APIs — I build automations that just work. Let’s turn your manual processes into automated systems that scale.\n\nContact for any business enquiries :\n\nhttps://kumarshivam.link"},"typeVersion":1}],"pinData":{},"connections":{"If":{"main":[[{"node":"Main Product info","type":"main","index":0}],[{"node":"No Operation, do nothing","type":"main","index":0}]]},"OpenAI":{"main":[[{"node":"If","type":"main","index":0}]]},"Shopify":{"main":[[{"node":"Split Out","type":"main","index":0}]]},"Split Out":{"main":[[{"node":"OpenAI","type":"main","index":0}]]},"Read Sheet":{"ai_tool":[[{"node":"AI Blog Poster","type":"ai_tool","index":0}]]},"Update Sheet":{"ai_tool":[[{"node":"AI Blog Poster","type":"ai_tool","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Blog Poster","type":"ai_memory","index":0}]]},"Create Blog id":{"ai_tool":[[{"node":"AI Blog Poster","type":"ai_tool","index":0}]]},"Create Articles":{"ai_tool":[[{"node":"AI Blog Poster","type":"ai_tool","index":0}]]},"Main Product info":{"main":[[{"node":"AI Blog Poster","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Blog Poster","type":"ai_languageModel","index":0}]]},"When clicking ‘Test workflow’":{"main":[[{"node":"Shopify","type":"main","index":0}]]}}}


name: Binance Spot Market Quant AI Agent | GPT-4o + Telegram (Main Interface)
author_name: Don Jayamaha Jr
author_username: don-the-gem-dealer
categories: []
created_at: 2025-06-06T17:51:04.546Z
updated_at: 2025-06-06T17:51:04.546Z
url: https://n8n.io/workflows/4739
scraped_at: 2025-06-19 22:07:56
description:
  A professional-grade AI automation system for spot market trading insights on Binance. It analyzes multi-timeframe technical indicators, live price/order data, and crypto sentiment, then delivers fully formatted Telegram-style trading reports.

  🎥 Live Demo:

  🧩 Required Workflows

  You must install and activate all of the following workflows for the system to function correctly:

  | ✅ Workflow Name                                    | 📌 Function Description                                                          |
  | -------------------------------------------------- | -------------------------------------------------------------------------------- |
  | Binance Spot Market Quant AI Agent                 | Final AI orchestrator. Parses user prompt and generates Telegram-ready reports.  |
  | Binance SM Financial Analyst Tool                  | Calls indicator tools and price/order data tools. Synthesizes structured inputs. |
  | Binance SM News and Sentiment Analyst Webhook Tool | Analyzes crypto sentiment, gives summary and headlines via POST webhook.         |
  | Binance SM Price/24hrStats/OrderBook/Kline Tool    | Pulls price, order book, 24h stats, and OHLCV klines for 15m–1d.                 |
  | Binance SM 15min Indicators Tool                   | Calculates 15m RSI, MACD, BBANDS, ADX, SMA/EMA from Binance kline data.          |
  | Binance SM 1hour Indicators Tool                   | Same as above but for 1h timeframe.                                              |
  | Binance SM 4hour Indicators Tool                   | Same as above but for 4h timeframe.                                              |
  | Binance SM 1day Indicators Tool                    | Same as above but for 1d timeframe.                                              |
  | Binance SM Indicators Webhook Tool                 | Technical backend. Handles all webhook logic for each timeframe tool.            |

  ⚙️ Installation Instructions

  Step 1: Import Workflows

  Open your n8n Editor UI
  Import each workflow JSON file one by one
  Activate them or ensure they're called via Execute Workflow

  Step 2: Set Credentials

  OpenAI API Key** (GPT-4o recommended)
  Binance endpoints** are public (no auth required)

  Step 3: Configure Webhook Endpoints

  Deploy Binance SM Indicators Webhook Tool
  Ensure the following paths are reachable:

    /webhook/15m
    /webhook/1h
    /webhook/4h
    /webhook/1d

  Step 4: Telegram Integration

  Create a Telegram bot using @BotFather
  Add your Telegram API token to n8n credentials
  Replace the Telegram ID placeholder with your own

  Step 5: Final Trigger

  Trigger the Binance Spot Market Quant AI Agent manually or from Telegram
  The agent:

    Extracts the trading pair (e.g. BTCUSDT)
    Calls all tools for market data and sentiment
    Generates a clean, HTML-formatted Telegram report

  💬 Telegram Report Output Format

  BTCUSDT Market Report

  Spot Strategy
  • Action: Buy
  • Entry: $63,800 | SL: $61,200 | TP: $66,500
  • Rationale:
   MACD Crossover (1h)
   RSI Rebound from Oversold (15m)
   Sentiment: Bullish

  Leverage Strategy
  • Position: Long 3x
  • Entry: $63,800
  • SL/TP zones same as above

  News Sentiment: Slightly Bullish  
  • "Bitcoin rallies as ETF inflows surge" – CoinDesk  
  • "Whales accumulate BTC at key support" – NewsBTC  

  🧠 System Overview

  [Telegram Trigger]
  → [Session + Auth Logic]
  → [Binance Spot Market Quant AI Agent]
  → [Financial Analyst Tool + News Tool]
  → [All Technical Indicator Tools (15m, 1h, 4h, 1d)]
  → [OrderBook/Price/Kline Fetcher]
  → [GPT-4o Reasoning]
  → [Split & Send Message to Telegram]

  🧾 Licensing & Attribution

  © 2025 Treasurium Capital Limited Company
  Architecture, prompts, and trade report structure are IP-protected.
  No unauthorized rebranding or resale permitted.

  🔗 For support: LinkedIn – Don Jayamaha

nodes_used:
  ["n8n-nodes-base.telegram","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.memoryBufferWindow","@n8n/n8n-nodes-langchain.toolWorkflow"]

workflow_json:
  {"id":"82r122lbmQPWishF","meta":{"instanceId":"a5283507e1917a33cc3ae615b2e7d5ad2c1e50955e6f831272ddd5ab816f3fb6","templateCredsSetupCompleted":true},"name":"Binance Spot Market Quant AI Agent","tags":[],"nodes":[{"id":"6c6238ec-ba3d-4c59-a612-c3b4e9ae8b73","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-440,620],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"yUizd8t0sD5wMYVG","name":"OpenAi account"}},"typeVersion":1.2},{"id":"b8b90061-9d5e-4e48-a0b0-bb6bdb193771","name":"Binance Spot Market Quant AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-80,160],"parameters":{"text":"={{ $json.message }}","options":{"systemMessage":"You are the **Binance Spot Market Quant AI Agent**, responsible for generating structured, professional swing-trading reports for **any trading pair** on the Binance Spot Market. You use **validated technical indicators**, **order flow data**, and **curated crypto sentiment** to create actionable trading strategies.\n\n---\n\n### 🔗 Connected Tools\n\n1. **🧠 Binance Financial Market Analyst Tool**\n\n   • Aggregates outputs from:\n\n   * `Binance 15min Indicators Tool`\n   * `Binance 1h Indicators Tool`\n   * `Binance 4h Indicators Tool`\n   * `Binance 1d Indicators Tool`\n   * `Binance Price/OrderBook/Kline Tool`\n\n   • Each indicator tool calculates:\n\n   * **RSI, BBANDS, SMA, EMA, ADX, MACD**\n   * Based on the **latest 20 klines** for its interval\n   * Returns both values and signal labels (e.g. overbought, divergence)\n\n   • The Price Tool provides:\n\n   * **Live price**\n   * **24h OHLCV**\n   * **Order book depth (top 100 bids/asks)**\n   * **Klines** for `15m`, `1h`, `4h`, and `1d` intervals\n\n2. **📰 Binance News and Sentiment Analyst Tool**\n\n   • Pulls from sources like:\n\n   * CoinDesk, Cointelegraph, BitcoinMagazine, NewsBTC, CryptoBriefing, and more\n\n   • Returns:\n\n   * **Sentiment Score**: Bullish / Bearish / Neutral\n   * **Summary**: 2–3 sentence market snapshot\n   * **Top 3–5 headlines** (with source links)\n\n---\n\n### 📊 Core Responsibilities\n\nYou always:\n\n1. **Call all tools concurrently** for each query\n\n   * Pass the extracted symbol and sessionId as input\n   * Wait for structured results from each tool\n   * Do not skip any tool even if user prompt is vague\n\n2. **Perform full technical analysis** for the symbol\n\n   * Short-term: `15m + 1h`\n   * Mid-term: `4h`\n   * Long-term: `1d`\n   * Detect breakouts, trend shifts, divergences, and confluence signals\n   * Confirm findings using multiple timeframes and indicator alignment\n\n3. **Synthesize the final report** with:\n\n<b>Spot Trade Strategy</b>\n• Action: Buy / Sell / Hold\n• Entry Price, Stop Loss, Take Profit\n• Rationale:\n - <b>Price Action Signals</b>\n - <b>Lagging Indicator Confirmation</b>\n - <b>Sentiment Alignment</b>\n\n<b>Leverage Strategy</b>\n• Position: Long / Short\n• Leverage: 2x / 3x / 5x\n• Rationale + Risk Zones\n\n4. **Score signal strength**\n   • Confidence Score: `0–100`\n   • Label: Low / Medium / High / Very High\n\n5. **Include sentiment and headlines section**\n   • `<b>News Sentiment:</b>` \\[summary]\n   • `•` Top headlines with clickable links\n\n---\n\n### 📤 Output Format (Telegram HTML)\n\nStart with:\n\n```html\n<b>{{SYMBOL}} Market Report</b>\n```\n\nUse clean formatting:\n\n* `<b>` for headers\n* `•` for bullet lists\n* Logical grouping: price > indicators > strategy > sentiment\n\n---\n\n### ⚠️ Rules\n\nDO NOT:\n\n* Fabricate any values\n* Repeat this system message\n* Output raw JSON or API structure\n\nONLY use **tool-delivered** and **validated** data. Write with clarity and tone of a senior quant analyst.\n"},"promptType":"define"},"typeVersion":1.8},{"id":"13965042-ad03-4108-88b3-250955bdbd28","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[-1000,160],"webhookId":"944e6f8d-ffcc-4692-a777-7410f2fd4016","parameters":{"updates":["message"],"additionalFields":{}},"credentials":{"telegramApi":{"id":"NRLKuLR7z8vCesub","name":"BinanceSpotTradingAIAgent_Bot"}},"typeVersion":1.2},{"id":"3f98e10f-fe7e-4c87-9e4f-4b6d8bfb805b","name":"User Authentication (Replace Telegram ID)","type":"n8n-nodes-base.code","position":[-680,160],"parameters":{"jsCode":"if ($input.first().json.message.from.id !== <Replace Telegram ID>) { // Replace with your actual ID\n  return {unauthorized: true};\n} else {\n  // Return the original data when authorized\n  return $input.all();\n}"},"typeVersion":2},{"id":"ef715512-2d57-447e-969d-c173a823775b","name":"Adds \"SessionId\"","type":"n8n-nodes-base.set","position":[-400,160],"parameters":{"options":{},"assignments":{"assignments":[{"id":"47598bf1-e55f-4cc0-ae75-272085e7ce02","name":"=sessionId","type":"string","value":"={{ $json.message.chat.id }}"},{"id":"daa49d74-e55e-47bc-ac52-8686d591ab83","name":"message","type":"string","value":"={{ $json.message.text }}"}]}},"typeVersion":3.4},{"id":"876e3ec9-3453-4db9-928a-6163c1c6702b","name":"Telegram","type":"n8n-nodes-base.telegram","position":[900,160],"webhookId":"79d6c29c-1e04-414a-9989-afb1f7a58035","parameters":{"text":"={{ $json.message }}","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"credentials":{"telegramApi":{"id":"NRLKuLR7z8vCesub","name":"BinanceSpotTradingAIAgent_Bot"}},"typeVersion":1.2},{"id":"70c70549-1c58-478d-a39f-5bccc7b76b04","name":"Splits message is more than 4000 characters","type":"n8n-nodes-base.code","position":[480,160],"parameters":{"jsCode":"// Input: assumes incoming message in `item.json.message`\nconst input = $json.output;\nconst chunkSize = 4000;\n\n// Function to split text\nfunction splitMessage(text, size) {\n  const result = [];\n  for (let i = 0; i < text.length; i += size) {\n    result.push(text.substring(i, i + size));\n  }\n  return result;\n}\n\n// Logic\nif (input.length <= chunkSize) {\n  return [{ json: { message: input } }];\n} else {\n  const chunks = splitMessage(input, chunkSize);\n  return chunks.map(chunk => ({ json: { message: chunk } }));\n}"},"typeVersion":2},{"id":"85e0b819-f722-43ae-93b7-5317ff877804","name":"News and Sentiment Analysis Request","type":"n8n-nodes-base.httpRequestTool","position":[120,600],"parameters":{"url":"https://treasurium.app.n8n.cloud/webhook/newsanalyst","method":"POST","options":{},"sendBody":true,"bodyParameters":{"parameters":[{"name":"message","value":"=={{ $json.message }}"}]},"toolDescription":"It will post the name of the cryptocurrency to get the News and Sentiment Analysis for use in the Binance Quant AI Agent."},"typeVersion":4.2},{"id":"27c27a35-fe83-4c4b-b9b1-90f2e1de8602","name":"Binance SM Financial Analyst Tool","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[380,580],"parameters":{"workflowId":{"__rl":true,"mode":"list","value":"Nm41n4i6VMhrixZs","cachedResultName":"Work Drive — Binance SM Financial Analyst Tool"},"workflowInputs":{"value":{"message":"={{ $fromAI(\"message\",\"Populate this with a relevant message to this subagent\")}}","sessionId":"={{ $json.sessionId }}"},"schema":[{"id":"message","type":"string","display":true,"required":false,"displayName":"message","defaultMatch":false,"canBeUsedToMatch":true},{"id":"sessionId","type":"string","display":true,"required":false,"displayName":"sessionId","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.2},{"id":"78c6847a-8449-45dd-8aa6-1ce69e3d4e67","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[-160,620],"parameters":{},"typeVersion":1.3},{"id":"7ded5880-cf83-483c-84b9-dfce5e11d616","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1060,-100],"parameters":{"color":4,"height":460,"content":"## Trigger Incoming Telegram Command\nNode: Telegram Trigger\n**Listens for new Telegram messages** from users.\nTriggers the full agent process and passes raw user input downstream."},"typeVersion":1},{"id":"dfb57705-77b8-4c88-a6b0-aa8128b08400","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-740,-100],"parameters":{"color":2,"height":460,"content":"## Validate User Access\nNode: User **Authentication\nChecks incoming Telegram ID** against the approved user list."},"typeVersion":1},{"id":"37372f5a-db8c-4335-81a4-de437aff4782","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-460,-100],"parameters":{"color":5,"height":460,"content":"## Generate Session Metadata\nNode: Add S**essionId\nCreates a sessionId using the Telegram chat_id**.\nThis is passed into all downstream tools for memory and workflow routing."},"typeVersion":1},{"id":"952adc52-49a1-49c8-8bd5-d31c8277af83","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-180,-220],"parameters":{"color":7,"width":480,"height":580,"content":"## Main AI Agent: Report Generator\nNode: Binance Spot Market Quant AI Agent\nThis is the **core orchestrator**. It uses OpenAI to reason over:\n\n**Multi-timeframe indicator outputs**\n\n**Order book + price data**\n\n**Sentiment and news**\n\nIt calls both tools in parallel:\n\n**Binance Financial Market Analyst Tool**\n\n**Binance News & Sentiment Analyst Tool**\n\nThen it synthesizes a final trading report."},"typeVersion":1},{"id":"a6475e05-c83a-4dce-acd1-19294077912f","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[400,-100],"parameters":{"color":5,"width":260,"height":460,"content":"## Handle Telegram Message Limits\nNode: Code (split logic)\nChecks if the **GPT output exceeds 4000 characters**.\nIf so, it splits the message into safe chunks and passes them on sequentially."},"typeVersion":1},{"id":"413aff1b-43a3-4f81-b82d-eab2f18aed61","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[840,-100],"parameters":{"color":4,"height":460,"content":"## Send Final Report to Telegram\nNode: Telegram sendMessage\nSends **formatted HTML report (or split chunks)** directly to the authenticated user via Telegram bot."},"typeVersion":1},{"id":"8b7687eb-9c5f-4745-8700-cc337a1a2505","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-520,520],"parameters":{"height":540,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## GPT Model for Reasoning\nNode: OpenAI Chat Model\nModel: **gpt-4o-mini**\nUsed to:\n\nInterpret signal values\n\nGenerate structured HTML\n\n**Recommend spot and leverage trades**\n\n"},"typeVersion":1},{"id":"fc0fa082-96d7-4dda-8273-0aa44f6b1f97","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[40,520],"parameters":{"color":6,"height":660,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Binance News & Sentiment Analyst Tool\nNode: ToolWebhook\nSends the symbol to:\n\nPOST https://treasurium.app.n8n.cloud/webhook/newsanalyst\nReturns:\n\n**📈 Sentiment (Bullish / Neutral / Bearish)**\n\n**📰 3–5 crypto headlines**\n\n**🧠 Summary paragraph (1–3 lines)**"},"typeVersion":1},{"id":"becbf326-b8d3-482e-b9c5-7a1bed58b112","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[300,520],"parameters":{"color":6,"height":660,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Binance Financial Market Analyst Tool\nNode: ToolWorkflow\nCalls all connected indicator agents:\n\n**15m, 1h, 4h, 1d**\n\nPrice/Orderbook/Klines agent\n\n**Each indicator (RSI, MACD, BBANDS, SMA, EMA, ADX)** is returned per timeframe, plus order book depth and candle snapshots."},"typeVersion":1},{"id":"46cb7225-7ba9-4270-988e-74e4a30403fc","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-240,520],"parameters":{"color":3,"height":540,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Short-Term Memory Module\nNode: **Simple Memory\nStores the sessionId**, symbol, and other state data.\nUseful for:\n\nMulti-turn Telegram interactions\n\nTracking indicator agreement across timeframes\n\n"},"typeVersion":1},{"id":"238ff914-0c43-4cdf-9506-61e67306300f","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","position":[1400,-1340],"parameters":{"width":1780,"height":2540,"content":"# 🧠 Binance Spot Market Quant AI Agent – Full System Documentation\n\nA professional-grade AI automation system for **spot market trading insights** on Binance. It analyzes **multi-timeframe technical indicators**, **live price/order data**, and **crypto sentiment**, then delivers fully formatted **Telegram-style trading reports**.\n\n---\n\n## 🧩 Included Workflows\n\n> You must install and activate **all of the following workflows** for the system to function correctly:\n\n| ✅ Workflow Name                                    | 📌 Function Description                                                          |\n| -------------------------------------------------- | -------------------------------------------------------------------------------- |\n| Binance Spot Market Quant AI Agent                 | Final AI orchestrator. Parses user prompt and generates Telegram-ready reports.  |\n| Binance SM Financial Analyst Tool                  | Calls indicator tools and price/order data tools. Synthesizes structured inputs. |\n| Binance SM News and Sentiment Analyst Webhook Tool | Analyzes crypto sentiment, gives summary and headlines via POST webhook.         |\n| Binance SM Price/24hrStats/OrderBook/Kline Tool    | Pulls price, order book, 24h stats, and OHLCV klines for 15m–1d.                 |\n| Binance SM 15min Indicators Tool                   | Calculates 15m RSI, MACD, BBANDS, ADX, SMA/EMA from Binance kline data.          |\n| Binance SM 1hour Indicators Tool                   | Same as above but for 1h timeframe.                                              |\n| Binance SM 4hour Indicators Tool                   | Same as above but for 4h timeframe.                                              |\n| Binance SM 1day Indicators Tool                    | Same as above but for 1d timeframe.                                              |\n| Binance SM Indicators Webhook Tool                 | Technical backend. Handles all webhook logic for each timeframe tool.            |\n\n---\n\n## ⚙️ Installation Instructions\n\n### Step 1: Import Workflows\n\n* Open your **n8n Editor UI**\n* Import each workflow JSON file one by one\n* Activate them or ensure they're called via `Execute Workflow`\n\n### Step 2: Set Credentials\n\n* **OpenAI API Credential**: Add your OpenAI key for GPT-4o or GPT-4.1\n* **Binance Price Data**: No auth needed (public endpoint)\n\n### Step 3: Configure Webhook Endpoints\n\n* Deploy **Binance SM Indicators Webhook Tool**\n* Ensure the following routes are reachable:\n\n  * `/webhook/15m`\n  * `/webhook/1h`\n  * `/webhook/4h`\n  * `/webhook/1d`\n\n### Step 4: Telegram Integration\n\n* Add your Telegram Bot to n8n with correct API token\n* Update the **Telegram ID check node** with your own ID\n* Messages from your ID will trigger the agent\n\n### Step 5: Final Agent Execution\n\n* Trigger `Binance Spot Market Quant AI Agent` manually or from Telegram\n* The agent:\n\n  * Calls all connected tools with symbol and sessionId\n  * Waits for full indicator + sentiment response\n  * Returns a formatted multi-part trading report\n\n---\n\n## 🖥️ System Workflow Overview\n\n```\n[Telegram Trigger]\n→ [Session Memory + ID Check]\n→ [Quant Agent]\n→ [Financial Analyst Tool + Sentiment Tool]\n→ [All Indicators (15m, 1h, 4h, 1d)]\n→ [Price/Kline/OrderBook Tool]\n→ [News and Sentiment Webhook]\n→ [Signal Reasoning + Report Formatting]\n→ [Final Telegram HTML Message]\n```\n\n---\n\n## 📬 Telegram Output Style\n\n```html\n<b>BTCUSDT Market Report</b>\n\n<b>Spot Strategy</b>\n• Action: Buy\n• Entry: $63,800 | SL: $61,200 | TP: $66,500\n• Reason:\n - MACD Crossover (1h)\n - RSI Rebound from Oversold (15m)\n - Sentiment: Bullish\n\n<b>Leverage Strategy</b>\n• Position: Long 3x\n• Entry: $63,800\n• SL/TP zones same as above\n\n<b>News Sentiment:</b> Slightly Bullish\n• \"Bitcoin rallies as ETF inflows surge\" – CoinDesk\n• \"Whales accumulate BTC at key support\" – NewsBTC\n```\n\n---\n\n## 🚀 Support & Licensing\n\n🔗 **Don Jayamaha – LinkedIn**\n[linkedin.com/in/donjayamahajr](http://linkedin.com/in/donjayamahajr)\n\n© 2025 Treasurium Capital Limited Company. All rights reserved.\nThis system architecture, prompts, and workflow structure are proprietary and protected by **U.S. copyright law**. Reuse or resale prohibited without license.\n"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"bb69da16-db3d-4804-ad9d-a3d971f8fa36","connections":{"Simple Memory":{"ai_memory":[[{"node":"Binance Spot Market Quant AI Agent","type":"ai_memory","index":0}]]},"Adds \"SessionId\"":{"main":[[{"node":"Binance Spot Market Quant AI Agent","type":"main","index":0}]]},"Telegram Trigger":{"main":[[{"node":"User Authentication (Replace Telegram ID)","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Binance Spot Market Quant AI Agent","type":"ai_languageModel","index":0}]]},"Binance SM Financial Analyst Tool":{"ai_tool":[[{"node":"Binance Spot Market Quant AI Agent","type":"ai_tool","index":0}]]},"Binance Spot Market Quant AI Agent":{"main":[[{"node":"Splits message is more than 4000 characters","type":"main","index":0}]]},"News and Sentiment Analysis Request":{"ai_tool":[[{"node":"Binance Spot Market Quant AI Agent","type":"ai_tool","index":0}]]},"User Authentication (Replace Telegram ID)":{"main":[[{"node":"Adds \"SessionId\"","type":"main","index":0}]]},"Splits message is more than 4000 characters":{"main":[[{"node":"Telegram","type":"main","index":0}]]}}}


name: Analyze Crypto News Sentiment for Any Token with GPT-4o and Telegram Alerts
author_name: Don Jayamaha Jr
author_username: don-the-gem-dealer
categories: []
created_at: 2025-06-06T17:59:13.026Z
updated_at: 2025-06-06T17:59:13.026Z
url: https://n8n.io/workflows/4740
scraped_at: 2025-06-19 22:07:56
description:
  A sentiment intelligence sub-agent for the Binance Spot Market Quant AI Agent. It aggregates crypto news from major sources, filters by token keyword (e.g., BTC, ETH), and produces a Telegram-ready summary including market sentiment and top headlines—powered by GPT-4o.

  🎥 Live Demo:

  🛠️ Workflow Function

  This tool performs the following steps:

  | 🔧 Step                  | 📌 Description                                                                |
  | ------------------------ | ----------------------------------------------------------------------------- |
  | Webhook Input            | Accepts { "message": "symbol" } via HTTP POST                             |
  | Crypto Keyword Extractor | GPT model extracts the valid crypto symbol (e.g., "SOL", "DOGE", "ETH")       |
  | RSS News Aggregators     | Pulls latest headlines from 9+ crypto sources (CoinDesk, Cointelegraph, etc.) |
  | Merge & Filter Articles  | Keeps only articles containing the specified token                            |
  | Prompt Builder           | Creates prompt for GPT with filtered headlines                                |
  | GPT-4o Summarizer        | Summarizes news into 3-part response: Summary, Sentiment, Headline Links      |
  | Telegram Formatter       | Converts GPT output into a Telegram-friendly message                          |
  | Response Handler         | Returns formatted message to the caller via webhook                           |

  📥 Webhook Trigger Format

  {
    "message": "ETH"
  }

  This triggers a full execution of the workflow and returns output like:

  📣 ETH Sentiment: Neutral

  • BlackRock’s tokenized fund expands to Ethereum mainnet (CoinDesk)  
  • Ethereum fees remain high, analysts call for L2 migration (NewsBTC)  
  • Vitalik warns about centralized risks in staking (Cointelegraph)

  📚 Installation Guide

  1. Import & Enable

  Load the .json into your n8n Editor
  Enable webhook trigger in the top-right corner
  Ensure it's reachable via POST /webhook/custom-path

  2. Required Credentials

  OpenAI API Key** (GPT-4o capable)
  No API keys required for RSS feeds

  3. Connect to Quant Agent

  Add an HTTP Request node in your main AI agent
  Point to this workflow's webhook with body { "message": "symbol" }
  Capture the response to include in your Telegram output

  🔍 Real Use Cases

  | Scenario                           | Result                                                           |
  | ---------------------------------- | ---------------------------------------------------------------- |
  | BTC Sentiment before a key event   | Returns 8–12 filtered articles with bullish/neutral/bearish tone |
  | Daily pulse for altcoins like DOGE | Shows relevant headlines, helpful for intraday trading setups    |
  | Telegram chatbot integration       | Enables user to query sentiment via /sentiment ETH             |
  | Macro context for Quant AI outputs | Adds emotional/news context to technical-based trade decisions   |

  🧾 Licensing & Attribution

  © 2025 Treasurium Capital Limited Company
  Architecture, prompts, and trade report structure are IP-protected.
  No unauthorized rebranding or resale permitted.

  🔗 For support: LinkedIn – Don Jayamaha

nodes_used:
  ["n8n-nodes-base.code","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.openAi"]

workflow_json:
  {"id":"f8Zow3PmilvRq85m","meta":{"instanceId":"a5283507e1917a33cc3ae615b2e7d5ad2c1e50955e6f831272ddd5ab816f3fb6"},"name":"Binance SM News and Sentiment Analyst Webhook Tool","tags":[],"nodes":[{"id":"1d71285d-a4bf-456a-a356-b9fa8b74c9d3","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-1020,1220],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"yUizd8t0sD5wMYVG","name":"OpenAi account"}},"typeVersion":1.2},{"id":"300cab6c-63ee-4271-a63e-b3afb135bdcf","name":"Set Query","type":"n8n-nodes-base.set","position":[-460,1040],"parameters":{"options":{},"assignments":{"assignments":[{"id":"9128e9e7-d1b8-4e89-8422-849b8dd519d8","name":"query","type":"string","value":"={{ $json.output }}"}]}},"typeVersion":3.4},{"id":"d7307bc3-f7c2-4db1-8674-5c6025ce7e2a","name":"Crypto News & Sentiment Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-960,1040],"parameters":{"text":"={{$json.body.message}}","options":{"systemMessage":"Your job is to analyze the keyword of the question and output it as a single word.  The keyword will always be the name of a cryptocurrency."},"promptType":"define"},"typeVersion":1.8},{"id":"c4ad1805-cb48-45a3-b850-4960f59299f0","name":"RSS Cointelegraph","type":"n8n-nodes-base.rssFeedRead","position":[160,200],"parameters":{"url":"https://cointelegraph.com/rss","options":{}},"typeVersion":1.1},{"id":"5fc71ef5-a376-41a0-9213-15cc4527b049","name":"RSS Bitcoinmagazine","type":"n8n-nodes-base.rssFeedRead","position":[160,360],"parameters":{"url":"https://bitcoinmagazine.com/.rss/full/","options":{}},"typeVersion":1.1},{"id":"bdbf7bab-c3a6-4f65-bbb9-a6cd83763dc5","name":"RSS Coindesk","type":"n8n-nodes-base.rssFeedRead","position":[160,520],"parameters":{"url":"https://www.coindesk.com/arc/outboundfeeds/rss/","options":{}},"typeVersion":1.1},{"id":"836d7edd-62c5-4819-aa30-c48c4b1f005d","name":"RSS Bitcoinist","type":"n8n-nodes-base.rssFeedRead","position":[160,680],"parameters":{"url":"https://bitcoinist.com/feed/","options":{}},"typeVersion":1.1},{"id":"a0778852-e86b-41e5-a3f8-6d4352e397a1","name":"RSS Newsbtc","type":"n8n-nodes-base.rssFeedRead","position":[160,840],"parameters":{"url":"https://www.newsbtc.com/feed/","options":{}},"typeVersion":1.1},{"id":"d5c5cc4f-ef15-40af-be33-31ce2dbdc45e","name":"RSS Cryptopotato","type":"n8n-nodes-base.rssFeedRead","position":[160,1200],"parameters":{"url":"https://cryptopotato.com/feed/","options":{}},"typeVersion":1.1},{"id":"5f02ad60-9b0a-49fc-afd7-558ac5aeee2d","name":"RSS 99bitcoins","type":"n8n-nodes-base.rssFeedRead","position":[160,1380],"parameters":{"url":"https://99bitcoins.com/feed/","options":{}},"typeVersion":1.1},{"id":"cc5373ab-931a-4b95-a1d4-6d21fa18273a","name":"RSS Cryptobriefing","type":"n8n-nodes-base.rssFeedRead","position":[160,1560],"parameters":{"url":"https://cryptobriefing.com/feed/","options":{}},"typeVersion":1.1},{"id":"e5baa2ef-0455-42b0-a597-dedd551ae1aa","name":"RSS Crypto.news","type":"n8n-nodes-base.rssFeedRead","position":[160,1720],"parameters":{"url":"https://crypto.news/feed/","options":{}},"typeVersion":1.1},{"id":"2cb96040-0e47-41b5-9c32-8362d397333c","name":"Merge All Articles","type":"n8n-nodes-base.merge","position":[840,880],"parameters":{"numberInputs":10},"typeVersion":3.1},{"id":"a1f53681-504a-445a-9aa1-35c40f174e0c","name":"Filter by Query","type":"n8n-nodes-base.code","position":[1080,1020],"parameters":{"jsCode":"const term = $node[\"Set Query\"].json.query.toLowerCase();\nreturn items.filter(item => {\n  const j            = item.json;\n  const title        = (j.title || \"\").toLowerCase();\n  const snippet      = (j.contentSnippet || j.description || \"\").toLowerCase();\n  const fullContent  = (j.content || \"\").toLowerCase();\n  return title.includes(term)\n      || snippet.includes(term)\n      || fullContent.includes(term);\n});"},"typeVersion":2},{"id":"3b886f03-884f-4c9a-bb74-46be78c941fe","name":"Build Prompt","type":"n8n-nodes-base.code","position":[1400,1020],"parameters":{"jsCode":"const q   = $node[\"Set Query\"].json.query;\nconst list = items\n  .map(i => `- ${i.json.title} (${i.json.link})`)\n  .join(\"\\n\");\nconst prompt = `\nYou are a crypto-industry news analyst.\nSummarize current news and market sentiment for **${q}** based on these articles:\n${list}\n\nAnswer in 3 parts:\n1. Summary of News\n2. Market Sentiment\n3. Links to reference news articles\n`;\nreturn [{ json: { prompt } }];"},"typeVersion":2},{"id":"936b9c46-0ea4-498a-9dbb-b4f6b62cf70f","name":"Summarize News & Sentiment (GPT-4o)","type":"@n8n/n8n-nodes-langchain.openAi","position":[1680,1020],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"gpt-4o","cachedResultName":"GPT-4O"},"options":{},"messages":{"values":[{"content":"={{ $node[\"Build Prompt\"].json.prompt }}"},{"role":"assistant","content":"You are a crypto‐industry news analyst. Summarize sentiment clearly and concisely."}]}},"credentials":{"openAiApi":{"id":"yUizd8t0sD5wMYVG","name":"OpenAi account"}},"typeVersion":1.8},{"id":"2c1b4212-3675-416d-a0f4-f1bce7b1581b","name":"Prepare Telegram Message","type":"n8n-nodes-base.set","position":[2100,1020],"parameters":{"options":{},"assignments":{"assignments":[{"id":"565fb705-ac83-4a96-9343-2e29e348cc4f","name":"summary","type":"string","value":"={{ $json.message.content }}"}]}},"typeVersion":3.4},{"id":"ae4eacc3-281d-4c40-a1c8-fbd580fb49a8","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-1120,900],"parameters":{"color":6,"width":600,"height":460,"content":"##  Extract Keyword \nThis AI agent parses the user input and returns a single-word keyword to help match relevant news articles."},"typeVersion":1},{"id":"ea8734d6-5f17-4587-88aa-fcd342a563c5","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[0,0],"parameters":{"color":5,"width":460,"height":1980,"content":"## News Aggregators\nPulls articles from major crypto news sources. You can add more RSS feeds here to expand coverage."},"typeVersion":1},{"id":"214d3fa9-d3f2-4e8a-bfab-5d4deb2881cf","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[760,680],"parameters":{"color":2,"width":480,"height":760,"content":"## Merge & Filter News\nCombines all RSS articles and filters them using the extracted keyword to match only relevant results."},"typeVersion":1},{"id":"c6942449-1e0b-4bca-b1e0-411a3deaf26d","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1320,840],"parameters":{"color":7,"width":260,"height":360,"content":"## Prepare AI Prompt\nConstructs the input prompt for GPT-4o with a list of filtered articles. Output includes summary, sentiment, and article links."},"typeVersion":1},{"id":"7f401bd0-f14d-49d6-9d4a-fcb6e01bd64c","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[1640,800],"parameters":{"color":3,"width":340,"height":440,"content":"## Summarize News & Sentiment (GPT-4o)\nUses OpenAI GPT-4o to generate a concise summary of the news, analyze market sentiment, and return formatted results.\n\n"},"typeVersion":1},{"id":"f60cb8e4-8d3f-4112-a200-6affb3b80cb3","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[2040,760],"parameters":{"color":6,"height":460,"content":"## Format for Telegram\n\nExtracts the AI summary and prepares it for Telegram delivery. Change the variable if you want to include other data.\n\n\n"},"typeVersion":1},{"id":"e19e48b4-36cb-4b0b-87c5-0bae7f6068d7","name":"Webhook","type":"n8n-nodes-base.webhook","position":[-1440,1040],"webhookId":"a41af97d-6bd6-44d2-b79e-dca6df1e6e7e","parameters":{"path":"a41af97d-6bd6-44d2-b79e-dca6df1e6e7e","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"7fae635b-2c8d-44e5-ac2a-b8a458653905","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","position":[2440,1020],"parameters":{"options":{},"respondWith":"allIncomingItems"},"typeVersion":1.2},{"id":"96b562cd-1a55-40ef-aa0c-5d553d7f9818","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1500,740],"parameters":{"color":4,"height":480,"content":"## Webhook Trigger\nNode: Webhook\nAccepts **incoming HTTP POST requests**.\nExpected body format:\n\njson\n{ \"message\": \"<symbol>\" }\n\nThis kicks off the **full news + sentiment analysis process** for a given crypto asset."},"typeVersion":1},{"id":"8422e6bb-320e-4b5b-b392-2ba3adb215b7","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[2380,760],"parameters":{"color":4,"height":480,"content":"## Return Results to Caller\nNode: Respond to Webhook\n**Sends the final formatted message** back to the parent workflow that triggered the call."},"typeVersion":1},{"id":"f323030f-c92f-4bff-a5df-f498aa70d9c4","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[2780,-360],"parameters":{"width":1340,"height":2360,"content":"# 📰 Binance SM News and Sentiment Analyst Webhook Tool – Documentation\n\nA sentiment intelligence sub-agent that aggregates crypto news from top-tier RSS feeds, filters it based on a given token, and generates a market sentiment summary + headline list formatted for Telegram.\n\n---\n\n## 🎯 Purpose\n\nThis tool is responsible for:\n\n* Accepting a webhook request with a token symbol (e.g., `DOGE`, `SOL`)\n* Aggregating recent articles from 9+ major crypto news feeds\n* Filtering for articles relevant to the symbol\n* Summarizing the sentiment and key headlines using GPT-4o\n* Returning a Telegram-friendly formatted response to the caller\n\n---\n\n## 🛠️ Architecture & Key Components\n\n| Component                          | Role                                                           |\n| ---------------------------------- | -------------------------------------------------------------- |\n| 🔗 `Webhook`                       | Triggered externally with `{ message: \"BTC\" }`                 |\n| 🧠 `Crypto News & Sentiment Agent` | Uses GPT to extract the correct crypto keyword                 |\n| 🔄 RSS Feed Readers                | Pull from Cointelegraph, Coindesk, NewsBTC, Bitcoinist, etc.   |\n| 📦 `Merge All Articles`            | Combines articles into one stream                              |\n| 🧹 `Filter by Query`               | Keeps only the news relevant to the requested token            |\n| 📝 `Build Prompt`                  | Builds natural-language prompt to send to GPT                  |\n| 🧠 `Summarize News & Sentiment`    | GPT-4o summarizes the filtered articles with sentiment scoring |\n| 🧾 `Prepare Telegram Message`      | Formats the final summary in clean, Telegram-readable style    |\n| 📤 `Respond to Webhook`            | Returns the message to the triggering parent workflow          |\n\n---\n\n## 📥 Webhook Input\n\n> Expects a simple HTTP POST to the webhook endpoint:\n\n```json\n{\n  \"message\": \"ETH\"\n}\n```\n\nThis triggers a full pipeline execution, resulting in a text summary like:\n\n---\n\n## 📤 Sample Output Format\n\n```\n📣 ETH Sentiment: Neutral\n\n• BlackRock’s tokenized fund expands to Ethereum mainnet (CoinDesk)  \n• Ethereum fees remain high, analysts call for L2 migration (NewsBTC)  \n• Vitalik warns about centralized risks in staking (Cointelegraph)\n```\n\n---\n\n## 🔍 Use Cases\n\n| Scenario                                   | Outcome                                              |\n| ------------------------------------------ | ---------------------------------------------------- |\n| Sentiment summary for BTC                  | Fetches 8–12 filtered headlines, extracts tone       |\n| Daily news pulse for SOL                   | Shows project-related news with brief sentiment flag |\n| Enhances technical analysis interpretation | Adds macro/emotional context to trend setups         |\n| Telegram bot asks for XRP sentiment        | Sends full response back to user instantly           |\n\n---\n\n## 📚 How to Install\n\n### 1. Import & Activate\n\n1. Load the `.json` into your n8n instance\n2. Enable the webhook\n3. Link to parent agent (`Financial Analyst`, `Quant Agent`)\n\n### 2. Set Credentials\n\n* Requires a working **OpenAI API Key** (for GPT-4o)\n* No authentication required for RSS sources\n\n### 3. Connect to Caller\n\nAny external workflow (like your `Quant AI Agent`) can call this by:\n\n* Using HTTP Request Node\n* POSTing to this webhook with `{ message: \"BTC\" }` in the body\n\n---\n\n## 🧾 Licensing & Support\n\n🔗 **Don Jayamaha – LinkedIn**\n[http://linkedin.com/in/donjayamahajr](http://linkedin.com/in/donjayamahajr)\n\n© 2025 Treasurium Capital Limited Company. All rights reserved.\nThis system—including workflow architecture, prompt design, and logic structure—is protected under U.S. copyright law. Unauthorized resale or reproduction is prohibited.\n\n"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"9c17a79d-f8a4-413e-a486-2e89229994cf","connections":{"Webhook":{"main":[[{"node":"Crypto News & Sentiment Agent","type":"main","index":0}]]},"Set Query":{"main":[[{"node":"RSS Cointelegraph","type":"main","index":0},{"node":"RSS Bitcoinmagazine","type":"main","index":0},{"node":"RSS Coindesk","type":"main","index":0},{"node":"RSS Bitcoinist","type":"main","index":0},{"node":"RSS Newsbtc","type":"main","index":0},{"node":"RSS Cryptopotato","type":"main","index":0},{"node":"RSS 99bitcoins","type":"main","index":0},{"node":"RSS Cryptobriefing","type":"main","index":0},{"node":"RSS Crypto.news","type":"main","index":0}]]},"RSS Newsbtc":{"main":[[{"node":"Merge All Articles","type":"main","index":4}]]},"Build Prompt":{"main":[[{"node":"Summarize News & Sentiment (GPT-4o)","type":"main","index":0}]]},"RSS Coindesk":{"main":[[{"node":"Merge All Articles","type":"main","index":2}]]},"RSS 99bitcoins":{"main":[[{"node":"Merge All Articles","type":"main","index":7}]]},"RSS Bitcoinist":{"main":[[{"node":"Merge All Articles","type":"main","index":3}]]},"Filter by Query":{"main":[[{"node":"Build Prompt","type":"main","index":0}]]},"RSS Crypto.news":{"main":[[{"node":"Merge All Articles","type":"main","index":9}]]},"RSS Cryptopotato":{"main":[[{"node":"Merge All Articles","type":"main","index":6}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Crypto News & Sentiment Agent","type":"ai_languageModel","index":0}]]},"RSS Cointelegraph":{"main":[[{"node":"Merge All Articles","type":"main","index":0}]]},"Merge All Articles":{"main":[[{"node":"Filter by Query","type":"main","index":0}]]},"RSS Cryptobriefing":{"main":[[{"node":"Merge All Articles","type":"main","index":8}]]},"RSS Bitcoinmagazine":{"main":[[{"node":"Merge All Articles","type":"main","index":1}]]},"Prepare Telegram Message":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}]]},"Crypto News & Sentiment Agent":{"main":[[{"node":"Set Query","type":"main","index":0}]]},"Summarize News & Sentiment (GPT-4o)":{"main":[[{"node":"Prepare Telegram Message","type":"main","index":0}]]}}}


name: Get Binance Spot Market Financial Analysis via Telegram with GPT-4o
author_name: Don Jayamaha Jr
author_username: don-the-gem-dealer
categories: []
created_at: 2025-06-06T18:03:54.629Z
updated_at: 2025-06-06T18:03:54.629Z
url: https://n8n.io/workflows/4741
scraped_at: 2025-06-19 22:07:56
description:
  This workflow powers the Binance Spot Market Quant AI Agent, acting as the Financial Market Analyst. It fuses real-time market structure data (price, volume, kline) with multiple timeframe technical indicators (15m, 1h, 4h, 1d) and returns a structured trading outlook—perfect for intraday and swing traders who want actionable analysis in Telegram.

  🔗 Requires the following sub-workflows to function:
  • Binance SM 15min Indicators Tool
  • Binance SM 1hour Indicators Tool
  • Binance SM 4hour Indicators Tool
  • Binance SM 1day Indicators Tool
  • Binance SM Price/24hStats/Kline Tool

  ⚙️ How It Works

  Triggered via webhook (typically by the Quant AI Agent).
  Extracts user symbol + timeframe from input (e.g., "DOGE outlook today").
  Calls all linked sub-workflows to retrieve indicators + live price data.
  Merges the data and formats a clean trading report using GPT-4o-mini.
  Returns HTML-formatted message suitable for Telegram delivery.

  📥 Sample Input

  {
    "message": "SOLUSDT",
    "sessionId": "654321123"
  }

  ✅ Telegram Output Format

  📊 SOLUSDT Market Snapshot

  💰 Price: $156.75  
  📉 24h Stats: High $160.10 | Low $149.00 | Volume: 1.1M SOL

  🧪 4h Indicators:
  • RSI: 58.2 (Neutral-Bullish)  
  • MACD: Crossover Up  
  • BB: Squeezing Near Upper Band  
  • ADX: 25.7 (Rising Trend)

  📈 Resistance: $163  
  📉 Support: $148

  🔍 Use Cases

  | Scenario                        | Outcome                                                   |
  | ------------------------------- | --------------------------------------------------------- |
  | User asks for “BTC outlook”     | Returns 1h + 4h + 1d indicators + live price + key levels |
  | Telegram bot prompt: “DOGE now” | Returns short-term 15m + 1h analysis snapshot             |
  | Strategy trigger inside n8n     | Enables other workflows to consume structured signal data |

  🎥 Watch the Live Demo



  📺 https://youtu.be/k9VuU2h5wwI

  🧾 Licensing & Attribution

  © 2025 Treasurium Capital Limited Company
  Architecture, prompts, and trade report structure are IP-protected.
  No unauthorized rebranding or redistribution permitted.

  🔗 For support: LinkedIn – Don Jayamaha

nodes_used:
  ["@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.memoryBufferWindow","@n8n/n8n-nodes-langchain.toolWorkflow"]

workflow_json:
  {"id":"Nm41n4i6VMhrixZs","meta":{"instanceId":"a5283507e1917a33cc3ae615b2e7d5ad2c1e50955e6f831272ddd5ab816f3fb6","templateCredsSetupCompleted":true},"name":"Binance SM Financial Analyst Tool","tags":[],"nodes":[{"id":"76944051-b8a4-4619-a307-3467e545c2d0","name":"When Executed by Another Workflow","type":"n8n-nodes-base.executeWorkflowTrigger","position":[-640,-100],"parameters":{"workflowInputs":{"values":[{"name":"message"},{"name":"sessionId"}]}},"typeVersion":1.1},{"id":"035ef2de-8f55-4d8e-96fb-17ecefc835b9","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-920,240],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini","cachedResultName":"gpt-4.1-mini"},"options":{}},"credentials":{"openAiApi":{"id":"yUizd8t0sD5wMYVG","name":"OpenAi account"}},"typeVersion":1.2},{"id":"8a658740-f8c3-44e2-ae3a-974bf5baec55","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[-660,240],"parameters":{},"typeVersion":1.3},{"id":"ab7672db-5912-4ed5-b9cc-8a64195fb4f1","name":"Binance SM Financial Analyst Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-200,-100],"parameters":{"text":"={{ $json.message }}","options":{"systemMessage":"You are the **Binance Spot Market Financial Analyst AI Agent**, tasked with interpreting natural-language trading queries and generating **multi-timeframe, indicator-driven market analysis** for any Binance spot symbol.\n\nYour core responsibility is to orchestrate real-time price tools and technical indicator sub-agents to **diagnose trend conditions, volatility shifts, and market momentum**, and return a structured report formatted for Telegram.\n\n---\n\n### 🔗 Connected Tools & Agents\n\n#### 1. **Price & Market Structure Tool**\n\nWorkflow: `Binance SM Price-24hrStats-OrderBook-Kline Tool`\nReturns:\n\n* `getCurrentPrice`\n* `get24hrStats`\n* `getOrderBook`\n* `getKlines`\n  Input:\n\n```json\n{\n  \"message\": \"<SYMBOL>\",\n  \"sessionId\": \"<Telegram Chat ID>\"\n}\n```\n\n#### 2. **Timeframe-Based Technical Indicator Agents**\n\nEach uses the latest Binance kline data (limit: 40) to calculate:\n\n* **RSI** (14)\n* **MACD** (12/26/9)\n* **Bollinger Bands** (20/2)\n* **SMA / EMA** (20)\n* **ADX** (+DI, −DI, 14)\n\nAgents:\n\n* `Binance SM 15min Indicators Agent`\n* `Binance SM 1hour Indicators Agent`\n* `Binance SM 4hour Indicators Agent`\n* `Binance SM 1day Indicators Agent`\n\nInput to each agent:\n\n```json\n{\n  \"message\": \"<SYMBOL>\",\n  \"sessionId\": \"<Telegram Chat ID>\"\n}\n```\n\n---\n\n### 🧠 Decision Engine & Routing Logic\n\nYou must:\n\n* Extract the **symbol** and **implied timeframe** from the user query.\n* If no timeframe is given, default to:\n\n  * **Short-Term**: 15m + 1h\n  * **Mid-Term**: 1h + 4h\n  * **Long-Term**: 1d + 4h\n* Route data requests in parallel across tools\n* Merge raw metrics into a final structured insight\n\n---\n\n### 📤 Telegram Output Template\n\nReturn your final result in this format:\n\n```\n📊 <SYMBOL> Market Snapshot\n\n💰 Price: $63,220  \n📈 24h Change: +2.3%  \n📊 Volume: 45,210 BTC\n\n🧪 Technical Summary:\n• 1h RSI: 68 (Bullish)  \n• MACD: Crossover Up  \n• BB Width: Narrowing (Possible Breakout)  \n• ADX: 32 (Strong Trend)  \n\n📉 Support: $61,900  \n📈 Resistance: $63,800\n```\n\n---\n\n### ✅ Input Handling Notes\n\n* Input: Human questions like \"How’s BTC doing today?\" or \"Is SOL bullish in the 4h chart?\"\n* If timeframe is missing, **infer intent**\n* If symbol is missing, prompt: “Which token would you like me to analyze?”\n* All agents and tools **must return cleaned JSON**, avoid raw API output"},"promptType":"define"},"typeVersion":2},{"id":"f12e6672-bcb5-44af-b7d7-250437d8ba7c","name":"Binance SM Price-24hrStats-OrderBook-Kline Agent","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[-400,220],"parameters":{"workflowId":{"__rl":true,"mode":"list","value":"xAa5vBxhQzEWWFJM","cachedResultName":"Work Drive — Binance SM Price-24hrStats-OrderBook-Kline Tool"},"description":"This tool is a delegated sub-agent workflow that provides low-level market data from the Binance Spot Market in response to upstream AI reasoning. It is used by higher-level agents (e.g. the Financial Analyst Agent) to retrieve structured financial metrics and price data for any cryptocurrency pair.\n\n🔧 What It Does:\nThis agent accepts a symbol-based message input and returns Binance API data for:\n\n✅ getCurrentPrice – Latest market price for a trading pair (e.g., BTCUSDT)\n\n✅ get24hrStats – 24-hour price change, high/low, volume, and close stats\n\n✅ getOrderBook – Real-time order book (bids/asks) with adjustable depth\n\n✅ getKlines – Candlestick OHLCV data for technical analysis","workflowInputs":{"value":{"message":"={{ $fromAI(\"message\",\"Populate this with a relevant message to this subagent\")}}","sessionId":"={{ $json.sessionId }}"},"schema":[{"id":"message","type":"string","display":true,"required":false,"displayName":"message","defaultMatch":false,"canBeUsedToMatch":true},{"id":"sessionId","type":"string","display":true,"required":false,"displayName":"sessionId","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.2},{"id":"35936a8a-1bf6-4bfb-8ad7-1d192e6cf655","name":"Binance SM 15min Indicators Agent","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[-120,220],"parameters":{"workflowId":{"__rl":true,"mode":"list","value":"INYtgCEbxdGBDivU","cachedResultName":"Work Drive — Binance SM 15min Indicators Tool"},"description":"This is a 15-minute interval technical indicator agent for Binance Spot Market pairs. It provides AI-driven access to real-time technical signals calculated on the latest 15-minute candlestick data. Designed for use within larger financial analysis workflows, this tool helps detect short-term momentum shifts and trading signals.\n\n🔧 What It Does:\nWhen called with a valid crypto symbol, this agent fetches the latest 15-minute technical indicators, typically including (but not limited to):\n\n✅ Relative Strength Index (RSI)\n\n✅ Bollinger Bands (BBANDS)\n\n✅ Moving Averages (SMA/EMA)\n\n✅ MACD\n\n✅ ADX","workflowInputs":{"value":{"message":"={{ $fromAI(\"message\",\"Populate this with a relevant message to this subagent\")}}","sessionId":"={{ $json.sessionId }}"},"schema":[{"id":"message","type":"string","display":true,"required":false,"displayName":"message","defaultMatch":false,"canBeUsedToMatch":true},{"id":"sessionId","type":"string","display":true,"required":false,"displayName":"sessionId","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.2},{"id":"3c15aea8-475e-42e0-b8f7-2295a176e386","name":"Binance SM 1hour Indicators Agent","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[100,220],"parameters":{"workflowId":{"__rl":true,"mode":"list","value":"eXDMxZUrE0tIPcR9","cachedResultName":"Work Drive — Binance SM 1hour Indicators Tool"},"description":"This agent is responsible for analyzing 1-hour interval technical indicators for trading pairs on the Binance Spot Market. It is used to detect mid-range market momentum and potential entry/exit signals based on trend strength and volatility.\n\n🔧 What It Does:\nWhen invoked, this agent queries the Binance SM 1hour Indicators Tool to retrieve AI-processed indicator data including (but not limited to):\n\n✅ RSI (Relative Strength Index)\n\n✅ MACD (Moving Average Convergence Divergence)\n\n✅ Bollinger Bands (BBANDS)\n\n✅ SMA / EMA (Simple & Exponential Moving Averages)\n\n✅ ADX (Average Directional Index)\n\nThese indicators are calculated from the latest 1-hour candlestick data and limited to the most recent data points (typically last 20).","workflowInputs":{"value":{"message":"={{ $fromAI(\"message\",\"Populate this with a relevant message to this subagent\")}}","sessionId":"={{ $json.sessionId }}"},"schema":[{"id":"message","type":"string","display":true,"required":false,"displayName":"message","defaultMatch":false,"canBeUsedToMatch":true},{"id":"sessionId","type":"string","display":true,"required":false,"displayName":"sessionId","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.2},{"id":"b2feb013-9d16-4838-bfb5-2035ceb70790","name":"Binance SM 4hour Indicators Agent","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[340,220],"parameters":{"workflowId":{"__rl":true,"mode":"list","value":"6U56ifHxnha9rf2n","cachedResultName":"Work Drive — Binance SM 4hour Indicators Tool"},"description":"This agent focuses on retrieving and analyzing 4-hour timeframe technical indicators for Binance Spot Market trading pairs. It provides a medium-term view of trend strength, volatility, and momentum shifts—ideal for swing trading analysis and macro-level setups.\n\n🔧 What It Does:\nWhen triggered, the agent queries the Binance SM 4hour Indicators Tool workflow and returns a curated set of technical indicator values, such as:\n\n✅ RSI (Relative Strength Index)\n\n✅ MACD (Moving Average Convergence Divergence)\n\n✅ Bollinger Bands\n\n✅ SMA / EMA\n\n✅ ADX (Trend Strength)\n\nThese indicators are derived from recent 4-hour candlestick data (typically the last 20 bars) and formatted for human-readable AI response generation.","workflowInputs":{"value":{"message":"={{ $fromAI(\"message\",\"Populate this with a relevant message to this subagent\")}}","sessionId":"={{ $json.sessionId }}"},"schema":[{"id":"message","type":"string","display":true,"required":false,"displayName":"message","defaultMatch":false,"canBeUsedToMatch":true},{"id":"sessionId","type":"string","display":true,"required":false,"displayName":"sessionId","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.2},{"id":"248d63c7-0b95-4f50-acb0-ed2c58dfb4e9","name":"Binance SM 1day Indicators Agent","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[600,220],"parameters":{"workflowId":{"__rl":true,"mode":"list","value":"tZtQVd3nbDgZ1DTZ","cachedResultName":"Work Drive — Binance SM 1day Indicators Tool"},"workflowInputs":{"value":{"message":"={{ $fromAI(\"message\",\"Populate this with a relevant message to this subagent\")}}","sessionId":"={{ $json.sessionId }}"},"schema":[{"id":"message","type":"string","display":true,"required":false,"displayName":"message","defaultMatch":false,"canBeUsedToMatch":true},{"id":"sessionId","type":"string","display":true,"required":false,"displayName":"sessionId","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.2},{"id":"823c3ea2-dbee-4da5-a660-8b862e675db1","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-700,-400],"parameters":{"color":4,"height":500,"content":"## Trigger: Parent Workflow Call\nNode: When Executed by Another Workflow\nThis agent does not start on its own. It is always triggered from a higher-level agent, like:\n\n**Binance Quant AI Agent**\n\nCustom multi-timeframe analyzers"},"typeVersion":1},{"id":"61189fe9-31c1-4c03-b185-61ab5847e144","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-720,180],"parameters":{"color":3,"width":220,"height":520,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Memory Context\nNode: **Simple Memory\nStores the session ID, message, and interim indicator values** for cross-tool alignment. Enables:\n\nMulti-turn dialogue logic\n\nTrend comparison across timeframes\n\nReport reuse if repeated query is made"},"typeVersion":1},{"id":"e9347973-3644-47dc-927e-87b480e473d9","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-980,180],"parameters":{"width":220,"height":520,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## AI Engine\nNode: OpenAI Chat Model\nModel: **gpt-4.1-mini** or compatible\nUsed to:\n\nInterpret values from all indicator tools\n\nLabel behavior: **“Overbought,” “MACD Cross Up,” “Volatility Spike”**\n\nOutput final snapshot in clean Telegram format"},"typeVersion":1},{"id":"cee591cc-6c30-4d47-be93-5621315d02e4","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-460,180],"parameters":{"color":6,"width":220,"height":620,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Price & Structure Tool\nNode: **Binance SM Price-24hrStats-OrderBook-Kline Agent**\nReturns raw metrics:\n\n✅ Current Price\n\n✅ 24hr Stats (OHLCV)\n\n✅ Order Book Depth (top 100 bids/asks)\n\n✅ Kline snapshots (15m, 1h, 4h, 1d)\n\nAll data is Telegram-optimized before AI formatting.\n\n"},"typeVersion":1},{"id":"bfdeab4a-a387-41a6-97ca-6719b640b744","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-200,180],"parameters":{"color":6,"width":220,"height":780,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Technical Indicator Agents\nEach tool receives the same inputs:\n\njson\n{\n  \"message\": \"BTCUSDT\",\n  \"sessionId\": \"539847013\"\n}\n\n🔸 **15m Indicator Agent**\nDetects **fast-changing intraday signals** (scalping, fakeouts)\n\n\nEach calculates:\n\nRSI (14)\n\nMACD (12/26/9)\n\nBBANDS (20/2)\n\nSMA/EMA (20)\n\nADX (+DI / −DI, 14)"},"typeVersion":1},{"id":"a79b656a-b38a-4b0e-96c3-70b5282710aa","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[40,180],"parameters":{"color":6,"width":220,"height":780,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Technical Indicator Agents\nEach tool receives the same inputs:\n\njson\n{\n  \"message\": \"BTCUSDT\",\n  \"sessionId\": \"539847013\"\n}\n\n🔸 **1h Indicator Agent**\nBest for **momentum confirmation or breakout acceleration**\n\n\nEach calculates:\n\nRSI (14)\n\nMACD (12/26/9)\n\nBBANDS (20/2)\n\nSMA/EMA (20)\n\nADX (+DI / −DI, 14)"},"typeVersion":1},{"id":"d1656eec-67d4-4ff0-8cf2-ee2040a9d8f2","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[280,180],"parameters":{"color":6,"width":220,"height":780,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Technical Indicator Agents\nEach tool receives the same inputs:\n\njson\n{\n  \"message\": \"BTCUSDT\",\n  \"sessionId\": \"539847013\"\n}\n\n🔸 **4h Indicator Agent**\n**Macro view of medium-term setups and volume confirmation**\n\nEach calculates:\n\nRSI (14)\n\nMACD (12/26/9)\n\nBBANDS (20/2)\n\nSMA/EMA (20)\n\nADX (+DI / −DI, 14)"},"typeVersion":1},{"id":"115e5783-5220-45ac-a80e-bd9dd11d4af1","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[540,180],"parameters":{"color":6,"width":220,"height":780,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Technical Indicator Agents\nEach tool receives the same inputs:\n\njson\n{\n  \"message\": \"BTCUSDT\",\n  \"sessionId\": \"539847013\"\n}\n\n\n🔸 1**d Indicator Agent**\n**High-timeframe sentiment, ideal for swing trade direction**\n\nEach calculates:\n\nRSI (14)\n\nMACD (12/26/9)\n\nBBANDS (20/2)\n\nSMA/EMA (20)\n\nADX (+DI / −DI, 14)"},"typeVersion":1},{"id":"bb184375-fab1-431a-a33f-b3dc0751105d","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[-320,-380],"parameters":{"color":5,"width":500,"height":460,"content":"## Primary Reasoning Agent\nNode: Binance SM Financial Analyst Agent\nThis is the orchestrator that:\n\n**Parses the symbol** and optional timeframe from user input\n\nSelects **tools dynamically**\n\n**Merges all results into one final report**\n\n"},"typeVersion":1},{"id":"396ab0d2-a322-4373-836f-94490acdc9f0","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[940,-920],"parameters":{"width":1060,"height":1900,"content":"# 📊 Binance SM Financial Analyst Tool – Documentation\n\nA central orchestrator that fuses market structure data and technical indicators across all relevant timeframes, preparing them for final trading analysis inside the Quant AI system.\n\n---\n\n## 🎯 Purpose\n\nThis tool is responsible for:\n\n* Parsing Telegram-style prompts from the master agent\n* Routing data requests to all relevant indicator tools (15m, 1h, 4h, 1d)\n* Fetching price, volume, order book, and kline structure\n* Merging all responses and returning a clean, readable summary\n\n---\n\n## 🧩 Connected Sub-Agents\n\n| Sub-Agent Tool                           | Role                                                     |\n| --------------------------------------   | -------------------------------------------------------- |\n| ✅ Binance SM 15min Indicators Tool       | Short-term volatility and reversals                      |\n| ✅ Binance SM 1hour Indicators Tool       | Intraday momentum and trend formation                    |\n| ✅ Binance SM 4hour Indicators Tool       | Swing trend analysis and confirmation                    |\n| ✅ Binance SM 1day Indicators Tool        | Macro trend detection and directional bias               |\n| ✅ Binance SM Price/24hStats/Kline Tool   | Raw market structure: OHLCV, order book, real-time price |\n\n---\n\n## ⚙️ Workflow Architecture\n\n| Section                             | Description                                                     |\n| ----------------------------------- | --------------------------------------------------------------- |\n| 🔄 **Trigger:**                     | Executed by Quant AI Agent or Telegram Bot Handler              |\n| 💬 **LLM Reasoning (gpt-4o-mini):** | Interprets queries, symbol, timeframe, intent                   |\n| 🧠 **Session Memory:**              | Tracks `sessionId`, symbol history, multi-turn intent           |\n| 📥 **Input Format:**                | `{ \\\"message\\\": \\\"SOLUSDT\\\", \\\"sessionId\\\": \\\"123456789\\\" }`    |\n| 🔁 **Tool Calls:**                  | Invokes all indicators and market data tools in parallel        |\n| 📊 **Merge Results:**               | Combines indicators + price + order book into structured output |\n| 📤 **Final Output:**                | Telegram-ready HTML summary (text only, no raw JSON)            |\n\n---\n\n## 📏 Timeframe Logic\n\n| Case           | Action                                            |\n| -------------- | ------------------------------------------------- |\n| No timeframe   | Default to `15m + 1h` (short-term snapshot)       |\n| Broad question | Return `1h + 4h + 1d` data (medium- to long-term) |\n| Symbol missing | Ask user to clarify the token or asset symbol     |\n\n---\n\n## 🖥️ Telegram Output Format\n\n```\n📊 ETHUSDT Market Overview\n\n💰 Price: $3,680  \n📉 24h Stats: High $3,720 | Low $3,580 | Volume: 920,000 ETH\n\n🧪 4h Technical Indicators:\n• RSI: 62.1 → Neutral-Bullish  \n• MACD: Crossover Up  \n• BB: Price near upper band  \n• ADX: 27.9 → Growing Trend\n\n📈 Resistance: $3,740  \n📉 Support: $3,600\n```\n\n---\n\n## ✅ Use Case Scenarios\n\n| Scenario                               | Result                                                     |\n| -------------------------------------- | ---------------------------------------------------------- |\n| User asks: “Show me BTC outlook today” | 15m + 1h + 1d analysis merged and summarized               |\n| User asks: “How is DOGE trending?”     | Indicator agent fetch + live price + structure returned    |\n| Input lacks timeframe                  | Defaults to short + medium scopes with follow-up if needed |\n\n---\n\n## 🚀 Support & Licensing\n\n🔗 **Don Jayamaha – LinkedIn**\n[http://linkedin.com/in/donjayamahajr](http://linkedin.com/in/donjayamahajr)\n\n© 2025 Treasurium Capital Limited Company. All rights reserved.\nThis AI automation system, including logic, code, prompt flows, and architectural structure, is proprietary intellectual property of **Treasurium Capital Limited Company**. Reproduction, redistribution, or resale is strictly prohibited without express license.\n"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"9d7a97dc-1249-4e37-a25a-e003555850b7","connections":{"Simple Memory":{"ai_memory":[[{"node":"Binance SM Financial Analyst Agent","type":"ai_memory","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Binance SM Financial Analyst Agent","type":"ai_languageModel","index":0}]]},"Binance SM 1day Indicators Agent":{"ai_tool":[[{"node":"Binance SM Financial Analyst Agent","type":"ai_tool","index":0}]]},"Binance SM 15min Indicators Agent":{"ai_tool":[[{"node":"Binance SM Financial Analyst Agent","type":"ai_tool","index":0}]]},"Binance SM 1hour Indicators Agent":{"ai_tool":[[{"node":"Binance SM Financial Analyst Agent","type":"ai_tool","index":0}]]},"Binance SM 4hour Indicators Agent":{"ai_tool":[[{"node":"Binance SM Financial Analyst Agent","type":"ai_tool","index":0}]]},"When Executed by Another Workflow":{"main":[[{"node":"Binance SM Financial Analyst Agent","type":"main","index":0}]]},"Binance SM Price-24hrStats-OrderBook-Kline Agent":{"ai_tool":[[{"node":"Binance SM Financial Analyst Agent","type":"ai_tool","index":0}]]}}}


name: Binance SM 15min Indicators Tool
author_name: Don Jayamaha Jr
author_username: don-the-gem-dealer
categories: []
created_at: 2025-06-06T18:11:59.825Z
updated_at: 2025-06-06T18:11:59.825Z
url: https://n8n.io/workflows/4743
scraped_at: 2025-06-19 22:07:56
description:
  A short-term technical analysis agent for 15-minute candles on Binance Spot Market pairs. Calculates and interprets key trading indicators (RSI, MACD, BBANDS, ADX, SMA/EMA) and returns structured summaries, optimized for Telegram or downstream AI trading agents.

  This tool is designed to be triggered by another workflow (such as the Binance SM Financial Analyst Tool or Binance Quant AI Agent) and is not intended for standalone use.

  🔧 Key Features

  ⏱️ Uses 15-minute kline data (last 100 candles)
  📈 Calculates: RSI, MACD, Bollinger Bands, SMA/EMA, ADX
  🧠 Interprets numeric data using GPT-4.1-mini
  📤 Outputs concise, formatted analysis like:

      • RSI: 72 → Overbought  
    • MACD: Cross Up  
    • BB: Expanding  
    • ADX: 34 → Strong Trend
  🧠 AI Agent Purpose

  &gt; You are a short-term analysis tool for spotting volatility, early breakouts, and scalping setups.

  Used by higher agents to determine:

  Entry/exit precision
  Momentum shifts
  Scalping opportunities

  ⚙️ How it Works

  Triggered externally by another workflow
  Accepts input:

        {
       "message": "BTCUSDT",
       "sessionId": "123456789"
     }
     Sends POST request to backend endpoint:

        https://treasurium.app.n8n.cloud/webhook/15m-indicators
     Fetches last 100 candles and calculates indicators
  Passes data to GPT for interpretation
  Returns summary with indicator tags for human readability

  🔗 Dependencies

  This tool is triggered by:

  ✅ Binance SM Financial Analyst Tool
  ✅ Binance Spot Market Quant AI Agent

  🚀 Setup Instructions

  Import into your n8n instance
  Make sure /15m-indicators webhook is active and calculates indicators correctly
  Connect your OpenAI GPT-4.1-mini credentials
  Trigger from upstream agent with Binance symbol and session ID
  Ensure all external calls (to Binance + webhook) are working

  🧪 Example Use Cases

  | Use Case                              | Result                                  |
  | ------------------------------------- | --------------------------------------- |
  | Short-term trade decision for ETHUSDT | Receives 15m signal indicators summary  |
  | Input from Financial Analyst Tool     | Returns real-time volatility snapshot   |
  | Telegram bot asks for “DOGE update”   | Returns momentum indicators in 15m view |

  🎥 Demo Preview


  📺 https://youtu.be/k9VuU2h5wwI

  🧾 Licensing & Attribution

  © 2025 Treasurium Capital Limited Company
  Architecture, prompts, and trade report structure are IP-protected.
  No unauthorized rebranding or resale permitted.

  🔗 For support: Don Jayamaha – LinkedIn

nodes_used:
  ["@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.memoryBufferWindow"]

workflow_json:
  {"id":"INYtgCEbxdGBDivU","meta":{"instanceId":"a5283507e1917a33cc3ae615b2e7d5ad2c1e50955e6f831272ddd5ab816f3fb6"},"name":"Binance SM 15min Indicators Tool","tags":[],"nodes":[{"id":"b6621b6c-c014-4028-b274-9df8279a830f","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-280,140],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini","cachedResultName":"gpt-4.1-mini"},"options":{}},"credentials":{"openAiApi":{"id":"yUizd8t0sD5wMYVG","name":"OpenAi account"}},"typeVersion":1.2},{"id":"694b7706-e7c4-4441-8e76-24fadacfed96","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[0,140],"parameters":{},"typeVersion":1.3},{"id":"03bb428a-e79c-4f0c-aa33-8db7d9b96418","name":"When Executed by Another Workflow","type":"n8n-nodes-base.executeWorkflowTrigger","position":[-460,-180],"parameters":{"workflowInputs":{"values":[{"name":"message"},{"name":"sessionId"}]}},"typeVersion":1.1},{"id":"9ee0b29e-18bc-4048-a318-8727fbdc9c06","name":"Binance SM 15min Indicators Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-60,-180],"parameters":{"text":"={{ $json.message }}","options":{"systemMessage":"You are a short-term technical analysis agent that calculates **15-minute interval trading signals** for any Binance Spot Market trading pair. You are used by higher-level agents to assess intraday volatility, trend momentum, and entry/exit opportunities.\n\n---\n\n### 🔐 Access Control\n\n* Expect to be triggered by another workflow.\n* Maintain `sessionId` context for user-specific response handling.\n\n---\n\n### 📥 Expected Input Format\n\n```json\n{\n  \"message\": \"BTCUSDT\",\n  \"sessionId\": \"123456789\"\n}\n```\n\n* `message`: Valid Binance symbol (e.g., BTCUSDT)\n* `sessionId`: Telegram user or workflow context\n\n---\n\n### 🔧 Tools Used\n\nYou POST the trading pair to this endpoint:\n\n```\nhttps://treasurium.app.n8n.cloud/webhook/15m-indicators\n```\n\n**Payload format:**\n\n```json\n{\n  \"symbol\": \"BTCUSDT\"\n}\n```\n\n---\n\n### 📊 Behavior\n\n* Request **15-minute kline data** with a limit sufficient for indicator calculations (typically `limit: 100`).\n* Calculate key indicators including:\n\n  * RSI\n  * MACD\n  * Bollinger Bands\n  * SMA/EMA\n  * ADX\n* Return results in Telegram-optimized format (e.g. Markdown with clear sections).\n\n---\n\n### 🧠 Use Cases\n\n* Detect momentum shifts in short-term windows.\n* Generate alerts for potential scalping or breakout signals.\n* Contribute insights to larger multi-timeframe analysis workflows (e.g., Quant AI Agent, Financial Analyst Tool).\n\n"},"promptType":"define"},"typeVersion":1.9},{"id":"2678122f-90fc-42ba-ae63-724006266c38","name":"HTTP Request 15m Indicators Tool","type":"n8n-nodes-base.httpRequestTool","position":[260,120],"parameters":{"url":"https://treasurium.app.n8n.cloud/webhook/15m-indicators","method":"POST","options":{},"sendBody":true,"bodyParameters":{"parameters":[{"name":"symbol","value":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', ``, 'string') }}"}]}},"typeVersion":4.2},{"id":"3427df64-fdcf-4b8a-a817-dc1385cdec50","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-540,-460],"parameters":{"color":4,"height":500,"content":"## Workflow Trigger\nNode: When Executed by Another Workflow\nThis workflow does not start on its own — it is always triggered by:\n\n**Binance SM Financial Analyst Tool**\n\n**Binance Quant AI Agent**"},"typeVersion":1},{"id":"54c97888-ae8a-4098-b6ec-c6ced7ac340a","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[-160,-620],"parameters":{"color":5,"width":500,"height":620,"content":"## Agent Reasoning (GPT)\nNode: **Binance SM 15min Indicators Agent**\nUses GPT-4o-mini (gpt-4.1-mini) to:\n\n**Interpret raw indicator output**\n\nDetect signal patterns like:\n\n**Overbought RSI**\n\n**MACD crossovers**\n\n**Bollinger Band squeezes**\n\n**EMA/SMA relationships**\n\n**Strong/weak ADX readings**\n\n**Generate structured summaries**\n\n"},"typeVersion":1},{"id":"fd29107f-4b0a-496e-a5d6-9054573fd917","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-340,80],"parameters":{"width":220,"height":520,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## OpenAI Model\nNode: OpenAI Chat Model\nModel: **gpt-4.1-mini**\nProvides language interpretation of the numeric indicators.\n\nExample:\n\n**• RSI: 71 → Overbought  \n• MACD: Cross Up  \n• BB: Touching Upper Band  \n• ADX: 32 → Strong Uptrend**\n"},"typeVersion":1},{"id":"06b488f6-5af2-4906-ab58-ff720ea4d1e2","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-80,80],"parameters":{"color":3,"width":220,"height":520,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Memory System\nNode: Simple Memory\nStores **session context (sessionId, symbol, last query).**\nUsed for:\n\n**Persistent multi-turn interactions\n\nCross-agent symbol consistency**"},"typeVersion":1},{"id":"4b2198d4-e337-48ce-b857-edd1a8dbe1a2","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[200,80],"parameters":{"color":6,"width":220,"height":960,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Indicator Tool Request\nNode: HTTP Request 15m Indicators Tool\n\n**Makes a POST request to:**\n\nhttps://treasurium.app.n8n.cloud/webhook/15m-indicators\n\nPayload:\n\njson\n{ \"symbol\": \"BTCUSDT\" }\n\nThis **backend endpoint** is responsible for:\n\n**Fetching the last 100 15m candles\n\nCalculating:\n\nRSI (14)\n\nMACD (12/26/9)\n\nBollinger Bands (20/2)\n\nSMA + EMA (20)\n\nADX (14)**\n\nThe result is returned as cleaned JSON with **indicator values and signal tags.**"},"typeVersion":1},{"id":"56983511-8084-4fc1-be59-cc223a062b1e","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[620,-1420],"parameters":{"width":1360,"height":2860,"content":"# 🧪 Binance SM 15min Indicators Tool – Documentation\n\nA specialized short-term technical analysis module that calculates and interprets trading indicators using **15-minute candlestick data** for any Binance Spot Market symbol.\n\n---\n\n## 🎯 Purpose\n\nThis workflow is used to:\n\n* Extract recent 15m kline data from Binance\n* Calculate core technical indicators: RSI, MACD, BBANDS, ADX, SMA/EMA\n* Interpret signals using GPT (e.g., “Overbought RSI”, “MACD crossover up”)\n* Return results formatted for Telegram or internal agent use\n\nIt is designed to help the Quant AI Agent and Financial Analyst Tool understand intraday volatility and momentum.\n\n---\n\n## ⚙️ Key Workflow Structure\n\n| Node Name                           | Role                                                             |\n| ----------------------------------- | ---------------------------------------------------------------- |\n| `When Executed by Another Workflow` | Trigger — activated by Financial Analyst or Quant AI Agent       |\n| `Binance SM 15min Indicators Agent` | Main agent that receives input and manages tool orchestration    |\n| `HTTP Request 15m Indicators Tool`  | Calls webhook that calculates indicators using raw kline data    |\n| `Simple Memory`                     | Tracks session context (Telegram ID, symbol)                     |\n| `OpenAI Chat Model`                 | Interprets raw numeric data into human-readable Telegram message |\n\n---\n\n## 📥 Expected Input Format\n\nThis tool receives structured inputs:\n\n```json\n{\n  \"message\": \"BTCUSDT\",\n  \"sessionId\": \"123456789\"\n}\n```\n\n* `message`: Must be a valid Binance trading pair (e.g., ETHUSDT)\n* `sessionId`: Used for maintaining conversational context\n\n---\n\n## 🔧 Indicator Calculation Logic\n\nThe actual computation is done by the **15m Indicator Backend Tool** via HTTP POST:\n\n**Endpoint:**\n\n```\nhttps://treasurium.app.n8n.cloud/webhook/15m-indicators\n```\n\n**Payload:**\n\n```json\n{\n  \"symbol\": \"BTCUSDT\"\n}\n```\n\n**Backend calculates:**\n\n* RSI (14)\n* MACD (12,26,9)\n* Bollinger Bands (20, 2)\n* Simple Moving Average (SMA 20)\n* Exponential Moving Average (EMA 20)\n* ADX (14)\n\nThe response includes the latest values, directional bias, and status tags like `\"Overbought\"`, `\"Cross Up\"`, etc.\n\n---\n\n## 🧠 GPT Analysis Layer\n\nThe raw values are sent to the **gpt-4.1-mini** model, which:\n\n* Translates them into structured insights\n* Highlights key signals like:\n\n  * RSI zones (Overbought/Oversold)\n  * BB squeeze or expansion\n  * MACD crossover points\n  * ADX trend strength\n\n**Sample Output:**\n\n```\n📉 15m Technical Overview for BTCUSDT\n\n• RSI: 72 → Overbought  \n• MACD: Cross Up (Bullish)  \n• BB: Expanding, Price near Upper Band  \n• EMA > SMA → Bullish Momentum  \n• ADX: 34 → Strong Trend\n```\n\n---\n\n## 🧩 Use Case Scenarios\n\n| Scenario                              | Outcome                                                           |\n| ------------------------------------- | ----------------------------------------------------------------- |\n| User asks for “short-term DOGE trend” | Tool returns 15m signals showing volatility or setup pattern      |\n| Part of daily report on BTC           | Confirms intraday strength or exhaustion with momentum indicators |\n| Used by Financial Analyst Tool        | Feeds into broader analysis (1h/4h/1d + price structure)          |\n\n---\n\n## 📦 Deployment Instructions\n\n1. **Import** this workflow into your n8n instance\n2. **Ensure webhook endpoint** (`/15m-indicators`) is active and reachable\n3. **Test trigger** using `Execute Workflow` from Quant AI or Financial Analyst tool\n4. **Connect OpenAI API key** to enable GPT interpretation\n5. Confirm all input symbols are valid Binance pairs\n\n---\n\n## 🔐 Licensing & Support\n\n🔗 **Don Jayamaha – LinkedIn**\n[http://linkedin.com/in/donjayamahajr](http://linkedin.com/in/donjayamahajr)\n\n© 2025 Treasurium Capital Limited Company. All rights reserved.\nUnauthorized reuse, resale, or redistribution of this tool or its design is strictly prohibited. This system and its supporting architecture are protected under U.S. and international copyright law.\n\n"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"f7a27402-e9cd-4c5c-ad16-c3b8edf5a393","connections":{"Simple Memory":{"ai_memory":[[{"node":"Binance SM 15min Indicators Agent","type":"ai_memory","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Binance SM 15min Indicators Agent","type":"ai_languageModel","index":0}]]},"HTTP Request 15m Indicators Tool":{"ai_tool":[[{"node":"Binance SM 15min Indicators Agent","type":"ai_tool","index":0}]]},"When Executed by Another Workflow":{"main":[[{"node":"Binance SM 15min Indicators Agent","type":"main","index":0}]]}}}


name: Automated Video Translation & Distribution with DubLab to Multiple Platforms
author_name: Behram
author_username: behram
categories: []
created_at: 2025-06-07T02:21:31.652Z
updated_at: 2025-06-07T02:21:31.652Z
url: https://n8n.io/workflows/4751
scraped_at: 2025-06-19 22:07:56
description:
  Automated n8n workflow: Receives videos via form, dubs/translates them to the selected languages, and—upon completion—uploads them to multiple social media channels and cloud drives, including Box, Dropbox, and YouTube, Telegram, Postiz (Facebook, Instagram, Tiktok, Reddit etc.)

  Workflows
  Via n8n form select files to dub for desired languages.
   Listen webhook and whenever dubbing finishes upload to desired platforms

  Used Stacks
  DubLab App (ApiKey, Webhook Setup Required)
  Optional (Upload)
   Telegram (Token Required)
   Box (Oauth2 Required)
   Dropbox (Oauth2 Required)
   Youtube (Oauth2 Required)
   Postiz (ApiKey Required)

nodes_used:
  ["n8n-nodes-base.dropbox","n8n-nodes-base.httpRequest","n8n-nodes-base.telegram","n8n-nodes-base.box","n8n-nodes-base.youTube","n8n-nodes-base.code"]

workflow_json:
  {"id":"9ep4J2EilLwr2Qv8","meta":{"instanceId":"cdead8ad85d97beb6ccc10a2ca33665d26529396bcde1290665cf5cc5a67f620","templateCredsSetupCompleted":true},"name":"DubLab App Video Dubbing and Translate","tags":[],"nodes":[{"id":"9eceba49-99b2-4989-a9e3-001d8a445bd6","name":"Init Dubbing","type":"n8n-nodes-base.httpRequest","position":[-420,-80],"parameters":{"url":"https://api.dublab.app/v1/init-dub","method":"POST","options":{},"jsonBody":"={\n    \"dest_lang\": \"{{ $json.language }}\",\n    \"duration\": 30,\n    \"fileType\": \"{{ $json.mimetype }}\",\n    \"name\": \"{{ $json.filename }}\",\n    \"source_lang\": \"auto\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"ApiKey","value":"DUBLAB_API_KEY"}]}},"typeVersion":4.2},{"id":"c2426bfe-cffe-4d75-8262-14f5e844768d","name":"Upload Video","type":"n8n-nodes-base.httpRequest","position":[60,-20],"parameters":{"url":"={{ $json.upload_url }}","method":"PUT","options":{},"sendBody":true,"contentType":"binaryData","sendHeaders":true,"headerParameters":{"parameters":[{"name":"Content-Type","value":"video/mp4"}]},"inputDataFieldName":"=VIDEO_{{ $json.binary_order }}"},"typeVersion":4.2},{"id":"ea97d19e-b54e-46f5-bcb3-385af87353b1","name":"Start Dubbing","type":"n8n-nodes-base.httpRequest","position":[620,-160],"parameters":{"url":"https://api.dublab.app/v1/start-dub","method":"POST","options":{},"jsonBody":"={\n    \"id\": \"{{ $json.id }}\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"ApiKey","value":"DUBLAB_API_KEY"}]}},"typeVersion":4.2},{"id":"f5a09337-eb25-4a5b-a00d-cc5c90a9a8d4","name":"Fetch Projects","type":"n8n-nodes-base.httpRequest","position":[880,-160],"parameters":{"url":"https://api.dublab.app/v1/dubs","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"ApiKey","value":"DUBLAB_API_KEY"}]}},"typeVersion":4.2},{"id":"e564ebac-5af2-4684-9168-dd0123672543","name":"Combine Videos and Languages","type":"n8n-nodes-base.code","position":[-600,-260],"parameters":{"jsCode":"const langMap = {\n  English: \"en\",\n  German: \"de\",\n  Russian: \"ru\",\n  Polish: \"pl\",\n  Spanish: \"es\",\n  Portuguese: \"pt\",\n  French: \"fr\",\n  Italian: 'it',\n  Turkish: \"tr\",\n  Arabic: \"ar\",\n  Dutch: \"nl\"\n};\n\nconst results = [];\nconsole.log($input)\nlet counter = 1\nlet video_key = 0\n$input.all().forEach(item => {\n  const videos = item.json.Video;\n  const languages = item.json[\"Destination Language\"];\n\n  videos.forEach(video => {\n    languages.forEach(lang => {\n      const video_binary = item.json.Video.length === 1 ? \"Video\" : (\"Video_\"+video_key);\n      results.push({\n        json: {\n          ...video,\n          language: langMap[lang] || lang, // fallback to original if not mapped\n          submittedAt: item.json.submittedAt,\n          formMode: item.json.formMode,\n          binary_order: counter\n        },\n        binary: { \n          [\"VIDEO_\" + counter] : item.binary[video_binary]\n        }\n      });\n      counter +=1\n    });\n    video_key +=1\n  });\n});\n\nreturn results;"},"typeVersion":2},{"id":"b831d614-d37d-4915-a3bb-f6c9561abd29","name":"Proxy Videos","type":"n8n-nodes-base.merge","position":[-200,-220],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3},{"id":"780b5045-687d-426a-b683-59b446363760","name":"Proxy Ids","type":"n8n-nodes-base.merge","position":[320,-160],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3},{"id":"0a651887-ba6d-43db-ba6f-c8ff4cb9802d","name":"Webhook","type":"n8n-nodes-base.webhook","position":[-880,460],"webhookId":"e41c5f62-f2de-4df0-ac29-851837a67282","parameters":{"path":"e41c5f62-f2de-4df0-ac29-851837a67282","options":{},"httpMethod":"POST"},"typeVersion":2},{"id":"480388e6-34d6-48b2-971c-f7eb78f4f907","name":"Original Video","type":"n8n-nodes-base.httpRequest","position":[-580,160],"parameters":{"url":"={{ $json.body.original_download_url }}","options":{}},"typeVersion":4.2},{"id":"3028b095-aed6-4b71-8d4d-eb24702fb318","name":"Dubbed Video","type":"n8n-nodes-base.httpRequest","position":[-580,440],"parameters":{"url":"={{ $json.body.dubbed_download_url }}","options":{}},"typeVersion":4.2},{"id":"23abad27-ac2e-4f58-a06d-a7318c22889e","name":"Telegram","type":"n8n-nodes-base.telegram","position":[-260,100],"webhookId":"20a81b1b-f38d-4e08-b301-a9e6ac2b951a","parameters":{"chatId":"145187085","operation":"sendVideo","binaryData":true,"additionalFields":{"fileName":"Dubbed Video"}},"credentials":{"telegramApi":{"id":"oFYckTt5TXjqEbLX","name":"Telegram account"}},"typeVersion":1.2},{"id":"629757fa-9c59-4724-9ede-08b73d62a654","name":"Box","type":"n8n-nodes-base.box","position":[-260,260],"parameters":{"fileName":"={{ Math.random().toString(36).slice(2) }}-dubbed-{{ $json.body.dest_lang }}-{{ $json.body.name }}","binaryData":true},"credentials":{"boxOAuth2Api":{"id":"2AurohQtPXu9w5Ev","name":"Box account"}},"typeVersion":1},{"id":"9e0c84a5-5ddc-4628-a391-5771a5f10fa3","name":"Dropbox","type":"n8n-nodes-base.dropbox","position":[-260,420],"parameters":{"path":"=/dublab-files/{{ Math.random().toString(36).slice(2) }}-dubbed-{{ $json.body.dest_lang }}-{{ $json.body.name }}","binaryData":true,"authentication":"oAuth2"},"credentials":{"dropboxOAuth2Api":{"id":"KaBWvQNCjKDgcxYH","name":"Dropbox account"}},"typeVersion":1},{"id":"0134c66f-d572-4737-90c1-09d835a0478e","name":"YouTube","type":"n8n-nodes-base.youTube","position":[-260,600],"parameters":{"title":"={{ $json.body.name }}","options":{},"resource":"video","operation":"upload","regionCode":"PL"},"credentials":{"youTubeOAuth2Api":{"id":"lDxH7eygurgvuWpp","name":"YouTube account"}},"typeVersion":1},{"id":"e24e81e3-3f1f-4fc6-9d37-d8338b9cb4ca","name":"Postiz","type":"n8n-nodes-base.httpRequest","position":[-260,780],"parameters":{"url":"https://api.postiz.com/api/public/v1/upload","method":"POST","options":{},"sendBody":true,"contentType":"multipart-form-data","sendHeaders":true,"bodyParameters":{"parameters":[{"name":"file","parameterType":"formBinaryData","inputDataFieldName":"data"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"POSTIZ_API_KEY"},{"name":"Proxy-Authorization","value":"PROXY_AUTH"}]}},"typeVersion":4.2},{"id":"bab5f441-0d29-47d5-bfed-20fd99bf1489","name":"Start","type":"n8n-nodes-base.formTrigger","position":[-860,-300],"webhookId":"85d519f9-3df6-4377-833c-4355a34ebbab","parameters":{"options":{},"formTitle":"Dub Videos","formFields":{"values":[{"fieldType":"file","fieldLabel":"Video","requiredField":true,"acceptFileTypes":".mp4"},{"fieldType":"dropdown","fieldLabel":"Destination Language","multiselect":true,"fieldOptions":{"values":[{"option":"English"},{"option":"German"},{"option":"Russian"},{"option":"Polish"},{"option":"Spanish"},{"option":"Portuguese"},{"option":"Italian"},{"option":"Arabic"},{"option":"French"},{"option":"Turkish"},{"option":"Dutch"}]},"requiredField":true}]}},"typeVersion":2.2},{"id":"52f11162-27df-4f69-992d-880919d5b2c4","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1640,-280],"parameters":{"width":600,"height":360,"content":"## Dub Videos And Share on Social Media\n\n### Workflows\n----------\n 1. Via n8n form select files to dub for desired languages.\n 2. Listen webhook and whenever dubbing finishes upload to desired platforms\n\n### Used Stacks\n-------------\n - DubLab App (ApiKey, Webhook Setup Required)\n - Telegram (Token Required)\n - Box (Oauth2 Required)\n - Dropbox (Oauth2 Required)\n - Youtube (Oauth2 Required)\n - Postiz (ApiKey Required)"},"typeVersion":1},{"id":"1554519e-f8c1-4735-b513-6e6eaf979c30","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1640,460],"parameters":{"width":600,"height":180,"content":"## How to Use\n\n - Obtain Api Key from https://dublab.app, set as variable or just update on nodes.\n - Grab Webhook Url and add to DubLab App\n - Setup upload providers (Telegram, Box, Dropbox, YouTube, Postiz etc.)"},"typeVersion":1},{"id":"1bd8ed8e-9d77-4b6e-8478-2aba1e7de564","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[0,740],"parameters":{"width":600,"height":140,"content":"### Postiz\n - https://postiz.com/\n - Pretty neat tool which supports many social media platforms\n - Supports cloud and self-hosted version\n - Via API post can be shared over below platforms (Facebook, Instagram, Threads, Tiktok, Reddit etc.)"},"typeVersion":1}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"00fe9678-8e82-474a-8038-81a38166fa34","connections":{"Start":{"main":[[{"node":"Combine Videos and Languages","type":"main","index":0}]]},"Webhook":{"main":[[{"node":"Dubbed Video","type":"main","index":0},{"node":"Original Video","type":"main","index":0}]]},"Proxy Ids":{"main":[[{"node":"Start Dubbing","type":"main","index":0}]]},"Dubbed Video":{"main":[[{"node":"Telegram","type":"main","index":0},{"node":"Box","type":"main","index":0},{"node":"Dropbox","type":"main","index":0},{"node":"YouTube","type":"main","index":0},{"node":"Postiz","type":"main","index":0}]]},"Init Dubbing":{"main":[[{"node":"Proxy Videos","type":"main","index":1}]]},"Proxy Videos":{"main":[[{"node":"Upload Video","type":"main","index":0},{"node":"Proxy Ids","type":"main","index":0}]]},"Upload Video":{"main":[[{"node":"Proxy Ids","type":"main","index":1}]]},"Start Dubbing":{"main":[[{"node":"Fetch Projects","type":"main","index":0}]]},"Fetch Projects":{"main":[[]]},"Original Video":{"main":[[{"node":"Telegram","type":"main","index":0}]]},"Combine Videos and Languages":{"main":[[{"node":"Init Dubbing","type":"main","index":0},{"node":"Proxy Videos","type":"main","index":0}]]}}}


name: Chat with PDF / MD / Text Files using GraphRAG (no vector store needed)
author_name: InfraNodus
author_username: infranodus
categories: []
created_at: 2025-06-07T09:42:46.538Z
updated_at: 2025-06-07T09:42:46.538Z
url: https://n8n.io/workflows/4755
scraped_at: 2025-06-19 22:07:56
description:
  Set up a chat with your documents without the complex vector store setup.

  This templates helps you 
  ingest** your PDF / text / MD documents into a knowledge graph
  use the graph as the knowledge base for your AI chatbots (and other workflows)
  visualize the main topics* and *gaps** in your documents (good for observability and research)


  The knowledge base is provided using the InfraNodus GraphRAG with the knowledge graphs  offering high-quality responses without the need to set up complex RAG vector store workflows.

  The advantages of using GraphRAG instead of the standard vector stores for knowledge are:

  Easy and quick to set up and update** — no complex data import workflows needed
  A knowledge graph offers a holistic and interactive view of your knowledge base (accessible via our API or a web interface — also shareable)
  Better retrieval of relations** between the document chunks = higher quality responses

  How it works
  This template uses the InfraNodus knowledge graph as a knowledge base for your n8n AI agent node.

  The knowledge graph contains the documents you can upload using this template from your Google Drive.

  When the user asks a question via the chat interface, the agent forwards this question to the InfraNodus knowledge graph, retrieves a response, a summary, and a list of matching statements (based advanced Graph RAG), then delivers the final response back the user.

  Here's a description step by step:

  Step 1: Upload your documents
  Put the PDF / text / MD files you want to chat with into a folder on your Google drive
  Authorize access to that folder using the Google drive node in the template. 
  Add the InfraNodus API key to the InfraNodus Save to Graph HTTP node 
  Optional: change the name of the graph you want to save the data to in the InfraNodus HTTP node (in the name field of the HTTP post request).
  Run the workflow to ingest all the files and save them into the graph
  Optional: check the link provided in the Step 1 workflow description to see the visualization of your knowledge base. It will look something like that:



  Note:* you can replace the PDF to Text convertor node with a better quality *PDF convertor* from ConvertAPI which respects the original file layout and doesn't split text into small chunks


  Step 2: Chat with your documents

  Deactive the trigger in the Step 1
  Activate the chat trigger in the Step 2
  Add your InfraNodus API credentials to Knowledge Base GraphRAG InfraNodus node
  Optional: change the graph name in the Knowledge Base node to match the name you provided in the step 1 above
  Run the chat and ask the question
  Watch the magic 

  How to use

  You need an InfraNodus GraphRAG API account and key to use this workflow. 

  Create an InfraNodus account
  Get the API key at https://infranodus.com/api-access and create a Bearer authorization key for the InfraNodus HTTP nodes.

  Requirements

  An InfraNodus account and API key
  An OpenAI (or any other LLM) API key
  A Google Drive OAuth access (follow the n8n instructions)
  Optional: ConvertAPI API key for better quality PDF conversion

  Customizing this workflow

  You can customize this workflow by adding several experts to your AI agent. 

  Check out the complete guide at https://support.noduslabs.com/hc/en-us/articles/20174217658396-Using-InfraNodus-Knowledge-Graphs-as-Experts-for-AI-Chatbot-Agents-in-n8n

  Also check out the video tutorial with a demo:



  For support and feedback, please, contact us at https://support.noduslabs.com

  To learn more about InfraNodus: https://infranodus.com

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.googleDrive","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi","@n8n/n8n-nodes-langchain.memoryBufferWindow"]

workflow_json:
  {"id":"EQVZKxcCDzTNXLRp","meta":{"instanceId":"2a26454b0172ffcb8d70ba77c235b1209f92cd71bf06c79ba609c7173b416d68","templateCredsSetupCompleted":true},"name":"Chat with PDF / MD / Text Files using GraphRAG (no vector store needed)","tags":[{"id":"66wgFoDi9Xjl74M3","name":"Support","createdAt":"2025-05-21T17:06:32.355Z","updatedAt":"2025-05-21T17:06:32.355Z"},{"id":"kRM0hQV2zw7VxrON","name":"Research","createdAt":"2025-05-21T19:44:19.136Z","updatedAt":"2025-05-21T19:44:19.136Z"},{"id":"sJk9cUvmMU8FkJXv","name":"AI","createdAt":"2025-05-20T13:16:15.636Z","updatedAt":"2025-05-20T13:16:15.636Z"}],"nodes":[{"id":"011910a9-c2a0-49eb-b1eb-8043e0c2accc","name":"Search Google Drive","type":"n8n-nodes-base.googleDrive","position":[-220,-120],"parameters":{"filter":{"folderId":{"__rl":true,"mode":"list","value":"13tqp0SaI_v4jG1CFLAZo96isx-UBno4v","cachedResultUrl":"https://drive.google.com/drive/folders/13tqp0SaI_v4jG1CFLAZo96isx-UBno4v","cachedResultName":"GraphRAG"}},"options":{},"resource":"fileFolder","returnAll":true,"queryString":"*"},"credentials":{"googleDriveOAuth2Api":{"id":"oz9iNMxcuQ2pxr1e","name":"Google Drive account"}},"typeVersion":3},{"id":"22872ac5-14e4-4ea7-b792-30e19a02cb88","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[260,-120],"parameters":{"options":{}},"typeVersion":3},{"id":"6456b7ac-f936-425a-a0ac-62fe118e985a","name":"Retrieve File","type":"n8n-nodes-base.googleDrive","position":[500,-80],"parameters":{"fileId":{"__rl":true,"mode":"id","value":"={{ $json.id }}"},"options":{},"operation":"download"},"credentials":{"googleDriveOAuth2Api":{"id":"oz9iNMxcuQ2pxr1e","name":"Google Drive account"}},"typeVersion":3},{"id":"8c1f2da9-fff4-457d-bc2e-7c84de3500b3","name":"Switch","type":"n8n-nodes-base.switch","position":[740,-20],"parameters":{"rules":{"values":[{"outputKey":"pdf","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"7b4e792b-ab6d-4b9b-88a1-d8e51bea6853","operator":{"type":"string","operation":"equals"},"leftValue":"={{$binary[\"data\"].mimeType}}","rightValue":"application/pdf"}]},"renameOutput":true},{"outputKey":"text","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"09b7d7c5-5353-4719-b4e2-072e4da39948","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{$binary[\"data\"].mimeType}}","rightValue":"text/plain"}]},"renameOutput":true},{"outputKey":"md","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cb2e6726-97d8-4541-8383-deafff9b18e6","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{$binary[\"data\"].mimeType}}","rightValue":"text/markdown"}]},"renameOutput":true},{"outputKey":"json","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"d2763a45-a592-47c8-868f-59dfcd17a71c","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{$binary[\"data\"].mimeType}}","rightValue":"application/json"}]},"renameOutput":true},{"outputKey":"docs","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"0d9b561f-89c5-479e-a4e2-1f5f05fa8417","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{$binary[\"data\"].mimeType}}","rightValue":""}]},"renameOutput":true},{"outputKey":"csv","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6b19deed-5d00-4796-bb9d-b4d87564a751","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{$binary[\"data\"].mimeType}}","rightValue":"csv"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2},{"id":"fe133ad7-bd7a-43e2-91a7-4b3dd2652490","name":"Extract from PDF","type":"n8n-nodes-base.extractFromFile","position":[1020,-240],"parameters":{"options":{},"operation":"pdf"},"typeVersion":1},{"id":"49f89141-a8ea-46c6-888d-cf9dafcc7c2a","name":"Extract from Text File","type":"n8n-nodes-base.extractFromFile","position":[1020,-60],"parameters":{"options":{},"operation":"text"},"typeVersion":1},{"id":"a47d8f07-917e-44ed-a69e-5d6085981d36","name":"Extract from Markdown","type":"n8n-nodes-base.extractFromFile","position":[1020,140],"parameters":{"options":{},"operation":"text"},"typeVersion":1},{"id":"a2298650-5408-45f8-accf-292ac669002a","name":"InfraNodus Save to Graph","type":"n8n-nodes-base.httpRequest","position":[1480,200],"parameters":{"url":"https://infranodus.com/api/v1/graphAndStatements?doNotSave=false&includeGraph=false&includeGraphSummary=true&includeGraph=false","method":"POST","options":{},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"name","value":"graphrag_from_google_drive"},{"name":"text","value":"={{ $json.data }}"},{"name":"=categories","value":"=[filename: {{ $('Switch').item.json.name }}]"},{"name":"contextSettings","value":"={{{ \"squareBracketsProcessing\":\"IGNORE_BRACKETS\"} }}"}]},"genericAuthType":"httpBearerAuth"},"credentials":{"httpBearerAuth":{"id":"FPDx6PA5CtzGEIQc","name":"InfraNodus DeeMeeTree API Key"}},"typeVersion":4.2},{"id":"bb06d60a-01c7-4a1e-bc7a-901e1f7f175d","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-560,-480],"parameters":{"color":4,"width":2200,"height":980,"content":"# Step 1: Upload Your PDF / MD / Text Files to InfraNodus GraphRAG\n\n## Copy your PDF files to a Google drive and then upload them to your InfraNodus knowledge graph\n\n### InfraNodus visualizes your text as a knowledge graph, showing the main topics and ideas inside. It also provides API access to the knowledge graph, so you can use it as a knowledge base instead of the complex vector store setup\n\n1. You need an [InfraNodus](https://infranodus.com) account to use this workflow. Get the API key at [https://infranodus.com/api-access](https://infranodus.com/api-access)\n2. Also, specify the **name of the graph** you want to save the files to in the InfraNodus HTTP node\n3. When the workflow finishes running, you can get a visualization of your knowledge base at [https://infranodus.com/your_user_name/your_graph_name/edit](https://infranodus.com/your_user_name/your_graph_name/edit)\n\n\n"},"typeVersion":1},{"id":"38707a4d-b397-43e7-b55c-da18a00bb480","name":"Map PDF to Text","type":"n8n-nodes-base.set","position":[1320,-100],"parameters":{"options":{},"assignments":{"assignments":[{"id":"fd160009-0b92-46fc-9e34-a1283b810e91","name":"data","type":"string","value":"={{ $json.text }}"}]}},"typeVersion":3.4},{"id":"49426e56-7d6c-4dc0-a279-348dea59cca2","name":"Convert File to PDF","type":"n8n-nodes-base.httpRequest","disabled":true,"position":[1720,200],"parameters":{"url":"https://v2.convertapi.com/convert/pdf/to/txt","method":"POST","options":{"response":{"response":{"responseFormat":"text"}}},"sendBody":true,"contentType":"multipart-form-data","sendHeaders":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"file","parameterType":"formBinaryData","inputDataFieldName":"data"}]},"genericAuthType":"httpBearerAuth","headerParameters":{"parameters":[{"name":"Accept","value":"application/octet-stream"}]}},"credentials":{"httpBearerAuth":{"id":"mDxLoJUWSmuTJsAC","name":"ConvertAPI"}},"notesInFlow":true,"typeVersion":4.2},{"id":"5d21b250-7b0f-4925-a858-5aa6badf5700","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1680,-340],"parameters":{"color":2,"width":360,"height":840,"content":"## Optional: Better PDF Conversion\n\n### Standard Map PDF to Text node will split your PDF files into very short chunks, which deteriorates retrieval. \n\nUse can use [ConvertAPI](https://convertapi.com?ref=4l54n) which is a high-quality convertor that will respect the layout of the original document and not cut the paragraphs into short chunks. \n\nHere is an HTTP node that makes a request to their API to convert the PDF into text. If you have a ConvertAPI account, you can replace the \"Map PDF to Text\" node in step 4 with this node. \n"},"typeVersion":1},{"id":"ceda9ea4-963b-4ffb-a741-6e7eb3fc7411","name":"When chat message received","type":"@n8n/n8n-nodes-langchain.chatTrigger","disabled":true,"position":[-520,840],"webhookId":"a2cfd3b0-aaa4-4003-940d-e520e64830c6","parameters":{"public":true,"options":{"title":"Talk to PDFs"},"initialMessages":"=Ask any question about the PDFs or write `/question` to generate an interesting question to discuss."},"typeVersion":1.1},{"id":"d78cf21e-753b-44d3-a2b4-493f85aa5129","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-240,840],"parameters":{"options":{"systemMessage":"You provide information about the topic of user's interest. Always use the knowledge base attached to get the final response. "}},"typeVersion":1.9},{"id":"02497c8b-89d6-4440-bc4d-d3906b9c4872","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-420,1100],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"07wFa8Wa4mMRCHAj","name":"OpenAi account 2"}},"typeVersion":1.2},{"id":"6d77fb59-fb03-4d22-ac40-4cf9bde25909","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[-260,1100],"parameters":{},"typeVersion":1.3},{"id":"978c8309-380d-4fc8-b238-e0d0148b77b9","name":"Knowledge Base GraphRAG","type":"n8n-nodes-base.httpRequestTool","position":[100,1060],"parameters":{"url":"https://infranodus.com/api/v1/graphAndAdvice?doNotSave=true&addStats=true&optimize=develop&includeStatements=true&includeGraphSummary=true&includeGraph=false","method":"POST","options":{},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"name","value":"graphrag_from_google_drive"},{"name":"requestMode","value":"response"},{"name":"prompt","value":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters2_Value', `User query to send to the expert`, 'string') }}"},{"name":"aiTopics","value":"true"}]},"genericAuthType":"httpBearerAuth","toolDescription":"You contain knowledge on the topic of user's interst"},"credentials":{"httpBearerAuth":{"id":"6lSuuSDajZrvI2GM","name":"InfraNodus API Key"}},"typeVersion":4.2},{"id":"b005f83d-3d4a-42c8-b70a-63e267747fcd","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-560,540],"parameters":{"width":2200,"height":700,"content":"# Step 2: Chat with your PDF / MD / Text Files using [InfraNodus](https://infranodus.com) Graph RAG Knowledge Base\n\n## InfraNodus is used instead of the vector store. It combines traditional RAG and GraphRAG, providing a better topical overview of your knowledge base and having a better understanding of relations between entities in your documents.\n\n1. Deactivate the trigger node in Step 1 and activate the trigger Chat node here\n2. Provide your API key at [https://infranodus.com/api-access](https://infranodus.com/api-access) to the HTTP agent tool\n3. Specify the same **name of the graph** as in the Step 1, so you query the graph where saved the files. \n4. If you connect several knowledge bases, make sure to describe them well, so the agent knows what to query. Get the description from the InfraNodus Graph > Project Notes > RAG enhancement"},"typeVersion":1},{"id":"6a6ad150-670d-45d5-a69e-0bafaf8f2ac4","name":"Click ‘Test workflow’ to ingest the documents","type":"n8n-nodes-base.manualTrigger","position":[-500,-120],"parameters":{},"typeVersion":1},{"id":"0a148a3f-e898-4f83-9ebb-82da7f3f4633","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-540,100],"parameters":{"width":680,"height":380,"content":"## [InfraNodus](https://infranodus.com) Knowledege Graph Example\n\n![InfraNodus knowledge graph](https://infranodus.com/images/front/infranodus-overview.jpg)"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"90ea1bad-6d21-4f20-81b4-0ba48cc7e7fa","connections":{"Switch":{"main":[[{"node":"Extract from PDF","type":"main","index":0}],[{"node":"Extract from Text File","type":"main","index":0}],[{"node":"Extract from Markdown","type":"main","index":0}],[],[]]},"Retrieve File":{"main":[[{"node":"Switch","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"Retrieve File","type":"main","index":0}]]},"Map PDF to Text":{"main":[[{"node":"InfraNodus Save to Graph","type":"main","index":0}]]},"Extract from PDF":{"main":[[{"node":"Map PDF to Text","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Search Google Drive":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Extract from Markdown":{"main":[[{"node":"InfraNodus Save to Graph","type":"main","index":0}]]},"Extract from Text File":{"main":[[{"node":"InfraNodus Save to Graph","type":"main","index":0}]]},"Knowledge Base GraphRAG":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"InfraNodus Save to Graph":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"When chat message received":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Click ‘Test workflow’ to ingest the documents":{"main":[[{"node":"Search Google Drive","type":"main","index":0}]]}}}


name: Extract Invoice Data from PDFs with AI - Google Sheets Email Alerts
author_name: Aashit Sharma
author_username: aashitsharma
categories: []
created_at: 2025-06-07T17:49:24.951Z
updated_at: 2025-06-07T17:49:24.951Z
url: https://n8n.io/workflows/4763
scraped_at: 2025-06-19 22:07:56
description:
  Built by Setidure Technologies
  This smart n8n automation extracts invoice details from PDF files uploaded to Google Drive using AI, logs them to a Google Sheet, and notifies the billing team via email — all without manual intervention.

  ⚠️ Note: This workflow requires a self-hosted n8n instance with LangChain, LLM, and Google integrations configured.

  📦 What This Workflow Does
  Monitors a Google Drive folder for new invoice uploads

  Extracts text and parses key invoice details using LLM via LangChain

  Logs extracted data into a Google Sheet (Invoice Database)

  Generates a summary email using GPT-4O-MINI (Greenie)

  Sends the email to the billing team via Gmail

  ✅ Prerequisites
  A Google Drive folder to monitor for PDF uploads

  A Google Sheet named Invoice Database with the following columns:

  Invoice Number, Client Name, Client Email, Client Address, Client Phone, Invoice Date, Due Date, Total Amount

  Service account or OAuth credentials for:

  Google Drive

  Google Sheets

  Gmail

  LangChain + Ollama integration for LLM responses

  🔧 Step-by-Step Setup Instructions
  Clone this workflow into your self-hosted n8n instance

  Set up credentials:

  Google Drive (for folder trigger)

  Google Sheets (for data logging)

  Gmail (for sending email)

  Ollama (local LLM) or any connected LangChain provider

  Configure the trigger node to watch your specific Invoice Uploads folder

  Update the Google Sheet node with your Invoice Database sheet URL and column mapping

  Test with a sample invoice to validate the AI extraction and email generation

  🔄 Workflow Steps
  Step 1: Trigger on New File in Google Drive
  Node Name: Watch for New Invoices
  Type: Google Drive Trigger

  Event: fileCreated

  Triggers when a new PDF file is uploaded to a designated folder

  Step 2: Download the Uploaded File
  Node Name: Download Invoice PDF
  Type: Download Binary

  Downloads the invoice file from Google Drive

  Step 3: Extract Raw Text from PDF
  Node Name: Extract PDF Text
  Type: Extract from File

  Extracts unstructured text content from the downloaded PDF

  Step 4: Parse Invoice Fields Using AI
  Node Name: Parse Invoice Data with LLM
  Type: LangChain Agent

  LLM is prompted to extract:

  Invoice Number

  Client Name, Email, Address, Phone

  Invoice Date, Due Date, Total Amount

  Fields not found are skipped

  Step 5: Log Extracted Data to Google Sheet
  Node Name: Log to Invoice Database
  Type: Google Sheets

  Appends a new row with the extracted fields to the Invoice Database spreadsheet

  Step 6: Create Email Notification via LLM
  Node Name: Generate Billing Email Summary
  Type: LangChain Agent (GPT-4O-MINI)

  Prompt instructs AI to:

  Act as “Greenie” from Green Grass Corp

  Inform billing that a new invoice was processed

  Confirm logging into the Invoice Database

  Step 7: Send the Email to Billing Team
  Node Name: Email Billing Team
  Type: Gmail Send

  To: billing@example.com

  Subject and body injected from LLM output

  Step 8: End Workflow Gracefully
  Node Name: End
  Type: No Operation

  Used to cleanly terminate the flow

  🧠 Example Output (Email)

  Subject: New Invoice Logged – Client: ABC Corp

  Hi Billing Team,

  A new invoice has been received and processed automatically. The following details have been extracted and logged into the Invoice Database:

  Invoice Number: INV-1024  
  Client: ABC Corp  
  Amount: $1,450  
  Due Date: July 15, 2025  

  Please review the Invoice Database for full details.

  Regards,  
  Greenie  
  Green Grass Corp

nodes_used:
  ["n8n-nodes-base.googleSheets","n8n-nodes-base.googleDrive","n8n-nodes-base.gmail","@n8n/n8n-nodes-langchain.lmOllama","@n8n/n8n-nodes-langchain.openAi","@n8n/n8n-nodes-langchain.informationExtractor","@n8n/n8n-nodes-langchain.vectorStorePGVector"]

workflow_json:
  {"meta":{"instanceId":"473ff4054f1a6c3ed6f17a2b4a2e55676fe5b921cceb87b2256e6c416c158559"},"nodes":[{"id":"76600f2a-f77c-4c95-8df6-e4d44a2d9e9e","name":"Information Extractor","type":"@n8n/n8n-nodes-langchain.informationExtractor","position":[1420,40],"parameters":{},"typeVersion":1},{"id":"c96acdd1-a755-4700-86b5-c29e8cb5d32d","name":"Send Email","type":"n8n-nodes-base.gmail","position":[1360,420],"webhookId":"da2aa524-25e5-47e2-bd1a-fe7a97edf8a7","parameters":{},"typeVersion":2.1},{"id":"ef869446-c764-4957-8c27-4f51410c80c9","name":"No Operation, do nothing","type":"n8n-nodes-base.noOp","position":[1580,440],"parameters":{},"typeVersion":1},{"id":"8e257d7c-bd82-44c4-901f-1b35d6ed1033","name":"Ollama Model","type":"@n8n/n8n-nodes-langchain.lmOllama","position":[1440,300],"parameters":{},"typeVersion":1},{"id":"2e5babac-d216-48d5-97c5-7b528078a52a","name":"Postgres PGVector Store","type":"@n8n/n8n-nodes-langchain.vectorStorePGVector","position":[1380,680],"parameters":{},"typeVersion":1.2},{"id":"0348c94a-d362-4c1f-8679-3d4e0a42ddfb","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-60,-80],"parameters":{"content":""},"typeVersion":1},{"id":"fc19ba2d-a2ee-424b-a2f8-49690f1a2f74","name":"Google Drive Trigger - file creation","type":"n8n-nodes-base.googleDriveTrigger","position":[0,0],"parameters":{},"typeVersion":1},{"id":"f081fb04-9a51-42f5-8664-9fd866de9cf1","name":"Download Binary - file","type":"n8n-nodes-base.googleDrive","position":[220,0],"parameters":{},"typeVersion":3},{"id":"470c9772-00cf-420e-876f-7efad7274ca9","name":"Extract from PDF","type":"n8n-nodes-base.extractFromFile","position":[800,20],"parameters":{},"typeVersion":1},{"id":"1cc7eae0-ccab-4c8a-a469-b27a7057d22a","name":"Create Email Agent","type":"@n8n/n8n-nodes-langchain.openAi","position":[1020,420],"parameters":{},"typeVersion":1.8},{"id":"42588358-40ba-46f7-bb97-38c67c676901","name":"Update DB - spreadsheet","type":"n8n-nodes-base.googleSheets","position":[1100,600],"parameters":{},"typeVersion":4.5}],"pinData":{},"connections":{"Send Email":{"main":[[{"node":"No Operation, do nothing","type":"main","index":0}]]},"Ollama Model":{"ai_languageModel":[[{"node":"Information Extractor","type":"ai_languageModel","index":0}]]},"Extract from PDF":{"main":[[{"node":"Information Extractor","type":"main","index":0}]]},"Create Email Agent":{"main":[[{"node":"Send Email","type":"main","index":0}]]},"Information Extractor":{"main":[[{"node":"Update DB - spreadsheet","type":"main","index":0}]]},"Download Binary - file":{"main":[[{"node":"Extract from PDF","type":"main","index":0},{"node":"Update DB - spreadsheet","type":"main","index":0}]]},"Postgres PGVector Store":{"ai_tool":[[{"node":"Create Email Agent","type":"ai_tool","index":0}]]},"Update DB - spreadsheet":{"main":[[{"node":"Create Email Agent","type":"main","index":0}]]},"Google Drive Trigger - file creation":{"main":[[{"node":"Download Binary - file","type":"main","index":0}]]}}}


name: Automate LinkedIn Posts with Claude AI, DALL-E Images & Google Sheets Approval
author_name: Usman Liaqat
author_username: usmanliaqat
categories: []
created_at: 2025-06-07T18:34:34.273Z
updated_at: 2025-06-07T18:34:34.273Z
url: https://n8n.io/workflows/4766
scraped_at: 2025-06-19 22:07:56
description:
  How it works

  This workflow automates your entire LinkedIn content strategy, from ideation to publishing.

  Daily Idea Generation:** Every day, the workflow uses an advanced AI agent (Anthropic's Claude model) to generate a new, viral-optimized LinkedIn post idea, complete with a title, full text, and a detailed image description. It analyzes your past posts from a Google Sheet to ensure content is fresh and aligns with one of your four content pillars: timeless principles, case studies, growth hacks, or controversial ads.
  AI Image Creation:** It then uses OpenAI's DALL-E to create a custom, high-quality image based on the generated description and a style reference image you provide, ensuring brand consistency.
  Review & Approval Workflow:** The generated post and its accompanying image are automatically saved as a new row in a Google Sheet, marked with a "review" status. This gives you full editorial control.
  Automated Publishing:** Once you approve a post by changing its status to "ready" in the Google Sheet, a separate part of the workflow picks it up and automatically publishes it to your LinkedIn profile at a scheduled time.
  Status Tracking:** After publishing, the workflow updates the status in your Google Sheet to "posted," so you always have a clear overview of your content pipeline.

  Set up steps

  This workflow integrates several services. Follow these steps to get it running:

  Copy the Google Sheet: Make a copy of the AI Posts Content Machine Google Sheet template and select your copy in the Get Past Ideas, Save Post, Get Ready Posts, and Update Status nodes.
  Set Up Credentials: You will need to create and add API credentials for the following services within the corresponding n8n nodes:
      Google Sheets & Google Drive: Create a Google credential.
      Anthropic: Add your API key in the Anthropic Chat Model node.
      OpenAI: Add your API key as a Header Auth credential in the OpenAI Image node.
      Perplexity AI: Add your API key as a Header Auth credential inside the Perplexity Research sub-workflow.
      LinkedIn: Create a LinkedIn credential.
  Customize Your Content:
      In the Idea Generator node, adjust the system prompt to reflect your specific audience, topics, and content style.
      Create a folder in Google Drive for your post images. Add a reference image to this folder that defines your desired visual style.
      Paste the shareable link to your style reference image into the Image Style node.
  Activate the Workflow: Enable the workflow to start the automated content creation and publishing process.

nodes_used:
  ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","n8n-nodes-base.googleDrive","n8n-nodes-base.facebookGraphApi","n8n-nodes-base.twitter","n8n-nodes-base.linkedIn","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatAnthropic","@n8n/n8n-nodes-langchain.outputParserStructured","@n8n/n8n-nodes-langchain.toolWorkflow"]

workflow_json:
  {"meta":{"instanceId":"4e229722e6c43a4914d2d66178b48335adf795d73afbee5b0ea0c52938ef4d8e"},"nodes":[{"id":"2d694354-6ab0-42fd-abbf-d3085813fd49","name":"Idea Generator","type":"@n8n/n8n-nodes-langchain.agent","position":[1100,200],"parameters":{"text":"=Generate materials for my next LinkedIn post.\n\nHere are the ideas that we've already used: {{ $json.mergedText }}.\n\nCome up with a new, super valuable and concrete post, and prepare all the needed materials for it:\n- idea\n- title\n- text\n- image description\n\nUse the least used bucket of content (out of my 4 buckets).\n\nBegin:","options":{"systemMessage":"=ROLE: You're an expert in viral LinkedIn posts content creation with 10 years of experience. You've created viral posts that have gotten 10 billion views in total.\n\nOBJECTIVE: Your goal is to write a 1) name, 2) idea, 3) title, 4) text, and 5) image description for my next LinkedIn Post. They should be super valuable to my audience.\n\nSCENARIO: I run a LinkedIn blog about marketing and sales. My audience is marketers, salespeople, founders, B2B business owners, B2C business owners, brands. My goal is to help them build better brands with valuable, and practical content. \nI have 4 main buckets of content on my page:\n1) timeless principles. ideas for this videos are taken from timeless books: Influnece and Pre-Suasion by Robert Cialdini, $100M Leads and $100M Offers by Alex Hormozi, Ogilvy on Advertising.\n2) case studies. for instance a case study breaking down on of the famous ads from the latest SuperBowl.\n3) growth hacks. latest trends on how to grow with a proof. for instance an SEO tactic that became known in the last year.\n4) contraversial ads. breakdowns of interesting and famous contraversial ads.\nEvery video that I post is focused solely on one of the content buckets. That makes my content more diverse and covering more cool topics.\n\nEXPECTATION: Write me 1) name (short name for the post, less than 50 characters), 2) idea (detailed description in 3 sentences max), 3) title (the first sentence of the post, less than 80 characters, it should be ultra hooking), 4) full text of the post, 5) image description (the image is the first thing people will look at, so make it ultra hooking; write the image description to be super clear and ultra simple, so the AI image generator will precisely know that to generate; the image should be minimalistic) for a 200-300 words LinkedIn post from one of the content buckets described above.\nMake sure to have great: hook, retention, and reward at the end.\nThe post should clearly lead to a marketing/sales insight.\nYour output should be in the JSON format.\nIdea should always start with a category: Timeless principle, Case study, Growth hack, Contraversial ad.\nExample output:\n{\"name\": \"The Power of Social Proof\",\n\"idea\": \"Timeless principle: Social proof is a psychological phenomenon that influences decision-making by showing how others' actions affect our own choices. It works universally across physical spaces and digital platforms. Marketers who strategically implement social proof elements can significantly increase conversion rates and customer trust.\",\n\"title\": \"Why we can't resist looking up when others do (and what it means for sales)\",\n\"text\": \"Why we can't resist looking up when others do (and what it means for sales)\\n\\nA psychology experiment once placed actors on a street corner to stare upward at nothing.\\n\\nWithin minutes, dozens of passersby stopped to look up too.\\n\\nThis is social proof in action—our natural tendency to follow others when uncertain.\\n\\nIn marketing, this same principle powers your conversion rates.\\n\\nNotice how differently you perceive:\\n\\n• A product with 5,000+ five-star reviews\\n• A service used by \\\"67% of Fortune 500 companies\\\"\\n• A landing page showing \\\"10,000+ satisfied customers\\\"\\n\\nCompared to identical offerings without these trust signals.\\n\\nBut here's what many marketers miss: social proof must feel authentic to work.\\n\\nGeneric testimonials or inflated numbers create skepticism, not confidence.\\n\\nThe most effective social proof strategies I've implemented for clients:\\n\\n1. Specificity: \\\"503 marketing agencies use our platform daily\\\" beats \\\"Hundreds of satisfied customers\\\"\\n\\n2. Relevance: Highlight testimonials from users who match your prospect's profile\\n\\n3. Recency: Fresh testimonials outperform older ones by 35% in our tests\\n\\n4. Visibility: Place social proof elements near decision points (like \\\"Buy Now\\\" buttons)\\n\\nImplement these four tactics, and you'll see the same psychological force that makes us look up at the sky work to increase your conversion rates.\\n\\nWhat's your most effective social proof strategy? Share below.\",\n\"image\": \"Simple black background with grainy texture. Six basic stick figure silhouettes in white - five figures on the left all looking up, one figure on the right just starting to look up. Bold text in Inter Bold font at the center reads \\\"FOLLOW THE CROWD\\\" with \\\"FOLLOW\\\" in white and \\\"CROWD\\\" in light green (#cff150). No other elements or details. Clean, minimal design with plenty of empty space.\"}\nNOTES:\n- THE BACKGROUND OF THE IMAGE SHOULD ALWAYS BE BLACK AND DARK GRAINY FILM\nTo accomplish your task you can use the web search."},"promptType":"define","hasOutputParser":true},"retryOnFail":true,"typeVersion":1.7},{"id":"991032b8-6839-4c5a-9df9-6e8e7a924c9e","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[480,100],"parameters":{"color":6,"width":980,"height":480,"content":"# Generate a New Post Idea and All Materials"},"typeVersion":1},{"id":"40294f91-5002-44a2-91e7-5bee74c30698","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[1480,100],"parameters":{"color":6,"width":1140,"height":480,"content":"# Generate an Image and Save"},"typeVersion":1},{"id":"b3e2d972-f763-4fa5-88eb-bbb1afa7fc2d","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1300,400],"parameters":{"jsonSchemaExample":"{\n\t\"name\": \"name\",\n    \"idea\": \"idea\",\n    \"title\": \"title\",\n    \"text\": \"text\",\n    \"image\": \"image\"\n}"},"typeVersion":1.2},{"id":"77a4755a-0d64-4bce-b8a1-90b649d21039","name":"Anthropic Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[960,400],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-3-7-sonnet-20250219","cachedResultName":"Claude 3.7 Sonnet"},"options":{}},"typeVersion":1.3},{"id":"431ac158-ed33-4fdc-ae28-9a8fe1829f7e","name":"Perplexity Research","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[1120,400],"parameters":{"name":"web_search","workflowId":{"__rl":true,"mode":"list","value":"eALld0YaOZuUCU5q","cachedResultName":"Perplexity Research"},"description":"Call this tool to make a web search query using Perplexity AI. It will automatically look at multiple relevant websites and combine all the valuable information in one clean response.","workflowInputs":{"value":{},"schema":[{"id":"query","type":"string","display":true,"removed":false,"required":false,"displayName":"query","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["query"],"attemptToConvertTypes":false,"convertFieldsToString":false}},"typeVersion":2.1},{"id":"9098aa0e-e707-4825-a848-50f8a3ad767d","name":"Convert to File","type":"n8n-nodes-base.convertToFile","position":[1960,280],"parameters":{"options":{},"operation":"toBinary","sourceProperty":"data[0].b64_json"},"typeVersion":1.1},{"id":"e7782adf-936a-47a5-8174-469e9d439b76","name":"Schedule","type":"n8n-nodes-base.scheduleTrigger","position":[560,200],"parameters":{"rule":{"interval":[{"triggerAtHour":5}]}},"typeVersion":1.2},{"id":"67704ef3-a0b3-4401-88aa-edc9b332c5fb","name":"Join Ideas","type":"n8n-nodes-base.code","position":[920,200],"parameters":{"jsCode":"// Get all incoming items\nconst items = $input.all();\n\n// Extract the text field from each item\nconst texts = items.map(item => item.json.idea);\n\n// Concatenate them (adjust the separator as needed)\nconst concatenated = texts.join(\", \");\n\n// Return a single item with the concatenated text\nreturn [{ json: { mergedText: concatenated } }];"},"typeVersion":2},{"id":"766ba040-6217-460e-a285-7dd3fe612654","name":"Pick One","type":"n8n-nodes-base.limit","position":[920,700],"parameters":{},"typeVersion":1},{"id":"ab433d53-9946-4778-bb59-bf636388da03","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[480,600],"parameters":{"color":4,"width":1340,"height":300,"content":"# Auto Posting"},"typeVersion":1},{"id":"35b01ea3-8a91-4bdb-8b0b-e1e99f3c0482","name":"X","type":"n8n-nodes-base.twitter","disabled":true,"position":[1140,980],"parameters":{"additionalFields":{}},"typeVersion":2},{"id":"25628428-075e-449c-8585-fc33d9185522","name":"Prepare Data for Instagram API","type":"n8n-nodes-base.set","disabled":true,"position":[1400,980],"parameters":{"options":{},"assignments":{"assignments":[{"id":"8a4260ba-3bde-4444-8f42-8a8abd51ff0c","name":"ImageURL","type":"string","value":"={{ $json.output }}"},{"id":"1953ae03-6a86-4847-8686-5a928637be1d","name":"Caption","type":"string","value":"={{ $('3c. Generate Post Caption (Gemini)').item.json.output.Caption }}"}]}},"typeVersion":3.4},{"id":"61af7e71-5470-44a1-a157-2c15311b9dff","name":"Create Instagram Media Container","type":"n8n-nodes-base.facebookGraphApi","disabled":true,"position":[1580,980],"parameters":{"edge":"media","node":"17841473009917118","options":{"queryParameters":{"parameter":[{"name":"caption","value":"={{ $json.Caption }}"},{"name":"image_url","value":"={{ $json.ImageURL }}"}]}},"graphApiVersion":"v22.0","httpRequestMethod":"POST"},"typeVersion":1},{"id":"177e67d6-2783-4691-a90f-4b6fb398ab5e","name":"Wait for Container Processing","type":"n8n-nodes-base.wait","disabled":true,"position":[1780,980],"webhookId":"1b14c8bf-151a-4054-8215-093dd5b6cbcc","parameters":{},"typeVersion":1.1},{"id":"8ef68b10-af6c-4f05-91ae-43586098b051","name":"Publish Post to Instagram","type":"n8n-nodes-base.facebookGraphApi","disabled":true,"position":[1980,980],"parameters":{"edge":"media_publish","node":"17841473009917118","options":{"queryParameters":{"parameter":[{"name":"creation_id","value":"={{ $json.id }}"}]}},"graphApiVersion":"v22.0","httpRequestMethod":"POST"},"typeVersion":1},{"id":"9702cd17-9bd3-429e-842e-56089b50d50b","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1080,920],"parameters":{"width":1120,"height":260,"content":"## Twitter & Instagram"},"typeVersion":1},{"id":"8633b8e7-0119-4b60-a42e-362e26134772","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-260,100],"parameters":{"width":720,"height":1800,"content":"# 🛠️ Setup Guide  \n**Author:** [Usman Liaqat](https://www.linkedin.com/in/usmanliaqat404)\n\nThis guide will walk you through the 7 steps to fully configure your automation workflow using Google Sheets, Google Drive, Anthropic, OpenAI, Perplexity AI and LinkedIn.\n\n---\n\n## ✅ Step 1: Set Up Google Sheets Credential\n1. In the n8n Google Sheets node create a new credential using your Google account\n\n---\n\n## ✅ Step 2: Set Up Google Drive Credential\n1. Go to the [Google Cloud Console](https://console.cloud.google.com) and create or select a project\n2. Enable the Google Drive API under APIs & Services > Library\n3. Still in APIs & Services, select Credentials from the left menu\n4. Click + CREATE CREDENTIALS > OAuth client ID\n5. For Application type, choose Web application\n6. Under Authorized redirect URIs, paste the OAuth Redirect URL: https://oauth.n8n.cloud/oauth2/callback\n7. Click Create, then copy the Client ID and Client Secret shown in the modal\n8. In the n8n Google Drive node click Create Credential\n9. Paste in the Client ID and Client Secret from Google Cloud\n10. Click Sign in with Google, complete the OAuth consent flow, then Save your credential\n\n---\n\n## ✅ Step 3: Set Up Anthropic Credential\n1. Navigate to the [Anthropic Console](https://console.anthropic.com/) and sign in or sign up\n2. Generate an API key\n3. In the n8n \"Anthropic Chat Model\" node click Create Credential, past the API key and save\n\n---\n\n## ✅ Step 4: Configure OpenAI via HTTP Request Node\n1. Visit the [OpenAI API Keys](https://platform.openai.com/account/api-keys) page and create a new secret key\n2. In the n8n OpenAI Image node in the Authentication select Generic Credential Type\n3. In Generic Auth Type select Header Auth\n4. Create a new Header Auth, Name = Authorization, Value = Bearer YOUR_TOKEN\n\n---\n\n## ✅ Step 5: Configure Perplexity AI via HTTP Request Node\n1. Go to the [Perplexity API Portal](https://www.perplexity.ai/account/api/keys) and click Create Key\n2. Copy the generated API key\n3. Inside n8n, in the sub-workflow, open the Perplexity Research node\n4. In the Authentication select Generic Credential Type\n5. In Generic Auth Type select Header Auth\n6. Create a new Header Auth, Name = Authorization, Value = Bearer YOUR_TOKEN\n\n---\n\n## ✅ Step 6: Set Up LinkedIn Credential\n1. In the n8n LinkedIn node create a new credential using your LinkedIn account\n\n---\n\n## ✅ Step 7: Customize The System For Your Use Case\n1. In the Idea Generator node adjust the prompts to reflect your content style and your topics\n2. Create a folder in your Google Drive where you will store all the images\n3. Put in that folder the image with the style of your brand, that you want to replicate every time\n4. Paste the shared link to this image in the \"Image Style\" node\n5. In the OpenAI Image node adjust the prompt to reflect your image style\n6. Copy my [Google Sheet](https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit?usp=sharing)\n7. Select your Google Sheet in the Google Sheets nodes\n8. Activate the system, now every day a new post will be created inside the Google Sheet, and once you've reviewed it (might edit it as well), set the status to \"ready\" and it will be posted; the posting mechanism is set to work every day, one post at a time\n\n---\n\nNow you're ready to run your workflow. Happy automating!\n"},"typeVersion":1},{"id":"e853ea9d-5b19-4b7b-8dc4-110bcc481471","name":"OpenAI Image","type":"n8n-nodes-base.httpRequest","position":[1760,280],"parameters":{"url":"https://api.openai.com/v1/images/edits","method":"POST","options":{},"sendBody":true,"contentType":"multipart-form-data","authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"model","value":"gpt-image-1"},{"name":"image","parameterType":"formBinaryData","inputDataFieldName":"data"},{"name":"prompt","value":"=You're a professional graphic designer.\n\nMake a new image in the style very very similar to the reference.\n\nCopy the style, spacing, minimalistic structure, especially copy the FONTS, and everything else.\n\nUse black and dark grainy film (mainly for the background), white and salad green (#cff150).\n\nMake the image super aestetic and minimalistic.\n\nMake it vertical 3x4.\n\nIt will be an image for a LinkedIn post.\n\nHere is the description of the new image:\n{{ $('Idea Generator').item.json.output.image }}"}]},"genericAuthType":"httpHeaderAuth"},"typeVersion":4.2},{"id":"2642278d-235c-46f0-994e-aa1ebec5ae64","name":"Image Style","type":"n8n-nodes-base.googleDrive","position":[1540,280],"parameters":{"fileId":{"__rl":true,"mode":"url","value":"=https://drive.google.com/file/d/1wm4anhC6ygXl4ZJAjJryWfEXTG-VeH8s/view?usp=sharing"},"options":{},"operation":"download"},"typeVersion":3},{"id":"31218124-74e6-4117-bd76-125545aaf969","name":"Get Past Ideas","type":"n8n-nodes-base.googleSheets","position":[740,200],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit#gid=0","cachedResultName":"Posts"},"documentId":{"__rl":true,"mode":"list","value":"1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit?usp=drivesdk","cachedResultName":"AI Posts Content Machine"}},"typeVersion":4.5,"alwaysOutputData":true},{"id":"b4776d32-d742-42d8-8454-048ccadc8ecd","name":"Save Image","type":"n8n-nodes-base.googleDrive","position":[2180,280],"parameters":{"name":"={{ $('Idea Generator').item.json.output.name }}","driveId":{"__rl":true,"mode":"list","value":"My Drive"},"options":{},"folderId":{"__rl":true,"mode":"list","value":"1PZW0Hef8yKwKtBZuRxZAMkakzdyyP0iZ","cachedResultUrl":"https://drive.google.com/drive/folders/1PZW0Hef8yKwKtBZuRxZAMkakzdyyP0iZ","cachedResultName":"AI Posts Content Machine"}},"typeVersion":3},{"id":"c6a71846-4538-4204-9ddc-f5c0fb18ac1a","name":"Save Post","type":"n8n-nodes-base.googleSheets","position":[2380,280],"parameters":{"columns":{"value":{"idea":"={{ $('Idea Generator').item.json.output.idea }}","name":"={{ $('Idea Generator').item.json.output.name }}","text":"={{ $('Idea Generator').item.json.output.text }}","image":"={{ $json.webViewLink.replace(/usp=[^&]+/, 'usp=sharing') }}","status":"review"},"schema":[{"id":"name","type":"string","display":true,"required":false,"displayName":"name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"idea","type":"string","display":true,"required":false,"displayName":"idea","defaultMatch":false,"canBeUsedToMatch":true},{"id":"text","type":"string","display":true,"required":false,"displayName":"text","defaultMatch":false,"canBeUsedToMatch":true},{"id":"image","type":"string","display":true,"required":false,"displayName":"image","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit#gid=0","cachedResultName":"Posts"},"documentId":{"__rl":true,"mode":"list","value":"1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit?usp=drivesdk","cachedResultName":"AI Posts Content Machine"}},"typeVersion":4.5},{"id":"7b8e2c00-2c14-4bb7-acee-0181990e9434","name":"Schedule 2","type":"n8n-nodes-base.scheduleTrigger","position":[560,700],"parameters":{"rule":{"interval":[{"triggerAtHour":16}]}},"typeVersion":1.2},{"id":"66c0ae82-6ba3-4fa0-8033-3726796cdc0a","name":"Get Ready Posts","type":"n8n-nodes-base.googleSheets","position":[740,700],"parameters":{"options":{},"filtersUI":{"values":[{"lookupValue":"ready","lookupColumn":"status"}]},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit#gid=0","cachedResultName":"Posts"},"documentId":{"__rl":true,"mode":"list","value":"1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit?usp=drivesdk","cachedResultName":"AI Posts Content Machine"}},"typeVersion":4.5},{"id":"7ee9c81f-00ca-4f89-95bb-61d224b06a2e","name":"Download Image","type":"n8n-nodes-base.googleDrive","position":[1120,700],"parameters":{"fileId":{"__rl":true,"mode":"url","value":"={{ $json.image }}"},"options":{},"operation":"download"},"typeVersion":3},{"id":"94fbbd95-fe52-4eda-ac78-2201ff72fe50","name":"Publish Post","type":"n8n-nodes-base.linkedIn","position":[1320,700],"parameters":{"text":"={{ $json.text }}","person":"-NknGiXASA","additionalFields":{},"shareMediaCategory":"IMAGE"},"typeVersion":1},{"id":"0893a7f2-490b-49f1-96cb-56090cb59c10","name":"Update Status","type":"n8n-nodes-base.googleSheets","position":[1520,700],"parameters":{"columns":{"value":{"name":"={{ $('Pick One').item.json.name }}","status":"posted"},"schema":[{"id":"name","type":"string","display":true,"removed":false,"required":false,"displayName":"name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"idea","type":"string","display":true,"removed":true,"required":false,"displayName":"idea","defaultMatch":false,"canBeUsedToMatch":true},{"id":"text","type":"string","display":true,"removed":true,"required":false,"displayName":"text","defaultMatch":false,"canBeUsedToMatch":true},{"id":"image","type":"string","display":true,"removed":true,"required":false,"displayName":"image","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["name"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit#gid=0","cachedResultName":"Posts"},"documentId":{"__rl":true,"mode":"list","value":"1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1-F3ZioIs3oWOKMyDPMuquaH-qiuaZs6qdZXP-yNeRbs/edit?usp=drivesdk","cachedResultName":"AI Posts Content Machine"}},"typeVersion":4.5}],"pinData":{},"connections":{"Pick One":{"main":[[{"node":"Download Image","type":"main","index":0}]]},"Schedule":{"main":[[{"node":"Get Past Ideas","type":"main","index":0}]]},"Join Ideas":{"main":[[{"node":"Idea Generator","type":"main","index":0}]]},"Save Image":{"main":[[{"node":"Save Post","type":"main","index":0}]]},"Schedule 2":{"main":[[{"node":"Get Ready Posts","type":"main","index":0}]]},"Image Style":{"main":[[{"node":"OpenAI Image","type":"main","index":0}]]},"OpenAI Image":{"main":[[{"node":"Convert to File","type":"main","index":0}]]},"Publish Post":{"main":[[{"node":"Update Status","type":"main","index":0}]]},"Download Image":{"main":[[{"node":"Publish Post","type":"main","index":0}]]},"Get Past Ideas":{"main":[[{"node":"Join Ideas","type":"main","index":0}]]},"Idea Generator":{"main":[[{"node":"Image Style","type":"main","index":0}]]},"Convert to File":{"main":[[{"node":"Save Image","type":"main","index":0}]]},"Get Ready Posts":{"main":[[{"node":"Pick One","type":"main","index":0}]]},"Perplexity Research":{"ai_tool":[[{"node":"Idea Generator","type":"ai_tool","index":0}]]},"Anthropic Chat Model":{"ai_languageModel":[[{"node":"Idea Generator","type":"ai_languageModel","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Idea Generator","type":"ai_outputParser","index":0}]]},"Wait for Container Processing":{"main":[[{"node":"Publish Post to Instagram","type":"main","index":0}]]},"Prepare Data for Instagram API":{"main":[[{"node":"Create Instagram Media Container","type":"main","index":0}]]},"Create Instagram Media Container":{"main":[[{"node":"Wait for Container Processing","type":"main","index":0}]]}}}


name: VEO3 Video Generator with AI Optimization and Google Drive Storage
author_name: Friedemann Schuetz
author_username: freddy-schuetz
categories: []
created_at: 2025-06-07T18:34:44.834Z
updated_at: 2025-06-07T18:34:44.834Z
url: https://n8n.io/workflows/4767
scraped_at: 2025-06-19 22:07:56
description:
  Welcome to my VEO3 Video Generator Workflow!

  This automated workflow transforms simple text descriptions into professional 8-second videos using Google's cutting-edge VEO3 AI model. Users submit video ideas through a web form, and the system automatically generates optimized prompts, creates high-quality videos with native audio, and delivers them via Google Drive - all powered by Claude 4 Sonnet for intelligent prompt optimization.

  This workflow has the following sequence:
  VEO3 Generator Form - Web form interface for users to input video content, format, and duration
  Video Prompt Generator - AI agent powered by Claude 4 Sonnet that:
     Analyzes user input for video content requirements
     Creates factual, professional video titles
     Generates detailed VEO3 prompts with subject, context, action, style, camera motion, composition, ambiance, and audio elements
     Optimizes prompts for 16:9 landscape format and 8-second duration
  Create VEO3 Video - Submits the optimized prompt to fal.ai VEO3 API for video generation
  Wait 30 seconds - Initial waiting period for video processing to begin
  Check VEO3 Status - Monitors the video generation status via fal.ai API
  Video completed? - Decision node that checks if video generation is finished
     If not completed: Returns to wait cycle
     If completed: Proceeds to video retrieval
  Get VEO3 Video URL - Retrieves the final video download URL from fal.ai
  Download VEO3 Video - Downloads the generated MP4 video file
  Merge - Combines video data with metadata for final processing
  Save Video to Google Drive - Uploads the video to specified Google Drive folder
  Video Output - Displays completion message with Google Drive link to user

  The following accesses are required for the workflow:
  Anthropic API** (Claude 4 Sonnet): Documentation
  Fal.ai API** (VEO3 Model): Create API key at https://fal.ai/dashboard/keys
  Google Drive API**: Documentation

  Workflow Features:
  User-friendly web form**: Simple interface for video content input
  AI-powered prompt optimization**: Claude 4 Sonnet creates professional VEO3 prompts
  Automatic video generation**: Leverages Google's VEO3 model via fal.ai
  Status monitoring**: Real-time tracking of video generation progress
  Google Drive integration**: Automatic upload and sharing of generated videos
  Structured output**: Consistent video titles and professional prompt formatting
  Audio optimization**: VEO3's native audio generation with ambient sounds and music

  Current Limitations:
  Format**: Only 16:9 landscape videos supported
  Duration**: Only 8-second videos supported
  Processing time**: Videos typically take 60-120 seconds to generate

  Use Cases:
  Content creation**: Generate videos for social media, websites, and presentations
  Marketing materials**: Create promotional videos and advertisements
  Educational content**: Produce instructional and explanatory videos
  Prototyping**: Rapid video concept development and testing
  Creative projects**: Artistic and experimental video generation
  Business presentations**: Professional video content for meetings and pitches

  Feel free to contact me via LinkedIn, if you have any questions!

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.googleDrive","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatAnthropic","@n8n/n8n-nodes-langchain.outputParserStructured"]

workflow_json:
  {"id":"iuPhSS8Dr2Dl7Hbo","meta":{"instanceId":"7dfa146768a036d27a67d125f90ea637bfb301bd4fd25d0086548016421d44bd","templateCredsSetupCompleted":true},"name":"VEO3 Video Generator TEMPLATE","tags":[],"nodes":[{"id":"62e94b7e-b516-4cba-8a00-8179e743520f","name":"Anthropic Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[-52,370],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-sonnet-4-20250514","cachedResultName":"Claude 4 Sonnet"},"options":{}},"credentials":{"anthropicApi":{"id":"WgfLltDtHqUy7q9O","name":"Anthropic account"}},"typeVersion":1.3},{"id":"78444fe1-3289-4f2a-871b-03908ba47553","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[68,370],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"title\": {\n      \"type\": \"string\",\n      \"description\": \"Creative, meaningful title for the video - short, concise and matching the content\",\n      \"minLength\": 5,\n      \"maxLength\": 80\n    },\n    \"prompt\": {\n      \"type\": \"string\",\n      \"description\": \"Detailed VEO3 prompt with Subject, Context, Action, Style, Camera Motion, Composition, Ambiance and Audio elements\",\n      \"minLength\": 50,\n      \"maxLength\": 2000\n    },\n    \"aspect_ratio\": {\n      \"type\": \"string\",\n      \"enum\": [\"16:9\"],\n      \"description\": \"Video aspect ratio - currently only 16:9 Landscape/Cinema supported\"\n    },\n    \"duration\": {\n      \"type\": \"string\",\n      \"enum\": [\"8s\"],\n      \"description\": \"Video duration in seconds - currently only 8s supported\"\n    }\n  },\n  \"required\": [\"title\", \"prompt\", \"aspect_ratio\", \"duration\"],\n  \"additionalProperties\": false\n}"},"typeVersion":1.2},{"id":"6b7fa224-d30c-4acc-84ee-c458c20f2c89","name":"Video Prompt Generator","type":"@n8n/n8n-nodes-langchain.agent","position":[-80,150],"parameters":{"text":"=Video Content: {{ $json['Video Content'] }}\nFormat: {{ $json.Format }}\nDuration: {{ $json['Duration'] }}","options":{"systemMessage":"=You are an expert for VEO3 video prompts and video marketing. Create optimal parameters for high-quality video generation with Google's VEO3 model from user input, including a creative, appealing title.\n\nTITLE CREATION:\n- Factual and objective (5-80 characters)\n- Precisely describes the main content of the video\n- Factual and informative, without exaggeration\n- Uses neutral, descriptive language\n- Avoids emotional words like \"epic\", \"magical\", \"incredible\"\n- Professionally and seriously formulated\n\nTITLE CATEGORIES:\n- Action/Sport: \"Skier on Alpine slope\", \"Winter sports in the mountains\"\n- Dialog/Drama: \"Woman at train station\", \"Waiting scene in vintage setting\"\n- Nature/Landscape: \"Waterfall in rainforest\", \"Nature shot with water drops\"\n- Everyday/People: \"Chef in kitchen\", \"Work scene while cooking\"\n- Technology/Objects: \"Icicles melting\", \"Close-up of ice\"\n- Architecture: \"Modern building architecture\", \"Concrete building with organic forms\"\n\nVEO3 PROMPT STRUCTURE (use all relevant elements):\n\nMANDATORY ELEMENTS:\n- Subject: Main subject (person, object, animal, scenery)\n- Context: Background, setting, environment\n- Action: What happens, movements, actions\n\nOPTIONAL ELEMENTS (for better quality):\n- Style: Specific film styles (cinematic, film noir, documentary, 3D cartoon, realistic, action movie, etc.)\n- Camera Motion: dolly shot, tracking shot, aerial view, eye-level, top-down, low-angle, zoom in/out, pan shot, static shot\n- Composition: wide shot, close-up, extreme close-up, medium shot, over-the-shoulder, single shot, two shot\n- Ambiance: Color palette and lighting (warm golden tones, cool blue tones, natural sunlight, dramatic shadows, soft focus, shallow depth of field)\n- Audio: Dialogues (in quotation marks), Ambient Sounds, Music (VEO3 generates native audio!)\n\nTECHNICAL BEST PRACTICES:\n- Use descriptive adjectives and adverbs for clear images\n- For people: Specify facial details, emotions, clothing, body posture\n- For dialogues: Write exact words in quotation marks for perfect lip-sync\n- For realism: Mention physics, natural movements, realistic interactions\n- Camera work: Use professional film terminology\n- Lighting: Specify light sources and mood\n- Audio: Describe ambient sounds, music and spoken words\n\nASPECT RATIO INTELLIGENCE:\n- FAL.AI VEO3 currently supports ONLY 16:9 (Landscape) format\n- All videos are automatically created in 16:9 format\n- Optimize prompts for Landscape/Cinema presentation\n\nDURATION INTELLIGENCE:\n- FAL.AI VEO3 currently supports ONLY 8s duration\n- All videos are automatically created with 8s length\n- Optimize prompts for 8-second sequences\n\nAUDIO OPTIMIZATION (VEO3's strength!):\n- ALWAYS specify audio elements since VEO3 generates native audio\n- Dialogues: Exact words in quotation marks for perfect lip-sync\n- Ambient: Matching background sounds to the scene (wind, traffic, nature, etc.)\n- Music: Mood-appropriate description (energetic, melancholic, epic, upbeat, dramatic, etc.)\n- Sound Effects: Specific sounds (footsteps, doors, machines, etc.)\n\nSTYLE CATEGORIES (all optimized for 16:9 Landscape):\n- Cinematic: \"Cinematic style\", \"film noir\", \"documentary style\", \"movie scene\"\n- Animation: \"3D cartoon style render\", \"animated style\", \"stylized animation\"\n- Realistic: \"Photorealistic\", \"documentary footage\", \"natural lighting\"\n- Gaming: \"Video game aesthetic\", \"third-person view\", \"FPS perspective\"\n- Commercial: \"Advertisement style\", \"product showcase\", \"commercial photography\"\n- Action/Sport: \"Dynamic wide shots\", \"landscape cinematography\", \"widescreen action\"\n\nEXAMPLE PROMPTS (all optimized for 16:9 Landscape, 8s):\n\nAction/Sport:\nTitle: \"Skier on Alpine slope\"\nPrompt: \"Wide cinematic tracking shot following a professional skier carving down a pristine alpine slope. Camera positioned parallel to slope, capturing skier's full body and dramatic powder sprays against mountain landscape. Skier approaches from distance, passes camera at mid-range and continues down slope. As he passes, he shouts: 'I LOVE SKIING!' Audio captures swoosh of skis, wind rushing, clear English exclamation. Widescreen sports cinematography with motion blur, 8-second sequence showcasing pure skiing joy.\"\n\nDialog/Drama:\nTitle: \"Woman waiting at train station\"\nPrompt: \"Wide cinematic shot of a vintage train station with woman in 1940s dress walking through the bustling scene. Camera dollies alongside in medium wide shot, showing full environment and character. Steam rises from locomotives in background. She checks pocket watch while walking, worry visible on her face. Warm golden lighting filters through tall station windows. She whispers: 'He promised to be here.' Train announcements and steam hissing throughout. Film noir style, 8-second scene building dramatic tension.\"\n\nNature/Landscape:\nTitle: \"Waterfall in rainforest\"\nPrompt: \"Sweeping aerial establishing shot of a majestic waterfall cascading through lush rainforest. Camera starts wide, slowly moving closer to reveal mist and spray details. Full landscape visible with dense canopy and multiple water levels. Dappled sunlight filters through trees creating dynamic lighting. Natural sounds of rushing water, birds chirping, leaves rustling build throughout 8-second sequence. Documentary style with rich green tones and cinematic widescreen composition.\"\n\nEveryday/People:\nTitle: \"Chef preparing meal\"\nPrompt: \"Wide shot of a modern kitchen with chef enthusiastically preparing a meal. Camera circles around showing full cooking environment. Steam rises from multiple pans as chef juggles ingredients with theatrical flair. He declares with passion: 'Cooking is pure magic!' Sounds of sizzling, chopping, and upbeat background music. Bright, colorful lighting with warm kitchen ambiance. 8-second sequence capturing culinary excitement and energy.\"\n\nTransform the user input into a factual title and professional VEO3 prompt with maximum visual and audio quality. Consider all prompt elements for best possible results.\n\nIMPORTANT:\n- Create FIRST an objective, factual title without exaggeration\n- All videos are automatically created in 16:9 Landscape format with 8s duration\n- Optimize prompts accordingly for widescreen presentation and 8-second sequences\n- Title should factually describe what is shown in the video\n- Avoid emotional words like \"epic\", \"magical\", \"incredible\", \"spectacular\""},"promptType":"define","hasOutputParser":true},"typeVersion":2},{"id":"5791f2ee-9e4f-4eae-832f-42b091e6e118","name":"Merge","type":"n8n-nodes-base.merge","position":[1616,150],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.2},{"id":"2b7ed2cc-bd91-48f1-b2aa-1b77ea4350ae","name":"Create VEO3 Video","type":"n8n-nodes-base.httpRequest","position":[296,75],"parameters":{"url":"https://queue.fal.run/fal-ai/veo3","method":"POST","options":{"timeout":60000,"redirect":{"redirect":{}},"response":{"response":{"responseFormat":"json"}},"allowUnauthorizedCerts":false},"jsonBody":"={\n  \"prompt\": \"{{ $json.output.prompt }}\",\n  \"aspect_ratio\": \"{{ $json.output.aspect_ratio || '16:9' }}\",\n  \"duration\": \"{{ $json.output.duration || '8s' }}\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"Key <YOUR-FAL.AI API KEY>"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"997b17c4-5e3c-48fa-8008-e44ead3556c2","name":"Wait 30 seconds","type":"n8n-nodes-base.wait","position":[516,75],"webhookId":"1b6bbe9b-4bfe-4a77-8627-73a05db0de8c","parameters":{"amount":30},"typeVersion":1.1},{"id":"2e94296b-5207-43a8-afe7-4e330df2d838","name":"Check VEO3 Status","type":"n8n-nodes-base.httpRequest","position":[736,0],"parameters":{"url":"=https://queue.fal.run/fal-ai/veo3/requests/{{ $('Create VEO3 Video').first().json.request_id }}/status","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Authorization","value":"Key <YOUR-FAL.AI API KEY>"}]}},"typeVersion":4.2},{"id":"3b7d8752-f0c7-4315-bb31-cf0345762ed0","name":"Video completed?","type":"n8n-nodes-base.if","position":[956,75],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"e83af8f6-f0db-47fd-b41a-44c07929b186","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"COMPLETED"}]}},"typeVersion":2.2},{"id":"69760626-baf5-45a9-abe9-86c1b17b893d","name":"Get VEO3 Video URL","type":"n8n-nodes-base.httpRequest","position":[1176,75],"parameters":{"url":"=https://queue.fal.run/fal-ai/veo3/requests/{{ $('Create VEO3 Video').first().json.request_id }}","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Authorization","value":"Key <YOUR-FAL.AI API KEY>"}]}},"typeVersion":4.2},{"id":"1f53010b-9041-4849-9e87-387ab1f389f6","name":"Download VEO3 Video","type":"n8n-nodes-base.httpRequest","position":[1396,75],"parameters":{"url":"={{ $json.video.url }}","options":{"response":{"response":{"responseFormat":"file"}}}},"typeVersion":4.2},{"id":"54231111-a879-412d-902d-bf52089f40cd","name":"Save Video to Google Drive","type":"n8n-nodes-base.googleDrive","position":[1836,150],"parameters":{"name":"={{ $json.output.title }}.mp4","driveId":{"__rl":true,"mode":"list","value":"My Drive"},"options":{},"folderId":{"__rl":true,"mode":"list","value":"1Q5slmjwk2tDrhN2BgQeZ6ITD-69dKYnV","cachedResultUrl":"https://drive.google.com/drive/folders/1Q5slmjwk2tDrhN2BgQeZ6ITD-69dKYnV","cachedResultName":"VEO3_Videos"}},"credentials":{"googleDriveOAuth2Api":{"id":"pTaHnocQoftc5pcK","name":"Google Drive account FSEP"}},"typeVersion":3},{"id":"a943c007-a670-419c-956d-7a95277892ab","name":"Video Output","type":"n8n-nodes-base.form","position":[2056,150],"webhookId":"7784e7d1-e01a-4b44-a6af-76811f3c5fca","parameters":{"options":{},"operation":"completion","completionTitle":"Your video has been created!","completionMessage":"=Your video \"{{ $('Merge').first().json.output.title }}\" has been successfully created!\nYou can access it here: {{ $json.webViewLink }}"},"typeVersion":1},{"id":"ed6338f2-edcb-40d0-9f08-dd9c79345ab8","name":"VEO3 Generator Form","type":"n8n-nodes-base.formTrigger","position":[-300,150],"webhookId":"1dea6a1a-8699-4b7a-a1be-0eeb50a10cc1","parameters":{"options":{"path":"veo3-video-generator","buttonLabel":"Create Video","appendAttribution":false},"formTitle":"VEO3 Video Generator","formFields":{"values":[{"fieldLabel":"Video Content","placeholder":"e.g. Magical waterfall in the rainforest","requiredField":true},{"fieldType":"dropdown","fieldLabel":"Format","fieldOptions":{"values":[{"option":"16:9"}]},"requiredField":true},{"fieldType":"dropdown","fieldLabel":"Duration","fieldOptions":{"values":[{"option":"8s"}]},"requiredField":true}]},"formDescription":"Currently only 16:9 and 8s videos are supported via fal.ai!"},"typeVersion":2.2},{"id":"93108f68-f541-4445-8795-007927b621b3","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1120,-420],"parameters":{"width":720,"height":1280,"content":"# Welcome to my VEO3 Video Generator Workflow!\n## This workflow has the following sequence:\n1. **VEO3 Generator Form** - Web form interface for users to input video content, format, and duration\n2. **Video Prompt Generator** - AI agent powered by Claude 4 Sonnet that:\n   - Analyzes user input for video content requirements\n   - Creates factual, professional video titles\n   - Generates detailed VEO3 prompts with subject, context, action, style, camera motion, composition, ambiance, and audio elements\n   - Optimizes prompts for 16:9 landscape format and 8-second duration\n3. **Create VEO3 Video** - Submits the optimized prompt to fal.ai VEO3 API for video generation\n4. **Wait 30 seconds** - Initial waiting period for video processing to begin\n5. **Check VEO3 Status** - Monitors the video generation status via fal.ai API\n6. **Video completed?** - Decision node that checks if video generation is finished\n   - If not completed: Returns to wait cycle\n   - If completed: Proceeds to video retrieval\n7. **Get VEO3 Video URL** - Retrieves the final video download URL from fal.ai\n8. **Download VEO3 Video** - Downloads the generated MP4 video file\n9. **Merge** - Combines video data with metadata for final processing\n10. **Save Video to Google Drive** - Uploads the video to specified Google Drive folder\n11. **Video Output** - Displays completion message with Google Drive link to user\n\n## The following accesses are required for the workflow:\n- **Anthropic API** (Claude 4 Sonnet): [Documentation](https://docs.n8n.io/integrations/builtin/credentials/anthropic/)\n- **Fal.ai API** (VEO3 Model): Create API key at [https://fal.ai/dashboard/keys](https://fal.ai/dashboard/keys)\n- **Google Drive API**: [Documentation](https://docs.n8n.io/integrations/builtin/credentials/google/)\n\n## Workflow Features:\n- **User-friendly web form**: Simple interface for video content input\n- **AI-powered prompt optimization**: Claude 4 Sonnet creates professional VEO3 prompts\n- **Automatic video generation**: Leverages Google's VEO3 model via fal.ai\n- **Status monitoring**: Real-time tracking of video generation progress\n- **Google Drive integration**: Automatic upload and sharing of generated videos\n- **Structured output**: Consistent video titles and professional prompt formatting\n- **Audio optimization**: VEO3's native audio generation with ambient sounds and music\n\n## Current Limitations:\n- **Format**: Only 16:9 landscape videos supported\n- **Duration**: Only 8-second videos supported\n- **Processing time**: Videos typically take 60-120 seconds to generate\n\n## Use Cases:\n- **Content creation**: Generate videos for social media, websites, and presentations\n- **Marketing materials**: Create promotional videos and advertisements\n- **Educational content**: Produce instructional and explanatory videos\n- **Prototyping**: Rapid video concept development and testing\n- **Creative projects**: Artistic and experimental video generation\n- **Business presentations**: Professional video content for meetings and pitches\n\nYou can contact me via LinkedIn, if you have any questions: https://www.linkedin.com/in/friedemann-schuetz"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"ebfd2536-b5dd-4a08-bd6a-0ca0f654ede7","connections":{"Merge":{"main":[[{"node":"Save Video to Google Drive","type":"main","index":0}]]},"Wait 30 seconds":{"main":[[{"node":"Check VEO3 Status","type":"main","index":0}]]},"Video completed?":{"main":[[{"node":"Get VEO3 Video URL","type":"main","index":0}],[{"node":"Wait 30 seconds","type":"main","index":0}]]},"Check VEO3 Status":{"main":[[{"node":"Video completed?","type":"main","index":0}]]},"Create VEO3 Video":{"main":[[{"node":"Wait 30 seconds","type":"main","index":0}]]},"Get VEO3 Video URL":{"main":[[{"node":"Download VEO3 Video","type":"main","index":0}]]},"Download VEO3 Video":{"main":[[{"node":"Merge","type":"main","index":0}]]},"VEO3 Generator Form":{"main":[[{"node":"Video Prompt Generator","type":"main","index":0}]]},"Anthropic Chat Model":{"ai_languageModel":[[{"node":"Video Prompt Generator","type":"ai_languageModel","index":0}]]},"Video Prompt Generator":{"main":[[{"node":"Create VEO3 Video","type":"main","index":0},{"node":"Merge","type":"main","index":1}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Video Prompt Generator","type":"ai_outputParser","index":0}]]},"Save Video to Google Drive":{"main":[[{"node":"Video Output","type":"main","index":0}]]}}}


name: Discover & Analyze TikTok Influencers with Bright Data, Claude AI & Email Outreach
author_name: Dvir Sharon
author_username: dvirsharon
categories: []
created_at: 2025-06-08T08:44:40.329Z
updated_at: 2025-06-08T08:44:40.329Z
url: https://n8n.io/workflows/4774
scraped_at: 2025-06-19 22:07:56
description:
  🎯 Automated TikTok Influencer Discovery & Analysis

  A complete n8n automation that discovers TikTok influencers using Bright Data, evaluates their fit using Claude AI, and sends personalized outreach emails. Designed for marketing teams and brands that need a scalable, intelligent way to find and connect with relevant creators.

  📋 Overview

  This workflow provides a full-service influencer discovery pipeline: it finds TikTok profiles using search keywords, uses AI to assess alignment with your brand, and initiates contact with qualified influencers. Ideal for influencer marketing, brand partnerships, and campaign planning.

  ✨ Key Features

  🔍 Keyword-Based Discovery**  
    Locate TikTok influencers by specific niche-related keywords.

  📊 Bright Data Integration**  
    Access accurate TikTok profile data from Bright Data’s datasets.

  🤖 AI-Powered Analysis**  
    Claude AI evaluates each profile's fit with your brand based on bio, content, and more.

  📧 Smart Email Notifications**  
    Sends tailored outreach emails to creators deemed highly relevant.

  📈 Data Storage**  
    Google Sheets stores profile details, AI evaluation results, and outreach status.

  🎯 Intelligent Filtering**  
    Processes only influencers who meet your criteria (e.g., 5000+ followers, industry match).

  ⚡ Fast & Reliable**  
    Uses professional scraping with robust error handling.

  🔄 Batch Processing**  
    Supports bulk influencer processing through a single automated flow.

  🎯 What This Workflow Does

  Input

  Search Keywords** – TikTok terms for finding niche creators  
  Business Info** – Brand description and industry  
  Collaboration Criteria** – Follower count minimum, niche alignment

  Processing Steps

  Form Submission  
  TikTok Discovery via Bright Data  
  Data Extraction and Normalization  
  Save to Google Sheets  
  Relevance Scoring via Claude AI  
  Filtering Based on AI Score + Follower Count  
  Personalized Email Outreach

  Output Data Points

  | Field         | Description                        | Example                          |
  |---------------|------------------------------------|----------------------------------|
  | Profile ID    | TikTok profile identifier          | tiktoker123456                   |
  | Username      | TikTok handle                      | @creativecreator                 |
  | URL           | Profile link                       | https://tiktok.com/@creativecreator |
  | Description   | Creator bio                        | "Fashion & lifestyle content..." |
  | Followers     | Total follower count               | 50,000                           |
  | Collaboration | AI assessment of brand fit         | "Highly Relevant"               |
  | Analysis      | 50-word Claude AI relevance summary| "Strong alignment with fashion..."|

  🚀 Setup Instructions

  Prerequisites

  n8n (cloud or self-hosted)  
  Bright Data account with TikTok access  
  Google Sheets + Gmail  
  Anthropic Claude API key  
  10–15 minutes setup time

  Step-by-Step Setup

  Import Workflow via JSON in n8n  
  Configure Bright Data – Add API credentials and dataset ID  
  Google Sheets – Setup credentials and map columns  
  Claude AI – Insert API key and select desired model  
  Gmail – Authenticate Gmail and update mail node settings  
  Update Variables – Replace placeholders with business info  
  Test & Launch – Submit a sample form and verify all outputs

  📖 Usage Guide

  Adding Search Keywords

  Submit the form with search terms, business description, and industry category to trigger the workflow.

  Understanding AI Analysis

  Emails are sent only if:
    Collaboration status = Highly Relevant
    Follower count ≥ 5000
    Industry alignment confirmed
  Claude AI returns a 50-word analysis justifying the match

  Customizing Filters

  Edit the "Find the Collaborator" prompt to adjust:
  Follower thresholds
  Industry relevance
  Additional metrics (e.g., engagement rate)

  Viewing Results

  Google Sheets log includes:
  Influencer metadata
  AI scores and rationale
  Collaboration status
  Email delivery timestamp

  🔧 Customization Options

  Add More Fields:** Engagement rate, contact email, content themes  
  Email Personalization:** Customize message templates or integrate other mail services  
  Enhanced Filtering:** Use engagement rates, region, content frequency

  🚨 Troubleshooting

  | Issue | Fix |
  |-------|-----|
  | Bright Data fails | Recheck API and dataset ID |
  | No influencer data | Adjust keywords or dataset scope |
  | Sheets permission error | Re-authenticate and check sharing |
  | Claude fails | Validate API key and prompt |
  | Emails not sent | Re-auth Gmail or update recipient field |
  | Form not triggering | Reconfirm webhook URL and permissions |

  Advanced Debugging

  Check n8n execution logs  
  Run individual nodes for pinpointing failures  
  Confirm all data formats  
  Handle API rate limits  
  Add error-catch nodes for retries

  📊 Use Cases & Examples

  Brand Discovery:** Fashion, tech, fitness creators  
  Competitor Insights:** Find influencers used by rival brands  
  Campaign Planning:** Build targeted influencer lists  
  Market Research:** Identify creator trends across regions

  ⚙️ Advanced Configuration

  Batch Execution:** Process multiple keywords with delay logic  
  Engagement Metrics:** Scrape and calculate likes-to-follower ratios  
  CRM Integration:** Sync qualified profiles to HubSpot, Salesforce, or Slack

  📈 Performance & Limits

  Processing Time:** 3–5 minutes per keyword  
  Concurrency:** 3–5 simultaneous fetches (depends on plan)  
  Accuracy:** >95% influencer data reliability  
  Success Rate:** 90%+ for outreach and processing

nodes_used:
  ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","n8n-nodes-base.gmail","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatAnthropic"]

workflow_json:
  {"id":"GA1HTM4YyIidEJb3","meta":{"instanceId":"bc8ca75c203589705ae2e446cad7181d6f2a7cc1766f958ef9f34810e53b8cb2","templateCredsSetupCompleted":true},"name":"Automated TikTok Influencer Discovery & Analysis via Bright Data and Anthropic AI and Send Email Notification","tags":[],"nodes":[{"id":"cb75134b-4746-4715-87b4-c2bb596d4366","name":"Anthropic Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[1460,300],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-sonnet-4-20250514","cachedResultName":"Claude 4 Sonnet"},"options":{}},"credentials":{"anthropicApi":{"id":"YOUR_ANTHROPIC_CREDENTIAL_ID","name":"Anthropic API Account"}},"typeVersion":1.3},{"id":"aef0b016-6017-4b2a-8bcc-56e78b9a5cc1","name":"Code","type":"n8n-nodes-base.code","position":[1680,0],"parameters":{"jsCode":"// N8N Code Node to extract data from AI output\nconst items = $input.all();\n\nreturn items.map(item => {\n  try {\n    // Get the output string from the item\n    const outputString = item.json.output;\n    \n    // Extract JSON from the markdown code block\n    const jsonMatch = outputString.match(/```json\\n([\\s\\S]*?)\\n```/);\n    \n    if (jsonMatch && jsonMatch[1]) {\n      // Parse the extracted JSON\n      const parsedData = JSON.parse(jsonMatch[1]);\n      \n      // Return the extracted data as separate columns\n      return {\n        json: {\n          Collaboration: parsedData.Collaboration || '',\n          Analysis: parsedData.Analysis || '',\n          Profile_ID: parsedData['Profile ID'] || '',\n          // Keep original data as well if needed\n          original_output: outputString\n        }\n      };\n    } else {\n      // If no JSON found, return empty values\n      return {\n        json: {\n          Collaboration: '',\n          Analysis: '',\n          Profile_ID: '',\n          original_output: outputString,\n          error: 'No JSON found in output'\n        }\n      };\n    }\n  } catch (error) {\n    // Handle any parsing errors\n    return {\n      json: {\n        Collaboration: '',\n        Analysis: '',\n        Profile_ID: '',\n        original_output: item.json.output || '',\n        error: `Parsing error: ${error.message}`\n      }\n    };\n  }\n});"},"typeVersion":2},{"id":"51d9eee9-63c0-43a4-bb03-d94a1d9ceb2a","name":"Google Sheets1","type":"n8n-nodes-base.googleSheets","position":[1980,0],"parameters":{"columns":{"value":{"Analysis":"={{ $json.Analysis }}","Profile ID":"={{ $json.Profile_ID }}","Collaboration":"={{ $json.Collaboration }}"},"schema":[{"id":"Profile ID","type":"string","display":true,"removed":false,"required":false,"displayName":"Profile ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Username","type":"string","display":true,"required":false,"displayName":"Username","defaultMatch":false,"canBeUsedToMatch":true},{"id":"URL","type":"string","display":true,"required":false,"displayName":"URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Description","type":"string","display":true,"required":false,"displayName":"Description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Followers","type":"string","display":true,"required":false,"displayName":"Followers","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Collaboration","type":"string","display":true,"removed":false,"required":false,"displayName":"Collaboration","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Analysis","type":"string","display":true,"removed":false,"required":false,"displayName":"Analysis","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["Profile ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"YOUR_GOOGLE_SHEET_URL","cachedResultName":"TikTok"},"documentId":{"__rl":true,"mode":"url","value":"YOUR_GOOGLE_SHEET_URL"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YOUR_GOOGLE_SHEETS_CREDENTIAL_ID","name":"Google Sheets OAuth2 Account"}},"typeVersion":4.6},{"id":"4db5fe1f-9038-4746-859b-7b38a2b3056d","name":"Filter","type":"n8n-nodes-base.filter","position":[2240,0],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"7c4c648b-a7df-41d6-bc6c-b6d05221f7bf","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.Collaboration }}","rightValue":"Highly Relevant"}]}},"typeVersion":2.2},{"id":"50db5760-83fe-4119-bb18-27d637acbee9","name":"Gmail","type":"n8n-nodes-base.gmail","position":[2520,0],"webhookId":"76506181-2a59-4275-9277-219134868750","parameters":{"sendTo":"demo@example.com","message":"=Hi,\nI wanted to share some of the best TikTok creators perfectly matched to collaborate with your business. These influencers align closely with your brand and audience, helping you maximize your reach and impact.\nUsername: {{ $('Update Data in the Google Sheet').item.json.Username }}\nTikTok Profile: {{ $('Update Data in the Google Sheet').item.json.URL }}\nFollowers: {{ $('Update Data in the Google Sheet').item.json.Followers }}\n\nLet me know if you'd like more details or to explore specific collaboration opportunities.\n\nBest regards","options":{},"subject":"Top TikTok Influencer Match for Your Business Collaboration","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"YOUR_GMAIL_CREDENTIAL_ID","name":"Gmail OAuth2 Account"}},"typeVersion":2.1},{"id":"a6067955-adf4-4926-8082-81459d5aff1d","name":"Scrape Data from TikTok through Keyword by BrightData","type":"n8n-nodes-base.httpRequest","position":[240,0],"parameters":{"url":"https://api.brightdata.com/datasets/v3/trigger","method":"POST","options":{},"jsonBody":"={\n  \"input\": [\n    {\n      \"search_keyword\": \"{{ $json['Search Keyword'] }}\",\n      \"country\": \"\"\n    }\n  ],\n  \"custom_output_fields\": [\n    \"url\",\n    \"description\",\n    \"profile_id\",\n    \"profile_username\",\n    \"profile_url\",\n    \"profile_followers\"\n  ]\n}","sendBody":true,"sendQuery":true,"sendHeaders":true,"specifyBody":"json","queryParameters":{"parameters":[{"name":"dataset_id","value":"YOUR_BRIGHTDATA_DATASET_ID"},{"name":"include_errors","value":"true"},{"name":"type","value":"discover_new"},{"name":"discover_by","value":"keyword"},{"name":"limit_per_input","value":"5"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_BRIGHTDATA_API_TOKEN"}]}},"typeVersion":4.2},{"id":"fbc8f8b2-5e63-4914-b4b8-a44fa5163cda","name":"3 Minute Wait Time","type":"n8n-nodes-base.wait","position":[520,0],"webhookId":"168ac9b9-ea3f-4aab-b8f1-a3ef6109c70e","parameters":{"unit":"minutes","amount":3},"typeVersion":1.1},{"id":"9ad6728c-2136-46bb-9ddf-0d445b28be22","name":"Extract Data from Snapshot Generated by BrightData","type":"n8n-nodes-base.httpRequest","position":[800,0],"parameters":{"url":"=https://api.brightdata.com/datasets/v3/snapshot/{{ $json.snapshot_id }}","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"format","value":"json"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_BRIGHTDATA_API_TOKEN"}]}},"typeVersion":4.2},{"id":"8e3577fb-1077-44d4-bada-ca9f5f2aa141","name":"Update Data in the Google Sheet","type":"n8n-nodes-base.googleSheets","position":[1040,0],"parameters":{"columns":{"value":{"URL":"={{ $json.profile_url }}","Username":"={{ $json.profile_username }}","Followers":"={{ $json.profile_followers }}","Profile ID":"={{ $json.profile_id }}","Description":"={{ $json.description }}"},"schema":[{"id":"Profile ID","type":"string","display":true,"required":false,"displayName":"Profile ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Username","type":"string","display":true,"required":false,"displayName":"Username","defaultMatch":false,"canBeUsedToMatch":true},{"id":"URL","type":"string","display":true,"required":false,"displayName":"URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Description","type":"string","display":true,"required":false,"displayName":"Description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Followers","type":"string","display":true,"required":false,"displayName":"Followers","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Collaboration","type":"string","display":true,"required":false,"displayName":"Collaboration","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Analysis","type":"string","display":true,"required":false,"displayName":"Analysis","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"YOUR_GOOGLE_SHEET_URL","cachedResultName":"TikTok"},"documentId":{"__rl":true,"mode":"url","value":"YOUR_GOOGLE_SHEET_URL"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YOUR_GOOGLE_SHEETS_CREDENTIAL_ID","name":"Google Sheets OAuth2 Account"}},"typeVersion":4.6},{"id":"16bfd75e-fc30-4e6f-94f2-5e554d25cf64","name":"Find the Collaborator","type":"@n8n/n8n-nodes-langchain.agent","position":[1300,0],"parameters":{"text":"=Assume you are a social media expert and you find the best influencers based on the business and industry by analyzing the below data.\nHere are the Details of the Influencers.\nProfile URL: {{ $json.URL }}\nDescription: {{ $json.Description }}\nFollowers: {{ $json.Followers }}\nProfile ID: {{ $json['Profile ID'] }}\n\nMy Business Details:\nAbout my business: {{ $('Submit Form with Keyword, Business Info, Industry').item.json['About My Business'] }}\nIndustry: {{ $('Submit Form with Keyword, Business Info, Industry').item.json.Industry }}\n\nRequirements:\nFollowers should be more than 5000\nand Influencer should be in my industry.\nand Just Provide the Output according to below format\n\nFormat:\nOutput should be in Json\nCollaboration: Not Relevant, Highly Relevant\nAnalysis: Explain in 50 words\nProfile ID: Just add the Profile ID without any change\n","options":{},"promptType":"define"},"typeVersion":2},{"id":"6d482ee5-fd98-4ed3-bfac-dc1ca014769f","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-60,-80],"parameters":{"color":2,"width":220,"height":260,"content":"Triggers the workflow when user submits keyword, business info & industry via form."},"typeVersion":1},{"id":"2b3f2a04-cee9-4fae-8199-2c5cef6969cd","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[180,-80],"parameters":{"color":3,"height":260,"content":"Calls Bright Data API to fetch TikTok profiles by keyword."},"typeVersion":1},{"id":"3aed623a-1827-4641-96dc-d652332946e9","name":"Submit Form with Keyword, Business Info, Industry","type":"n8n-nodes-base.formTrigger","position":[0,0],"webhookId":"f1b746de-9cc3-4218-a9a0-45ff142f5bc7","parameters":{"options":{},"formTitle":"TikTok Profile Scraper","formFields":{"values":[{"fieldLabel":"Search Keyword"},{"fieldLabel":"About My Business"},{"fieldLabel":"Industry"}]}},"typeVersion":2.2},{"id":"c8434c0a-5df9-43e6-924e-6078bbf13c3f","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[460,-80],"parameters":{"color":4,"height":260,"content":"Waits 3 minutes to allow Bright Data to complete scraping."},"typeVersion":1},{"id":"951080be-56e7-4616-a8f3-4bdf6e29be06","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[720,-80],"parameters":{"color":5,"height":260,"content":"Fetches snapshot data (scraped influencer profiles) from Bright Data."},"typeVersion":1},{"id":"2fe42472-7b93-41f3-b2d9-ddf6a1472c32","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[980,-80],"parameters":{"color":6,"height":260,"content":"Stores raw influencer data (ID, followers, description, etc.) in Google Sheets."},"typeVersion":1},{"id":"c6340b5e-bd02-469c-909c-5300430fcba8","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1260,-80],"parameters":{"color":2,"width":360,"height":260,"content":"Uses Claude AI to evaluate each influencer's relevance to your business. Returns profile ID, relevance, and a 50-word analysis."},"typeVersion":1},{"id":"3c94de79-c64d-4d89-ad9d-387314d84d2b","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1380,200],"parameters":{"color":6,"height":240,"content":"Claude Sonnet 4 model that powers the influencer analysis."},"typeVersion":1},{"id":"eb61e536-d234-450c-94db-896d24757ad5","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[1640,-80],"parameters":{"color":4,"height":260,"content":"Parses Claude AI's markdown output and extracts structured JSON fields for further use."},"typeVersion":1},{"id":"d08dd360-e26f-421a-bf1f-95976adce3a2","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[1900,-80],"parameters":{"color":3,"width":260,"height":260,"content":"Logs Claude's insights (Profile ID, Collaboration status, Analysis) into Google Sheets."},"typeVersion":1},{"id":"02d41818-b12f-4b45-9e93-f3b7162cd6f6","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[2180,-80],"parameters":{"height":260,"content":"Filters results to retain only Highly Relevant influencers for email outreach."},"typeVersion":1},{"id":"873b1c8a-fb26-40ca-9885-51c80eb1bd61","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[2440,-80],"parameters":{"color":5,"width":260,"height":260,"content":"Sends personalized collaboration email to your target contact with top influencer information."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"18042508-1631-4802-8863-d015a36bed62","connections":{"Code":{"main":[[{"node":"Google Sheets1","type":"main","index":0}]]},"Filter":{"main":[[{"node":"Gmail","type":"main","index":0}]]},"Google Sheets1":{"main":[[{"node":"Filter","type":"main","index":0}]]},"3 Minute Wait Time":{"main":[[{"node":"Extract Data from Snapshot Generated by BrightData","type":"main","index":0}]]},"Anthropic Chat Model":{"ai_languageModel":[[{"node":"Find the Collaborator","type":"ai_languageModel","index":0}]]},"Find the Collaborator":{"main":[[{"node":"Code","type":"main","index":0}]]},"Update Data in the Google Sheet":{"main":[[{"node":"Find the Collaborator","type":"main","index":0}]]},"Submit Form with Keyword, Business Info, Industry":{"main":[[{"node":"Scrape Data from TikTok through Keyword by BrightData","type":"main","index":0}]]},"Extract Data from Snapshot Generated by BrightData":{"main":[[{"node":"Update Data in the Google Sheet","type":"main","index":0}]]},"Scrape Data from TikTok through Keyword by BrightData":{"main":[[{"node":"3 Minute Wait Time","type":"main","index":0}]]}}}


name: LinkedIn Job Finder Automation using Bright Data API & Google Sheets
author_name: Dvir Sharon
author_username: dvirsharon
nodes_used: ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest"]
categories: []
created_at: 2025-06-08T08:46:42.907Z
updated_at: 2025-06-08T08:46:42.907Z
url: https://n8n.io/workflows/4775
scraped_at: 2025-06-19 22:07:56
description:
  💼 LinkedIn Job Finder Automation using Bright Data API & Google Sheets


  A comprehensive n8n automation that searches LinkedIn job postings using Bright Data’s API and automatically organizes results in Google Sheets for efficient job hunting and recruitment workflows.

  📋 Overview
  This workflow provides an automated LinkedIn job search solution that collects job postings based on your search criteria and organizes them in Google Sheets. Perfect for job seekers, recruiters, HR professionals, and talent acquisition teams.

  ✨ Key Features
  🔍 Smart Job Search:** Form-based input for city, job title, country, and job type
  🛍 LinkedIn Integration:** Uses Bright Data’s LinkedIn dataset for accurate job posting data
  📊 Automated Organization:** Populates Google Sheets with structured job data
  📧 Real-time Processing:** Processes job search requests in real-time
  📈 Data Storage:** Stores job details including company info, locations, and apply links
  🔄 Batch Processing:** Handles multiple job postings efficiently
  ⚡ Fast & Reliable:** Built-in error handling for scraping
  🎯 Customizable Filters:** Advanced job filtering based on criteria

  🎯 What This Workflow Does
  Input

  Job Search Criteria:** City, job title, country, and optional job type
  Search Parameters:** Configurable filters and limits
  Output Preferences:** Google Sheets destination

  Processing Steps

  Form Submission
  Data Request to Bright Data API
  Status Monitoring
  Data Extraction
  Data Filtering
  Sheet Update
  Error Handling

  Output Data Points

  Field

  Description

  Example

  Job Title

  Position title from posting

  Senior Software Engineer

  Company Name

  Employer company name

  Tech Solutions Inc.

  Job Detail

  Job summary/description

  Remote position requiring 5+ years…

  Location

  Job location

  San Francisco, CA

  Company URL

  Company profile link

  View Profile

  Apply Link

  Direct application link

  Apply Now

  🚀 Setup Instructions
  Prerequisites

  n8n instance (self-hosted or cloud)
  Google account with Sheets access
  Bright Data account with LinkedIn dataset access

  Steps

  Import the Workflow: Use JSON import in n8n
  Configure Bright Data: Add API credentials and dataset ID
  Configure Google Sheets: Create sheet, set credentials, map columns
  Update Workflow Settings: Replace placeholders with your actual data
  Test & Activate: Submit test form and verify data in Google Sheets

  📖 Usage Guide
  Submitting Job Searches

  Go to your webhook URL and fill in the form with:

  City:** e.g., New York
  Job Title:** e.g., Software Engineer
  Country:** e.g., US
  Job Type:** Optional (Full-Time, Remote, etc.)

  Understanding Results

  Comprehensive job data
  Company info and profile links
  Direct application links
  Location and job descriptions

  Customizing Search Parameters

  Edit the Create Snapshot ID node to change:

  Time range (e.g., “Past month”)
  Result limits
  Company filters

  🔧 Customization Options
  More Data Points:** Add salary, seniority, applicants, etc.
  Custom Form Fields:** Add filters for salary, experience, industry
  Multiple Sheets:** Route results by job type or location

  🚨 Troubleshooting
  Bright Data connection failed:** Check API credentials and dataset access
  No job data extracted:** Verify search parameters and API limits
  Google Sheets permission denied:** Re-authenticate and check sharing
  Form not working:** Check webhook URL and field mappings
  Filter issues:** Review logic and data types
  Execution failed:** Check logs, retry logic, and network status

  📊 Use Cases & Examples
  Job Seeker Dashboard:** Automate job search and track applications
  Recruitment Pipeline:** Source candidates and monitor hiring trends
  Market Research:** Analyze job trends and salary benchmarks
  HR Analytics:** Support workforce planning and competitive insights

  ⚙️ Advanced Configuration
  Batch Processing:** Queue multiple searches with delays
  Search History:** Track and analyze past searches
  Tool Integration:** Connect to CRM, Slack, databases, BI tools

  📈 Performance & Limits
  Processing Time:** 30–60 seconds per search
  Concurrent Requests:** 2–3 (depends on Bright Data plan)
  Data Accuracy:** 95%+
  Success Rate:** 90%+
  Daily Capacity:** 50–200 searches
  Memory:** ~50MB per execution
  API Calls:** 3–4 Bright Data + 1 Google Sheets per search

  🤝 Support & Community
  n8n Community:** community.n8n.io
  Documentation:** docs.n8n.io
  Bright Data Support:** Via your Bright Data dashboard
  GitHub Issues:** Report bugs and request features

  🎯 Ready to Use!
  Your workflow is ready for automated LinkedIn job searching. Customize it to your recruiting or job search needs.

  Webhook URL: https://your-n8n-instance.com/webhook/linkedin-job-finder

  What Gets Extracted:

     *   ✅ Job Title *   ✅ Company Information *   ✅ Location Data *   ✅ Job Details *   ✅ Application Links *   ✅ Processing Timestamps  ### Use Cases:  *   🔍 Job Search Automation *   📊 Recruitment Intelligence *   📝 Market Research *   🎯 HR Analytics   

workflow_json:
  {"id":"Eo2mqDdtIQFdZhxp","meta":{"instanceId":"bc8ca75c203589705ae2e446cad7181d6f2a7cc1766f958ef9f34810e53b8cb2","templateCredsSetupCompleted":true},"name":"LinkedIn Job Finder Automation using Bright Data API & Google Sheets Integration","tags":[],"nodes":[{"id":"9617d433-62f7-4ddf-bf47-a9a3208aa248","name":"On form submission1","type":"n8n-nodes-base.formTrigger","position":[-660,-460],"webhookId":"37d0e84c-0cda-47f8-826d-9ae5b22ba1d5","parameters":{"options":{},"formTitle":"LinkedIn Job Finder","formFields":{"values":[{"fieldLabel":"City","requiredField":true},{"fieldLabel":"Job Title","requiredField":true},{"fieldLabel":"Country","requiredField":true},{"fieldType":"dropdown","fieldLabel":"Job_type(Optional)","fieldOptions":{"values":[{"option":"Full-Time"},{"option":"Part-Time"},{"option":"Remote"},{"option":"WFH"},{"option":"Contract"},{"option":"Internship"},{"option":"Freelance"}]}}]}},"typeVersion":2.2},{"id":"47c35950-354c-42e4-b707-60ed5b1eeb2f","name":"Check Final Status","type":"n8n-nodes-base.if","position":[320,-460],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"35ed620d-b5d5-4e97-bcc5-52b283d85616","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.status }}","rightValue":"ready"}]}},"typeVersion":2.2},{"id":"cef9c86d-98ce-4944-9907-d815cba406f4","name":"Create Snapshot ID","type":"n8n-nodes-base.httpRequest","position":[-360,-460],"parameters":{"url":"https://api.brightdata.com/datasets/v3/trigger","method":"POST","options":{},"jsonBody":"={\n  \"input\": [\n    {\n      \"location\": \"{{$node['On form submission1'].json['City'] ? $node['On form submission1'].json['City'].trim() : ''}}\",\n      \"keyword\": \"{{$node['On form submission1'].json['Job Title'] ? $node['On form submission1'].json['Job Title'].trim() : ''}}\",\n      \"country\": \"{{$node['On form submission1'].json['Country'] ? $node['On form submission1'].json['Country'].slice(0, 2).toUpperCase() : ''}}\",\n      \"time_range\": \"Past week\",\n      \"job_type\": \"{{ ['full-time', 'part-time', 'internship', 'contract', 'temporary'].includes($node['On form submission1'].json['Job_type']?.toLowerCase()) ? $node['On form submission1'].json['Job_type'] : '' }}\"\n    }\n  ],\n  \"custom_output_fields\": [\n    \"url\",\n    \"job_posting_id\",\n    \"job_title\",\n    \"company_name\",\n    \"company_id\",\n    \"job_location\",\n    \"job_summary\",\n    \"job_seniority_level\",\n    \"job_function\",\n    \"job_employment_type\",\n    \"job_industries\",\n    \"job_base_pay_range\",\n    \"company_url\",\n    \"job_posted_time\",\n    \"job_num_applicants\",\n    \"discovery_input\",\n    \"apply_link\",\n    \"country_code\",\n    \"title_id\",\n    \"company_logo\",\n    \"job_posted_date\",\n    \"job_poster\",\n    \"application_availability\",\n    \"job_description_formatted\",\n    \"base_salary\",\n    \"timestamp\",\n    \"error\",\n    \"error_code\",\n    \"warning\",\n    \"warning_code\"\n  ]\n}\n","sendBody":true,"sendQuery":true,"sendHeaders":true,"specifyBody":"json","queryParameters":{"parameters":[{"name":"dataset_id","value":"YOUR_DATASET_ID_HERE"},{"name":"include_errors","value":"true"},{"name":"type","value":"discover_new"},{"name":"discover_by","value":"keyword"},{"name":"limit_per_input","value":"2"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_BRIGHTDATA_API_TOKEN_HERE"}]}},"typeVersion":4.2},{"id":"66705bee-6424-4f6f-8c24-d9aa7a198399","name":"Check Snapshot Status","type":"n8n-nodes-base.httpRequest","position":[20,-460],"parameters":{"url":"=https://api.brightdata.com/datasets/v3/progress/{{ $json.snapshot_id }}","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"format","value":"json"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_BRIGHTDATA_API_TOKEN_HERE"}]}},"typeVersion":4.2},{"id":"b5f9e1c9-eace-4a68-a084-dc254b1b9c46","name":"Wait 1 minute","type":"n8n-nodes-base.wait","position":[620,-100],"webhookId":"7047efad-de41-4608-b95c-d3e0203ef620","parameters":{"unit":"minutes","amount":1},"typeVersion":1.1},{"id":"fff887f5-0388-4667-a5e9-7ef72ea36ac0","name":"Scrape Data from SnapID","type":"n8n-nodes-base.httpRequest","position":[900,-500],"parameters":{"url":"=https://api.brightdata.com/datasets/v3/snapshot/{{ $json.snapshot_id }}","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"format","value":"json"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_BRIGHTDATA_API_TOKEN_HERE"}]}},"typeVersion":4.2},{"id":"57572d1d-3366-447d-8186-62a121824033","name":"Update Job Lists in sheet","type":"n8n-nodes-base.googleSheets","position":[1380,-500],"parameters":{"columns":{"value":{"Location":"={{ $json.job_location }}","Job Title":"={{ $json.job_title }}","Apply Link":"={{ $json.apply_link }}","Job Detail":"={{ $json.job_summary }}","Company URL":"={{ $json.company_url }}","Company Name ":"={{ $json.company_name }}"},"schema":[{"id":"Company URL","type":"string","display":true,"required":false,"displayName":"Company URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Job Title","type":"string","display":true,"required":false,"displayName":"Job Title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Company Name ","type":"string","display":true,"required":false,"displayName":"Company Name ","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Location","type":"string","display":true,"required":false,"displayName":"Location","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Job Detail","type":"string","display":true,"required":false,"displayName":"Job Detail","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Apply Link","type":"string","display":true,"removed":false,"required":false,"displayName":"Apply Link","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID_HERE/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_SHEET_ID_HERE","cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID_HERE/edit?usp=drivesdk","cachedResultName":"LinkedIn"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YOUR_GOOGLE_SHEETS_CREDENTIAL_ID","name":"Google Sheets Credential"}},"typeVersion":4.6},{"id":"3afbef52-97fe-4ead-8d57-d8e98e684b47","name":"Filter","type":"n8n-nodes-base.filter","position":[1140,-500],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"eb682420-fc89-4e01-a491-5a4a3f6bf10f","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $json.job_summary }}","rightValue":"={{ $json.shortCommonName }}"}]}},"typeVersion":2.2},{"id":"1badd4f4-4f66-4777-a2b7-3343f2afb2b3","name":"If","type":"n8n-nodes-base.if","position":[620,-480],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f01bd215-c406-493c-a6e4-2b8ec5686b44","operator":{"type":"number","operation":"notEquals"},"leftValue":"={{ $json.records }}","rightValue":"={{ 0 }}"}]}},"typeVersion":2.2},{"id":"df16ac92-0f96-40cd-ad9c-da17332a3e81","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-760,-620],"parameters":{"color":2,"width":300,"height":340,"content":"🔹 Search by Keyword — Form Trigger\nPurpose:\nCollects the user-submitted job search criteria including city, job title, country, and job type.\nTriggers the workflow when new search parameters are entered."},"typeVersion":1},{"id":"454c5db0-beb7-4a0b-95ca-8308a114e420","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-440,-660],"parameters":{"color":3,"width":320,"height":380,"content":"🔹 LinkedIn Job Search Fetcher — HTTP Request (POST to Bright Data)\nPurpose:\nSends the job search criteria to Bright Data's LinkedIn dataset API.\nInitiates the scraping job to fetch LinkedIn job postings matching the criteria."},"typeVersion":1},{"id":"c68c4da8-6965-45cb-833f-0bb3a99a289c","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-100,-640],"parameters":{"color":4,"width":300,"height":360,"content":"🔹 Check Delivery Status of Snap ID — HTTP Request (GET)\nPurpose:\nChecks the status of the scraping job using the returned snapshot_id.\nEnsures the task is complete before continuing to data extraction."},"typeVersion":1},{"id":"57d2b098-41ce-4ee6-ab1d-130e2645dc3e","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[500,-220],"parameters":{"color":7,"width":380,"height":280,"content":"🔹 Wait 1 minute — Wait Node\nPurpose:\nDelays the workflow execution by 1 minute.\nPrevents frequent polling of Bright Data API to reduce load and errors."},"typeVersion":1},{"id":"47fc7436-1f6b-4bec-b88c-4df12ceddf57","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[220,-640],"parameters":{"color":5,"width":270,"height":360,"content":"🔹 Check Final Status — IF Node #1\nPurpose:\nConditionally checks if snapshot status is \"ready\".\nIf yes → proceed to download scraped data.\nIf no → loop back to Wait Node and recheck."},"typeVersion":1},{"id":"7a978cd2-efad-474d-92b7-3f9f28155f00","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[820,-680],"parameters":{"color":6,"width":260,"height":400,"content":"🔹 Decode Snapshot from Response — HTTP Request (GET)\nPurpose:\nDownloads the final scraped LinkedIn job dataset using the ready snapshot ID.\nContains full job posting data in JSON format."},"typeVersion":1},{"id":"6ff9b0c5-b18c-44e9-b671-86388428927b","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1300,-660],"parameters":{"color":3,"width":340,"height":400,"content":"🔹 Google Sheets — Google Sheets (AppendOrUpdate)\nPurpose:\nAppends each LinkedIn job result into your Google Sheet.\nCaptures data fields like job title, company name, location, job details, and apply links."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"57896d29-3f06-44b6-bb08-964875ffc7fb","connections":{"If":{"main":[[{"node":"Scrape Data from SnapID","type":"main","index":0}]]},"Filter":{"main":[[{"node":"Update Job Lists in sheet","type":"main","index":0}]]},"Wait 1 minute":{"main":[[{"node":"Check Snapshot Status","type":"main","index":0}]]},"Check Final Status":{"main":[[{"node":"If","type":"main","index":0}],[{"node":"Wait 1 minute","type":"main","index":0}]]},"Create Snapshot ID":{"main":[[{"node":"Check Snapshot Status","type":"main","index":0}]]},"On form submission1":{"main":[[{"node":"Create Snapshot ID","type":"main","index":0}]]},"Check Snapshot Status":{"main":[[{"node":"Check Final Status","type":"main","index":0}]]},"Scrape Data from SnapID":{"main":[[{"node":"Filter","type":"main","index":0}]]}}}


name: Automated Weekly Google Calendar Summary via Email with AI ✨🗓️📧
author_name: Jez
author_username: jez
categories: []
created_at: 2025-06-08T12:50:39.274Z
updated_at: 2025-06-08T12:50:39.274Z
url: https://n8n.io/workflows/4783
scraped_at: 2025-06-19 22:07:56
description:
  Workflow: Automated Weekly Google Calendar Summary via Email with AI ✨🗓️📧

  Get a personalized, AI-powered summary of your upcoming week's Google Calendar events delivered straight to your inbox! This workflow automates the entire process, from fetching events to generating an intelligent summary and emailing it to you.

  🌟 Overview

  This n8n workflow connects to your Google Calendar, retrieves events for the upcoming week (Monday to Sunday, based on the day the workflow runs), uses Google Gemini AI to create a well-structured and insightful summary, and then emails this summary to you. It's designed to help you start your week organized and aware of your commitments.

  Key Features:

  Automated Weekly Summary:** Runs on a schedule (default: weekly) to keep you updated.
  AI-Powered Insights:** Leverages Google Gemini to not just list events, but to identify important ones and offer a brief weekly outlook.
  Personalized Content:** Uses your specified timezone, locale, name, and city for accurate and relevant information.
  Clear Formatting:** Events are grouped by day and displayed chronologically with start and end times. Important events are highlighted.
  Email Delivery:** Receive your schedule directly in your inbox in a clean HTML format.
  Customizable:** Easily adapt to your specific calendar, AI preferences, and email settings.

  ⚙️ How It Works: Step-by-Step

  The workflow consists of the following nodes, working in sequence:

  weekly_schedule (Schedule Trigger):
      What it does: Initiates the workflow.
      Default: Triggers once a week at 12:00 PM. You can adjust this to your preference (e.g., Sunday evening or Monday morning).

  locale (Set Node):
      What it does: This is a crucial node for you to configure! It sets user-specific parameters like your preferred language/region (users-locale), timezone (users-timezone), your name (users-name), and your home city (users-home-city). These are used throughout the workflow for correct date/time formatting and personalizing the AI prompt.

  date-time (Set Node):
      What it does: Dynamically generates various date and time strings based on the current execution time and the locale settings. This is used to define the precise 7-day window (from the current day to 7 days ahead, ending at midnight) for fetching calendar events.

  get_next_weeks_events (Google Calendar Node):
      What it does: Connects to your specified Google Calendar and fetches all events within the 7-day window calculated by the date-time node.
      Requires: Google Calendar API credentials and the ID of the calendar you want to use.

  simplify_evens_json (Code Node):
      What it does: Runs a small JavaScript snippet to clean up the raw event data from Google Calendar. It removes several fields that aren't needed for the summary (like htmlLink, etag, iCalUID), making the data more concise for the AI.

  aggregate_events (Aggregate Node):
      What it does: Takes all the individual (and now simplified) event items and groups them into a single JSON array called eventdata. This is the format the AI agent expects for processing.

  Google Gemini (LM Chat Google Gemini Node):
      What it does: This node is the connection point to the Google Gemini language model.
      Requires: Google Gemini (or PaLM) API credentials.

  event_summary_agent (Agent Node):
      What it does: This is where the magic happens! It uses the Google Gemini model and a detailed system prompt to generate the weekly schedule summary.
      The Prompt Instructs the AI to:
          Start with a friendly greeting.
          Group events by day (Monday to Sunday) for the upcoming week, using the user's timezone and locale.
          Format event times clearly (e.g., 09:30 AM - 10:30 AM: Event Summary).
          Identify and prefix "IMPORTANT:" to events with keywords like "urgent," "deadline," "meeting," etc., in their summary or description.
          Conclude with a 1-2 sentence helpful insight about the week's schedule.
          Process the input eventdata (the JSON array of calendar events).

  Markdown (Markdown to HTML Node):
      What it does: Converts the text output from the event_summary_agent (which is generated in Markdown format for easy structure) into HTML. This ensures the email body is well-formatted with proper line breaks, lists, and emphasis.

  send_email (Email Send Node):
      What it does: Sends the final HTML summary to your specified email address.
      Requires: SMTP (email sending) credentials and your desired "From" and "To" email addresses.

  🚀 Getting Started: Setup Instructions

  Follow these steps to get the workflow up and running:

  Import the Workflow:
      Download the workflow JSON file.
      In your n8n instance, go to "Workflows" and click the "Import from File" button. Select the downloaded JSON file.

  Configure Credentials:
      You'll need to set up credentials for three services. In n8n, go to "Credentials" on the left sidebar and click "Add credential."
      Google Calendar API:
          Search for "Google Calendar" and create new credentials using OAuth2. Follow the authentication flow.
          Once created, select these credentials in the get_next_weeks_events node.
      Google Gemini (PaLM) API:
          Search for "Google Gemini" or "Google PaLM" and create new credentials. You'll typically need an API key from Google AI Studio or Google Cloud.
          Once created, select these credentials in the Google Gemini node.
      SMTP / Email:
          Search for your email provider (e.g., "SMTP," "Gmail," "Outlook") and create credentials. This usually involves providing your email server details, username, and password/app password.
          Once created, select these credentials in the send_email node.

  ‼️ IMPORTANT: Customize User Settings in the locale Node:
      Open the locale node.
      Update the following values in the "Assignments" section:
          users-locale: Set your locale string (e.g., "en-AU" for English/Australia, "en-US" for English/United States, "de-DE" for German/Germany). This affects how dates, times, and numbers are formatted.
          users-timezone: Set your timezone string (e.g., "Australia/Sydney", "America/New_York", "Europe/London"). This is critical for ensuring event times are displayed correctly for your location.
          users-name: Enter your name (e.g., "Bob"). This is used to personalize the email greeting.
          users-home-city: Enter your home city (e.g., "Sydney"). This can be used for additional context by the AI.

  Configure the get_next_weeks_events (Google Calendar) Node:
      Open the node.
      In the "Calendar" parameter, you need to specify which calendar to fetch events from.
          The default might be a placeholder like c_4d9c2d4e139327143ee4a5bc4db531ffe074e98d21d1c28662b4a4d4da898866@group.calendar.google.com.
          Change this to your primary calendar (often your email address) or the specific Calendar ID you want to use. You can find Calendar IDs in your Google Calendar settings.

  Configure the send_email Node:
      Open the node.
      Set the fromEmail parameter to the email address you want the summary to be sent from.
      Set the toEmail parameter to the email address(es) where you want to receive the summary.
      You can also customize the subject line if desired.

  (Optional) Customize the AI Prompt in event_summary_agent:
      If you want to change how the AI summarizes events (e.g., different keywords for important events, a different tone, or specific formatting tweaks), you can edit the "System Message" within the event_summary_agent node's parameters.

  (Optional) Adjust the Schedule in weekly_schedule:
      Open the weekly_schedule node.
      Modify the "Rule" to change when and how often the workflow runs (e.g., a specific day of the week, a different time).

  Activate the Workflow:
      Once everything is configured, toggle the "Active" switch in the top right corner of the workflow editor to ON.

  📬 What You Get

  You'll receive an email (based on your schedule) with a subject like "Next Week Calendar Summary : [Start Date] - [End Date]". The email body will contain:

  A friendly greeting.
  Your schedule for the upcoming week (Monday to Sunday), with events listed chronologically under each day.
  Event times displayed in your local timezone (e.g., 09:30 AM - 10:30 AM: Team Meeting).
  Priority events clearly marked (e.g., IMPORTANT: 02:00 PM - 03:00 PM: Project Deadline Review).
  A brief, insightful observation about your week's schedule.

  🛠️ Troubleshooting & Notes

  Timezone is Key:** Ensure your users-timezone in the locale node is correct. This is the most common source of incorrect event times.
  Google API Permissions:** When setting up Google Calendar and Gemini credentials, make sure you grant the necessary permissions.
  AI Output Varies:** The AI-generated summary can vary slightly each time. The prompt is designed to guide it, but LLMs have inherent creativity.
  Calendar Event Details:** The quality of the summary (especially for identifying important events) depends on how detailed your calendar event titles and descriptions are. Including keywords like "meeting," "urgent," "prepare for," etc., in your events helps the AI.

  💬 Feedback & Contributions

  Feel free to modify and enhance this workflow! If you have suggestions, improvements, or run into issues, please share them in the n8n community.

  Happy scheduling!

nodes_used:
  ["n8n-nodes-base.emailSend","n8n-nodes-base.googleCalendar","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"id":"81UkThrSnnFw6IJo","meta":{"instanceId":"3612a0c89f35a354ddd1216385240db51b4635fde7cae2a0d5004be915b832f3","templateCredsSetupCompleted":true},"name":"Google Calendar Coming Week","tags":[],"nodes":[{"id":"b4c54286-a4c5-4a1b-87ca-a37fa1fcb2aa","name":"weekly_schedule","type":"n8n-nodes-base.scheduleTrigger","position":[-180,-40],"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtHour":12}]}},"typeVersion":1.2},{"id":"57a88176-a291-4d65-bfd2-868d4e50befb","name":"get_next_weeks_events","type":"n8n-nodes-base.googleCalendar","position":[1300,-40],"parameters":{"options":{},"timeMax":"={{ $json['users-current-day-1-minute-before-midnight-plus-7-days-iso'] }}","timeMin":"={{ $json['users-current-day-1-minute-before-midnight-iso'] }}","calendar":{"__rl":true,"mode":"list","value":"c_4d9c2d4e139327143ee4a5bc4db531ffe074e98d21d1c28662b4a4d4da898866@group.calendar.google.com","cachedResultName":"n8n-personal-assistant-demo"},"operation":"getAll","returnAll":true},"credentials":{"googleCalendarOAuth2Api":{"id":"a1DI60kDgcdbIlXb","name":"Google Calendar account"}},"typeVersion":1.3},{"id":"ed2eacbb-453f-4e5b-be3a-0c45e3506e1b","name":"Google Gemini","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[2840,580],"parameters":{"options":{},"modelName":"models/gemini-2.5-flash-preview-05-20"},"credentials":{"googlePalmApi":{"id":"lBQrszvhtstelPlO","name":"Google Gemini(PaLM) Api account 4"}},"typeVersion":1},{"id":"20670d58-0c0a-4f17-9a89-131bb2cd2caa","name":"event_summary_agent","type":"@n8n/n8n-nodes-langchain.agent","position":[2740,-40],"parameters":{"text":"={{ $json.eventdata }}","options":{"systemMessage":"=You have been given a JSON array of Google Calendar events for the upcoming week (Monday to Sunday). Today is Sunday, {{ $('locale').item.json['users-current-date'] ? $('locale').item.json['users-current-date'] : $now.setZone($('locale').item.json['users-timezone'] ?? 'Australia/Sydney').setLocale($('locale').item.json['users-locale'] ?? 'en-AU').toLocaleString({ weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' }) }}.\nEach event object in the array has 'summary', 'start.dateTime', 'end.dateTime', and 'description'. Your designated timezone is '{{ $('locale').item.json['users-timezone'] }}' and locale '{{ $('locale').item.json['users-locale'] }}'.\n\nThe users name is: {{ $('locale').item.json['users-name'] }}\nThe user is located in: {{ $('locale').item.json['users-home-city'] }}\n\nYour task is to create a well-formatted weekly schedule summary for an email.\n\n1.  **Greeting**: Start with a friendly greeting, for example: \"Here's your schedule for the upcoming week:\"\n\n2.  **Daily Schedule**:\n    *   Group events by day (e.g., Monday, June 9, 2025; Tuesday, June 10, 2025). Determine the correct dates for the upcoming week (Monday to Sunday) based on today's date.\n    *   For each day of the upcoming week, list its events chronologically.\n    *   Format each event as: `HH:MM AM/PM - HH:MM AM/PM: Event Summary`. For example: `09:30 AM - 10:30 AM: Team Meeting`.\n    *   Parse the `start.dateTime` and `end.dateTime` (which are ISO strings with timezone offsets like `+10:00`) and display them correctly for the '{{ $('locale').item.json['users-timezone'] }}' timezone.\n    *   If a day has no events, state \"No events scheduled for this day.\"\n\n3.  **Priority Events**:\n    *   Review the 'summary' and 'description' fields for keywords such as \"important\", \"urgent\", \"deadline\", \"meeting\", \"critical\", \"prepare\", or similar terms that indicate significance.\n    *   Mark these priority events by prefixing the event line with \"IMPORTANT: \". For example: `IMPORTANT: 02:00 PM - 03:00 PM: Project Deadline Review`.\n    *   If the 'description' provides actionable context for a priority event (e.g., \"Preparation needed: review X document\"), you can briefly mention this context after the event summary.\n\n4.  **Weekly Insight**:\n    *   Conclude with 1-2 sentences offering a helpful insight, observation, or piece of advice related to the week's schedule. Examples:\n        *   \"Thursday looks like your busiest day, so you might want to plan accordingly.\"\n        *   \"Remember to allocate some time to prepare for the client presentation on Wednesday.\"\n        *   \"This week seems to have a good balance of meetings and free time.\"\n\n5.  **Input Data Structure Reminder**: The calendar events are provided as a JSON array. You need to process this entire array.\n\nPlease generate only the text content suitable for the body of an email. Do not include any preamble (like \"Okay, here is the summary...\") or sign-off beyond the requested content."},"promptType":"define"},"typeVersion":2},{"id":"99885550-0c81-4513-86f0-8e82b0d5e0fb","name":"send_email","type":"n8n-nodes-base.emailSend","position":[3800,-40],"webhookId":"7748b0f5-1a6a-42bf-b1c0-63051d6a62a2","parameters":{"html":"={{ $json['email-html'] }}","options":{"appendAttribution":false},"subject":"=Next Week Calendar Summary : {{ $now.plus({ days: 1 }).day }}-{{ $now.plus({ days: 7 }).toLocaleString(DateTime.DATE_MED) }}"},"credentials":{"smtp":{"id":"AoLopFA5yBSkhbrF","name":"SMTP account"}},"typeVersion":2.1},{"id":"9199043b-2255-4a29-9c76-e6edbda41cc5","name":"locale","type":"n8n-nodes-base.set","position":[300,-40],"parameters":{"options":{},"assignments":{"assignments":[{"id":"2fa6da62-0c1b-4abe-b1d1-45dab7c22ab0","name":"users-locale","type":"string","value":"en-AU"},{"id":"e997127b-a7b1-4684-82b3-3e5d66be07fa","name":"users-timezone","type":"string","value":"Australia/Sydney"},{"id":"082e8d8f-5b20-4fc0-a59e-6deb48cb1406","name":"users-name","type":"string","value":"Bob"},{"id":"4a867353-6d0c-4bad-90f9-e739ff1da010","name":"users-home-city","type":"string","value":"Sydney"}]}},"typeVersion":3.4},{"id":"b92e0c62-d83f-417d-9ed1-839b3f680edd","name":"simplify_evens_json","type":"n8n-nodes-base.code","position":[1800,-40],"parameters":{"jsCode":"// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n  delete item.json.htmlLink\n  delete item.json.etag\n  delete item.json.iCalUID\n  delete item.json.start.timeZone\n  delete item.json.end.timeZone\n  delete item.json.kind\n  delete item.json.reminders\n  delete item.json.organizer\n  delete item.json.creator\n  delete item.json.created\n  delete item.json.updated\n  delete item.json.status\n  delete item.json.eventType\n  delete item.json.id\n}\n\nreturn $input.all();"},"typeVersion":2},{"id":"c3639753-7b59-40ea-b59b-32dc00769146","name":"aggregate_events","type":"n8n-nodes-base.aggregate","position":[2320,-40],"parameters":{"options":{},"aggregate":"aggregateAllItemData","destinationFieldName":"eventdata"},"typeVersion":1},{"id":"bb2804c2-130e-4d53-9eac-cb4f978056d1","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-360,-1100],"parameters":{"color":3,"width":960,"height":520,"content":"### Workflow Overview: Google Calendar Coming Week 🗓️➡️📧\n\nThis n8n workflow automates the process of generating and emailing a summary of your upcoming week's Google Calendar events.\n\n**How it works:**\n1.  **Triggers weekly:** Starts automatically based on a schedule.\n2.  **Sets user context:** Configures your locale, timezone, name, and city.\n3.  **Calculates date ranges:** Determines the start and end dates for the upcoming week.\n4.  **Fetches calendar events:** Retrieves events from your specified Google Calendar for that week.\n5.  **Simplifies data:** Removes unnecessary information from the event data.\n6.  **Aggregates events:** Combines all events into a single list for AI processing.\n7.  **Generates summary:** Uses Google Gemini AI to create a human-readable summary, highlighting important events.\n8.  **Formats for email:** Converts the AI's summary from Markdown to HTML.\n9.  **Sends email:** Emails the formatted summary to you.\n\n**Key User Actions:**\n*   Configure the **`locale`** node with your specific details (timezone, locale, name, city).\n*   Set up credentials for **Google Calendar**, **Google Gemini**, and your **SMTP (Email)** service.\n*   Specify your target Google Calendar ID in the **`get_next_weeks_events`** node.\n*   Update the \"To\" and \"From\" email addresses in the **`send_email`** node."},"typeVersion":1},{"id":"4e8a4adb-fde7-403d-968e-7d15c2fbe770","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[140,-400],"parameters":{"color":4,"width":440,"height":400,"content":"⚙️ **locale (Set)**\n\n*   **Purpose:** Defines essential user-specific settings for personalization and correct date/time processing.\n*   **‼️ USER ACTION REQUIRED ‼️:**\n    *   `users-locale`: (e.g., `en-AU`, `en-US`, `de-DE`) - Affects date/time/number formatting.\n    *   `users-timezone`: (e.g., `Australia/Sydney`, `America/New_York`) - Crucial for accurate event times.\n    *   `users-name`: (e.g., `Bob`) - Used in the email greeting.\n    *   `users-home-city`: (e.g., `Sydney`) - Provides context for the AI.\n*   **Note:** These values are used by downstream nodes."},"typeVersion":1},{"id":"a409ad6d-56be-4b3c-a1e3-b2b3e2c00b63","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-360,-400],"parameters":{"color":4,"width":440,"height":400,"content":"🗓️ **weekly_schedule (Trigger)**\n\n*   **Purpose:** Initiates the workflow automatically.\n*   **Details:** By default, runs once a week at 12:00 PM.\n*   **To Modify:** Adjust the \"Rule\" settings (interval, time, day) if you need a different schedule."},"typeVersion":1},{"id":"714b924c-4cbc-4864-b833-e80b3dcecde8","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[640,-400],"parameters":{"color":4,"width":440,"height":400,"content":"⏰ **date_time (Set)**\n\n*   **Purpose:** Generates various date and time strings based on the current execution time and the settings from the `locale` node.\n*   **Details:** Creates values like \"users-current-date\", \"users-current-day-1-minute-before-midnight-iso\", etc., which are used to define the 7-day window for fetching calendar events.\n*   **To Modify:** Usually no changes needed here; it's dynamic."},"typeVersion":1},{"id":"a31c71e7-98c8-4185-891e-9543ceac217d","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1140,-400],"parameters":{"color":4,"width":440,"height":400,"content":"📅 **get_next_weeks_events (Google Calendar)**\n\n*   **Purpose:** Fetches events from a specified Google Calendar.\n*   **Details:** Uses `timeMin` and `timeMax` from the `date-time` node to get events for the upcoming 7 days.\n*   **‼️ USER ACTION REQUIRED ‼️:**\n    1.  **Credentials:** Connect your Google Calendar account.\n    2.  **Calendar ID:** Change the `calendar` parameter (currently `c_4d9...group.calendar.google.com`) to *your* desired Google Calendar ID."},"typeVersion":1},{"id":"5e5830c6-9e43-43c7-852e-b9982f6deb6b","name":"date_time","type":"n8n-nodes-base.set","position":[820,-40],"parameters":{"options":{},"assignments":{"assignments":[{"id":"954044f7-3c08-48c2-af9c-59a72690ad76","name":"users-current-date","type":"string","value":"={{\n  $now.setZone($('locale').item.json['users-timezone'] ?? 'UTC').setLocale($('locale').item.json['users-locale'] ?? 'en-US').toLocaleString(DateTime.DATE_FULL)\n}}"},{"id":"2c3a0a1a-cc05-4b5d-b175-20732706aefb","name":"users-current-time","type":"string","value":"={{ $now.setZone($('locale').item.json['users-timezone'] ?? 'UTC').setLocale($('locale').item.json['users-locale'] ?? 'en-US').toLocaleString(DateTime.TIME_SIMPLE) }}"},{"id":"764b3b1a-6a6e-4b92-8f41-ae49405bc72a","name":"users-date-time","type":"string","value":"={{ $now.setZone($('locale').item.json['users-timezone']) }}"},{"id":"4c2851ef-175e-4f81-95af-5671171fdf16","name":"users-date-time-full","type":"string","value":"={{ $now.setZone($('locale').item.json['users-timezone'] ?? 'UTC').setLocale($('locale').item.json['users-locale'] ?? 'en-US').toLocaleString(DateTime.DATETIME_FULL) }}"},{"id":"4ae2c38b-f93a-4b56-9078-d9675a12ec8b","name":"users-date-time-huge","type":"string","value":"={{ $now.setZone($('locale').item.json['users-timezone'] ?? 'UTC').setLocale($('locale').item.json['users-locale'] ?? 'en-US').toFormat('cccc, MMMM d, yyyy, h:mm a') }}"},{"id":"1011c2bf-d311-424d-8537-1788597065d4","name":"users-current-date-plus-1","type":"string","value":"={{   $now.plus({ days: 1 }).setZone($('locale').item.json['users-timezone'] ?? 'UTC').setLocale($('locale').item.json['users-locale'] ?? 'en-US').toLocaleString(DateTime.DATE_FULL) }}"},{"id":"343ec7d5-fcb5-454d-b947-4b0f2e94f930","name":"users-current-date-plus-7","type":"string","value":"={{   $now.plus({ days: 7 }).setZone($('locale').item.json['users-timezone'] ?? 'UTC').setLocale($('locale').item.json['users-locale'] ?? 'en-US').toLocaleString(DateTime.DATE_FULL) }}"},{"id":"ce0de19d-9cb1-4918-ade5-47f22f35f8e8","name":"users-current-day-1-minute-before-midnight","type":"string","value":"={{\n  $now.setZone($('locale').item.json['users-timezone'] ?? 'UTC')\n      .endOf('day')\n      .setLocale($('locale').item.json['users-locale'] ?? 'en-US')\n      .toLocaleString(DateTime.DATETIME_FULL)\n}}"},{"id":"800dff91-469d-4a2b-acb0-a0b79d0b9341","name":"users-current-day-1-minute-before-midnight-plus-7-days","type":"string","value":"={{   $now.setZone($('locale').item.json['users-timezone'] ?? 'UTC')       .plus({ days: 7 })       .endOf('day')       .setLocale($('locale').item.json['users-locale'] ?? 'en-US')       .toLocaleString(DateTime.DATETIME_FULL) }}"},{"id":"d04c43fe-1f6d-4e7e-b82f-70cebb7484a6","name":"users-current-day-1-minute-before-midnight-iso","type":"string","value":"={{\n  $now.setZone($('locale').item.json['users-timezone'] ?? 'UTC')\n      .endOf('day')\n      .toISO()\n}}"},{"id":"5aee9416-0ad6-43b9-936f-edce6a292cce","name":"users-current-day-1-minute-before-midnight-plus-7-days-iso","type":"string","value":"={{   $now.setZone($('locale').item.json['users-timezone'] ?? 'UTC')       .plus({ days: 7 })       .endOf('day')       .toISO() }}"}]}},"typeVersion":3.4},{"id":"f20a83fd-2484-4dc7-92a1-a438c2cf8e02","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1640,-400],"parameters":{"color":4,"width":440,"height":400,"content":"✨ **simplify_evens_json (Code)**\n\n*   **Purpose:** Cleans the raw event data from Google Calendar.\n*   **Details:** Runs JavaScript to remove fields like `htmlLink`, `etag`, `iCalUID`, etc., to provide a cleaner dataset to the AI.\n*   **To Modify:** Only if you need to keep or remove specific event fields not covered."},"typeVersion":1},{"id":"c5e40e35-8dfa-491c-ba67-21b83f71334b","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[2140,-400],"parameters":{"color":4,"width":440,"height":400,"content":"➕ **aggregate_events (Aggregate)**\n\n*   **Purpose:** Combines all individual simplified event items into a single JSON array.\n*   **Details:** Creates a field named `eventdata` which contains the list of all events. This is necessary for the AI agent to process all events at once.\n*   **To Modify:** Usually no changes needed."},"typeVersion":1},{"id":"db11c407-a238-48ef-9398-1842c1046340","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[2640,220],"parameters":{"color":6,"width":440,"height":400,"content":"🧠 **Google Gemini (Language Model)**\n\n*   **Purpose:** Establishes the connection to the Google Gemini AI model.\n*   **Details:** This node itself doesn't do the processing but provides the AI capability to the `event_summary_agent`.\n*   **‼️ USER ACTION REQUIRED ‼️:**\n    *   **Credentials:** Set up and select your Google Gemini (PaLM) API credentials.\n    *   **Model Name:** Default is `models/gemini-2.5-flash-preview-05-20`. Change if needed."},"typeVersion":1},{"id":"692413bc-58f9-4d09-a7f7-796d50894e3b","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[3140,-400],"parameters":{"color":4,"width":440,"height":400,"content":"📄➡️🌐 **markdown_to_html (Converter)**\n\n*   **Purpose:** Converts the Markdown text generated by the `event_summary_agent` into HTML.\n*   **Details:** Ensures the email body is well-formatted (line breaks, bolding, lists, emojis).\n*   **To Modify:** Usually no changes needed. Options like `emoji` and `simpleLineBreaks` are enabled."},"typeVersion":1},{"id":"d2803020-1f12-4207-a9c3-678fbb472daf","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","position":[3640,-400],"parameters":{"color":4,"width":440,"height":400,"content":"📧 **send_email (Email)**\n\n*   **Purpose:** Sends the final HTML summary as an email.\n*   **Details:** Uses the HTML output from the `Markdown` node as the email body. The subject is dynamically generated.\n*   **‼️ USER ACTION REQUIRED ‼️:**\n    1.  **Credentials:** Configure and select your SMTP (email sending) account.\n    2.  `fromEmail`: Set your desired sender email address.\n    3.  `toEmail`: Set the recipient email address(es).\n    *   **To Modify (Optional):** Customize the `subject` line format."},"typeVersion":1},{"id":"73c88ce5-9fa6-418f-b4cc-0b646f5708e7","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[2640,-400],"parameters":{"color":4,"width":440,"height":400,"content":"🤖 **event_summary_agent (AI Agent)**\n\n*   **Purpose:** Generates a well-formatted weekly schedule summary using the AI model.\n*   **Details:** Takes the `eventdata` (from `aggregate_events`) and a detailed prompt (under \"System Message\") that instructs the AI on output structure, date formatting, priority event identification, and weekly insights.\n*   **To Modify:** The \"System Message\" can be tweaked to change:\n    *   Greeting style.\n    *   Date/time formats (though largely controlled by `locale`).\n    *   Keywords for \"IMPORTANT\" events (`urgent`, `deadline`, etc.).\n    *   The style or focus of the \"Weekly Insight.\""},"typeVersion":1},{"id":"6febb866-888c-4e72-a6b8-296a826b7e66","name":"markdown_to_html","type":"n8n-nodes-base.markdown","position":[3320,-40],"parameters":{"mode":"markdownToHtml","options":{"emoji":true,"simpleLineBreaks":true},"markdown":"={{ $json.output }}","destinationKey":"email-html"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"db6385a3-bd01-4cc0-be20-cb1388b31cdc","connections":{"locale":{"main":[[{"node":"date_time","type":"main","index":0}]]},"date_time":{"main":[[{"node":"get_next_weeks_events","type":"main","index":0}]]},"Google Gemini":{"ai_languageModel":[[{"node":"event_summary_agent","type":"ai_languageModel","index":0}]]},"weekly_schedule":{"main":[[{"node":"locale","type":"main","index":0}]]},"aggregate_events":{"main":[[{"node":"event_summary_agent","type":"main","index":0}]]},"markdown_to_html":{"main":[[{"node":"send_email","type":"main","index":0}]]},"event_summary_agent":{"main":[[{"node":"markdown_to_html","type":"main","index":0}]]},"simplify_evens_json":{"main":[[{"node":"aggregate_events","type":"main","index":0}]]},"get_next_weeks_events":{"main":[[{"node":"simplify_evens_json","type":"main","index":0}]]}}}


name: Upwork Lead Generation: Extract Client Emails with LinkedIn Scraping and AI
author_name: Yaron Been
author_username: yaron-nofluff
categories: []
created_at: 2025-06-08T14:10:26.119Z
updated_at: 2025-06-08T14:10:26.119Z
url: https://n8n.io/workflows/4794
scraped_at: 2025-06-19 22:07:56
description:
  Automated solution to extract and organize contact information from Upwork job postings, enabling direct outreach to potential clients who post jobs matching your expertise.

  🚀 What It Does

  Scrapes job postings for contact information
  Extracts email addresses and social profiles
  Organizes leads in a structured format
  Enables direct outreach campaigns
  Tracks response rates

  🎯 Perfect For

  Freelancers looking to expand their client base
  Agencies targeting specific industries
  Sales professionals in the gig economy
  Recruiters sourcing clients
  Digital marketing agencies

  ⚙️ Key Benefits

  ✅ Access to hidden contact information  
  ✅ Expand your client base  
  ✅ Beat the competition to opportunities  
  ✅ Targeted outreach campaigns  
  ✅ Higher response rates  

  🔧 What You Need

  Upwork account
  n8n instance
  Email service (for outreach)
  CRM (optional)

  📊 Features

  Email pattern detection
  Social media profile extraction
  Company website discovery
  Lead scoring system
  Outreach tracking

  🛠️ Setup & Support

  Quick Setup

  Start collecting leads in 20 minutes with our step-by-step guide

  📺 Watch Tutorial

  💼 Get Expert Support

  📧 Direct Help



  Take control of your freelance career with direct access to potential clients. Transform how you find and secure projects on Upwork.

nodes_used:
  ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.lmChatOpenAi"]

workflow_json:
  {"id":"wAomRf96IfSnpTA7","meta":{"instanceId":"84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db","templateCredsSetupCompleted":true},"name":"Upwork Job Poster Email","tags":[],"nodes":[{"id":"aa72ce26-28ae-4dab-982f-be16fa123d87","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[420,360],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"wYwTjEv45IzlAOAu","name":"OpenAi account 2"}},"typeVersion":1.2},{"id":"94fba561-bc7e-4180-9b5d-beb9482b28b6","name":"Run Every X Hours","type":"n8n-nodes-base.scheduleTrigger","position":[0,140],"parameters":{"rule":{"interval":[{"field":"hours"}]}},"typeVersion":1.2},{"id":"603403fa-6f4b-4124-90ee-f852954e67a4","name":"Fetch Latest Upwork Jobs (Apify)","type":"n8n-nodes-base.httpRequest","position":[220,140],"parameters":{"url":"https://api.apify.com/v2/actor-tasks/<TASK_ID>/run-sync-get-dataset-items?token=<API_TOKEN>","options":{},"sendBody":true,"bodyParameters":{"parameters":[{}]}},"typeVersion":4.2},{"id":"0ed2ab83-1fcb-459c-aa6d-ef81c8414b45","name":"Extract Company or Person Name from Job","type":"@n8n/n8n-nodes-langchain.agent","position":[440,140],"parameters":{"text":"=Title: {{ $json.title }}\nDescription: {{ $json.description }}","options":{"systemMessage":"\"Extract the client's name or company name if it is mentioned. Return only the name or 'null' if not found.\""},"promptType":"define"},"typeVersion":1.9},{"id":"ccd6cf3c-2666-45eb-8dc3-6575180c897b","name":"Name is Found?","type":"n8n-nodes-base.if","position":[800,140],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"7366a7c6-e767-4aea-96e1-0cbbcbb26100","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.output }}","rightValue":"null"}]}},"typeVersion":2.2},{"id":"c9721e93-707d-45c1-a06b-68606157f995","name":"No Name Found - End Early","type":"n8n-nodes-base.noOp","position":[1240,320],"parameters":{},"typeVersion":1},{"id":"4164b6e9-9ba7-4fc6-a1b6-c976f626aea5","name":"Is It a Person or Company?","type":"@n8n/n8n-nodes-langchain.agent","position":[1180,40],"parameters":{"text":"={{ $json.output }}","options":{"systemMessage":"\"Extract the client's name or company name. Return only the 'person' if looks like a person's name if not return 'company'.\"\n"},"promptType":"define"},"typeVersion":1.9},{"id":"93c7b341-6257-4ee2-a54f-ecbfcdf0f89b","name":"Person or Company?","type":"n8n-nodes-base.if","position":[1540,40],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"729e7baa-ae94-4661-a061-7d656faf820f","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.output }}","rightValue":"company"}]}},"typeVersion":2.2},{"id":"7dcacf79-eb65-454c-97fd-16ea6aed2f94","name":"Search LinkedIn for Company (Phantombuster)","type":"n8n-nodes-base.httpRequest","position":[1960,-120],"parameters":{"url":"https://api.phantombuster.com/api/v2/agents/<AGENT_ID>/launch","method":"POST","options":{},"jsonBody":"={\n  \"argument\": {\n    \"search\": {{ $json.output }},\n    \"numberOfProfiles\": 5,\n    \"sessionCookie\": \"<LINKEDIN_SESSION_COOKIE>\"\n  },\n  \"saveArguments\": true\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"X-Phantombuster-Key-1","value":"<YOUR_API_KEY>"}]}},"typeVersion":4.2},{"id":"e2f7db77-373e-462a-bc57-57653e067e30","name":"Scrape LinkedIn Company Profile","type":"n8n-nodes-base.httpRequest","position":[2180,-120],"parameters":{"url":"https://api.phantombuster.com/api/v2/agents/<AGENT_ID>/launch","method":"POST","options":{},"jsonBody":"={\n  \"argument\": {\n    \"spreadsheetUrl\": {{ $json.profileUrl }},\n    \"sessionCookie\": \"<LINKEDIN_SESSION_COOKIE>\"\n  },\n  \"saveArguments\": true\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"X-Phantombuster-Key-1","value":"<YOUR_API_KEY>"}]}},"typeVersion":4.2},{"id":"14d7f669-dbc1-484e-b3c0-3d1e83d4c74f","name":"Find Company Email (Hunter.io)","type":"n8n-nodes-base.httpRequest","position":[2400,-120],"parameters":{"url":"=https://api.hunter.io/v2/domain-search?domain{{ $json.website }}=&api_key=<YOUR_API_KEY>","options":{}},"typeVersion":4.2},{"id":"4fd05ce5-495e-4d3a-8998-3120c3456e57","name":"Search LinkedIn for Person (Phantombuster)","type":"n8n-nodes-base.httpRequest","position":[1960,1280],"parameters":{"url":"https://api.phantombuster.com/api/v2/agents/<AGENT_ID>/launch","method":"POST","options":{},"jsonBody":"{\n  \"argument\": {\n    \"search\": {{ $json.output }},\n    \"numberOfProfiles\": 3,\n    \"sessionCookie\": \"<LINKEDIN_SESSION_COOKIE>\"\n  },\n  \"saveArguments\": true\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"X-Phantombuster-Key-1","value":"<YOUR_API_KEY>"}]}},"typeVersion":4.2},{"id":"f048e198-cc4b-4739-be7d-d3d885c6d2bb","name":"Scrape LinkedIn Person Profile","type":"n8n-nodes-base.httpRequest","position":[2180,1280],"parameters":{"url":"https://api.phantombuster.com/api/v2/agents/<AGENT_ID>/launch","method":"POST","options":{},"jsonBody":"={\n  \"argument\": {\n    \"spreadsheetUrl\": {{ $json.profileUrl }},\n    \"sessionCookie\": \"<LINKEDIN_SESSION_COOKIE>\"\n  },\n  \"saveArguments\": true\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"X-Phantombuster-Key-1","value":"<YOUR_API_KEY>"}]}},"typeVersion":4.2},{"id":"dbc8c317-b469-4125-b939-614524a0339b","name":"Find Personal Email (Hunter.io)","type":"n8n-nodes-base.httpRequest","position":[2400,1280],"parameters":{"url":"=https://api.hunter.io/v2/email-finder?domain={{ $json.fullName }}=Ali%20Raza&api_key=<YOUR_API_KEY>","options":{}},"typeVersion":4.2},{"id":"047146a8-2b02-4098-a0e9-f8366c42aa4f","name":"Store Results in Google Sheet","type":"n8n-nodes-base.googleSheets","position":[2760,20],"parameters":{"operation":"append","sheetName":{"__rl":true,"mode":"list","value":""},"documentId":{"__rl":true,"mode":"list","value":""}},"credentials":{"googleSheetsOAuth2Api":{"id":"Rp7XiR3hxJfv03ZO","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"1e9dee68-e0c2-4588-b6ca-666534d14dd4","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-1820,-2200],"parameters":{"color":4,"width":1300,"height":320,"content":"=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"},"typeVersion":1},{"id":"2085a7ca-f68b-490a-9dcb-3c96fc6a739d","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1820,-1860],"parameters":{"color":4,"width":1289,"height":5558,"content":"# 🚀 **Automated Upwork Lead Enrichment Workflow**\n\n> ✨ *Fetch potential clients from Upwork, extract their info using AI, search them on LinkedIn, gather emails, and store all in Google Sheets* ✨\n\n---\n\n## 🧩 **1. Trigger & Data Collection**\n\n---\n\n### ⏰ `Trigger - Run Every X Hours`\n\n**🔧 Node Type**: Schedule Trigger\n**🧠 Purpose**:\nThis node starts your automation periodically. You define how often it runs (e.g., every 6 hours, daily, etc.).\n\n**📚 Why It’s Important**:\nYou don’t want to manually check Upwork every few hours. This node automates it for you.\n\n---\n\n### 🌐 `Fetch Latest Upwork Jobs (Apify)`\n\n**🔧 Node Type**: HTTP Request\n**🧠 Purpose**:\nFetch the latest Upwork jobs by calling the [Apify Upwork Actor API](https://apify.com/).\n\n**⚙️ Tech Behind It**:\nA simple `GET` request pulls in structured job listings (title, description, budget, etc.) as JSON data.\n\n**💡 Beginner Tip**:\nNo coding needed—just copy your Apify API URL with your token and plug it into the node.\n\n---\n\n## 🤖 **2. AI Name Extraction**\n\n---\n\n### 🧠 `AI - Extract Company or Person Name from Job`\n\n**🔧 Node Type**: AI Agent / OpenAI Chat\n**🧠 Purpose**:\nUses GPT to scan the job title + description and extract a **company name or client’s full name**, if present.\n\n**📚 Why It’s Smart**:\nClients sometimes mention names like “Hi, we at DevSync...” or sign with their name at the bottom. This step grabs that.\n\n**🧠 AI Prompt Tip**:\nUse structured prompts like:\n\n> “Extract a full person or company name from this job description. If not found, say 'none’.”\n\n---\n\n### 🧪 `IF - Name is Found?`\n\n**🔧 Node Type**: IF\n**🧠 Purpose**:\nChecks whether the AI returned a name. If not, it skips that job.\n\n**🛑 `No Name Found - End Early`**\nStops further processing and prevents wasted API calls or errors.\n\n---\n\n## 🧭 **3. AI Classification – Person vs Company**\n\n---\n\n### 🧠 `AI - Is It a Person or Company?`\n\n**🔧 Node Type**: AI Agent\n**🧠 Purpose**:\nClassifies the extracted name as either a **company** or a **person** using simple AI logic.\n\n**🔍 Why It Matters**:\nDepending on what it is, the next step—searching LinkedIn—will differ.\n\n---\n\n### 🔀 `IF - Person or Company?`\n\n**🔧 Node Type**: IF\n**🧠 Purpose**:\nRoutes the flow to two different paths:\n\n* Company → Search company profile\n* Person → Search individual profile\n\n---\n\n## 🏢 **4A. Company Path**\n\n---\n\n### 🔍 `Search LinkedIn for Company (Phantombuster)`\n\n**🔧 Node Type**: HTTP Request\n**📡 Purpose**:\nUses [Phantombuster’s LinkedIn Search API](https://phantombuster.com/) to search for the **company name**.\n\n**📦 Input**: `\"DevSync\"`\n**📤 Output**: Company’s LinkedIn URL\n\n---\n\n### 🏭 `Scrape LinkedIn Company Profile`\n\n**🔧 Node Type**: HTTP Request\n**🔍 Purpose**:\nScrapes the company’s LinkedIn page to pull:\n\n* Size\n* Website\n* Industry\n* Location\n* Description\n\n---\n\n### 📬 `Find Company Email (Hunter.io)`\n\n**🔧 Node Type**: HTTP Request\n**🔍 Purpose**:\nUses [Hunter.io](https://hunter.io) to find company-level email addresses like `info@devsync.com`, `hello@devsync.com`, etc.\n\n**📦 Input**: Company’s domain (e.g., `devsync.com`)\n**📤 Output**: Emails + Confidence Score\n\n---\n\n## 👤 **4B. Person Path**\n\n---\n\n### 🔍 `Search LinkedIn for Person (Phantombuster)`\n\n**🔧 Node Type**: HTTP Request\n**📡 Purpose**:\nSearches for the extracted **person’s name** like \"John Smith\" using Phantombuster.\n\n**📤 Output**: LinkedIn profile URL(s)\n\n---\n\n### 🧑‍💼 `Scrape LinkedIn Person Profile`\n\n**🔧 Node Type**: HTTP Request\n**📄 Purpose**:\nScrapes:\n\n* Name\n* Current Job Title\n* Company\n* Location\n* Education\n* LinkedIn URL\n\n---\n\n### ✉️ `Find Personal Email (Hunter.io)`\n\n**🔧 Node Type**: HTTP Request\n**🔍 Purpose**:\nAttempts to find personal emails using the name + company domain.\n\n**📤 Output**: Email (if public), sometimes with confidence score.\n\n---\n\n## 📑 **5. Store Everything in Google Sheets**\n\n---\n\n### 🧾 `Store Results in Google Sheet`\n\n**🔧 Node Type**: Google Sheets (Append Row)\n**🧠 Purpose**:\nSaves:\n\n* Job title\n* Description\n* Client Name\n* Person/Company\n* LinkedIn Profile\n* Scraped Info\n* Emails\n\n**📚 Why It’s Gold**:\nYou now have a **personal CRM of Upwork clients** to reach out to directly or research further.\n\n---\n\n## 🌟 **Summary of Benefits**\n\n| ✅ Feature              | 💡 Benefit                            |\n| ---------------------- | ------------------------------------- |\n| Fully automated        | Save hours of manual research         |\n| Uses AI                | No need to write complex regex or NLP |\n| Phantombuster scraping | Get verified LinkedIn profiles        |\n| Hunter.io              | Helps gather email leads              |\n| Google Sheets          | Easy to filter, review, and manage    |\n\n---\n\n## 📌 **Beginner Tips**\n\n* 🧪 Start with dummy job data and test just the first few nodes.\n* 🔑 Always **secure your API keys** using environment variables or secrets.\n* 🧠 Use **n8n’s execution log** to debug any failures.\n* 🧹 Add rate-limiting or error handling if APIs return errors or limits.\n\n---\n\nWould you like a Notion-ready documentation, downloadable PDF, or HTML guide for your team or clients?\n"},"typeVersion":1},{"id":"5bda85dd-7559-4239-9b38-c887a39dbb54","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-60,-2180],"parameters":{"color":3,"width":1800,"height":2680,"content":"## 🧩 **1. Trigger & Data Collection**\n\n---\n\n### ⏰ `Trigger - Run Every X Hours`\n\n**🔧 Node Type**: Schedule Trigger\n**🧠 Purpose**:\nThis node starts your automation periodically. You define how often it runs (e.g., every 6 hours, daily, etc.).\n\n**📚 Why It’s Important**:\nYou don’t want to manually check Upwork every few hours. This node automates it for you.\n\n---\n\n### 🌐 `Fetch Latest Upwork Jobs (Apify)`\n\n**🔧 Node Type**: HTTP Request\n**🧠 Purpose**:\nFetch the latest Upwork jobs by calling the [Apify Upwork Actor API](https://apify.com/).\n\n**⚙️ Tech Behind It**:\nA simple `GET` request pulls in structured job listings (title, description, budget, etc.) as JSON data.\n\n**💡 Beginner Tip**:\nNo coding needed—just copy your Apify API URL with your token and plug it into the node.\n\n---\n\n## 🤖 **2. AI Name Extraction**\n\n---\n\n### 🧠 `AI - Extract Company or Person Name from Job`\n\n**🔧 Node Type**: AI Agent / OpenAI Chat\n**🧠 Purpose**:\nUses GPT to scan the job title + description and extract a **company name or client’s full name**, if present.\n\n**📚 Why It’s Smart**:\nClients sometimes mention names like “Hi, we at DevSync...” or sign with their name at the bottom. This step grabs that.\n\n**🧠 AI Prompt Tip**:\nUse structured prompts like:\n\n> “Extract a full person or company name from this job description. If not found, say 'none’.”\n\n---\n\n### 🧪 `IF - Name is Found?`\n\n**🔧 Node Type**: IF\n**🧠 Purpose**:\nChecks whether the AI returned a name. If not, it skips that job.\n\n**🛑 `No Name Found - End Early`**\nStops further processing and prevents wasted API calls or errors.\n\n---\n\n## 🧭 **3. AI Classification – Person vs Company**\n\n---\n\n### 🧠 `AI - Is It a Person or Company?`\n\n**🔧 Node Type**: AI Agent\n**🧠 Purpose**:\nClassifies the extracted name as either a **company** or a **person** using simple AI logic.\n\n**🔍 Why It Matters**:\nDepending on what it is, the next step—searching LinkedIn—will differ.\n\n---\n\n### 🔀 `IF - Person or Company?`\n\n**🔧 Node Type**: IF\n**🧠 Purpose**:\nRoutes the flow to two different paths:\n\n* Company → Search company profile\n* Person → Search individual profile"},"typeVersion":1},{"id":"aa30a465-97e4-449f-a0b4-07a97a0f3d2c","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1880,-1300],"parameters":{"color":5,"width":700,"height":1420,"content":"## 🏢 **4A. Company Path**\n\n---\n\n### 🔍 `Search LinkedIn for Company (Phantombuster)`\n\n**🔧 Node Type**: HTTP Request\n**📡 Purpose**:\nUses [Phantombuster’s LinkedIn Search API](https://phantombuster.com/) to search for the **company name**.\n\n**📦 Input**: `\"DevSync\"`\n**📤 Output**: Company’s LinkedIn URL\n\n---\n\n### 🏭 `Scrape LinkedIn Company Profile`\n\n**🔧 Node Type**: HTTP Request\n**🔍 Purpose**:\nScrapes the company’s LinkedIn page to pull:\n\n* Size\n* Website\n* Industry\n* Location\n* Description\n\n---\n\n### 📬 `Find Company Email (Hunter.io)`\n\n**🔧 Node Type**: HTTP Request\n**🔍 Purpose**:\nUses [Hunter.io](https://hunter.io) to find company-level email addresses like `info@devsync.com`, `hello@devsync.com`, etc.\n\n**📦 Input**: Company’s domain (e.g., `devsync.com`)\n**📤 Output**: Emails + Confidence Score\n\n---\n"},"typeVersion":1},{"id":"7d7ec4da-d52c-4563-94df-3dcf88c85ff0","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1900,160],"parameters":{"color":6,"width":640,"height":1300,"content":"## 👤 **4B. Person Path**\n\n---\n\n### 🔍 `Search LinkedIn for Person (Phantombuster)`\n\n**🔧 Node Type**: HTTP Request\n**📡 Purpose**:\nSearches for the extracted **person’s name** like \"John Smith\" using Phantombuster.\n\n**📤 Output**: LinkedIn profile URL(s)\n\n---\n\n### 🧑‍💼 `Scrape LinkedIn Person Profile`\n\n**🔧 Node Type**: HTTP Request\n**📄 Purpose**:\nScrapes:\n\n* Name\n* Current Job Title\n* Company\n* Location\n* Education\n* LinkedIn URL\n\n---\n\n### ✉️ `Find Personal Email (Hunter.io)`\n\n**🔧 Node Type**: HTTP Request\n**🔍 Purpose**:\nAttempts to find personal emails using the name + company domain.\n\n**📤 Output**: Email (if public), sometimes with confidence score.\n\n---"},"typeVersion":1},{"id":"46f24197-38da-43a1-ba03-1e394169340a","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2680,-520],"parameters":{"color":6,"width":260,"height":720,"content":"## 📑 **5. Store Everything in Google Sheets**\n\n---\n\n### 🧾 `Store Results in Google Sheet`\n\n**🔧 Node Type**: Google Sheets (Append Row)\n**🧠 Purpose**:\nSaves:\n\n* Job title\n* Description\n* Client Name\n* Person/Company\n* LinkedIn Profile\n* Scraped Info\n* Emails"},"typeVersion":1}],"active":false,"pinData":{"Find Company Email (Hunter.io)":[{"json":{"data":{"domain":"devsync.io","emails":[{"type":"personal","value":"ali.raza@devsync.io","sources":[{"domain":"devsync.io","extracted_on":"2024-12-01","last_seen_on":"2025-05-30","still_on_page":true}],"linkedin":"https://www.linkedin.com/in/aliraza-devsync","position":"Founder","last_name":"Raza","confidence":95,"department":"Executive","first_name":"Ali"},{"type":"generic","value":"info@devsync.io","confidence":100}],"pattern":"{first}.{last}@devsync.io","webmail":false,"disposable":false,"organization":"DevSync"},"meta":{"limit":100,"offset":0,"results":2}}}],"Scrape LinkedIn Person Profile":[{"json":{"skills":["Python","Distributed Systems","Kubernetes","GCP"],"summary":"Experienced software engineer specializing in backend and distributed systems.","fullName":"John Doe","headline":"Senior Software Engineer at Google","location":"Mountain View, California, United States","education":[{"degree":"B.S. in Computer Science","school":"Stanford University","dateRange":"2012 – 2016"}],"profileUrl":"https://www.linkedin.com/in/john-doe-123456/","connections":"500+ connections","experiences":[{"title":"Senior Software Engineer","company":"Google","location":"Mountain View, CA","dateRange":"Jan 2021 – Present","description":"Working on scalable cloud infrastructure and ML services."},{"title":"Software Engineer","company":"Facebook","location":"Menlo Park, CA","dateRange":"2017 – 2021"}],"profilePictureUrl":"https://media.licdn.com/dms/image/xyz.jpg"}}],"Find Personal Email (Hunter.io)":[{"json":{"data":{"email":"ali.raza@devsync.io","score":93,"domain":"devsync.io","company":"DevSync","twitter":null,"position":"Founder","last_name":"Raza","first_name":"Ali","linkedin_url":"https://www.linkedin.com/in/aliraza-devsync","phone_number":null},"meta":{"confidence":93}}}],"Scrape LinkedIn Company Profile":[{"json":{"name":"DevSync","founded":"2021","website":"https://devsync.io","industry":"Computer Software","followers":248,"companySize":"11-50 employees","description":"DevSync is a real-time collaboration tool for distributed software teams.","linkedinUrl":"https://www.linkedin.com/company/devsync/","specialties":["Collaboration","Remote Work","Agile Tools"],"headquarters":"San Francisco, CA"}}],"Fetch Latest Upwork Jobs (Apify)":[{"json":{"url":"https://www.upwork.com/job/React-developer_~01abcde12345fghij","title":"Looking for a React developer for long-term project","budget":1000,"client":{"country":"United States","feedback":4.9},"category":"Web, Mobile & Software Dev","postedAt":"2025-06-07T12:34:56Z","description":"We are a San Francisco-based startup called DevSync. We're building a real-time collaboration tool for remote teams..."}},{"json":{"url":"https://www.upwork.com/job/AI-ML-Engineer_~01qwerty98765zxcvb","title":"AI/ML Engineer Needed for Predictive Model","budget":2000,"client":{"country":"Canada","feedback":4.7},"category":"Data Science & Analytics","postedAt":"2025-06-07T10:22:00Z","description":"Our company, BrightData Insights, needs help building a predictive model using open datasets..."}}],"Search LinkedIn for Person (Phantombuster)":[{"json":{"name":"John Doe","title":"Senior Software Engineer at Google","location":"Mountain View, California, United States","profileUrl":"https://www.linkedin.com/in/john-doe-123456/","connectionDegree":"2nd","profilePictureUrl":"https://media.licdn.com/dms/image/xyz.jpg"}},{"json":{"name":"Johnathan Doe","title":"AI Researcher at OpenAI","location":"San Francisco Bay Area","profileUrl":"https://www.linkedin.com/in/johnathan-doe-78910/","connectionDegree":"3rd","profilePictureUrl":"https://media.licdn.com/dms/image/abc.jpg"}}],"Search LinkedIn for Company (Phantombuster)":[{"json":{"name":"DevSync","industry":"Computer Software","location":"San Francisco Bay Area","followers":248,"profileUrl":"https://www.linkedin.com/company/devsync/","description":"Real-time collaboration tool for remote teams.","linkedinSalesNavigatorUrl":null}},{"json":{"name":"DevSync Co.","industry":"Information Technology & Services","location":"Toronto, Canada","followers":123,"profileUrl":"https://www.linkedin.com/company/devsync-co/","description":"Cloud-based productivity platform."}}]},"settings":{"executionOrder":"v1"},"versionId":"9c24521c-85cb-4dbe-b671-43cb6e038740","connections":{"Name is Found?":{"main":[[{"node":"Is It a Person or Company?","type":"main","index":0}],[{"node":"No Name Found - End Early","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Extract Company or Person Name from Job","type":"ai_languageModel","index":0},{"node":"Is It a Person or Company?","type":"ai_languageModel","index":0}]]},"Run Every X Hours":{"main":[[{"node":"Fetch Latest Upwork Jobs (Apify)","type":"main","index":0}]]},"Person or Company?":{"main":[[{"node":"Search LinkedIn for Company (Phantombuster)","type":"main","index":0}],[{"node":"Search LinkedIn for Person (Phantombuster)","type":"main","index":0}]]},"Is It a Person or Company?":{"main":[[{"node":"Person or Company?","type":"main","index":0}]]},"Find Company Email (Hunter.io)":{"main":[[{"node":"Store Results in Google Sheet","type":"main","index":0}]]},"Scrape LinkedIn Person Profile":{"main":[[{"node":"Find Personal Email (Hunter.io)","type":"main","index":0}]]},"Find Personal Email (Hunter.io)":{"main":[[{"node":"Store Results in Google Sheet","type":"main","index":0}]]},"Scrape LinkedIn Company Profile":{"main":[[{"node":"Find Company Email (Hunter.io)","type":"main","index":0}]]},"Fetch Latest Upwork Jobs (Apify)":{"main":[[{"node":"Extract Company or Person Name from Job","type":"main","index":0}]]},"Extract Company or Person Name from Job":{"main":[[{"node":"Name is Found?","type":"main","index":0}]]},"Search LinkedIn for Person (Phantombuster)":{"main":[[{"node":"Scrape LinkedIn Person Profile","type":"main","index":0}]]},"Search LinkedIn for Company (Phantombuster)":{"main":[[{"node":"Scrape LinkedIn Company Profile","type":"main","index":0}]]}}}


