# templates

name: Generate & Auto-post AI Videos to Social Media with Veo3 and Blotato
author_name: Dr. Firas
author_username: drfiras
categories: []
created_at: 2025-06-18T22:44:00.392Z
updated_at: 2025-06-18T22:44:00.392Z
url: https://n8n.io/workflows/5035
scraped_at: 2025-07-06 21:16:30
description:
  Automate video creation with Veo3 and auto-post to Instagram, TikTok via Blotato

  Who is this for?

  This template is ideal for content creators, social media managers, YouTubers, and digital marketers who want to generate high-quality videos daily using AI and distribute them effortlessly across multiple platforms.

  It’s perfect for anyone who wants to scale short-form content creation without video editing tools.

  What problem is this workflow solving?

  Creating and distributing consistent video content requires:
  Generating ideas
  Writing scripts and prompts
  Rendering videos
  Manually posting to platforms

  This workflow automates all of that. It transforms one prompt into a professional AI-generated video and publishes it automatically — saving time and increasing reach.

  What this workflow does

  Triggers daily to generate a new idea with OpenAI (or your custom prompt).
  Creates a video prompt formatted specifically for Google Veo3.
  Generates a cinematic video using the Veo3 API.
  Logs the video data into a Google Sheet.
  Retrieves the final video URL once Veo3 finishes rendering.
  Uploads the video to Blotato for publishing.
  Auto-posts the video to Instagram, TikTok, YouTube, Facebook, LinkedIn, Threads, Twitter (X), Pinterest, and Bluesky.

  Setup

  Add your OpenAI API key to the GPT-4.1 nodes.
  Connect your Veo3 API credentials in the video generation node.
  Link your Google Sheets account and use a sheet with columns: Prompt, Video URL, Status.
  Connect your Blotato API key and set your platform IDs in the Assign Social Media IDs node.
  Adjust the Schedule Trigger to your desired posting frequency.

  How to customize this workflow to your needs

  Edit the AI prompt** to align with your niche (fitness, finance, education, etc.).
  Add your own branding overlays** using JSON2Video or similar tools.
  Change platform selection** by enabling/disabling specific HTTP Request nodes.
  Add a Telegram step** to preview the video before auto-posting.
  Track performance** by adding metrics columns in Google Sheets.

  📄 Documentation: Notion Guide

  Need help customizing?
  Contact me for consulting and support : Linkedin / Youtube

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

workflow_json:
  {"id":"eFkkWqS5KdrxZ43P","meta":{"instanceId":"a2b23892dd6989fda7c1209b381f5850373a7d2b85609624d7c2b7a092671d44","templateCredsSetupCompleted":true},"name":"Automate video creation with Veo3 and auto-post to Instagram, TikTok via Blotato - vide","tags":[],"nodes":[{"id":"11a7c5b6-0db7-4d99-a1a0-e34e05c23ff5","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[340,480],"parameters":{"width":1200,"height":500,"content":"# ✅ STEP 1 — Generate Script & Prompt with AI"},"typeVersion":1},{"id":"2f3aec5c-4144-4e0c-b1c8-7f96dfe14370","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[340,1020],"parameters":{"color":3,"width":1200,"height":280,"content":"# ✅ STEP 2 — Create Video Using Veo3\n\n"},"typeVersion":1},{"id":"45a5a9f4-fe6a-43a7-a032-c69750826209","name":"Assign Social Media IDs","type":"n8n-nodes-base.set","position":[420,1680],"parameters":{"mode":"raw","options":{},"jsonOutput":"{\n  \"instagram_id\": \"1111\",\n  \"youtube_id\": \"1111\",\n  \"threads_id\": \"1111\",\n  \"tiktok_id\": \"1111\",\n  \"facebook_id\": \"1111\",\n  \"facebook_page_id\": \"1111\",\n  \"twitter_id\": \"1111\",\n  \"linkedin_id\": \"1111\",\n  \"pinterest_id\": \"1111\",\n  \"pinterest_board_id\": \"1111\",\n  \"bluesky_id\": \"1111\"\n}\n"},"typeVersion":3.4},{"id":"6d125a85-b626-4981-8cfc-bcac4ea0ca89","name":"Get my video","type":"n8n-nodes-base.googleSheets","position":[520,1440],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"51us92xkOlrvArhV","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"779818a1-97bd-4bf9-ba17-995c1439df6f","name":"Upload Video to Blotato","type":"n8n-nodes-base.httpRequest","position":[640,1680],"parameters":{"url":"https://backend.blotato.com/v2/media","method":"POST","options":{},"sendBody":true,"sendHeaders":true,"bodyParameters":{"parameters":[{"name":"url","value":"={{ $('Get my video').item.json['final_output'] }}"}]},"headerParameters":{"parameters":[{"name":"blotato-api-key","value":"YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"113d635c-bf8f-4ed3-801e-de78b0df9437","name":"INSTAGRAM","type":"n8n-nodes-base.httpRequest","position":[920,1440],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"={\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.instagram_id }}\",\n    \"target\": {\n      \"targetType\": \"instagram\"\n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"instagram\",\n      \"mediaUrls\": [\n        \"{{ $json.url }}\"\n      ]\n    }\n  }\n}\n\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"02aa72ee-e5b9-44ee-9cbf-e8ddbc259570","name":"YOUTUBE","type":"n8n-nodes-base.httpRequest","position":[1140,1440],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"={\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.youtube_id }}\",\n    \"target\": {\n      \"targetType\": \"youtube\",\n      \"title\": \"{{ $('Get my video').item.json.Titre }}\",\n      \"privacyStatus\": \"unlisted\",\n      \"shouldNotifySubscribers\": \"false\"\n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"youtube\",\n      \"mediaUrls\": [\n        \"{{ $json.url }}\"\n      ]\n    }\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"b9e82889-b753-43e7-b417-213a99763802","name":"TIKTOK","type":"n8n-nodes-base.httpRequest","position":[1340,1440],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"={\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.tiktok_id }}\",\n    \"target\": {\n      \"targetType\": \"tiktok\",\n      \"isYourBrand\": \"false\", \n      \"disabledDuet\": \"false\",\n      \"privacyLevel\": \"PUBLIC_TO_EVERYONE\",\n      \"isAiGenerated\": \"true\",\n      \"disabledStitch\": \"false\",\n      \"disabledComments\": \"false\",\n      \"isBrandedContent\": \"false\"\n      \n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"tiktok\",\n      \"mediaUrls\": [\n        \"{{ $json.url }}\"\n      ]\n    }\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"=YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"edf4cd31-ae48-4996-816e-8a32ac411e75","name":"FACEBOOK","type":"n8n-nodes-base.httpRequest","position":[920,1680],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"={\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.facebook_id }}\",\n    \"target\": {\n      \"targetType\": \"facebook\",\n      \"pageId\": \"{{ $('Assign Social Media IDs').item.json.facebook_page_id }}\"\n\n      \n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"facebook\",\n      \"mediaUrls\": [\n        \"{{ $json.url }}\"\n      ]\n    }\n  }\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"=YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"edeb50af-020e-4118-af73-2a4fbb3bf6a2","name":"THREADS","type":"n8n-nodes-base.httpRequest","position":[1140,1680],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"={\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.threads_id }}\",\n    \"target\": {\n      \"targetType\": \"threads\"\n      \n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"threads\",\n      \"mediaUrls\": [\n        \"{{ $json.url }}\"\n      ]\n    }\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"210e36e9-8db2-403c-b72a-2ec45bce2eae","name":"TWETTER","type":"n8n-nodes-base.httpRequest","position":[1340,1680],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"={\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.twitter_id }}\",\n    \"target\": {\n      \"targetType\": \"twitter\"\n      \n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"twitter\",\n      \"mediaUrls\": [\n        \"{{ $json.url }}\"\n      ]\n    }\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"ac3069e4-4fe6-4146-a0e2-973b3c374c55","name":"LINKEDIN","type":"n8n-nodes-base.httpRequest","position":[920,1920],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"={\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.linkedin_id }}\",\n    \"target\": {\n      \"targetType\": \"linkedin\"\n      \n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"linkedin\",\n      \"mediaUrls\": [\n        \"{{ $json.url }}\"\n      ]\n    }\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"d9c919d8-ae9c-47cf-9b6f-8cb3e7e1f500","name":"BLUESKY","type":"n8n-nodes-base.httpRequest","position":[1140,1920],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"= {\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.bluesky_id }}\",\n    \"target\": {\n      \"targetType\": \"bluesky\"\n      \n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"bluesky\",\n      \"mediaUrls\": [\n        \"https://pbs.twimg.com/media/GE8MgIiWEAAfsK3.jpg\"\n      ]\n    }\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"a0a0a8fe-f6b0-458c-846e-409200a7b12f","name":"PINTEREST","type":"n8n-nodes-base.httpRequest","position":[1340,1920],"parameters":{"url":"https://backend.blotato.com/v2/posts","method":"POST","options":{},"jsonBody":"={\n  \"post\": {\n    \"accountId\": \"{{ $('Assign Social Media IDs').item.json.pinterest_id }}\",\n    \"target\": {\n      \"targetType\": \"pinterest\",\n      \"boardId\": \"{{ $('Assign Social Media IDs').item.json.pinterest_board_id }}\"      \n    },\n    \"content\": {\n      \"text\": \"{{ $('Get my video').item.json.DESCRIPTION }}\",\n      \"platform\": \"pinterest\",\n      \"mediaUrls\": [\n        \"https://pbs.twimg.com/media/GE8MgIiWEAAfsK3.jpg\"\n      ]\n    }\n  }\n}\n\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"blotato-api-key","value":"YOUR_API_HERE"}]}},"typeVersion":4.2},{"id":"38c75425-36a5-45c7-98cb-ed5eb20af249","name":"Google Sheets","type":"n8n-nodes-base.googleSheets","position":[640,1920],"parameters":{"columns":{"value":{"STATUS":"Publish","row_number":"={{ $('Get my video').item.json.row_number }}"},"schema":[{"id":"PROMPT","type":"string","display":true,"required":false,"displayName":"PROMPT","defaultMatch":false,"canBeUsedToMatch":true},{"id":"DESCRIPTION","type":"string","display":true,"required":false,"displayName":"DESCRIPTION","defaultMatch":false,"canBeUsedToMatch":true},{"id":"URL VIDEO","type":"string","display":true,"required":false,"displayName":"URL VIDEO","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Titre","type":"string","display":true,"required":false,"displayName":"Titre","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":false,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["row_number"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"51us92xkOlrvArhV","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"94db7d6e-ce83-4c9a-916c-c35c802f8d4d","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[340,1340],"parameters":{"color":4,"width":1200,"height":760,"content":"# ✅ STEP 3 — Publish Video to Social Media\n"},"typeVersion":1},{"id":"3ac616bc-67bb-494c-bd24-3753fc03e7dc","name":"Trigger: Run Daily Script Generator","type":"n8n-nodes-base.scheduleTrigger","position":[500,560],"parameters":{"rule":{"interval":[{}]}},"typeVersion":1.2},{"id":"8ae30b31-2ac9-4b62-9094-ce36197d319d","name":"AI Agent: Generate Video Concept","type":"@n8n/n8n-nodes-langchain.agent","position":[660,560],"parameters":{"text":"Give me an idea about [a Yeti speaking to a camera and doing a Vlog through his selfie stick]. ","options":{"systemMessage":"=You are an AI designed to generate 1 immersive, realistic idea based on a user-provided topic. Your output must be formatted as a JSON array (single line) and follow all the rules below exactly.\n\nRULES:\n\nOnly return 1 idea at a time.\n\nThe user will provide a key topic (e.g. “urban farming,” “arctic survival,” “street food in Vietnam”).\n\nThe Idea must:\n\nBe under 13 words.\n\nDescribe an interesting and viral-worthy moment, action, or event related to the provided topic.\n\nCan be as surreal as you can get, doesn't have to be real-world!\n\nInvolves a character.\n\nThe Caption must be:\n\nShort, punchy, and viral-friendly.\n\nInclude one relevant emoji.\n\nInclude exactly 12 hashtags in this order:\n** 4 topic-relevant hashtags\n** 4 all-time most popular hashtags\n** 4 currently trending hashtags (based on live research)\n\nAll hashtags must be lowercase.\n\nSet Status to \"for production\" (always).\n\nThe Environment must:\n\nBe under 20 words.\n\nMatch the action in the Idea exactly.\n\nClearly describe:\n\nWhere the event is happening (e.g. rooftop, jungle trail, city alley, frozen lake)\n\nKey visuals or background details (e.g. smoke rising, neon lights, fog, birds overhead)\n\nMain participants (e.g. farmer, cook, mechanic, rescue team, animal)\n\nStyle of scene (e.g. cinematic realism, handheld docu-style, aerial tracking shot, macro close-up)\n\nOk with fictional settings\n\nOUTPUT FORMAT (single-line JSON array):\n\n\n[\n  {\n    \"Caption\": \"Short viral title with emoji #4_topic_hashtags #4_all_time_popular_hashtags #4_trending_hashtags\",\n    \"Idea\": \"Short idea under 13 words\",\n    \"Environment\": \"Brief vivid setting under 20 words matching the action\",\n    \"Status\": \"for production\"\n  }\n]\n"},"promptType":"define","hasOutputParser":true},"typeVersion":1.9},{"id":"1685126b-bd11-4798-aae9-c676d6cf743d","name":"Tool: Inject Creativity","type":"@n8n/n8n-nodes-langchain.toolThink","position":[740,820],"parameters":{},"typeVersion":1},{"id":"30b4a035-33df-4826-972d-0ed2dd8fbed9","name":"LLM: Generate Idea & Caption (GPT-4.1)","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[580,820],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1","cachedResultName":"gpt-4.1"},"options":{}},"credentials":{"openAiApi":{"id":"6h3DfVhNPw9I25nO","name":"OpenAi account"}},"typeVersion":1.2},{"id":"c1e92152-aa05-43dd-8522-23f1514cf0ad","name":"Parser: Extract JSON from Idea","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[900,820],"parameters":{"jsonSchemaExample":"[\n  {\n    \"Caption\": \"Diver Removes Nets Off Whale 🐋 #whalerescue #marinelife #oceanrescue #seahelpers #love #nature #instagood #explore #viral #savenature #oceanguardians #cleanoceans\",\n    \"Idea\": \"Diver carefully cuts tangled net from distressed whale in open sea\",\n    \"Environment\": \"Open ocean, sunlight beams through water, diver and whale, cinematic realism\",\n    \"Status\": \"for production\"\n  }\n]\n"},"typeVersion":1.2},{"id":"432c7648-f9f9-4807-abf5-64d8f9a6bafb","name":"Google Sheets: Save Script Idea","type":"n8n-nodes-base.googleSheets","position":[1020,560],"parameters":{"columns":{"value":{"id":"==ROW()-1","idea":"={{ $json.output[0].Idea }}","caption":"={{ $json.output[0].Caption }}","production":"={{ $json.output[0].Status }}","environment_prompt":"={{ $json.output[0].Environment }}"},"schema":[{"id":"id","type":"string","display":true,"removed":false,"required":false,"displayName":"id","defaultMatch":true,"canBeUsedToMatch":true},{"id":"idea","type":"string","display":true,"required":false,"displayName":"idea","defaultMatch":false,"canBeUsedToMatch":true},{"id":"caption","type":"string","display":true,"required":false,"displayName":"caption","defaultMatch":false,"canBeUsedToMatch":true},{"id":"production","type":"string","display":true,"required":false,"displayName":"production","defaultMatch":false,"canBeUsedToMatch":true},{"id":"environment_prompt","type":"string","display":true,"required":false,"displayName":"environment_prompt","defaultMatch":false,"canBeUsedToMatch":true},{"id":"final_output","type":"string","display":true,"required":false,"displayName":"final_output","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"51us92xkOlrvArhV","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"02c2e969-0bb6-44fa-8707-37edc2cc77fd","name":"AI Agent: Create Veo3-Compatible Prompt","type":"@n8n/n8n-nodes-langchain.agent","position":[1180,560],"parameters":{"text":"=Give me a Veo3 prompt for this idea:\n{{ $json.idea }}\n\nThis is the environment:\n{{ $json.environment_prompt }}\n\n","options":{"systemMessage":"=SYSTEM PROMPT FOR GOOGLE VEO3 PROMPT AGENT\n\nYou are an AI agent that writes hyper-realistic, cinematic video prompts for Google VEO3. Each prompt should describe a short, vivid selfie-style video clip featuring one unnamed character speaking or acting in a specific moment. The final video should look like found footage or documentary-style film — grounded, realistic, and immersive.\n\nREQUIRED STRUCTURE (FILL IN THE BRACKETS BELOW):\n\n[Scene paragraph prompt here]\n\nMain character: [description of character]\nThey say: [insert one line of dialogue, fits the scene and mood].\nThey [describe a physical action or subtle camera movement, e.g. pans the camera, shifts position, glances around].\nTime of Day: [day / night / dusk / etc.]\nLens: [describe lens]\nAudio: (implied) [ambient sounds, e.g. lion growls, wind, distant traffic, birdsong]\nBackground: [brief restatement of what is visible behind them]\n\nRULES FOR PROMPT GENERATION\n\nSingle paragraph only, 750–1500 characters. No line breaks or headings.\n\nOnly one human character. Never give them a name.\n\nInclude one spoken line of dialogue and describe how it’s delivered.\n\nCharacter must do something physical, even if subtle (e.g. glance, smirk, pan camera).\n\nUse selfie-style framing. Always describe the lens, stock, and camera behavior.\n\nScene must feel real and cinematic — like a short clip someone might record on a stylized camera.\n\nAlways include the five key technical elements: Time of Day, Lens, Film Stock, Audio, and Background.\n\nDO NOT DO THIS:\n\nDon’t name the character.\n\nDon’t include more than one character.\n\nDon’t describe subtitles or on-screen text.\n\nDon’t break the paragraph or use formatting.\n\nDon’t write vague or abstract scenes — always keep them grounded in physical detail."},"promptType":"define","hasOutputParser":true},"typeVersion":1.9},{"id":"010485e3-7b3f-496b-bcd5-05087a41805c","name":"Tool: Build Prompt Structure","type":"@n8n/n8n-nodes-langchain.toolThink","position":[1380,820],"parameters":{},"typeVersion":1},{"id":"acec06a9-c36d-4bff-a152-4a5b8b73808d","name":"LLM: Format Prompt for Veo3 (GPT-4.1)","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[1200,820],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1","cachedResultName":"gpt-4.1"},"options":{}},"credentials":{"openAiApi":{"id":"6h3DfVhNPw9I25nO","name":"OpenAi account"}},"typeVersion":1.2},{"id":"4f8e53f5-d0a1-46c1-a855-a7067b493d66","name":"Call Veo3 API to Generate Video","type":"n8n-nodes-base.httpRequest","position":[520,1100],"parameters":{"url":"https://queue.fal.run/fal-ai/veo3","body":"={ \"prompt\": \"{{ $json.output }}\" }\n","method":"POST","options":{"batching":{"batch":{"batchSize":1,"batchInterval":2000}}},"sendBody":true,"contentType":"raw","authentication":"genericCredentialType","rawContentType":"application/json","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"QhpKhFJMiQAReugp","name":"Header Auth account 4"}},"typeVersion":4.2},{"id":"27881cbe-df1c-463d-8baa-5c482f0b1c04","name":"Wait for Veo3 Processing (5 mins)","type":"n8n-nodes-base.wait","position":[740,1100],"webhookId":"861e2761-369b-407b-9e88-1b176e617cd8","parameters":{},"typeVersion":1.1},{"id":"671eaf67-367a-41a0-b127-b06adbd5a3c9","name":"Retrieve Final Video URL from Veo3","type":"n8n-nodes-base.httpRequest","position":[1020,1100],"parameters":{"url":"=https://queue.fal.run/fal-ai/veo3/requests/{{ $json.request_id }}","options":{},"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"QhpKhFJMiQAReugp","name":"Header Auth account 4"}},"typeVersion":4.2},{"id":"3555e042-a420-49fe-889e-62455616ed7c","name":"Google Sheets: Log Final Video Output","type":"n8n-nodes-base.googleSheets","position":[1340,1100],"parameters":{"columns":{"value":{"idea":"={{ $('Google Sheets: Save Script Idea').first().json.idea }}","production":"done","final_output":"={{ $json.video.url }}"},"schema":[{"id":"id","type":"string","display":true,"removed":false,"required":false,"displayName":"id","defaultMatch":true,"canBeUsedToMatch":true},{"id":"idea","type":"string","display":true,"removed":false,"required":false,"displayName":"idea","defaultMatch":false,"canBeUsedToMatch":true},{"id":"caption","type":"string","display":true,"required":false,"displayName":"caption","defaultMatch":false,"canBeUsedToMatch":true},{"id":"production","type":"string","display":true,"required":false,"displayName":"production","defaultMatch":false,"canBeUsedToMatch":true},{"id":"environment_prompt","type":"string","display":true,"required":false,"displayName":"environment_prompt","defaultMatch":false,"canBeUsedToMatch":true},{"id":"final_output","type":"string","display":true,"required":false,"displayName":"final_output","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":["idea"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"51us92xkOlrvArhV","name":"Google Sheets account"}},"typeVersion":4.5}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"4ae2a231-a655-4a35-bc69-d4bb1af20b67","connections":{"Get my video":{"main":[[{"node":"Assign Social Media IDs","type":"main","index":0}]]},"Assign Social Media IDs":{"main":[[{"node":"Upload Video to Blotato","type":"main","index":0}]]},"Tool: Inject Creativity":{"ai_tool":[[{"node":"AI Agent: Generate Video Concept","type":"ai_tool","index":0}]]},"Upload Video to Blotato":{"main":[[{"node":"INSTAGRAM","type":"main","index":0},{"node":"YOUTUBE","type":"main","index":0},{"node":"TIKTOK","type":"main","index":0},{"node":"FACEBOOK","type":"main","index":0},{"node":"THREADS","type":"main","index":0},{"node":"TWETTER","type":"main","index":0},{"node":"LINKEDIN","type":"main","index":0},{"node":"BLUESKY","type":"main","index":0},{"node":"PINTEREST","type":"main","index":0},{"node":"Google Sheets","type":"main","index":0}]]},"Tool: Build Prompt Structure":{"ai_tool":[[{"node":"AI Agent: Create Veo3-Compatible Prompt","type":"ai_tool","index":0}]]},"Parser: Extract JSON from Idea":{"ai_outputParser":[[{"node":"AI Agent: Generate Video Concept","type":"ai_outputParser","index":0}]]},"Call Veo3 API to Generate Video":{"main":[[{"node":"Wait for Veo3 Processing (5 mins)","type":"main","index":0}]]},"Google Sheets: Save Script Idea":{"main":[[{"node":"AI Agent: Create Veo3-Compatible Prompt","type":"main","index":0}]]},"AI Agent: Generate Video Concept":{"main":[[{"node":"Google Sheets: Save Script Idea","type":"main","index":0}]]},"Wait for Veo3 Processing (5 mins)":{"main":[[{"node":"Retrieve Final Video URL from Veo3","type":"main","index":0}]]},"Retrieve Final Video URL from Veo3":{"main":[[{"node":"Google Sheets: Log Final Video Output","type":"main","index":0}]]},"Trigger: Run Daily Script Generator":{"main":[[{"node":"AI Agent: Generate Video Concept","type":"main","index":0}]]},"Google Sheets: Log Final Video Output":{"main":[[{"node":"Get my video","type":"main","index":0}]]},"LLM: Format Prompt for Veo3 (GPT-4.1)":{"ai_languageModel":[[{"node":"AI Agent: Create Veo3-Compatible Prompt","type":"ai_languageModel","index":0}]]},"LLM: Generate Idea & Caption (GPT-4.1)":{"ai_languageModel":[[{"node":"AI Agent: Generate Video Concept","type":"ai_languageModel","index":0}]]},"AI Agent: Create Veo3-Compatible Prompt":{"main":[[{"node":"Call Veo3 API to Generate Video","type":"main","index":0}]]}}}


name: Binance Spot Trader - Limit & Market Orders via API
author_name: Todsaporn Sangboon
author_username: nolifelover
nodes_used: ["n8n-nodes-base.httpRequest","n8n-nodes-base.crypto","n8n-nodes-base.code"]
categories: []
created_at: 2025-06-18T23:25:21.729Z
updated_at: 2025-06-18T23:25:21.729Z
url: https://n8n.io/workflows/5036
scraped_at: 2025-07-06 21:16:30
description:
  📈 How it works
  This n8n workflow allows you to interact with Binance Spot Trading API directly to:

  Place Limit Buy and Limit Sell orders
  Place Market Buy and Market Sell orders
  Query account info* and *open orders**
  Cancel all open orders** for a specific symbol

  All requests are signed using Binance's HMAC SHA256 signature method for secure trading.

  ⚙️ Setup Steps
  Create Binance API Credentials in n8n:
     Go to Credentials &gt; New
     Choose Binance API
     Add api_key and api_secret
     Save as Binance API

  Import this workflow into your n8n instance.

  Update default values:
     In Set Parameter nodes like LimitBuy Parameter, change:
       symbol (e.g. BTCUSDT)
       quantity, price as needed

  Run the workflow manually via the Execute workflow trigger.

  ✅ Notes
  Credential node is marked with instructions.
  HMAC signatures are automatically calculated before making each request.
  HTTP nodes are preconfigured for Binance API v3.

  🔒 No API key or secret is included.

workflow_json:
  {"id":"8p4wKxUqY1fAABOu","meta":{"instanceId":"6585ca078ed5b28a93952b5698b0afc81474ac00ac5460a2d5d58ca9f7d86532"},"name":"trader-binance-spot-cloud-no-credential","tags":[{"id":"1EML6gc9DSYmybCZ","name":"trader","createdAt":"2025-06-16T02:31:44.015Z","updatedAt":"2025-06-16T02:31:44.015Z"}],"nodes":[{"id":"93a8429c-b9ef-43de-934b-2c6fd9db1bb3","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[-1880,360],"parameters":{},"typeVersion":1},{"id":"250640b9-95f7-48b7-bf1d-07fc90026bee","name":"Set Account Query","type":"n8n-nodes-base.set","position":[-1200,-180],"parameters":{"mode":"raw","include":"selected","options":{},"jsonOutput":"={\n  \"timestamp\": \"{{ $now.toMillis() }}\"\n}\n","includeFields":"timestamp"},"typeVersion":3},{"id":"6dcb5a49-149d-4f62-bb69-137cec92f81f","name":"Signature Get Account","type":"n8n-nodes-base.crypto","position":[-800,-180],"parameters":{"type":"SHA256","value":"={{ $json.queryString }}","action":"hmac","secret":"={{ $('Set Credentials').item.json.api_secret }}","dataPropertyName":"signature"},"typeVersion":1},{"id":"4983062d-1e68-4f15-a4d2-955fc81267b5","name":"Account Info Query","type":"n8n-nodes-base.code","position":[-1000,-180],"parameters":{"jsCode":"// แปลง JSON object เป็น query string\nconst data = items[0].json;\n\n// วิธีที่ 1: ใช้ Object.keys() และ map()\nconst queryString = Object.keys(data)\n  .map(key => `${key}=${data[key]}`)\n  .join('&');\n\nreturn [{\n  json: {\n    queryString: queryString,\n    originalData: data\n  }\n}];"},"typeVersion":2},{"id":"57699751-49fa-4420-aa5a-291bc11fa631","name":"Order Query","type":"n8n-nodes-base.code","position":[-1000,0],"parameters":{"jsCode":"// แปลง JSON object เป็น query string\nconst data = items[0].json;\n\n// วิธีที่ 1: ใช้ Object.keys() และ map()\nconst queryString = Object.keys(data)\n  .map(key => `${key}=${data[key]}`)\n  .join('&');\n\nreturn [{\n  json: {\n    queryString: queryString,\n    originalData: data\n  }\n}];"},"typeVersion":2},{"id":"92ff9826-2f60-4d35-8c58-30b483db49d6","name":"LimitBuy Parmeter","type":"n8n-nodes-base.set","position":[-1200,0],"parameters":{"mode":"raw","include":"none","options":{},"jsonOutput":"={\n  \"symbol\": \"BTCUSDT\",\n  \"side\": \"BUY\",\n  \"type\": \"LIMIT\",\n  \"price\": 98000.20,\n  \"quantity\": 0.0001,\n  \"timeInForce\": \"GTC\",\n  \"timestamp\": \"{{ $now.toMillis() }}\"\n}"},"typeVersion":3},{"id":"94a537dd-b59d-49cd-9daf-848a22df9e8d","name":"Set Credentials","type":"n8n-nodes-base.set","notes":"กรุณาสร้าง Binance API Credentials ใน n8n:\n1. ไปที่ Credentials > New\n2. เลือก Binance API\n3. ใส่ API Key และ Secret Key\n4. ตั้งชื่อว่า 'Binance API'\n5. Save\n\nทุก node จะใช้ credential เดียวกันนี้","position":[-1680,360],"parameters":{"values":{"string":[{"name":"api_key"},{"name":"api_secret"}]},"options":{}},"notesInFlow":true,"typeVersion":1},{"id":"9850ff29-6d6a-4fcc-bcc9-ed14c0fe1e7b","name":"Get Account Info","type":"n8n-nodes-base.httpRequest","position":[-580,-180],"parameters":{"url":"https://api.binance.com/api/v3/account","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"timestamp","value":"={{ $('Set Account Query').item.json.timestamp }}"},{"name":"signature","value":"={{ $json.signature }}"}]},"headerParameters":{"parameters":[{"name":"X-MBX-APIKEY","value":"={{ $('Set Credentials').item.json.api_key }}"}]}},"typeVersion":3},{"id":"9a3e31fc-7da7-48dc-8758-4d109addea56","name":"LimitSale Parameter","type":"n8n-nodes-base.set","position":[-1200,180],"parameters":{"mode":"raw","include":"none","options":{},"jsonOutput":"={\n  \"symbol\": \"BTCUSDT\",\n  \"side\": \"SELL\",\n  \"type\": \"LIMIT\",\n  \"price\": 98000.20,\n  \"quantity\": 0.0001,\n  \"timeInForce\": \"GTC\",\n  \"timestamp\": \"{{ $now.toMillis() }}\"\n}"},"typeVersion":3},{"id":"4d43ab9f-69a8-4eb3-a700-234f480cb8d7","name":"Sale Query","type":"n8n-nodes-base.code","position":[-1000,180],"parameters":{"jsCode":"// แปลง JSON object เป็น query string\nconst data = items[0].json;\n\n// วิธีที่ 1: ใช้ Object.keys() และ map()\nconst queryString = Object.keys(data)\n  .map(key => `${key}=${data[key]}`)\n  .join('&');\n\nreturn [{\n  json: {\n    queryString: queryString,\n    originalData: data\n  }\n}];"},"typeVersion":2},{"id":"684e1d96-a2ef-4075-9545-ed904c8d798a","name":"Execute Limit SELL","type":"n8n-nodes-base.httpRequest","position":[-580,180],"parameters":{"url":"https://api.binance.com/api/v3/order","body":"={{ $json.queryString }}&signature={{ $json.signature }}","method":"POST","options":{},"sendBody":true,"contentType":"form-urlencoded","sendHeaders":true,"specifyBody":"string","headerParameters":{"parameters":[{"name":"X-MBX-APIKEY","value":"={{ $('Set Credentials').item.json.api_key }}"}]}},"typeVersion":3},{"id":"96ca7f7d-e60d-4944-80ec-c2b9ba02876a","name":"Execute Limit BUY","type":"n8n-nodes-base.httpRequest","position":[-580,0],"parameters":{"url":"https://api.binance.com/api/v3/order","body":"={{ $json.queryString }}&signature={{ $json.signature }}","method":"POST","options":{},"sendBody":true,"contentType":"form-urlencoded","sendHeaders":true,"specifyBody":"string","headerParameters":{"parameters":[{"name":"X-MBX-APIKEY","value":"={{ $('Set Credentials').item.json.api_key }}"}]}},"typeVersion":3},{"id":"b13d8b19-0222-45fe-9558-b33aeffa2bc1","name":"Market Buy Query","type":"n8n-nodes-base.code","position":[-1000,360],"parameters":{"jsCode":"// แปลง JSON object เป็น query string\nconst data = items[0].json;\n\n// วิธีที่ 1: ใช้ Object.keys() และ map()\nconst queryString = Object.keys(data)\n  .map(key => `${key}=${data[key]}`)\n  .join('&');\n\nreturn [{\n  json: {\n    queryString: queryString,\n    originalData: data\n  }\n}];"},"typeVersion":2},{"id":"4fb1f7a5-9a70-4870-bfd7-5575d587cb43","name":"MarketBuy Parameter","type":"n8n-nodes-base.set","position":[-1200,360],"parameters":{"mode":"raw","include":"none","options":{},"jsonOutput":"={\n  \"symbol\": \"BTCUSDT\",\n  \"side\": \"BUY\",\n  \"type\": \"MARKET\",\n  \"quantity\": 0.0001,\n  \"timestamp\": \"{{ $now.toMillis() }}\"\n}"},"typeVersion":3},{"id":"b4e45c9e-5a1c-4cf0-aed3-30520bf92cb9","name":"Signature MarketBuy","type":"n8n-nodes-base.crypto","position":[-800,360],"parameters":{"type":"SHA256","value":"={{ $json.queryString }}","action":"hmac","secret":"={{ $('Set Credentials').item.json.api_secret }}","dataPropertyName":"signature"},"typeVersion":1},{"id":"4c9f4a4d-049e-431d-b053-a694698bd0ba","name":"Signature Limit BUY","type":"n8n-nodes-base.crypto","position":[-800,0],"parameters":{"type":"SHA256","value":"={{ $json.queryString }}","action":"hmac","secret":"={{ $('Set Credentials').item.json.api_secret }}","dataPropertyName":"signature"},"typeVersion":1},{"id":"5c148d9e-c980-4485-944e-9535ca79d7af","name":"Signature Limit SELL","type":"n8n-nodes-base.crypto","position":[-800,180],"parameters":{"type":"SHA256","value":"={{ $json.queryString }}","action":"hmac","secret":"={{ $('Set Credentials').item.json.api_secret }}","dataPropertyName":"signature"},"typeVersion":1},{"id":"d519fced-aaca-4dfb-bae0-818491d9791f","name":"Execute MarketBuy","type":"n8n-nodes-base.httpRequest","position":[-580,360],"parameters":{"url":"https://api.binance.com/api/v3/order","body":"={{ $json.queryString }}&signature={{ $json.signature }}","method":"POST","options":{},"sendBody":true,"contentType":"form-urlencoded","sendHeaders":true,"specifyBody":"string","headerParameters":{"parameters":[{"name":"X-MBX-APIKEY","value":"={{ $('Set Credentials').item.json.api_key }}"}]}},"typeVersion":3},{"id":"916751cf-0525-4d7e-b6ee-6412beecf870","name":"MarketSell Parameter","type":"n8n-nodes-base.set","position":[-1200,560],"parameters":{"mode":"raw","include":"none","options":{},"jsonOutput":"={\n  \"symbol\": \"BTCUSDT\",\n  \"side\": \"SELL\",\n  \"type\": \"MARKET\",\n  \"quantity\": 0.0001,\n  \"timestamp\": \"{{ $now.toMillis() }}\"\n}"},"typeVersion":3},{"id":"0e03892e-4c5d-4a7c-9bff-acc014fbff03","name":"Market Sell Query","type":"n8n-nodes-base.code","position":[-1000,560],"parameters":{"jsCode":"// แปลง JSON object เป็น query string\nconst data = items[0].json;\n\n// วิธีที่ 1: ใช้ Object.keys() และ map()\nconst queryString = Object.keys(data)\n  .map(key => `${key}=${data[key]}`)\n  .join('&');\n\nreturn [{\n  json: {\n    queryString: queryString,\n    originalData: data\n  }\n}];"},"typeVersion":2},{"id":"493074d1-7a6d-4b63-956d-55cda01e885d","name":"Signature MarketSell","type":"n8n-nodes-base.crypto","position":[-800,560],"parameters":{"type":"SHA256","value":"={{ $json.queryString }}","action":"hmac","secret":"={{ $('Set Credentials').item.json.api_secret }}","dataPropertyName":"signature"},"typeVersion":1},{"id":"537afa17-ac5e-4d73-ac9c-ceabc644cc22","name":"Execute MarketSell","type":"n8n-nodes-base.httpRequest","position":[-580,560],"parameters":{"url":"https://api.binance.com/api/v3/order","body":"={{ $json.queryString }}&signature={{ $json.signature }}","method":"POST","options":{},"sendBody":true,"contentType":"form-urlencoded","sendHeaders":true,"specifyBody":"string","headerParameters":{"parameters":[{"name":"X-MBX-APIKEY","value":"={{ $('Set Credentials').item.json.api_key }}"}]}},"typeVersion":3},{"id":"877a0eb7-866b-4c73-bbee-cb5b9e49b786","name":"OpenOrder Query","type":"n8n-nodes-base.code","position":[-1000,760],"parameters":{"jsCode":"// แปลง JSON object เป็น query string\nconst data = items[0].json;\n\n// วิธีที่ 1: ใช้ Object.keys() และ map()\nconst queryString = Object.keys(data)\n  .map(key => `${key}=${data[key]}`)\n  .join('&');\n\nreturn [{\n  json: {\n    queryString: queryString,\n    originalData: data\n  }\n}];"},"typeVersion":2},{"id":"641c40ab-e673-4acd-8a48-5d7592800da2","name":"Open Orders Params","type":"n8n-nodes-base.set","position":[-1200,760],"parameters":{"mode":"raw","include":"none","options":{},"jsonOutput":"={\n  \"timestamp\": \"{{ $now.toMillis() }}\",\n  \"symbol\": \"BTCUSDT\",\n  \"recvWindow\": 2000\n}\n"},"typeVersion":3},{"id":"d0457455-134c-4425-bbbc-b4e1c3eedccf","name":"Signature OpenOrder","type":"n8n-nodes-base.crypto","position":[-800,760],"parameters":{"type":"SHA256","value":"={{ $json.queryString }}","action":"hmac","secret":"={{ $('Set Credentials').item.json.api_secret }}","dataPropertyName":"signature"},"typeVersion":1},{"id":"3e8f723a-22ae-418c-9def-f95588d51080","name":"Get Open Orders","type":"n8n-nodes-base.httpRequest","position":[-580,760],"parameters":{"url":"=https://api.binance.com/api/v3/openOrders?{{ $json.queryString }}","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"signature","value":"={{ $json.signature }}"}]},"headerParameters":{"parameters":[{"name":"X-MBX-APIKEY","value":"={{ $('Set Credentials').item.json.api_key }}"}]}},"typeVersion":3},{"id":"4c65712a-2a49-4dd6-b346-1b61fbfed417","name":"Cancel All Order Params","type":"n8n-nodes-base.set","position":[-1200,960],"parameters":{"mode":"raw","include":"none","options":{},"jsonOutput":"={\n  \"timestamp\": \"{{ $now.toMillis() }}\",\n  \"symbol\": \"BTCUSDT\",\n  \"recvWindow\": 2000\n}\n"},"typeVersion":3},{"id":"cde8a4d3-678a-464f-886b-763982ebfe01","name":"CancelAllOrder Query","type":"n8n-nodes-base.code","position":[-1000,960],"parameters":{"jsCode":"// แปลง JSON object เป็น query string\nconst data = items[0].json;\n\n// วิธีที่ 1: ใช้ Object.keys() และ map()\nconst queryString = Object.keys(data)\n  .map(key => `${key}=${data[key]}`)\n  .join('&');\n\nreturn [{\n  json: {\n    queryString: queryString,\n    originalData: data\n  }\n}];"},"typeVersion":2},{"id":"bcb50ec1-cf95-464d-989f-e5c577b6695f","name":"Signature Cancel All Order","type":"n8n-nodes-base.crypto","position":[-800,960],"parameters":{"type":"SHA256","value":"={{ $json.queryString }}","action":"hmac","secret":"={{ $('Set Credentials').item.json.api_secret }}","dataPropertyName":"signature"},"typeVersion":1},{"id":"2ceec541-944d-42c8-b36d-dee7abef0a26","name":"Cancell All Order","type":"n8n-nodes-base.httpRequest","position":[-580,960],"parameters":{"url":"=https://api.binance.com/api/v3/openOrders","body":"={{ $json.queryString }}","method":"DELETE","options":{},"sendBody":true,"sendQuery":true,"contentType":"form-urlencoded","sendHeaders":true,"specifyBody":"string","queryParameters":{"parameters":[{"name":"signature","value":"={{ $json.signature }}"}]},"headerParameters":{"parameters":[{"name":"X-MBX-APIKEY","value":"={{ $('Set Credentials').item.json.api_key }}"}]}},"typeVersion":3}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"9625a34a-ecfe-42fd-adef-c57e036d3d7d","connections":{"Sale Query":{"main":[[{"node":"Signature Limit SELL","type":"main","index":0}]]},"Order Query":{"main":[[{"node":"Signature Limit BUY","type":"main","index":0}]]},"OpenOrder Query":{"main":[[{"node":"Signature OpenOrder","type":"main","index":0}]]},"Set Credentials":{"main":[[{"node":"Set Account Query","type":"main","index":0}]]},"Market Buy Query":{"main":[[{"node":"Signature MarketBuy","type":"main","index":0}]]},"LimitBuy Parmeter":{"main":[[{"node":"Order Query","type":"main","index":0}]]},"Market Sell Query":{"main":[[{"node":"Signature MarketSell","type":"main","index":0}]]},"Set Account Query":{"main":[[{"node":"Account Info Query","type":"main","index":0}]]},"Account Info Query":{"main":[[{"node":"Signature Get Account","type":"main","index":0}]]},"Open Orders Params":{"main":[[{"node":"OpenOrder Query","type":"main","index":0}]]},"LimitSale Parameter":{"main":[[{"node":"Sale Query","type":"main","index":0}]]},"MarketBuy Parameter":{"main":[[{"node":"Market Buy Query","type":"main","index":0}]]},"Signature Limit BUY":{"main":[[{"node":"Execute Limit BUY","type":"main","index":0}]]},"Signature MarketBuy":{"main":[[{"node":"Execute MarketBuy","type":"main","index":0}]]},"Signature OpenOrder":{"main":[[{"node":"Get Open Orders","type":"main","index":0}]]},"CancelAllOrder Query":{"main":[[{"node":"Signature Cancel All Order","type":"main","index":0}]]},"MarketSell Parameter":{"main":[[{"node":"Market Sell Query","type":"main","index":0}]]},"Signature Limit SELL":{"main":[[{"node":"Execute Limit SELL","type":"main","index":0}]]},"Signature MarketSell":{"main":[[{"node":"Execute MarketSell","type":"main","index":0}]]},"Signature Get Account":{"main":[[{"node":"Get Account Info","type":"main","index":0}]]},"Cancel All Order Params":{"main":[[{"node":"CancelAllOrder Query","type":"main","index":0}]]},"Signature Cancel All Order":{"main":[[{"node":"Cancell All Order","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Set Credentials","type":"main","index":0}]]}}}


name: Stock Market Information Assistant with Telegram, Yahoo Finance, and GPT-4 Nano
author_name: Archit Jain
author_username: architjn
categories: []
created_at: 2025-06-19T07:12:19.448Z
updated_at: 2025-06-19T07:12:19.448Z
url: https://n8n.io/workflows/5039
scraped_at: 2025-07-06 21:16:30
description:
  How it works

  Listens to Telegram messages to detect stock-related queries.
  Extracts company name and identifies its exact stock ticker symbol.
  Searches Yahoo Finance for stock info using the ticker.
  Fetches and formats the latest stock data like price and key stats.
  Sends a clean, simplified reply back to the user on Telegram.

  Set up steps
  Requires Telegram Bot Token and Apify API credentials.
  Import workflow to n8n and link both Apify actors (Google Search + Yahoo Finance).
  Link OpenRouter for AI and enable Telegram trigger.
  Takes ~10–15 min to connect services and test.
  Includes sticky notes with setup links and tutorial videos.

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.telegram","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.memoryBufferWindow","@n8n/n8n-nodes-langchain.toolWorkflow","@n8n/n8n-nodes-langchain.informationExtractor","@n8n/n8n-nodes-langchain.lmChatOpenRouter"]

workflow_json:
  {"id":"KgeZgdhkiLTg1WWW","meta":{"instanceId":"933df83c84196d70ce3ffd0bf5d3e1aca31b7366f2f84e1f3482640096e4a3a9","templateCredsSetupCompleted":true},"name":"Stock Information","tags":[],"nodes":[{"id":"554cf17a-245d-419b-a91e-fe7dc40d480d","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[0,0],"webhookId":"a367751a-f7e5-4e96-afce-dc8cdc135883","parameters":{},"typeVersion":1.2},{"id":"df921720-704e-46f3-8a79-5b0f8f2a6f03","name":"OpenRouter Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[220,240],"parameters":{},"typeVersion":1},{"id":"171dcdae-19a7-4aa1-b3d3-49ea6bf7df85","name":"When Executed by Another Workflow","type":"n8n-nodes-base.executeWorkflowTrigger","position":[0,660],"parameters":{},"typeVersion":1.1},{"id":"3ccac394-c0ca-45cc-b8d4-8be77b49bfa2","name":"Get Ticker Name","type":"@n8n/n8n-nodes-langchain.toolWorkflow","position":[740,240],"parameters":{},"typeVersion":2.2},{"id":"7b806c05-f25b-4614-8620-075bffd6b0fe","name":"Information Extractor","type":"@n8n/n8n-nodes-langchain.informationExtractor","position":[440,660],"parameters":{},"typeVersion":1.1},{"id":"33977344-0778-408b-aaac-61eafb2ee1f1","name":"OpenRouter Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[480,900],"parameters":{},"typeVersion":1},{"id":"25a48b46-2bb9-462e-a844-1103e57560a1","name":"Google Search","type":"n8n-nodes-base.httpRequest","position":[220,660],"parameters":{},"typeVersion":4.2},{"id":"6d6ec3b6-dfac-4008-b61a-1acde5ef51d6","name":"Ticker Name Search","type":"n8n-nodes-base.httpRequest","position":[840,660],"parameters":{},"typeVersion":4.2},{"id":"7ddc42eb-49be-40ac-ab00-e994d289bbb9","name":"Set Ticker","type":"n8n-nodes-base.set","position":[1060,660],"parameters":{},"typeVersion":3.4},{"id":"0084228a-5b07-4573-ba62-0b94ab1b95d0","name":"Get Stock Info","type":"n8n-nodes-base.httpRequestTool","position":[560,220],"parameters":{},"typeVersion":4.2},{"id":"69088a6d-32a5-4fe8-b10b-5ebf6c88b4e7","name":"Telegram","type":"n8n-nodes-base.telegram","position":[1040,0],"webhookId":"7340a98b-893c-4bd1-9f5e-8dafe5ace0f5","parameters":{},"typeVersion":1.2},{"id":"5a7048c9-e0b9-4fe3-b03e-12f7551a6780","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-160,-300],"parameters":{"content":""},"typeVersion":1},{"id":"5510579b-e103-4e33-b9a5-299fb77cd7df","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-160,420],"parameters":{"content":""},"typeVersion":1},{"id":"10ef6e8a-7345-494d-bf47-242a66d6b2fe","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[380,240],"parameters":{},"typeVersion":1.3},{"id":"0972cafc-444a-4d63-a52d-6b5e05c199ff","name":"Stock Market Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[440,0],"parameters":{},"typeVersion":2}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"18b4779d-af7a-4dbd-8cd4-c685ea431eba","connections":{"Google Search":{"main":[[{"node":"Information Extractor","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"Stock Market Agent","type":"ai_memory","index":0}]]},"Get Stock Info":{"ai_tool":[[{"node":"Stock Market Agent","type":"ai_tool","index":0}]]},"Get Ticker Name":{"ai_tool":[[{"node":"Stock Market Agent","type":"ai_tool","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Stock Market Agent","type":"main","index":0}]]},"Stock Market Agent":{"main":[[{"node":"Telegram","type":"main","index":0}]]},"Ticker Name Search":{"main":[[{"node":"Set Ticker","type":"main","index":0}]]},"Information Extractor":{"main":[[{"node":"Ticker Name Search","type":"main","index":0}]]},"OpenRouter Chat Model":{"ai_languageModel":[[{"node":"Stock Market Agent","type":"ai_languageModel","index":0}]]},"OpenRouter Chat Model1":{"ai_languageModel":[[{"node":"Information Extractor","type":"ai_languageModel","index":0}]]},"When Executed by Another Workflow":{"main":[[{"node":"Google Search","type":"main","index":0}]]}}}


name: Generate Deep Research Markdown Reports with GPT, Tavily Search, and Google Sheets
author_name: Archit Jain
author_username: architjn
categories: []
created_at: 2025-06-19T07:16:10.352Z
updated_at: 2025-06-19T07:16:10.352Z
url: https://n8n.io/workflows/5040
scraped_at: 2025-07-06 21:16:30
description:
  This workflow generates deep researched report in markdown format and saves it in Google Sheet, that I then use for generating blogs for my website - Architjn Blogs

  How it works
  User submits a search topic through a form.
  AI generates five deep-dive subtopics for that main topic.
  AI creates a research report intro, title, and table of contents based on those topics.
  Each subtopic is sent to a search API (Tavily) to collect top 5 sources.
  AI writes detailed Markdown content for each subtopic using retrieved sources.
  Final content, ToC, intro, and clickable sources are saved to a Google Sheet.

  Set up steps
  Requires connections to OpenRouter (AI), Tavily (search API), and Google Sheets.
  Import into n8n and connect credentials for the above services.
  Configure Google Sheet with proper column headers and grant edit access.
  Estimated setup time: 20–30 minutes with working API keys.
  Includes embedded instructions and markdown-style annotations for guidance.

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

workflow_json:
  {"id":"oIEM1QnxTXuxJK06","meta":{"instanceId":"933df83c84196d70ce3ffd0bf5d3e1aca31b7366f2f84e1f3482640096e4a3a9","templateCredsSetupCompleted":true},"name":"Blog Research Agent","tags":[],"nodes":[{"id":"461f5b9e-aae4-440d-ab06-8a1fda2067d2","name":"Plan Topics","type":"@n8n/n8n-nodes-langchain.agent","position":[300,360],"parameters":{},"typeVersion":1.8},{"id":"a6da4abd-c14c-4c83-bd11-669d430f81c6","name":"OpenRouter Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[300,600],"parameters":{},"typeVersion":1},{"id":"b17c5fa2-2775-46a6-99ac-c33e3cb59be7","name":"5 Topics","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[480,600],"parameters":{},"typeVersion":1.2},{"id":"85f3a5e2-d9cd-4fbc-862c-ad2fa8942c4f","name":"Intro","type":"@n8n/n8n-nodes-langchain.agent","position":[840,360],"parameters":{},"typeVersion":1.8},{"id":"60c9b770-eb5d-4ec4-a1d4-1ce2570858a1","name":"OpenRouter Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[820,600],"parameters":{},"typeVersion":1},{"id":"dcf99d6f-664e-4bb1-af2f-1cbb36763072","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[840,200],"parameters":{},"typeVersion":1},{"id":"836f8995-e123-461f-b505-71e065605684","name":"Merge","type":"n8n-nodes-base.merge","position":[1480,340],"parameters":{},"typeVersion":3},{"id":"18680074-aad2-4106-9e1c-c7713ce1c32c","name":"Set Topics","type":"n8n-nodes-base.set","position":[840,20],"parameters":{},"typeVersion":3.4},{"id":"d7cba83c-f997-4af3-8ffa-900d8875b88a","name":"Merge1","type":"n8n-nodes-base.merge","position":[1300,180],"parameters":{},"typeVersion":3},{"id":"66e44854-4520-48cc-9bab-7b939ee43ae4","name":"Split Out1","type":"n8n-nodes-base.splitOut","position":[1060,20],"parameters":{},"typeVersion":1},{"id":"eed6db9e-16fa-4ac0-b21f-8738a0423517","name":"Get Sources","type":"n8n-nodes-base.googleSheets","position":[2460,240],"parameters":{},"typeVersion":4.5,"alwaysOutputData":true},{"id":"5647860e-f4ec-45ca-bd3a-1f7a55e586f0","name":"OpenRouter Chat Model7","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[3240,520],"parameters":{},"typeVersion":1},{"id":"4a5c66ba-d062-4de9-8f81-ba87a84c162e","name":"Sources","type":"@n8n/n8n-nodes-langchain.agent","position":[2660,240],"parameters":{},"typeVersion":1.8},{"id":"d3182822-2501-4a79-8638-655bc791ed44","name":"Send Sources","type":"n8n-nodes-base.googleSheets","position":[2980,240],"parameters":{},"typeVersion":4.5,"alwaysOutputData":true},{"id":"db8a1543-2caf-4c55-8289-849b6006cf1a","name":"Get All Content","type":"n8n-nodes-base.googleSheets","position":[3180,240],"parameters":{},"typeVersion":4.5},{"id":"547a265e-2e9e-4442-8ef2-88f2dd4c28c0","name":"Table of Contents","type":"@n8n/n8n-nodes-langchain.agent","position":[2220,500],"parameters":{},"typeVersion":1.8},{"id":"7d357654-56ea-48ba-95f4-fd82e36a9c14","name":"Send ToC","type":"n8n-nodes-base.googleSheets","position":[2580,500],"parameters":{},"typeVersion":4.5},{"id":"5477b03c-b667-4c4f-9452-a49ff4602544","name":"Send Intro","type":"n8n-nodes-base.googleSheets","position":[1180,360],"parameters":{},"typeVersion":4.5},{"id":"7a67e38c-e0c9-478a-b522-f7b3aa960b1f","name":"Title, Intro, Chapters","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1040,600],"parameters":{},"typeVersion":1.2},{"id":"5d496c36-6e2a-4413-8e91-b6a32f05bcce","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[0,-120],"parameters":{"content":""},"typeVersion":1},{"id":"e481fc15-4bdf-4b50-8f9a-ad0510848884","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1940,-120],"parameters":{"content":""},"typeVersion":1},{"id":"cc17a444-2cc2-47e5-96ac-d95c83db00f9","name":"On form submission","type":"n8n-nodes-base.formTrigger","position":[80,360],"webhookId":"ba86447b-5cda-48ab-a4d6-1e1a07bad686","parameters":{},"typeVersion":2.2},{"id":"58f892de-f9b0-44bd-b5d8-9807fd49f3b6","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[60,1280],"parameters":{},"typeVersion":3},{"id":"0d335eb8-8be3-4f85-ad17-0b0d0599f29d","name":"OpenRouter Chat Model8","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[920,1560],"parameters":{},"typeVersion":1},{"id":"ccd0951b-80a3-44dd-bc21-45fa20ad077e","name":"Tavily5","type":"n8n-nodes-base.httpRequest","position":[500,1300],"parameters":{},"typeVersion":4.2},{"id":"f30bc7f6-ce08-44ed-a782-d630b81b3d02","name":"Split Out7","type":"n8n-nodes-base.splitOut","position":[700,1300],"parameters":{},"typeVersion":1},{"id":"420f21be-5b2c-4a33-912c-106459b8837e","name":"Code5","type":"n8n-nodes-base.code","position":[880,1300],"parameters":{},"typeVersion":2},{"id":"9e20afd7-1dd1-43ec-8e47-6885c738aa15","name":"Aggregate10","type":"n8n-nodes-base.aggregate","position":[1420,1440],"parameters":{},"typeVersion":1},{"id":"ed34ddd8-0fbe-43ab-bb2d-d7f386eb29e7","name":"Writer5","type":"@n8n/n8n-nodes-langchain.agent","position":[1060,1440],"parameters":{},"typeVersion":1.8},{"id":"79ed8d33-211f-40b3-b10a-70d936426df5","name":"Aggregate11","type":"n8n-nodes-base.aggregate","position":[1420,1300],"parameters":{},"typeVersion":1},{"id":"713cefcf-2a8b-404e-abc8-e2876b78c74f","name":"Merge8","type":"n8n-nodes-base.merge","position":[1760,1580],"parameters":{},"typeVersion":3},{"id":"d2787e68-d02c-43da-8e80-d115020779fb","name":"Aggregate12","type":"n8n-nodes-base.aggregate","position":[500,1020],"parameters":{},"typeVersion":1},{"id":"f7f57f46-44c8-4783-85cd-df842d58544b","name":"Google Sheets","type":"n8n-nodes-base.googleSheets","position":[700,1020],"parameters":{},"typeVersion":4.5,"alwaysOutputData":true},{"id":"26f9b7cb-802e-4ee2-ac49-a7789b0081dd","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[0,900],"parameters":{"content":""},"typeVersion":1},{"id":"7f707137-6524-4e17-86a3-71fb5b1449e5","name":"Get Sections","type":"n8n-nodes-base.code","position":[1560,1580],"parameters":{},"typeVersion":2},{"id":"0819b92f-9dcb-434f-aaa9-adc74608442d","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-560,-120],"parameters":{"content":""},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"25ab24ba-e488-4ef0-943b-b6fc68c80dfc","connections":{"Code5":{"main":[[{"node":"Writer5","type":"main","index":0},{"node":"Aggregate11","type":"main","index":0}]]},"Intro":{"main":[[{"node":"Send Intro","type":"main","index":0}]]},"Merge":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Merge1":{"main":[[{"node":"Merge","type":"main","index":0}]]},"Merge8":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Sources":{"main":[[{"node":"Send Sources","type":"main","index":0}]]},"Tavily5":{"main":[[{"node":"Split Out7","type":"main","index":0}]]},"Writer5":{"main":[[{"node":"Aggregate10","type":"main","index":0}]]},"5 Topics":{"ai_outputParser":[[{"node":"Plan Topics","type":"ai_outputParser","index":0}]]},"Send ToC":{"main":[[]]},"Split Out":{"main":[[{"node":"Merge1","type":"main","index":1}]]},"Send Intro":{"main":[[{"node":"Merge","type":"main","index":1}]]},"Set Topics":{"main":[[{"node":"Split Out1","type":"main","index":0}]]},"Split Out1":{"main":[[{"node":"Merge1","type":"main","index":0}]]},"Split Out7":{"main":[[{"node":"Code5","type":"main","index":0}]]},"Aggregate10":{"main":[[{"node":"Get Sections","type":"main","index":0},{"node":"Merge8","type":"main","index":1}]]},"Aggregate11":{"main":[[{"node":"Merge8","type":"main","index":0}]]},"Aggregate12":{"main":[[{"node":"Google Sheets","type":"main","index":0}]]},"Get Sources":{"main":[[{"node":"Sources","type":"main","index":0}]]},"Plan Topics":{"main":[[{"node":"Intro","type":"main","index":0},{"node":"Split Out","type":"main","index":0},{"node":"Set Topics","type":"main","index":0}]]},"Get Sections":{"main":[[{"node":"Merge8","type":"main","index":2}]]},"Send Sources":{"main":[[{"node":"Get All Content","type":"main","index":0}]]},"Google Sheets":{"main":[[{"node":"Get Sources","type":"main","index":0}]]},"Get All Content":{"main":[[{"node":"Table of Contents","type":"main","index":0}]]},"Loop Over Items":{"main":[[{"node":"Aggregate12","type":"main","index":0}],[{"node":"Tavily5","type":"main","index":0}]]},"Table of Contents":{"main":[[{"node":"Send ToC","type":"main","index":0}]]},"On form submission":{"main":[[{"node":"Plan Topics","type":"main","index":0}]]},"OpenRouter Chat Model":{"ai_languageModel":[[{"node":"Plan Topics","type":"ai_languageModel","index":0}]]},"OpenRouter Chat Model1":{"ai_languageModel":[[{"node":"Intro","type":"ai_languageModel","index":0}]]},"OpenRouter Chat Model7":{"ai_languageModel":[[{"node":"Sources","type":"ai_languageModel","index":0},{"node":"Table of Contents","type":"ai_languageModel","index":0}]]},"OpenRouter Chat Model8":{"ai_languageModel":[[{"node":"Writer5","type":"ai_languageModel","index":0}]]},"Title, Intro, Chapters":{"ai_outputParser":[[{"node":"Intro","type":"ai_outputParser","index":0}]]}}}


name: Manage Emails via WhatsApp with Gmail, GPT and Voice Recognition
author_name: Floyd Mahou
author_username: floyd
categories: []
created_at: 2025-06-19T10:31:10.499Z
updated_at: 2025-06-19T10:31:10.499Z
url: https://n8n.io/workflows/5042
scraped_at: 2025-07-06 21:16:30
description:
  🔍 How it works  
  This workflow turns WhatsApp into a smart email command center using AI.

  Users can speak or type instructions like:  
  "Send a follow-up to Claire”
  "Write a draft email to Claire to confirm tomorrow’s meeting at 5 PM”
  "What is the name of Claire's firm?”

  The agent transcribes voice notes, extracts intent with GPT, interacts with Gmail (send, draft, search), and replies with a confirmation via WhatsApp — either as text or a voice message.

  ⚙️ Key Modules Used
  WhatsApp Business Webhook (Meta)
  OpenAI Whisper (voice transcription)
  GPT (intent + content generation)
  Gmail (search, draft, send)
  Airtable (contact lookup + memory logging)

  🧠 Memory Layer (Optional)
  The agent logs key fields in Airtable:
  Recipient email
  Company / job title
  And more...
  This creates a lightweight "gut memory” so the agent feels context-aware.

  🗺️ Setup Steps
  Connect WhatsApp Business API (via Meta Developer Console)
  Add OpenAI and Gmail credentials in n8n
  Link your Airtable base for contacts and logging

  🧩 Best Use Cases
  Hands-free email reply while commuting
  Fast Gmail access for busy consultants / solopreneurs
  Custom business agents for service-based professionals

  ⏱️ Estimated Setup Time
  30–60 minutes

  ✅ Requirements
  WhatsApp Business Cloud access
  OpenAI API Key
  Gmail or Google Workspace
  Airtable account (free plan OK)
  n8n instance (cloud or self-hosted with HTTPS)

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

workflow_json:
  {"id":"2CrCmc820XAaHFHL","meta":{"instanceId":"0113e6e8f0b87d10de7bde5508e446a6ee60d5da9eac8c7eea34b85efc06e886","templateCredsSetupCompleted":true},"name":"SmartMail Agent – Your AI Email Assistant, Powered by WhatsApp","tags":[],"nodes":[{"id":"85a2e149-585b-485b-bcfc-0b4097193e39","name":"Email Agent","type":"@n8n/n8n-nodes-langchain.agent","onError":"continueErrorOutput","position":[2480,-3100],"parameters":{"text":"={{ $json.message_type }}\n","options":{"systemMessage":"=# Overview  \nYou are an AI assistant specialized in managing email-related tasks and providing direct, actionable responses in French and English.\n\n## Context  \n- You are a general-purpose assistant supporting users in email communication and message automation.  \n- You operate in both French and English, depending on the language of the input.  \n- Your tone is strategic, clear, and focused on delivering concise responses.  \n\n## Instructions  \n1. Always validate the presence of actual message content before replying.  \n2. If the input is a greeting (e.g., \"Bonjour\", \"Merci\", \"comment tu vas\"), respond in a concise and friendly tone.  \n3. Format all email replies using HTML for clarity and structure.  \n4. If necessary, ask strategic questions to clarify vague requests or guide toward specific actions.  \n5. Respond directly to the user's message with a final sentence. Do not explain, structure, or rephrase the request.  \n6. If the input is unclear or lacks actionable content, request clarification.  \n7. You must never justify or comment on your actions.  \n\n## Tools    \n- Create Draft  \n- Send Email  \n\n## Examples  \n- Input: \"Bonjour\"  \n  - Output: \"Bonjour ! Ca va très bien, merci. Comment puis-je vous aider aujourd’hui ?\"  \n- Input: \"Envoies un email à Florence.\"  \n  - Output: \"L'email a été envoyé à Florence à l'adresse email suivante : xxx@nomdedomaine\"  \n- Input: \"Merci\"  \n  - Output: \"Avec plaisir ! 😊\"  \n\n## SOP (Standard Operating Procedure)  \n1. Check if the message contains usable content.  \n2. If empty, determine if it's a greeting; if not, request clarification.  \n3. Compose the email using this HTML format:  \n   \"Hello [Name],  \n   <br><br>  \n   [Content]  \n   <br><br>  \n   Best regards,  \n   <br>  \n   [Your Name]\"  \n4. Send or draft the email as instructed.  \n5. Log the outcome of the action if needed.  \n\n## Final Notes  \n- Your role is to provide fast, clean, and final outputs.  \n- Prioritize simple, scalable, and personalized interactions.  \n- All responses are time-sensitive and context-aware.  \n\nCurrent time is {{ $now.format('yyyy-MM-dd') }}  \nTime zone: Paris/Europe  \n"},"promptType":"define"},"typeVersion":1.6},{"id":"8b3fbab7-d5f4-4ab9-9468-e492586c5d2e","name":"Send Email","type":"n8n-nodes-base.gmailTool","position":[2200,-2680],"webhookId":"ea31e63d-e6c5-4f6d-b17f-9ecda87e11c8","parameters":{"sendTo":"={{ $fromAI(\"emailAddress\") }}","message":"={{ $fromAI(\"emailBody\") }}","options":{"appendAttribution":false},"subject":"={{ $fromAI(\"subject\") }}"},"credentials":{"gmailOAuth2":{"id":"VpdTmf44WRCUdBTa","name":"Gmail account TEST"}},"typeVersion":2.1},{"id":"eefaed16-798f-4060-9be2-9b527ecd4a56","name":"Create Draft","type":"n8n-nodes-base.gmailTool","position":[2360,-2680],"webhookId":"c40fc123-5d3d-4002-85bd-ec6603a0ad83","parameters":{"message":"={{ $fromAI(\"emailBody\") }}","options":{"sendTo":"={{ $fromAI(\"emailAddress\") }}"},"subject":"={{ $fromAI(\"subject\") }}","resource":"draft","emailType":"html"},"credentials":{"gmailOAuth2":{"id":"VpdTmf44WRCUdBTa","name":"Gmail account TEST"}},"typeVersion":2.1},{"id":"5b47751d-88f0-4e7c-aecb-df220f672b08","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[2040,-2680],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4-turbo-preview","cachedResultName":"gpt-4-turbo-preview"},"options":{}},"credentials":{"openAiApi":{"id":"0drnlAHYRUGeZtLD","name":"OpenAi Emails Key"}},"typeVersion":1.2},{"id":"67d7f391-46ba-43ba-b988-35a68b46acdd","name":"WhatsApp Trigger","type":"n8n-nodes-base.whatsAppTrigger","position":[1660,-3860],"webhookId":"2eadd11a-88fa-4423-9ff4-411c12094729","parameters":{"updates":["messages"]},"credentials":{"whatsAppTriggerApi":{"id":"jifF3mXrNhJwcLKS","name":"WhatsApp OAuth TEST"}},"typeVersion":1},{"id":"05fa762a-94e2-49cb-8236-5d12dfa046cd","name":"Switch","type":"n8n-nodes-base.switch","position":[1980,-3860],"parameters":{"rules":{"values":[{"outputKey":"voice","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"b969c18d-14dd-4b34-8d08-801d8818b8d2","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('WhatsApp Trigger').item.json.messages[0].type }}","rightValue":"audio"}]},"renameOutput":true},{"outputKey":"text","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"1daa0ee5-cb8b-44c4-ae74-954cae03c10d","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('WhatsApp Trigger').item.json.messages[0].type }}","rightValue":"text"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2},{"id":"d3bbad47-a4b0-4bc0-a807-adffb4914bde","name":"HTTP Request","type":"n8n-nodes-base.httpRequest","position":[2360,-3940],"parameters":{"url":"={{ $json.url }}","options":{},"authentication":"predefinedCredentialType","nodeCredentialType":"whatsAppApi"},"credentials":{"whatsAppApi":{"id":"MGUvsnUMEoX9BRFP","name":"WhatsApp Token Personal Agent"}},"typeVersion":4.2},{"id":"2451cc94-89b3-4163-a278-ef54c3302ec6","name":"OpenAI","type":"@n8n/n8n-nodes-langchain.openAi","position":[2540,-3940],"parameters":{"options":{},"resource":"audio","operation":"transcribe"},"credentials":{"openAiApi":{"id":"dGvlNIgvEDsKANs5","name":"OpenAi account Test"}},"typeVersion":1.8},{"id":"12942040-c126-4ce3-8549-9f0f0c62cf46","name":"Edit Fields","type":"n8n-nodes-base.set","position":[2500,-3760],"parameters":{"options":{},"assignments":{"assignments":[{"id":"7453a002-ec0f-4853-a28d-5d06669cb5d0","name":"text","type":"string","value":"={{ $('WhatsApp Trigger').item.json.messages[0].text.body }}"}]}},"typeVersion":3.4},{"id":"74d29419-8fe1-4d68-84f7-1584e71abc22","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[1820,-3860],"parameters":{"options":{},"fieldToSplitOut":"={{ $json.field }}"},"typeVersion":1},{"id":"b49b0f86-49bf-4e22-afc3-b13639e34c3d","name":"Edit Fields1","type":"n8n-nodes-base.set","position":[2720,-3760],"parameters":{"options":{},"assignments":{"assignments":[{"id":"8cbf25ac-3fc9-4892-9c6a-24c974b03362","name":"message_type","type":"string","value":"={{ $json.text }}"}]}},"typeVersion":3.4},{"id":"49837ff2-bb28-47fe-97d4-6f6d2840586a","name":"WhatsApp Business Cloud1","type":"n8n-nodes-base.whatsApp","position":[1940,-1680],"webhookId":"b89990f8-a463-4af2-a732-902da14bb3c2","parameters":{"textBody":"={{ $json.output }}","operation":"send","phoneNumberId":"580438095157298","additionalFields":{},"recipientPhoneNumber":"+33646644178"},"credentials":{"whatsAppApi":{"id":"Pqk2W7YtdeRRoUwW","name":"WhatsApp account TEST"}},"typeVersion":1},{"id":"86e22c41-98a6-400f-8945-afd724f05c14","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","disabled":true,"position":[1860,-2680],"parameters":{"sessionKey":"={{ $('Edit Fields1').item.json.message_type }} ","sessionIdType":"customKey"},"typeVersion":1.3},{"id":"4b0530f5-abfc-430c-915e-482dca9cc932","name":"WhatsApp Business Cloud","type":"n8n-nodes-base.whatsApp","position":[2180,-3940],"webhookId":"a4388d29-c2c7-45c4-8977-b768eacf997b","parameters":{"resource":"media","operation":"mediaUrlGet","mediaGetId":"={{ $json.audio.id }}"},"credentials":{"whatsAppApi":{"id":"Pqk2W7YtdeRRoUwW","name":"WhatsApp account TEST"}},"typeVersion":1},{"id":"2e755031-6f6a-4280-bf13-4fc5cc1ccbe4","name":"OpenAI1","type":"@n8n/n8n-nodes-langchain.openAi","position":[1920,-1900],"parameters":{"input":"={{ $json.output }}","voice":"nova","options":{},"resource":"audio"},"credentials":{"openAiApi":{"id":"0drnlAHYRUGeZtLD","name":"OpenAi Emails Key"}},"typeVersion":1.8},{"id":"a9a3bf53-ea40-4206-9f54-159f96db2f79","name":"Code","type":"n8n-nodes-base.code","position":[2160,-1900],"parameters":{"jsCode":"// Loop over input items and change the MIME type of binary data\nfor (const item of $input.all()) {\n\t// Check if the item has binary data\n\tif (item.binary) {\n\t\t// Find the binary property name (assuming there's at least one)\n\t\tconst binaryPropertyNames = Object.keys(item.binary);\n\n\t\tfor (const propName of binaryPropertyNames) {\n\t\t\t// If the MIME type is 'audio/mp3', change it to 'audio/mpeg'\n\t\t\tif (item.binary[propName].mimeType === 'audio/mp3') {\n\t\t\t\titem.binary[propName].mimeType = 'audio/mpeg';\n\t\t\t}\n\t\t}\n\t}\n}\n\nreturn $input.all();\n"},"typeVersion":2},{"id":"32005f45-3bb2-4da0-887a-b89fbe49a7ba","name":"If","type":"n8n-nodes-base.if","position":[1640,-1880],"parameters":{"options":{"ignoreCase":false},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"2163dc40-756e-479a-b7fd-1418ac129a61","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('WhatsApp Trigger').item.json.messages[0].type }}","rightValue":"audio"}]}},"typeVersion":2.2},{"id":"cec9cff4-b04b-4858-a46c-1caa8e2cc8a2","name":"WhatsApp Business Cloud2","type":"n8n-nodes-base.whatsApp","position":[2400,-1900],"webhookId":"7116ffeb-dd52-4993-a041-7ceac577b12d","parameters":{"resource":"media","phoneNumberId":"580438095157298","additionalFields":{}},"credentials":{"whatsAppApi":{"id":"Pqk2W7YtdeRRoUwW","name":"WhatsApp account TEST"}},"typeVersion":1},{"id":"2c9dd33c-6c67-468a-a5bb-16076b08d735","name":"WhatsApp Business Cloud3","type":"n8n-nodes-base.whatsApp","position":[2640,-1900],"webhookId":"1957dc07-4009-4a6e-a2a4-11ec08ec9816","parameters":{"mediaId":"={{ $json.id }}","mediaPath":"useMediaId","operation":"send","messageType":"audio","phoneNumberId":"580438095157298","additionalFields":{},"recipientPhoneNumber":"+33646644178"},"credentials":{"whatsAppApi":{"id":"Pqk2W7YtdeRRoUwW","name":"WhatsApp account TEST"}},"typeVersion":1},{"id":"e530836b-5977-4810-a684-4d4d71bd82c3","name":"Get Email","type":"n8n-nodes-base.airtableTool","position":[2520,-2680],"parameters":{"base":{"__rl":true,"mode":"list","value":"app6hvrEDwB41AKAz","cachedResultUrl":"https://airtable.com/app6hvrEDwB41AKAz","cachedResultName":"[BlockA] - Contact List"},"limit":5,"table":{"__rl":true,"mode":"list","value":"tbldXug1pLHGc0xoI","cachedResultUrl":"https://airtable.com/app6hvrEDwB41AKAz/tbldXug1pLHGc0xoI","cachedResultName":"Auto"},"options":{},"operation":"search","returnAll":false,"filterByFormula":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Filter_By_Formula', ``, 'string') }}"},"credentials":{"airtableTokenApi":{"id":"KFOvXiPrIgpAWZAy","name":"Airtable Personal Access TEST"}},"typeVersion":2.1},{"id":"60875323-4791-4782-a7af-855400619f1b","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1600,-4460],"parameters":{"width":1280,"height":920,"content":"## 🟫  Part 1: WhatsApp Message Intake & Voice Transcription\n# Reception WhatsApp & Transcription vocale\n\n🔧 Main Modules:\nWhatsApp Trigger: Listens for new incoming messages.\n\nSplit Out: Breaks down incoming message batches.\n\nSwitch: Identifies the message type (text, image, audio, etc.).\n\nWhatsApp Business Cloud: Retrieves media content.\n\nHTTP Request: Downloads audio files for transcription.\n\nOpenAI (Whisper): Transcribes voice messages into text.\n\nEdit Fields: Cleans and formats the output into structured JSON.\n\n🧠 Goal:\nDetect and transcribe voice messages received via WhatsApp.\nPrepares clean, structured text that can be interpreted by the AI agent for further action."},"typeVersion":1},{"id":"b1172ad4-92fe-4a6b-97f7-ccce4bd8f56c","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1600,-2380],"parameters":{"color":3,"width":1280,"height":940,"content":"##  🟥 Part 3: Vocal Response & WhatsApp Feedback\n# Vocal Generation & Personalized WhatsApp Return\n\n🔧 Main Modules:\nOpenAI (Text-to-Voice logic): Generates a personalized summary or confirmation message.\n\nIf: Decides whether to generate a voice message or just a text reply.\n\nCode: Formats the response and adapts the message payload for WhatsApp API.\n\nWhatsApp Business Cloud (media.mediaupload): Sends the audio message file.\n\nWhatsApp Business Cloud (message.send): Sends the final WhatsApp message (text or audio).\n\nOptional: Return text + audio simultaneously for enriched UX.\n\n🧠 Goal:\nRespond back to the client or user directly via WhatsApp, with either a summarized text or an auto-generated voice message — offering clarity, speed, and a human-like touch."},"typeVersion":1},{"id":"227b5da7-2ffc-4bf0-ba34-f4fbe1f61297","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1600,-3540],"parameters":{"color":4,"width":1280,"height":1160,"content":"## 🟩 Part 2: Smart Email Agent – Read, Draft, Respond\n# Email AI Agent – Send, Draft, Reply...\n\n🔧 Main Modules:\nEmail Agent: Core logic and orchestration of all email-related actions.\n\nOpenAI Chat Model: Extracts user intent and provides reasoning based on message.\n\nSimple Memory (Optional): Stores previous interactions.\n\nSend Email: Sends email directly if fully automated.\n\nCreate Draft: Generates a draft email for manual validation.\n\nGet Email (Airtable): Retrieves the recipient’s emails and related content from a contact stored in the database.\n\n🧠 Goal:\nTurn a WhatsApp voice/text instruction into a precise email action: read, summarize, draft, or reply.\nThe agent leverages OpenAI to act intelligently and adapt to the context."},"typeVersion":1},{"id":"98b9f159-67e7-421b-a7df-9be564db9db4","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[2900,-4460],"parameters":{"color":5,"width":720,"height":3020,"content":"## 📘 Smart Email Agent via WhatsApp – Module-by-Module Setup Guide\n# This guide explains how the already-built template works, detailing each step with the required modules and configurations.\n\n🧩 What You’ll Need\n\nTo deploy this AI-powered email assistant, ensure you have the following:\n\n✅ WhatsApp Business Cloud API access(with a registered phone number and webhook configured)\n✅ OpenAI API Key(used for both GPT and Whisper models)\n✅ Gmail or Google Workspace account(OAuth2 credentials to access email content and send replies)\n✅ Airtable account (free plan is sufficient)(used for contact lookups, template storage, or logging interactions)\n✅ n8n instance(either cloud or self-hosted with HTTPS enabled)\n✅ Basic familiarity with n8n workflow builder\n\n⏱️ Estimated setup time: 30–60 minutes\n\n🟫 Step 1 – Capture WhatsApp Messages\n\nModules:\nWebhook: Listens for WhatsApp events via the Meta API.\nSplit Out: Handles rare fallback events where multiple messages are received in one payload.\nSwitch: Determines the type of message (text, audio, etc.).\nWhatsApp Media Node: Retrieves media ID if it’s an audio message.\nHTTP Request: Downloads the audio file from the media ID.\nOpenAI Whisper: Transcribes audio to text.\n(Optional) Edit Fields: Cleans and standardizes the text for further processing.\n\nWhat Happens:\n\nThis section ensures every incoming message (voice or text) is accurately processed and ready for interpretation.\n\n🟩 Step 2 – Analyze & Process the Email Request\n\nModules:\n\nOpenAI Chat: Extracts the intent from the message (e.g., send, reply, summarize).\n\nGmail Nodes:\n\nGmail: Get Email: Retrieves past email content.\nGmail: Create Draft: Saves a reply as a draft.\nGmail: Send Email: Sends an email directly if action is confirmed.\n\nAirtable:\n\nRetrieves contact information (email, job title, company, etc.).\nLogs key elements for memory (intent, timestamp, status, etc.).\n\nKey Feature:\n\nYour Gut AI Agent — This setup builds a memory by correlating emails and contact profiles inside Airtable. Your agent becomes context-aware, knowing who it's speaking to and what has been exchanged previously.\n\n🟥 Step 3 – Return Smart Feedback via WhatsApp\n\nModules:\n\nOpenAI Chat: Generates a natural-language confirmation of the action taken.\n\n(Optional) TTS/Voice Generation (Tip to strengthen your workflow): Automatically converts the confirmation into a voice message using ElevenLabs - allowing the assistant to communicate feedback in audio form.\n\nCode Node: Ensures the correct MIME type for the audio file (e.g., audio/mp3 → audio/mpeg).\n\nWhatsApp Media Upload: Uploads the audio to WhatsApp Cloud.\n\nWhatsApp Message Sender: Sends the confirmation message (text or voice) back to the user.\n\nAdditional Notes:\n\nThe Code Node loops through binary data to ensure compatibility with WhatsApp's expected audio format.\n\n🔐 Security Best Practices\n\nNever hardcode API keys – use environment variables.\nSecure your Webhook with custom headers.\nMonitor usage and logs regularly.\n\nHandle errors with fallback branches in n8n.\n\n"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"e85f3f2d-99f2-4df8-b94f-739dcf2c52b1","connections":{"If":{"main":[[{"node":"OpenAI1","type":"main","index":0}],[{"node":"WhatsApp Business Cloud1","type":"main","index":0}]]},"Code":{"main":[[{"node":"WhatsApp Business Cloud2","type":"main","index":0}]]},"OpenAI":{"main":[[{"node":"Edit Fields1","type":"main","index":0}]]},"Switch":{"main":[[{"node":"WhatsApp Business Cloud","type":"main","index":0}],[{"node":"Edit Fields","type":"main","index":0}]]},"OpenAI1":{"main":[[{"node":"Code","type":"main","index":0}]]},"Get Email":{"ai_tool":[[{"node":"Email Agent","type":"ai_tool","index":0}]]},"Split Out":{"main":[[{"node":"Switch","type":"main","index":0}]]},"Send Email":{"ai_tool":[[{"node":"Email Agent","type":"ai_tool","index":0}]]},"Edit Fields":{"main":[[{"node":"Edit Fields1","type":"main","index":0}]]},"Email Agent":{"main":[[{"node":"If","type":"main","index":0}],[{"node":"If","type":"main","index":0}]]},"Create Draft":{"ai_tool":[[{"node":"Email Agent","type":"ai_tool","index":0}]]},"Edit Fields1":{"main":[[{"node":"Email Agent","type":"main","index":0}]]},"HTTP Request":{"main":[[{"node":"OpenAI","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"Email Agent","type":"ai_memory","index":0}]]},"WhatsApp Trigger":{"main":[[{"node":"Split Out","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Email Agent","type":"ai_languageModel","index":0}]]},"WhatsApp Business Cloud":{"main":[[{"node":"HTTP Request","type":"main","index":0}]]},"WhatsApp Business Cloud1":{"main":[[]]},"WhatsApp Business Cloud2":{"main":[[{"node":"WhatsApp Business Cloud3","type":"main","index":0}]]}}}


name: Google Maps Business Phone No Scraper with Bright Data & Sheets
author_name: Incrementors
author_username: incrementors
nodes_used: ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest"]
categories: []
created_at: 2025-06-19T11:36:17.347Z
updated_at: 2025-06-19T11:36:17.347Z
url: https://n8n.io/workflows/5043
scraped_at: 2025-07-06 21:16:30
description:
  Google Maps Business Phone No Scraper with Bright Data & Sheets

  Overview
  This n8n workflow automates the process of scraping business phone numbers and information from Google Maps using the Bright Data API and saves the results to Google Sheets.

  Workflow Components

  1. Form Trigger - Submit Location and Keywords
  Type: Form Trigger  
  Purpose: Start the workflow when a form is submitted  
  Fields:
  Location (required)
  Keywords (required)

  Configuration:
  Form Title: "GMB"
  Webhook ID: 8b72dcdf-25a1-4b63-bb44-f918f7095d5d

  2. Bright Data API - Request Business Data
  Type: HTTP Request  
  Purpose: Sends scraping request to Bright Data API  
  Method: POST  
  URL: https://api.brightdata.com/datasets/v3/trigger

  Query Parameters:
  dataset_id: gd_m8ebnr0q2qlklc02fz
  include_errors: true
  type: discover_new
  discover_by: location
  limit_per_input: 2

  Headers:
  Authorization: Bearer BRIGHT_DATA_API_KEY

  Request Body:
  {
    "input": [
      {
        "country": "{{ $json.Location }}",
        "keyword": "{{ $json.keywords }}",
        "lat": ""
      }
    ],
    "custom_output_fields": [
      "url",
      "country",
      "name",
      "address",
      "description",
      "open_hours",
      "reviews_count",
      "rating",
      "reviews",
      "services_provided",
      "open_website",
      "phone_number",
      "permanently_closed",
      "photos_and_videos",
      "people_also_search"
    ]
  }

  3. Check Scraping Status
  Type: HTTP Request  
  Purpose: Check if data scraping is completed  
  Method: GET  
  URL: https://api.brightdata.com/datasets/v3/progress/{{ $json.snapshot_id }}

  Query Parameters:
  format: json

  Headers:
  Authorization: Bearer BRIGHT_DATA_API_KEY

  4. Check If Status Ready
  Type: Conditional (IF)  
  Purpose: Determine if scraping is ready or needs to wait  
  Condition: {{ $json.status }} equals "ready"

  5. Wait Before Retry
  Type: Wait  
  Purpose: Pause 1 minute before checking status again  
  Duration: 1 minute  
  Webhook ID: 7047efad-de41-4608-b95c-d3e0203ef620

  6. Check Records Exist
  Type: Conditional (IF)  
  Purpose: Proceed only if business records are found  
  Condition: {{ $json.records }} not equals 0

  7. Fetch Business Data
  Type: HTTP Request  
  Purpose: Get business information including phone numbers  
  Method: GET  
  URL: https://api.brightdata.com/datasets/v3/snapshot/{{ $json.snapshot_id }}

  Query Parameters:
  format: json

  Headers:
  Authorization: Bearer BRIGHT_DATA_API_KEY

  8. Save to Google Sheets
  Type: Google Sheets  
  Purpose: Store business data in Google Sheets  
  Operation: Append  
  Document ID: YOUR_GOOGLE_SHEET_ID  
  Sheet Name: GMB  

  Column Mapping:
  Name:** {{ $json.name }}
  Address:** {{ $json.address }}
  Rating:** {{ $json.rating }}
  Phone Number:** {{ $json.phone_number }}
  URL:** {{ $json.url }}

  Workflow Flow

  Start: User submits form with location and keywords
  Request: Send scraping request to Bright Data API
  Monitor: Check scraping status periodically
  Wait Loop: If not ready, wait 1 minute and check again
  Validate: Ensure records exist before proceeding
  Fetch: Retrieve the scraped business data
  Save: Store results in Google Sheets

  Setup Requirements

  API Keys & Credentials
  Bright Data API Key:** Replace BRIGHT_DATA_API_KEY with your actual API key
  Google Sheets OAuth2:** Configure with your Google Sheets credential ID
  Google Sheet ID:** Replace YOUR_GOOGLE_SHEET_ID with your actual sheet ID

  Google Sheets Setup
  Create a Google Sheet with a tab named "GMB"
  Ensure the following columns exist:
    Name
    Address
    Rating
    Phone Number
    URL

  Workflow Status
  Active:** No (currently inactive)
  Execution Order:** v1
  Version ID:** 0bed9bf1-00a3-4eb6-bf7c-cf07bee006a2
  Workflow ID:** Hm7iTSgpu2of6gz4

  Notes
  The workflow includes a retry mechanism with 1-minute waits
  Data validation ensures only successful scrapes are processed
  All business information is automatically saved to Google Sheets
  The form trigger allows easy initiation of scraping jobs

  For any questions or support, please contact:
  info@incrementors.com
  or fill out this form: https://www.incrementors.com/contact-us/

workflow_json:
  {"id":"Hm7iTSgpu2of6gz4","meta":{"instanceId":"bc8ca75c203589705ae2e446cad7181d6f2a7cc1766f958ef9f34810e53b8cb2","templateCredsSetupCompleted":true},"name":"Google Maps Business Phone Number Scraper Using Bright Data API & Google Sheets Integration","tags":[],"nodes":[{"id":"e5b879b7-5f3c-4679-95e4-6c32eae86080","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1340,20],"parameters":{"width":220,"height":220,"content":"📝 Trigger - Start when form is submitted\n"},"typeVersion":1},{"id":"703d65f1-bbc7-437a-8a82-a35b6ac04504","name":"Form Trigger - Submit Location and Keywords","type":"n8n-nodes-base.formTrigger","position":[-1280,80],"webhookId":"8b72dcdf-25a1-4b63-bb44-f918f7095d5d","parameters":{"options":{},"formTitle":"GMB","formFields":{"values":[{"fieldLabel":"Location","requiredField":true},{"fieldLabel":"keywords","requiredField":true}]}},"typeVersion":2.2},{"id":"1b5f22d3-c271-4d80-bc40-9b701a668c40","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1080,20],"parameters":{"color":3,"width":220,"height":220,"content":"Sends scraping request to Bright Data API"},"typeVersion":1},{"id":"61dc6463-12db-453c-a732-dc0d924dc469","name":"Bright Data API - Request Business Data","type":"n8n-nodes-base.httpRequest","position":[-1020,80],"parameters":{"url":"https://api.brightdata.com/datasets/v3/trigger","method":"POST","options":{},"jsonBody":"={\n  \"input\": [\n    {\n      \"country\": \"{{ $json.Location }}\",\n      \"keyword\": \"{{ $json.keywords }}\",\n      \"lat\": \"\"\n    }\n  ],\n  \"custom_output_fields\": [\n   \n    \"url\",\n    \"country\",\n    \"name\",\n   \n    \"address\",\n    \"description\",\n    \n    \"open_hours\",\n    \"reviews_count\",\n    \"rating\",\n    \n    \"reviews\",\n    \"services_provided\",\n    \n    \"open_website\",\n    \"phone_number\",\n    \"permanently_closed\",\n    \"photos_and_videos\",\n    \"people_also_search\"\n   \n  ]\n} ","sendBody":true,"sendQuery":true,"sendHeaders":true,"specifyBody":"json","queryParameters":{"parameters":[{"name":"dataset_id","value":"gd_m8ebnr0q2qlklc02fz"},{"name":"include_errors","value":"true"},{"name":"type","value":"discover_new"},{"name":"discover_by","value":"location"},{"name":"limit_per_input","value":"2"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"}]}},"typeVersion":4.2},{"id":"aae71edd-22bc-4bb9-a950-1c82aef6a30b","name":"Check Scraping Status","type":"n8n-nodes-base.httpRequest","position":[-780,80],"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_TOKEN_HERE"}]}},"typeVersion":4.2},{"id":"6370948d-f408-4cf8-8d3c-0c2db3665cae","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-840,0],"parameters":{"color":4,"width":220,"height":260,"content":"⏳ Check Status - Is data scraping completed?\n"},"typeVersion":1},{"id":"1c016ecd-97db-4638-919f-2cc7136b2384","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-600,0],"parameters":{"color":5,"width":200,"height":260,"content":"✅ Is Ready? - If ready, continue; if not, wait"},"typeVersion":1},{"id":"67931cf3-a2c5-42e0-86b7-2b1611175037","name":"Check If Status Ready","type":"n8n-nodes-base.if","position":[-560,80],"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":"9e089ddb-2cd2-4988-b070-a400d9a464e3","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-380,240],"parameters":{"color":7,"height":240,"content":"⏱️ Wait - Pause 1 min before checking again\n"},"typeVersion":1},{"id":"594732d2-7a44-4b20-9cf6-81314933a857","name":"Wait Before Retry","type":"n8n-nodes-base.wait","position":[-320,300],"webhookId":"7047efad-de41-4608-b95c-d3e0203ef620","parameters":{"unit":"minutes","amount":1},"typeVersion":1.1},{"id":"34770c87-d63b-4bf8-a7e7-34fb579bd716","name":"Check Records Exist","type":"n8n-nodes-base.if","position":[-280,60],"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":"0119bde3-66e8-44f2-8991-dc4b9e02962e","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-360,-20],"parameters":{"color":4,"width":260,"height":240,"content":"📊 Has Data? - Proceed only if business records found\n"},"typeVersion":1},{"id":"1cd6681e-47e5-4e82-8e12-408e299b9503","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-80,-40],"parameters":{"color":5,"width":220,"height":260,"content":"📥 Fetch Data - Get business info including phone numbers\n"},"typeVersion":1},{"id":"135b9224-bcd2-4790-9066-278985874a3a","name":"Fetch Business Data","type":"n8n-nodes-base.httpRequest","position":[-20,40],"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_TOKEN_HERE"}]}},"typeVersion":4.2},{"id":"141e0fdc-56d7-42f4-92d4-93cda1ffe7e2","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[180,-40],"parameters":{"color":6,"width":280,"height":260,"content":"Saves business data to the GMB sheet in your Google Sheet📄 Save to Sheet - Store business name, number, URL, etc.\n\n\t"},"typeVersion":1},{"id":"3a0e1f5b-d923-47a0-b036-c18ac260980a","name":"Save to Google Sheets","type":"n8n-nodes-base.googleSheets","position":[260,40],"parameters":{"columns":{"value":{"URL":"={{ $json.url }}","Name":"={{ $json.name }}","Rating":"={{ $json.rating }}","Address":"={{ $json.address }}","Phone Number":"={{ $json.phone_number }}"},"schema":[{"id":"Name","type":"string","display":true,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"URL","type":"string","display":true,"required":false,"displayName":"URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Rating","type":"string","display":true,"required":false,"displayName":"Rating","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Phone Number","type":"string","display":true,"required":false,"displayName":"Phone Number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Address","type":"string","display":true,"required":false,"displayName":"Address","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":619305781,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=619305781","cachedResultName":"GMB"},"documentId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_SHEET_ID","cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit?usp=drivesdk","cachedResultName":"Business Data Sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YOUR_GOOGLE_SHEETS_CREDENTIAL_ID","name":"Google Sheets OAuth2"}},"typeVersion":4.6}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"0bed9bf1-00a3-4eb6-bf7c-cf07bee006a2","connections":{"Wait Before Retry":{"main":[[{"node":"Check Scraping Status","type":"main","index":0}]]},"Check Records Exist":{"main":[[{"node":"Fetch Business Data","type":"main","index":0}]]},"Fetch Business Data":{"main":[[{"node":"Save to Google Sheets","type":"main","index":0}]]},"Check If Status Ready":{"main":[[{"node":"Check Records Exist","type":"main","index":0}],[{"node":"Wait Before Retry","type":"main","index":0}]]},"Check Scraping Status":{"main":[[{"node":"Check If Status Ready","type":"main","index":0}]]},"Bright Data API - Request Business Data":{"main":[[{"node":"Check Scraping Status","type":"main","index":0}]]},"Form Trigger - Submit Location and Keywords":{"main":[[{"node":"Bright Data API - Request Business Data","type":"main","index":0}]]}}}


name: Gmail AI Search Assistant on Telegram (Gemini-Powered)
author_name: Malik Hashir
author_username: malikx
categories: []
created_at: 2025-06-19T11:48:11.211Z
updated_at: 2025-06-19T11:48:11.211Z
url: https://n8n.io/workflows/5044
scraped_at: 2025-07-06 21:16:30
description:
  Overview
  The n8n Telegram Gmail Assistant is an intelligent workflow that lets you search and retrieve specific Gmail emails simply by messaging a Telegram bot. Powered by advanced language models, it turns plain-language requests into precise Gmail searches, delivering results directly to your Telegram chat. This no-code automation is perfect for users who want instant, conversational access to their inbox—no Gmail tab required.

  Key Features
  Conversational Email Search: Just message the Telegram bot with requests like “Get me all emails from Amazon” or “Show unread emails after 6 June 2025.” The assistant understands sender names, keywords, and date filters—even if you only provide part of the information.

  AI-Powered Query Parsing: Uses a language model (LLM) to intelligently extract sender, keywords, and date range from your message, then builds an accurate Gmail search query.

  Flexible Filtering: Supports sender, keywords, ‘after’ and ‘before’ dates, or any combination. Handles both specific and broad queries.

  Instant Telegram Delivery: Each matching email is formatted with date, sender, subject, and a snippet, and sent as a separate Telegram message for easy reading.

  Customizable & Extendable: Swap the AI model (Google Gemini or OpenAI), adjust output formatting, and set email limits or read status as needed.

  How It Works

  User Sends a Telegram Message: For example, “Get unread emails from Amazon about invoices after 1 June 2025.”
  AI Interprets the Request: The workflow’s LLM agent extracts sender, keywords, and date filters, converting them into a Gmail search query using Gmail’s syntax (e.g., from:amazon AND (invoice OR invoices) AND after:2025/06/01).
  Gmail Search: The workflow fetches all matching emails from your connected Gmail account.
  Message Formatting: Each email is summarized into a concise, emoji-rich Telegram message (date, sender, subject, snippet).
  Telegram Delivery: Results are sent to your Telegram chat, one message per email.

  Setup Instructions
  Create a Telegram Bot: Use @BotFather on Telegram to create a bot and obtain the API token.
  Connect Telegram to n8n: Add your bot’s API token as a credential in n8n.
  Connect Gmail Account: Authorize your Gmail account in n8n, set email limits, and choose read/unread status preferences.
  Configure AI Model: Use your own Google Gemini or OpenAI API key, or select a preferred LLM node in the workflow.
  Deploy the Workflow: Activate the workflow and start messaging your Telegram bot to retrieve emails instantly.

  Value Proposition

  Save Time:** No need to open Gmail or remember search operators—just ask in plain language.
  Stay Organized:** Instantly filter and retrieve important emails, even on the go.
  User-Friendly:** No coding required, with clear setup steps and customizable options.
  Cost-Effective:** Available simply with an n8n subscription—no extra costs or hidden fees of anything. Enjoy the workflow Free Forever within your n8n plan.

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

workflow_json:
  {"meta":{"instanceId":"d04643ba872bb0fb252ed2c8197858d58cc47dd3c15ff6d08b19addd679e927b","templateCredsSetupCompleted":true},"nodes":[{"id":"78a9a2ba-dfbd-4b29-abb0-0d8e50fca199","name":"Basic LLM Chain","type":"@n8n/n8n-nodes-langchain.chainLlm","maxTries":2,"position":[60,260],"parameters":{"text":"=Convert this email search request into a valid Gmail search query. Output ONLY JSON with:\n1. \"search\": The complete Gmail query using operators (from:, subject:, after:, etc.)\n2. \"metadata\": Extracted components for reference\n\nRules:\n- Use exact Gmail search syntax\n- Convert dates to YYYY/MM/DD or newer_than/older_than\n- Group related terms with (parentheses)\n- Prioritize exact matches with \"quotes\"\n- Include multiple variations of keywords (e.g., invoice/invoices)\n\nExample Output:\n```json\n{\n  \"search\": \"from:amazon AND (invoice OR invoices) AND after:2024/06/01\",\n  \"metadata\": {\n    \"senders\": [\"amazon\"],\n    \"keywords\": [\"invoice\", \"invoices\"],\n    \"timeFilters\": {\"after\": \"2024/06/01\"}\n  }\n}\n\nUser Input: {{ $('User Request - Telegram Trigger').item.json.message.text }}","promptType":"define","hasOutputParser":true},"executeOnce":false,"retryOnFail":true,"typeVersion":1.6,"alwaysOutputData":false},{"id":"967d4a5f-f911-4c1d-b9ee-36f7edddac96","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[160,600],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash"},"credentials":{"googlePalmApi":{"id":"LnJ23V279k2RRO8R","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"e5b584a1-c153-46bc-adb3-00a6e355ba99","name":"Google Gemini Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[980,480],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash"},"credentials":{"googlePalmApi":{"id":"LnJ23V279k2RRO8R","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"7cd5d1d5-a75f-43d6-9e68-2212396394df","name":"Basic LLM Chain1","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[1020,260],"parameters":{"text":"=Convert this email data into a well-formatted Telegram message with these sections:\n1. 📅 Date (DD/MM/YYYY format)\n2. 👤 Sender (extract name & email)\n3. 📌 Subject\n4. ✂️ Preview (full snippet)\n\nRules:\n- Use emojis for visual separation\n- Keep entire message under 400 characters\n- Format dates as \"09/06/2025\"\n- Extract names from \"From\" field (remove quotes/email)\n- Full snippets that conveys the full summarised email (max 4 lines)\n\nExample Output:\n📅Date:  09/06/2025  \n👤Sender: elad malka (example@gmail.com)\n📌Subject Line: Share request for \"Acuity to Sheets\"  \n✂️Snippet: Requesting access to spreadsheet: Acuity to Sheets \n\nEmail Data: \ndate: {{ $json.Date }}\nfrom: {{ $json.From }}\nsubject: {{ $json.Subject }}\nsender: {{ $json.snippet }}","promptType":"define","hasOutputParser":true},"typeVersion":1.6},{"id":"30113c5d-07b9-4015-ab26-9a69fc874038","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-500,260],"parameters":{"text":"=Analyze the user's request (User request:{{ $json.message.text }} )  about fetching Gmail emails and output a JSON with:\n1. `sender` (name or email, if specified).\n2. `keywords` (list of words/phrases to search for).\n3. `afterDate` (ISO format: YYYY-MM-DD, ONLY if user specifies \"after [date]\" or \"since [date]\").\n4. `beforeDate` (ISO format: YYYY-MM-DD, ONLY if user specifies \"before [date]\" or \"until [date]\").\n\nRules:\n- Convert relative dates (e.g., \"since Monday\") to ISO format using TODAY as reference.\n- For ambiguous dates (e.g., \"last week\"), use the afterDate (calculated from present date to last 7 days).\n- Strictly return ONLY valid JSON.\n\nExamples:\n\nUser Input: \"Get emails from Amazon after 2024-06-10 about returns\"\nOutput:\n```json\n{\n  \"sender\": \"Amazon\",\n  \"keywords\": [\"returns\"],\n  \"afterDate\": \"2024-06-10\"\n} ","options":{},"promptType":"define","hasOutputParser":true},"typeVersion":1.9},{"id":"ed601ecc-c4c0-4de1-9e3a-cb398ffe35c8","name":"Google Gemini Chat Model2","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[-460,600],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash"},"credentials":{"googlePalmApi":{"id":"LnJ23V279k2RRO8R","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"5c577624-52e0-4a17-8604-80e2cd4b77de","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-200,600],"parameters":{"jsonSchemaExample":"{\n  \"sender\": \"Amazon\",\n  \"keywords\": [\"returns\"],\n  \"afterDate\": \"2024-06-10\",\n  \"beforeDate\": \"2024-06-30\"\n} "},"typeVersion":1.2},{"id":"371362b5-44c3-490a-bea9-a5e1d0246fd9","name":"Structured Output Parser1","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[420,600],"parameters":{"jsonSchemaExample":"{\n  \"search\": \"from:amazon AND (invoice OR invoices) AND after:2024/06/01\",\n  \"metadata\": {\n    \"senders\": [\"amazon\"],\n    \"keywords\": [\"invoice\", \"invoices\"],\n    \"timeFilters\": {\"after\": \"2024/06/01\"}\n  }\n}"},"typeVersion":1.2},{"id":"2e2dc24c-f458-4339-86bf-6501e84c4ea3","name":"Structured Output Parser2","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1220,500],"parameters":{"jsonSchemaExample":"{\n\t\"text\": \"📅Date: 09/06/2025\\n👤Sender: elad malka (drive-shares-dm-noreply@google.com)\\n📌Subject: Share request for \"\n}"},"typeVersion":1.2},{"id":"c2aa8043-0df7-48fe-87eb-f6bcdc09a6f9","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-960,-20],"parameters":{"width":360,"height":480,"content":"## 1. Telegram Bot (API)\n1. Create a bot using Bot_Father on telegram by sending a message to @BotFather.\n\n2. Send a command /newbot in the message.\n\n3. Choose username and then copy the api.\n\n4. Create Telegram credential here in n8n. By inputting the api token in access token and base url (https://api.telegram.org).\n\n5. Hit Save.\n"},"typeVersion":1},{"id":"eb75fe77-953b-4c81-8d42-79b70171b947","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-580,500],"parameters":{"width":340,"height":260,"content":"Replace the API with your own API of Gemini or choose an OpenAi node if you want to use openai model. (depends on your choice)."},"typeVersion":1},{"id":"faca346a-8a08-49d2-902d-a29cfb366228","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[40,500],"parameters":{"width":340,"height":260,"content":"Replace the API with your own API of Gemini or choose an OpenAi node if you want to use openai model. (depends on your choice)."},"typeVersion":1},{"id":"4067630a-3888-42f9-ad7e-e01f87d6430e","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[440,-80],"parameters":{"width":320,"height":520,"content":"## 2. Connecting Your Gmail Account.\n\n1. Connect your Gmail account – Choose the account you want to retrieve emails from.\n\n2. Set the email limit – Enter the number of emails you want to fetch, or check \"Return all\" to retrieve every email matching your request.\n\n3. Select read status – Choose whether to fetch unread or read emails."},"typeVersion":1},{"id":"be41decd-60dc-4055-acc7-9ffc8201c7a3","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1400,20],"parameters":{"width":340,"height":420,"content":"## 3. Chat ID.\n\n1. Get the Chat ID – Copy the output from the first Telegram trigger node, then pass it to an AI model to extract the Chat ID.\n\n2. Use the Chat ID – Once identified, simply drag and drop the Chat ID value into the field.\n\n"},"typeVersion":1},{"id":"d3371952-c3aa-4cd9-ab08-594b4760ad48","name":"User Request - Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[-800,260],"webhookId":"6eae6ee1-b07e-4b7b-af8f-a79a6755fd93","parameters":{"updates":["message"],"additionalFields":{}},"credentials":{"telegramApi":{"id":"m3VuvOq8aZdBV0My","name":"Telegram account (AigmailAssitant)"}},"typeVersion":1.2},{"id":"683f78bd-1ac4-4b51-90ed-17f0675bc1cb","name":"Set Parameters From User Request (for fetching emails)","type":"n8n-nodes-base.set","position":[-140,260],"parameters":{"options":{},"assignments":{"assignments":[{"id":"93d9bf21-89b5-4544-80db-ed0cc875cb5c","name":"Sender","type":"string","value":"={{ $json.output.sender }}"},{"id":"933fae65-1251-4995-be9a-03691e30d1c7","name":"Keywords/Prompt/Criteria","type":"string","value":"={{ $json.output.keywords }}"},{"id":"bf4c646a-5b8e-49a3-a1a2-68836c731404","name":"afterDate","type":"string","value":"={{ $json.output.afterDate }}"},{"id":"2a91fd77-77e9-4c3f-8f30-17a97fb9871d","name":"beforeDate","type":"string","value":"={{ $json.output.beforeDate }}"}]}},"typeVersion":3.4},{"id":"fb2cb2c8-59e9-40e6-abe0-447335e499fb","name":"Gets Requested Email(s)","type":"n8n-nodes-base.gmail","position":[540,260],"webhookId":"ac0ae124-5b2e-473c-9716-473110d3c121","parameters":{"limit":10,"filters":{"q":"={{ $json.output.search }}","sender":"={{ $('Set Parameters From User Request (for fetching emails)').item.json.Sender }}","readStatus":"unread","receivedAfter":"={{ $('Set Parameters From User Request (for fetching emails)').item.json.afterDate }}","receivedBefore":"={{ $('Set Parameters From User Request (for fetching emails)').item.json.beforeDate }}"},"operation":"getAll"},"credentials":{"gmailOAuth2":{"id":"tuAn4zK9wTO9JZvR","name":"Gmail account"}},"typeVersion":2.1},{"id":"4b229ce7-c941-4d6c-a999-26054468490c","name":"Sets Parameters For Response","type":"n8n-nodes-base.set","position":[840,260],"parameters":{"options":{},"assignments":{"assignments":[{"id":"7e8b9cac-da96-4568-b520-8f64bed8b35b","name":"Date","type":"string","value":"={{ new Date(Number($json.internalDate)).toISOString() }}"},{"id":"6a422a1c-395c-4759-b642-40b33295b8d1","name":"From","type":"string","value":"={{ $json.From }}"},{"id":"85b67fb6-f4ed-4672-becd-43aa682c5cdf","name":"Subject","type":"string","value":"={{ $json.Subject }}"},{"id":"9b4fa0e0-da5a-4c3a-a049-ec1c2ac9c600","name":"snippet","type":"string","value":"={{ $json.snippet }}"}]}},"typeVersion":3.4},{"id":"e7501362-37d8-4a05-919a-72ad419ee59a","name":"Sends (requested emails) via Telegram back","type":"n8n-nodes-base.telegram","position":[1500,260],"webhookId":"aad6a23e-6d2a-4a74-b1ec-addc668033e1","parameters":{"text":"={{ $json.output.text }}","chatId":"={{ $('User Request - Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"credentials":{"telegramApi":{"id":"m3VuvOq8aZdBV0My","name":"Telegram account (AigmailAssitant)"}},"typeVersion":1.2}],"pinData":{"User Request - Telegram Trigger":[{"message":{"chat":{"id":6305257849,"type":"private","username":"ToooooopGG","last_name":"Tate","first_name":"Andrew"},"date":1750328451,"from":{"id":6305257849,"is_bot":false,"username":"ToooooopGG","last_name":"Tate","first_name":"Andrew","language_code":"en"},"text":"Hey get me summary of all the emails by elevenlabs","message_id":15},"update_id":216173590}]},"connections":{"AI Agent":{"main":[[{"node":"Set Parameters From User Request (for fetching emails)","type":"main","index":0}]]},"Basic LLM Chain":{"main":[[{"node":"Gets Requested Email(s)","type":"main","index":0}]]},"Basic LLM Chain1":{"main":[[{"node":"Sends (requested emails) via Telegram back","type":"main","index":0}]]},"Gets Requested Email(s)":{"main":[[{"node":"Sets Parameters For Response","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"Basic LLM Chain","type":"ai_languageModel","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"AI Agent","type":"ai_outputParser","index":0}]]},"Google Gemini Chat Model1":{"ai_languageModel":[[{"node":"Basic LLM Chain1","type":"ai_languageModel","index":0}]]},"Google Gemini Chat Model2":{"ai_languageModel":[[{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Structured Output Parser1":{"ai_outputParser":[[{"node":"Basic LLM Chain","type":"ai_outputParser","index":0}]]},"Structured Output Parser2":{"ai_outputParser":[[{"node":"Basic LLM Chain1","type":"ai_outputParser","index":0}]]},"Sets Parameters For Response":{"main":[[{"node":"Basic LLM Chain1","type":"main","index":0}]]},"User Request - Telegram Trigger":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"Set Parameters From User Request (for fetching emails)":{"main":[[{"node":"Basic LLM Chain","type":"main","index":0}]]}}}


name: AI Prompt Generator Workflow
author_name: Anurag Srivastava
author_username: anuragmerndev
categories: []
created_at: 2025-06-19T13:11:05.033Z
updated_at: 2025-06-19T13:11:05.033Z
url: https://n8n.io/workflows/5045
scraped_at: 2025-07-06 21:16:30
description:
  🧠 AI Prompt Generator Workflow – n8n Documentation

  Who is this for?

  This workflow is for AI builders, prompt engineers, developers, marketers, and no-code creators who want to convert rough user input into structured, high-quality prompts for LLMs. It’s especially useful for tools that rely on precision prompting and want to automate the discovery of intent and constraints.

  What problem is this workflow solving? / Use case

  Many users struggle to write effective prompts due to vague ideas or unclear formatting needs. This workflow:
  Collects structured user input.
  Dynamically generates clarifying questions.
  Returns a well-formatted AI prompt based on the user's intent and context.

  This ensures the generated prompt is useful for downstream AI agents without requiring technical understanding from the end user.

  What this workflow does

  Start with a branded form UI  
     The user is shown a styled form with questions like:
     What do you want to build?
     What tools can you access?
     What input can be expected?
     What output do you expect?

  Analyze and generate relevant follow-up questions  
     The workflow sends the user's answers to Google Gemini (via LangChain) which outputs 1–3 clarifying questions. These questions are parsed into a dynamic form.

  Loop through and collect follow-up answers  
     Each follow-up question is shown in a form one at a time to capture additional context.

  Merge all inputs  
     The base intent and follow-up responses are merged into a single context block.

  Generate a final AI-ready prompt  
     The prompt generator node formats everything into a clean, six-section structure:
     &lt;constraints&gt;
     &lt;role&gt;
     &lt;inputs&gt;
     &lt;tools&gt;
     &lt;instructions&gt;
     &lt;conclusions&gt;

  Display the final result  
     The finished prompt is shown in a clean UI where users can easily copy and reuse it.

  Setup

  Credentials Required
     Google Gemini (PaLM) API credentials (already integrated as Google Gemini(PaLM) Api account 2).

  Form Trigger
     Ensure the On form submission trigger is exposed via a webhook or public endpoint (e.g. using ngrok or deployed server).

  Styling
     Custom CSS is included in all form nodes for a beautiful UI. You can modify this to match your branding.

  Environment
     This workflow is compatible with self-hosted n8n or n8n.cloud.
     Webhooks must be accessible to users who will fill out the form.

  How to customize this workflow to your needs

  Change the base questions**  
    Update the BaseQuestions form node to add or remove fields depending on your use case.

  Modify Gemini prompts**  
    You can edit the system prompt inside PromptGenerator to change tone, output structure, or AI instructions.

  Change prompt formatting**  
    If you use a different AI agent (like GPT, Claude, or Mistral), adjust the section labels and formatting to suit that agent’s expected input.

  Send results elsewhere**  
    Add integration nodes after PromptGenerator, such as:
    Google Docs / Notion (to log prompts)
    Gmail / Slack (to notify your team)
    Zapier / Make (to push to other automation flows)

  Skip follow-up questions (optional)**  
    If your base form collects all needed info, you can bypass the RelevantQuestions form section by modifying conditional logic.

  Example Output Prompt (Structure)

  &lt;role&gt; You are an AI assistant that converts videos into LinkedIn posts with a witty tone. &lt;/role&gt; &lt;inputs&gt; - A short video (max 5 minutes) - Desired tone: witty - Style: both summary and quotes - Audience: general network &lt;/inputs&gt; &lt;tools&gt; You do not have access to APIs or web search. &lt;/tools&gt; &lt;instructions&gt; 1. Parse transcript. 2. Extract insights and quotes. 3. Write an engaging, witty LinkedIn post under 3000 characters. &lt;/instructions&gt; &lt;constraints&gt; Avoid technical jargon. No generic intros. Make it platform-native. &lt;/constraints&gt; &lt;conclusions&gt; Return a LinkedIn-ready post that starts with a hook and ends with hashtags.

nodes_used:
  ["@n8n/n8n-nodes-langchain.chainLlm","@n8n/n8n-nodes-langchain.outputParserAutofixing","@n8n/n8n-nodes-langchain.outputParserStructured","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"id":"sCy7Dz1t2CXusiPB","meta":{"instanceId":"2cdd9c593c5820bad56f93ddf9a9bb70d8c9e27fcdca4b21793502db1aae1d9d","templateCredsSetupCompleted":true},"name":"Prompt generator","tags":[],"nodes":[{"id":"4196a5c9-1217-4216-a3dc-ca752fc7e728","name":"On form submission","type":"n8n-nodes-base.formTrigger","position":[-1140,-20],"webhookId":"d4dc2007-3c6d-4a26-b1f0-b5fbe6c8319c","parameters":{"options":{"customCss":"/* N8N Landing Page CSS - Correct Selectors Based on HTML */\n\n/* Style the main form card */\n.card {\n\tposition: relative;\n\tmax-width: 500px;\n\tmargin: 20px auto;\n\tpadding: 20px;\n\tbackground: white !important;\n\tborder-radius: 12px;\n\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n/* Add custom header with gradient */\n.card:before {\n\tcontent: '';\n\tdisplay: block;\n\theight: 50px;\n\tbackground: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n\tposition: relative;\n\tmargin: -20px -20px 30px -20px;\n\tborder-radius: 12px 12px 0 0;\n}\n\n/* Style the form header */\n.form-header {\n\ttext-align: center !important;\n\tcolor: #1f2937 !important;\n\tfont-weight: 700 !important;\n\tmargin: 80px 0 15px 0 !important;\n\tfont-size: 2.2em !important;\n\tposition: relative;\n\tz-index: 5;\n}\n\n/* Style any h1, h2 elements in the form */\n.card h1,\n.card h2 {\n\ttext-align: center !important;\n\tcolor: #1f2937 !important;\n\tfont-weight: 700 !important;\n\tmargin: 80px 0 15px 0 !important;\n\tfont-size: 2.2em !important;\n\tposition: relative;\n\tz-index: 5;\n}\n\n/* Style paragraphs and description text */\n.card p {\n\ttext-align: center !important;\n\tcolor: #6b7280 !important;\n\tfont-size: 1.1em !important;\n\tmargin-bottom: 30px !important;\n\tline-height: 1.5 !important;\n\tposition: relative;\n\tz-index: 5;\n}\n\n/* Style the inputs wrapper */\n.inputs-wrapper {\n\tposition: relative;\n\tz-index: 5;\n}\n\n/* Style all input fields */\n.card input[type=\"text\"],\n.card input[type=\"email\"],\n.card input[type=\"tel\"],\n.card input[type=\"number\"],\n.card textarea,\n.card select {\n\twidth: 100% !important;\n\tpadding: 12px 16px !important;\n\tborder: 2px solid #e5e7eb !important;\n\tborder-radius: 8px !important;\n\tfont-size: 16px !important;\n\ttransition: border-color 0.3s ease !important;\n\tmargin-bottom: 15px !important;\n\tbox-sizing: border-box !important;\n}\n\n.card input[type=\"text\"]:focus,\n.card input[type=\"email\"]:focus,\n.card input[type=\"tel\"]:focus,\n.card input[type=\"number\"]:focus,\n.card textarea:focus,\n.card select:focus {\n\toutline: none !important;\n\tborder-color: #6366f1 !important;\n\tbox-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1) !important;\n}\n\n/* Style the submit button */\n.card button[type=\"submit\"],\n.card input[type=\"submit\"] {\n\tbackground: linear-gradient(135deg, #ff6b6b 0%, #ff8e8e 100%) !important;\n\tcolor: white !important;\n\tborder: none !important;\n\tpadding: 15px 40px !important;\n\tborder-radius: 10px !important;\n\tfont-size: 18px !important;\n\tfont-weight: 600 !important;\n\tcursor: pointer !important;\n\twidth: 100% !important;\n\tmargin-top: 20px !important;\n\ttransition: all 0.3s ease !important;\n\tbox-shadow: 0 4px 15px rgba(255, 107, 107, 0.3) !important;\n\tposition: relative;\n\tz-index: 5;\n}\n\n.card button[type=\"submit\"]:hover,\n.card input[type=\"submit\"]:hover {\n\ttransform: translateY(-2px) !important;\n\tbox-shadow: 0 6px 20px rgba(255, 107, 107, 0.4) !important;\n}\n\n/* Style the body to complement the form */\nbody.vsc-initialized {\n\tbackground: #f8fafc !important;\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;\n\tmargin: 0 !important;\n\tpadding: 20px !important;\n}\n\n/* Style the container div */\n.container {\n\tmax-width: 600px !important;\n\tmargin: 0 auto !important;\n}\n\n/* Mobile responsive */\n@media (max-width: 768px) {\n\t.card {\n\t\tmargin: 10px !important;\n\t\tpadding: 15px !important;\n\t}\n\t\n\t.card:before {\n\t\theight: 50px !important;\n\t\tmargin: -15px -15px 20px -15px !important;\n\t}\n\t\n\t.card:after {\n\t\ttop: 35px !important;\n\t\tfont-size: 35px !important;\n\t}\n\t\n\t.form-header,\n\t.card h1,\n\t.card h2 {\n\t\tfont-size: 1.8em !important;\n\t\tmargin: 60px 0 15px 0 !important;\n\t}\n}","buttonLabel":"Let's Generate","appendAttribution":false},"formTitle":"🚀 AI Prompt Generator","formDescription":"Create powerful prompts for your AI tools"},"typeVersion":2.2},{"id":"bb9f2e02-a01e-4508-8ef0-37a9b9edd1ba","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[-680,180],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash"},"credentials":{"googlePalmApi":{"id":"9BZpt0x33yMhJWqO","name":"Google Gemini(PaLM) Api account 2"}},"typeVersion":1},{"id":"1fa60776-44ca-4478-b3bd-28b6c8fb8355","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-520,180],"parameters":{"jsonSchemaExample":"[\n  {\n    \"fieldLabel\": \"Label for the question to ask\",\n    \"placeholder\": \"Short hint to guide the user’s answer\",\n    \"requiredField\": true,\n    \"fieldType\": \"text\"\n  }\n]"},"typeVersion":1.2},{"id":"2ad0f046-36ff-4864-af2e-339763109a9c","name":"BaseQuestions","type":"n8n-nodes-base.form","position":[-920,-20],"webhookId":"cdf6ec24-43fe-4a6b-908a-9d17d3e0feec","parameters":{"options":{"customCss":"/* Apply to all n8n form pages */\n.card {\n\tposition: relative;\n\tmax-width: 500px;\n\tmargin: 20px auto;\n\tpadding: 20px;\n\tbackground: white !important;\n\tborder-radius: 12px;\n\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.card:before {\n\tcontent: '';\n\tdisplay: block;\n\theight: 50px;\n\tbackground: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n\tposition: relative;\n\tmargin: -20px -20px 30px -20px;\n\tborder-radius: 12px 12px 0 0;\n}\n\n.card h1, .card h2 {\n\ttext-align: center !important;\n\tcolor: #1f2937 !important;\n\tfont-weight: 700 !important;\n\tmargin: 15px 0 !important;\n\tfont-size: 2em !important;\n}\n\n.card p {\n\tfont-size: 1.1em !important;\n\tline-height: 1.5 !important;\n}\n\n.inputs-wrapper {\n\tposition: relative;\n}\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n.card input, .card textarea, .card select {\n\twidth: 100% !important;\n\tpadding: 12px 16px !important;\n\tborder: 2px solid #e5e7eb !important;\n\tborder-radius: 8px !important;\n\tfont-size: 16px !important;\n\tbox-sizing: border-box !important;\n\ttransition: border-color 0.3s ease !important;\n}\n\n.card input:focus, .card textarea:focus, .card select:focus {\n\tborder-color: #6366f1 !important;\n\tbox-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1) !important;\n\toutline: none !important;\n}\n\n.card button[type=\"submit\"] {\n\tbackground: linear-gradient(135deg, #16a34a 0%, #22c55e 100%) !important;\n\tcolor: white !important;\n\tpadding: 15px 40px !important;\n\tborder-radius: 10px !important;\n\tfont-size: 18px !important;\n\tfont-weight: 600 !important;\n\tcursor: pointer !important;\n\twidth: 100% !important;\n\tbox-shadow: 0 4px 15px rgba(34, 197, 94, 0.3) !important;\n\ttransition: all 0.3s ease !important;\n}\n\n.card button[type=\"submit\"]:hover {\n\ttransform: translateY(-2px) !important;\n\tbox-shadow: 0 6px 20px rgba(34, 197, 94, 0.4) !important;\n}\n\n.error-hidden {\n    display: block;\n    position: relative;\n    color: var(--color-error);\n    text-align: left;\n    font-size: var(--font-size-error);\n    font-weight: 400;\n    visibility: hidden;\n    padding-top: 0;\n    padding-bottom: 0;\n}\n\n@media (max-width: 768px) {\n\t.card {\n\t\tmargin: 10px !important;\n\t\tpadding: 15px !important;\n\t}\n\t.card h1, .card h2 {\n\t\tfont-size: 1.6em !important;\n\t}\n  .card:before {\n    margin: -20px -15px 30px -15px;\n  }\n}\n","formTitle":"Enrich Prompt","buttonLabel":"Answer"},"formFields":{"values":[{"fieldType":"textarea","fieldLabel":"What do you want to build ?","placeholder":"i.e.  A B2B proposal generator for content marketing agency","requiredField":true},{"fieldType":"textarea","fieldLabel":"Tools I can access (N/A if no tools)","placeholder":"i.e. Web Search, Email Threads, Google Sheets","requiredField":true},{"fieldType":"textarea","fieldLabel":"What Input can be expected ?","placeholder":"i.e. The customer data like name, company, problems you can solve.","requiredField":true},{"fieldType":"textarea","fieldLabel":"What output do you expect ?","placeholder":"i.e. A proposal for the company that is specific to the customer","requiredField":true}]}},"typeVersion":1},{"id":"f7e1522a-3951-47fb-9e5a-5730ff3cf055","name":"LoopQuestions","type":"n8n-nodes-base.splitInBatches","position":[0,60],"parameters":{"options":{}},"executeOnce":false,"typeVersion":3},{"id":"e2b5d3c4-cb4c-4f90-93a1-10784bd8a38e","name":"RelevantQuestions","type":"n8n-nodes-base.form","position":[260,80],"webhookId":"8d220b4e-1c9c-4f52-8d1f-0e5f396f7745","parameters":{"options":{"customCss":"/* Apply to all n8n form pages */\n.card {\n\tposition: relative;\n\tmax-width: 500px;\n\tmargin: 20px auto;\n\tpadding: 20px;\n\tbackground: white !important;\n\tborder-radius: 12px;\n\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.card:before {\n\tcontent: '';\n\tdisplay: block;\n\theight: 50px;\n\tbackground: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n\tposition: relative;\n\tmargin: -20px -20px 30px -20px;\n\tborder-radius: 12px 12px 0 0;\n}\n\n.card h1, .card h2 {\n\ttext-align: center !important;\n\tcolor: #1f2937 !important;\n\tfont-weight: 700 !important;\n\tmargin: 15px 0 !important;\n\tfont-size: 2em !important;\n}\n\n.card p {\n\tfont-size: 1.1em !important;\n\tline-height: 1.5 !important;\n}\n\n.inputs-wrapper {\n\tposition: relative;\n}\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n.card input, .card textarea, .card select {\n\twidth: 100% !important;\n\tpadding: 12px 16px !important;\n\tborder: 2px solid #e5e7eb !important;\n\tborder-radius: 8px !important;\n\tfont-size: 16px !important;\n\tbox-sizing: border-box !important;\n\ttransition: border-color 0.3s ease !important;\n}\n\n.card input:focus, .card textarea:focus, .card select:focus {\n\tborder-color: #6366f1 !important;\n\tbox-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1) !important;\n\toutline: none !important;\n}\n\n.card button[type=\"submit\"] {\n\tbackground: linear-gradient(135deg, #16a34a 0%, #22c55e 100%) !important;\n\tcolor: white !important;\n\tpadding: 15px 40px !important;\n\tborder-radius: 10px !important;\n\tfont-size: 18px !important;\n\tfont-weight: 600 !important;\n\tcursor: pointer !important;\n\twidth: 100% !important;\n\tbox-shadow: 0 4px 15px rgba(34, 197, 94, 0.3) !important;\n\ttransition: all 0.3s ease !important;\n}\n\n.card button[type=\"submit\"]:hover {\n\ttransform: translateY(-2px) !important;\n\tbox-shadow: 0 6px 20px rgba(34, 197, 94, 0.4) !important;\n}\n\n.error-hidden {\n    display: block;\n    position: relative;\n    color: var(--color-error);\n    text-align: left;\n    font-size: var(--font-size-error);\n    font-weight: 400;\n    visibility: hidden;\n    padding-top: 0;\n    padding-bottom: 0;\n}\n\n@media (max-width: 768px) {\n\t.card {\n\t\tmargin: 10px !important;\n\t\tpadding: 15px !important;\n\t}\n\t.card h1, .card h2 {\n\t\tfont-size: 1.6em !important;\n\t}\n  .card:before {\n    margin: -20px -15px 30px -15px;\n  }\n}\n","formTitle":"Questions to understand","buttonLabel":"Answer"},"defineForm":"json","jsonOutput":"=[{{ $('LoopQuestions').item.json }}]"},"typeVersion":1},{"id":"1618be1e-222c-45d5-a85e-d76878971f60","name":"MergeUserIntent","type":"n8n-nodes-base.merge","position":[500,-20],"parameters":{},"typeVersion":3.1},{"id":"cbd1fbb5-a530-4695-9f7a-d3c1fe394bb9","name":"PromptGenerator","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[740,-20],"parameters":{"text":"={{ $('MergeUserIntent').item.json }}","messages":{"messageValues":[{"message":"<role>\nYou are an expert AI prompt generator designed to turn semi-structured user inputs into effective and well-formatted prompts for downstream AI agents. Your goal is to craft high-quality prompts that follow strict formatting and enable the target AI agent to perform its task optimally. And to do that you'll be receiving the user's input like what they want to build, which tool AI can use, what input the ai need to expect and what output the user want from their ai agent. Also you'll be receiving some specific constraints for the ai agent to be taken care along with some clarifying questions.\n</role>\n\n<inputs>\nYou will receive a JSON array that includes:\n- The user's primary intent (e.g., what they want to build)\n- What tools they plan to use (or \"N/A\")\n- What input the tool will receive\n- What output they expect\n- Any constraints (e.g., token limits, length)\n- Up to 3 additional form answers for clarifying context (e.g., tone, style, audience)\n\nExample input:\n[\n  {\n    \"What do you want to build ?\": \"Video to LinkedIn post\",\n    \"Tools I can access (N/A if no tools)\": \"N/A\",\n    \"What Input can be expected ?\": \"video\",\n    \"What output do you expect ?\": \"LinkedIn Post\",\n    \"submittedAt\": \"2025-06-12T00:47:05.645+05:30\",\n    \"formMode\": \"test\"\n  },\n  {\n    \"Preferred tone or style for the LinkedIn post\": \"witty\",\n    \"submittedAt\": \"2025-06-12T01:15:11.608+05:30\",\n    \"formMode\": \"test\"\n  },\n  {\n    \"Should the post summarize the video or extract quotes?\": \"both\",\n    \"submittedAt\": \"2025-06-12T01:15:14.925+05:30\",\n    \"formMode\": \"test\"\n  },\n  {\n    \"Who is the target audience for the LinkedIn post?\": \"general network\",\n    \"submittedAt\": \"2025-06-12T01:15:20.045+05:30\",\n    \"formMode\": \"test\"\n  }\n]\n</inputs>\n\n<tools>\nYou do not have access to APIs, databases, or external documents. Use only the input provided.\n</tools>\n\n<instructions>\n1. Parse and extract all user-provided values from the JSON array.\n2. Understand the user’s goal, expected inputs and outputs, and key contextual details.\n3. Using that information, generate a final prompt in strictly the following format (Critics) where r and c will change the position r first and then c:\n\n- **<constraints>**: Any boundaries (length, style, tone, technical limits)\n- **<role>**: What the downstream AI agent’s expertise and purpose should be  \n- **<inputs>**: What inputs it will receive, in what format, and example values  \n- **<tools>**: Any tools or data sources it can or cannot access  \n- **<instructions>**: Step-by-step guidance for the agent to perform its task  \n- **<conclusions>**: What kind of output it should generate, with format or examples  \n\n4. Ensure the final prompt is useful for a general-purpose LLM, without ambiguity.\n</instructions>\n\n<constraints>\n- Always include all 6 sections: Role, Inputs, Tools, Instructions, Constraints, Conclusions\n- Be specific and concise, avoid generic phrasing\n- Do not include timestamps or metadata like \"formMode\" or \"submittedAt\"\n- Output must be readable by a prompt engineer or AI agent directly\n</constraints>\n\n<conclusions>\nYour output will be a complete structured prompt, ready to be used by a downstream LLM for task execution.\n\nExample output:\n<role>\nYou are an AI assistant that transforms short videos into compelling LinkedIn posts. Your job is to summarise the video, extract powerful quotes, and write in a witty tone suitable for a general professional audience.\n</role>\n\n<inputs>\nYou will receive:\n- A video (maximum 5 minutes)\n- Preferences for tone: witty\n- Summary style: both (summarize and extract quotes)\n- Target audience: general network\n</inputs>\n\n<tools>\nYou do not have access to external APIs or web search. You can assume the video has already been transcribed for processing.\n</tools>\n\n<instructions>\n1. Parse the video transcript and understand its core message.\n2. Identify key insights and at least one memorable quote.\n3. Write a LinkedIn post that begins with a strong hook, reflects a witty tone, and engages the general network.\n4. Balance insight and personality while staying platform-native.\n</instructions>\n\n<constraints>\n- Keep the post under 3000 characters\n- Avoid technical jargon unless it serves the audience\n- No generic intros or robotic tone\n</constraints>\n\n<conclusions>\nReturn a single, polished LinkedIn post. Example:\n\n---\n“Most products don’t need onboarding. They need rethinking.”\n\nJust watched a great clip on UX that reminded me how design isn’t about making things easier — it’s about making them unnecessary.\n\n#UX #DesignThinking\n---\n</conclusions>\n\n<output>\nReturn strictly only a JSON object like this:\n{\n  \"prompt\": \"<your generated prompt string>\"\n}\nDo NOT wrap it inside code blocks or markdown.\n</output>"}]},"promptType":"define","hasOutputParser":true},"executeOnce":true,"typeVersion":1.6},{"id":"869e9a51-0e04-4bdc-8cf3-b35573b2953b","name":"Google Gemini Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[760,360],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash"},"credentials":{"googlePalmApi":{"id":"9BZpt0x33yMhJWqO","name":"Google Gemini(PaLM) Api account 2"}},"typeVersion":1},{"id":"cef87b06-dfd2-49ee-a294-75d3eabee58d","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1220,380],"parameters":{"width":900,"height":300,"content":"# Prompting\n\n- Constraints/Rules - [rules I need to abide by] - Defines boundaries, limitations, and guidelines for operation \n- Role/Scope - [what am I an expert of?] - Establishes the agent's purpose, identity, and overall objective \n- Inputs - [tell me what inputs I'm receiving] - Specifies expected data formats & parameters (inc. examples)\n- Tools - [what resources can I access? e.g. web search] - Outlines available resources, functions, and capabilities\n- Instructions/Tasklist - [order of tasks] - Provides step-by-step procedures with examples\n- Conclusions/Outputs - [what output am I providing (examples)] - Defines expected response formats and deliverables\n- Solutions/Error handling - [what do I do if I don't get the information I expected to?] - Addresses troubleshooting and exception\nmanagement|"},"typeVersion":1},{"id":"cb8ee56d-7d41-4f37-a640-c8aea8588707","name":"RelatedQuestionAI","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[-700,-20],"parameters":{"text":"={{ $json }}","messages":{"messageValues":[{"message":"<role>\nYou are an expert LLM-based prompt refinement agent. Your goal is to analyze vague or semi-structured input from a user who wants to build an automation or AI-based tool. Based on what they share, your task is to generate 3 **highly specific** questions that, if answered, would help a prompt engineer craft a more tailored and effective prompt for the tool they wish to build. The questions you generate should be very specific to the ai agent the user wants to build, and completely relevant for the idea they want to build it for.\n</role>\n\n<input>\nYou will receive a JSON-like array with the following fields:\n- \"What do you want to build ?\" – Describes the general idea.\n- \"Tools I can access (N/A if no tools)\" – Lists any tools/services the user can integrate.\n- \"What Input can be expected ?\" – The user input or data source for the tool.\n- \"What output do you expect ?\" – The final result the tool should generate.\n- \"Any Constraints for the tool (N/A if no constraints)\" – Character/length/performance/time restrictions.\n\nEach field is plain text. The values may vary in clarity and depth.\n</input>\n\n<tools>\nYou do not have access to external tools. Only the given input array and your own reasoning ability are available. You cannot fetch additional context.\n</tools>\n\n<instructions>\n1. Parse and understand the user's goal.\n2. Identify any ambiguity or key gaps in what’s provided.\n3. Generate **3 clear, concise follow-up questions** that would best clarify:\n   - Context or tone expectations\n   - Format or structure needed\n   - Any target audience or usage specifics\n4. Explain **why** each question is important (in 1–2 sentences).\n5. Return your output in the strict JSON array format defined above.\n6. Identify missing but critical details that would affect how an AI agent should behave.\n7. For each missing detail, create one structured form field in the output format.\n8. Use fieldLabel for the question, placeholder to guide, and set requiredField appropriately.\n9. Optionally specify fieldType (e.g., textarea for long text, dropdown if fixed options are obvious).\n</instructions>\n\n<constraints>\n\nYour output must be in the following format:\n\n[\n  {\n    \"fieldLabel\": \"Label for the question to ask\",\n    \"placeholder\": \"Short hint to guide the user’s answer\",\n    \"requiredField\": true or false,\n    \"fieldType\": \"number\" | \"email\" | \"textarea\" | \"dropdown\" (not optional; take default as 'textarea')\n  }\n]\n\n- Ask no more than 3 questions.\n- Only ask questions that meaningfully impact how the tool would be built or how the AI would behave.\n- Your questions must be simple, not technical or abstract.\n- Do not repeat or rephrase questions already answered in the input.\n- Be practical — ask questions that a human prompt engineer would truly need to ask to make the result more useful.\n</constraints>\n\n<output>\n[\n  {\n    \"fieldLabel\": \"Preferred tone or style for the LinkedIn post\",\n    \"placeholder\": \"e.g., professional, friendly, witty\",\n    \"requiredField\": true,\n    \"fieldType\": \"textarea\"\n  },\n  {\n    \"fieldLabel\": \"Should the post summarize the video or extract quotes?\",\n    \"placeholder\": \"e.g., summary only, key quotes, both\",\n    \"requiredField\": true,\n    \"fieldType\": \"textarea\"\n  },\n  {\n    \"fieldLabel\": \"Who is the target audience for the LinkedIn post?\",\n    \"placeholder\": \"e.g., hiring managers, founders, general network\",\n    \"requiredField\": false,\n    \"fieldType\": \"textarea\"\n  }\n]\n</output>"}]},"promptType":"define","hasOutputParser":true},"typeVersion":1.6},{"id":"6e88dd2e-6aa3-46b1-ae4e-437fcdd7d909","name":"SplitQuestions","type":"n8n-nodes-base.splitOut","position":[-280,-20],"parameters":{"options":{},"fieldToSplitOut":"output"},"typeVersion":1},{"id":"d38f8848-8409-4ab5-a983-b927baa47585","name":"Auto-fixing Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserAutofixing","position":[880,140],"parameters":{"options":{}},"typeVersion":1},{"id":"de385387-86c1-45a2-a750-4f4a9b70cb0c","name":"Structured Output Parser1","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[960,360],"parameters":{"jsonSchemaExample":"{\n\t\"prompt\": \"this is the prompt\"\n}"},"typeVersion":1.2},{"id":"9ba8e561-6052-4d5c-915b-ebd7eeb910ad","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1220,-160],"parameters":{"width":440,"height":320,"content":"# Initiate and Get the Basic Questions"},"typeVersion":1},{"id":"5730302d-6e4b-435c-8e51-43d389d3f065","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-760,-160],"parameters":{"width":380,"height":500,"content":"# Generate Relevant Questions"},"typeVersion":1},{"id":"f8f6640c-e97a-44b1-87bc-687783541309","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-320,-160],"parameters":{"width":960,"height":500,"content":"# Ask question to the user"},"typeVersion":1},{"id":"cc14b692-ccf5-4ad0-9f59-1ec4eee5adfa","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[660,-160],"parameters":{"width":520,"height":680,"content":"# Prompt Generator System"},"typeVersion":1},{"id":"b42d7917-d7b4-4427-8530-c541ea7c1cef","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1220,-160],"parameters":{"width":300,"height":320,"content":"# Sending the Prompt to User"},"typeVersion":1},{"id":"3e44d786-2cb2-41d8-8568-d0c50dc98c55","name":"SendingPrompt","type":"n8n-nodes-base.form","position":[1280,-20],"webhookId":"9a0af1f5-3257-486c-ad6e-068a7c0f93ab","parameters":{"options":{"customCss":".card {\n\tposition: relative;\n\tmax-width: 500px;\n\tmargin: 20px auto;\n\tpadding: 20px;\n\tbackground: #fefefe !important;\n\tborder-radius: 12px;\n\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);\n\tfont-family: 'Courier New', monospace;\n\tcolor: #1f2937;\n\tfont-size: 16px;\n\tline-height: 1.6;\n\twhite-space: pre-wrap;\n}\n\n.header p {\n  text-align: left;\n}\n\n@media (max-width: 768px) {\n\t.card {\n\t\tmargin: 10px !important;\n\t\tpadding: 15px !important;\n\t\tfont-size: 14px;\n\t}\n}\n"},"operation":"completion","completionTitle":"🎉 Here's your custom prompt","completionMessage":"={{ $('PromptGenerator').item.json.output.prompt }}\n\n---------------------------\n\n📋 You can now copy and use it anywhere!"},"typeVersion":1},{"id":"176312e6-c5e6-4cba-ab4a-c8aeb5ee1722","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-1220,-300],"parameters":{"color":7,"width":440,"height":100,"content":"# 🚀 AI Prompt generator"},"typeVersion":1}],"active":true,"pinData":{},"settings":{"callerPolicy":"workflowsFromSameOwner","executionOrder":"v1","executionTimeout":-1},"versionId":"6cdac3f9-1238-49d1-b6a9-01e2a3a4f273","connections":{"BaseQuestions":{"main":[[{"node":"RelatedQuestionAI","type":"main","index":0},{"node":"MergeUserIntent","type":"main","index":0}]]},"LoopQuestions":{"main":[[{"node":"MergeUserIntent","type":"main","index":1}],[{"node":"RelevantQuestions","type":"main","index":0}]]},"SplitQuestions":{"main":[[{"node":"LoopQuestions","type":"main","index":0}]]},"MergeUserIntent":{"main":[[{"node":"PromptGenerator","type":"main","index":0}]]},"PromptGenerator":{"main":[[{"node":"SendingPrompt","type":"main","index":0}]]},"RelatedQuestionAI":{"main":[[{"node":"SplitQuestions","type":"main","index":0}]]},"RelevantQuestions":{"main":[[{"node":"LoopQuestions","type":"main","index":0}]]},"On form submission":{"main":[[{"node":"BaseQuestions","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"RelatedQuestionAI","type":"ai_languageModel","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"RelatedQuestionAI","type":"ai_outputParser","index":0}]]},"Auto-fixing Output Parser":{"ai_outputParser":[[{"node":"PromptGenerator","type":"ai_outputParser","index":0}]]},"Google Gemini Chat Model1":{"ai_languageModel":[[{"node":"PromptGenerator","type":"ai_languageModel","index":0},{"node":"Auto-fixing Output Parser","type":"ai_languageModel","index":0}]]},"Structured Output Parser1":{"ai_outputParser":[[{"node":"Auto-fixing Output Parser","type":"ai_outputParser","index":0}]]}}}


name: Ideal Customer Profile (ICP) Generation: AI, Firecrawl, Gemini, Telegram
author_name: Malik Hashir
author_username: malikx
categories: []
created_at: 2025-06-19T14:27:00.833Z
updated_at: 2025-06-19T14:27:00.833Z
url: https://n8n.io/workflows/5047
scraped_at: 2025-07-06 21:16:30
description:
  Purpose & Audience
  This workflow is designed to save hours of manual research for digital marketers, media buyers, copywriters, and business strategists. It empowers users to quickly understand their target customers’ behaviors, pain points, desires, and communication preferences by leveraging AI-powered web scraping and natural language processing.

  Whether you’re crafting ad campaigns, refining audience segments, or creating compelling content, this tool provides a powerful shortcut to uncovering your dream buyer’s profile—directly from the source website and delivered via Telegram.

  How It Works?
  Telegram Trigger:
  A user sends a message to the Telegram bot, e.g.,
  “Hey scrape this website https://www.company.com and find me their ICP. You can scrape 2 pages at most.”

  Parameter Extraction:
  An AI model processes the message to extract two key parameters:

  The company URL
  The number of pages to scrape (capped at 3)

  Conditional Scraping:
  Based on the number of pages:
  If 1 page, the workflow calls Firecrawl’s /scrape endpoint to scrape that single page.
  If more than 1 page, it calls Firecrawl’s /crawl endpoint to scrape up to the specified number of pages.

  Content Retrieval:
  After scraping, the content is fetched and passed to an AI language model.

  ICP Generation:
  The AI analyzes the website content and answers nine detailed questions about the dream buyer, such as:
  Where the dream buyer hangs out online and offline
  Their biggest frustrations and challenges
  Their hopes, fears, and preferred communication methods
  The language and phrases they use
  A typical day in their life
  What makes them happy

  Output Delivery:
  The generated ICP is sent back to the user via Telegram in a natural, easy-to-understand format.

  Setup Instructions
  To get this workflow up and running, you will need the following API credentials:

  Telegram Bot API

  Create a free Telegram bot using @BotFather on Telegram.
  Follow the prompts to create a new bot and get your API token.
  Use this token to create Telegram credentials in n8n.

  Firecrawl API

  Sign up for a free account at https://www.firecrawl.dev/.
  Obtain your API token from the Firecrawl dashboard.
  Create a Header Auth credential in n8n using this token to authenticate your HTTP Request nodes for scraping.

  OpenAI or Google Gemini API

  For AI-powered analysis, you need access to a large language model API.
  You can use OpenAI’s API (free tier available) by signing up at https://platform.openai.com/ and generating an API key.
  Alternatively, use Google Gemini if you have access.
  Create the corresponding credential in n8n and connect it to the AI nodes in the workflow.

  What It Does?
  Converts a simple Telegram message into structured scraping instructions.
  Scrapes website content intelligently, respecting user-defined page limits.
  Uses AI to deeply analyze business websites and generate actionable customer insights.
  Provides marketers and media buyers with rich, detailed ICPs that can be used for copywriting, ad targeting, audience research, and content creation.
  Automates a traditionally time-consuming research process into a seamless conversational experience.

  Summary
  This workflow enables you to generate a detailed Ideal Customer Profile (ICP) for any company by simply sending a message to a Telegram bot. Using natural conversational language, users provide a company URL and specify how many pages (up to 3) to scrape from the website. The workflow intelligently extracts these parameters, scrapes the website content using Firecrawl’s API, and then leverages an AI language model to analyze the content and produce a comprehensive ICP.

  The ICP answers key questions about the company’s dream buyer—helping marketers, media buyers, and copywriters understand their target audience deeply without manual research.

nodes_used:
  ["n8n-nodes-base.httpRequest","n8n-nodes-base.telegram","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.chainLlm","@n8n/n8n-nodes-langchain.outputParserStructured","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"meta":{"instanceId":"d04643ba872bb0fb252ed2c8197858d58cc47dd3c15ff6d08b19addd679e927b","templateCredsSetupCompleted":true},"nodes":[{"id":"6d4d3657-2634-4e39-82e3-ae6413886573","name":"Basic LLM Chain","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[1400,-1240],"parameters":{},"typeVersion":1.6},{"id":"da083438-dcba-4d63-988a-61237a108ced","name":"Google Gemini Chat Model2","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[1420,-980],"parameters":{},"typeVersion":1},{"id":"fa7ad8a8-4e43-4f37-927e-eed3b6515347","name":"GET - the scraped content","type":"n8n-nodes-base.httpRequest","position":[1240,-540],"parameters":{},"typeVersion":4.2},{"id":"f36441c9-0117-4834-a3ac-b5bc2017e62f","name":"Basic LLM Chain1","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[1420,-540],"parameters":{},"typeVersion":1.6},{"id":"71b9138d-f29d-470a-bc14-3a2343c7068b","name":"Google Gemini Chat Model3","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[1500,-180],"parameters":{},"typeVersion":1},{"id":"62c74703-6ab5-4004-ab67-c07c270fdf14","name":"Google Gemini Chat Model4","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[-520,-380],"parameters":{},"typeVersion":1},{"id":"52163878-86d0-4a14-99ce-791457d4d25c","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-280,-400],"parameters":{},"typeVersion":1.2},{"id":"8e93367b-06f2-4900-a62d-acc0bc968b81","name":"Telegram","type":"n8n-nodes-base.telegram","position":[2100,-780],"webhookId":"3d2a68a8-a2c1-483a-8685-b66388c1f421","parameters":{},"typeVersion":1.2},{"id":"602405f1-f9e3-4694-be36-fc4d1de73fe9","name":"Convert to File","type":"n8n-nodes-base.convertToFile","position":[1860,-560],"parameters":{},"typeVersion":1.1},{"id":"5e34628b-3a14-44c0-b3f4-911602767c88","name":"Convert to File1","type":"n8n-nodes-base.convertToFile","position":[1820,-920],"parameters":{},"typeVersion":1.1},{"id":"ef1ef73e-940c-498a-98ff-e0b26717e34b","name":"User Request - Telegram","type":"n8n-nodes-base.telegramTrigger","position":[-840,-760],"webhookId":"9832ffd5-4291-4e42-824f-40ad2f0bf9f4","parameters":{},"typeVersion":1.2},{"id":"1247c332-63da-451b-9c4e-5ce9fbc97796","name":"Extracts URL and No of Pages","type":"@n8n/n8n-nodes-langchain.agent","position":[-520,-760],"parameters":{},"typeVersion":1.9},{"id":"e55af8e5-fb98-41d2-8dea-9648040159c4","name":"Sets url and no of pages","type":"n8n-nodes-base.set","position":[-160,-780],"parameters":{},"typeVersion":3.4},{"id":"af075ebd-d2af-48d1-9ba2-0f9369a95484","name":"If page 1 (true) or more than 1 (false)","type":"n8n-nodes-base.if","position":[100,-900],"parameters":{},"typeVersion":2.2},{"id":"642ec1ad-36b8-4e8c-8532-0b2c19907b14","name":"Wait 60 seconds - for scraping","type":"n8n-nodes-base.wait","position":[1000,-540],"webhookId":"2a22fbe7-4bbb-421a-8811-113600ee999e","parameters":{},"typeVersion":1.1},{"id":"a68bd72f-a3c1-4cdd-89e3-573267d7d06b","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1040,-1160],"parameters":{"content":""},"typeVersion":1},{"id":"8e0d9e7e-70f2-497a-8cd2-58e23ba29784","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-660,-480],"parameters":{"content":""},"typeVersion":1},{"id":"6ae93f34-c015-4319-9ba7-4d335e221534","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[0,-1000],"parameters":{"content":""},"typeVersion":1},{"id":"e72cecba-762a-4753-aa1c-fdecb60d981e","name":"Scrapes more than one page - uses /crawl endpoint","type":"n8n-nodes-base.httpRequest","position":[620,-640],"parameters":{},"typeVersion":4.2},{"id":"7158ddee-737a-4c3b-b458-2662987071b4","name":"Scrape One Page - user /scrape endpoint","type":"n8n-nodes-base.httpRequest","position":[620,-960],"parameters":{},"typeVersion":4.2},{"id":"77fbbddc-1c29-4383-b73d-2af51fd2544d","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[460,-1420],"parameters":{"content":""},"typeVersion":1},{"id":"6321b475-2941-4efd-988f-ef0006497361","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2040,-1080],"parameters":{"content":""},"typeVersion":1},{"id":"36749f78-045a-41ca-bd10-a81b899821c0","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1380,-280],"parameters":{"content":""},"typeVersion":1},{"id":"3b91f5ae-33a7-4493-8e29-5e52337f06a2","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1300,-1080],"parameters":{"content":""},"typeVersion":1}],"pinData":{},"connections":{"Telegram":{"main":[[]]},"Basic LLM Chain":{"main":[[{"node":"Convert to Text File1","type":"main","index":0}]]},"Convert to File":{"main":[[{"node":"Telegram","type":"main","index":0}]]},"Basic LLM Chain1":{"main":[[{"node":"Convert to Text File","type":"main","index":0}]]},"Convert to File1":{"main":[[{"node":"Send Text File (containing detailed info about ICP) via Telegram","type":"main","index":0}]]},"User Request - Telegram":{"main":[[{"node":"Extracts URL and No of Pages","type":"main","index":0}]]},"Sets url and no of pages":{"main":[[{"node":"If page 1 (true) or more than 1 (false)","type":"main","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Extracts URL and No of Pages","type":"ai_outputParser","index":0}]]},"GET - the scraped content":{"main":[[{"node":"Basic LLM Chain1","type":"main","index":0}]]},"Google Gemini Chat Model2":{"ai_languageModel":[[{"node":"Basic LLM Chain","type":"ai_languageModel","index":0}]]},"Google Gemini Chat Model3":{"ai_languageModel":[[{"node":"Basic LLM Chain1","type":"ai_languageModel","index":0}]]},"Google Gemini Chat Model4":{"ai_languageModel":[[{"node":"Extracts URL and No of Pages","type":"ai_languageModel","index":0}]]},"Extracts URL and No of Pages":{"main":[[{"node":"Sets url and no of pages","type":"main","index":0}]]},"Wait 60 seconds - for scraping":{"main":[[{"node":"GET - the scraped content","type":"main","index":0}]]},"If page 1 (true) or more than 1 (false)":{"main":[[{"node":"Scrape One Page - user /scrape endpoint","type":"main","index":0}],[{"node":"Scrapes more than one page - uses /crawl endpoint","type":"main","index":0}]]},"Scrape One Page - user /scrape endpoint":{"main":[[{"node":"Basic LLM Chain","type":"main","index":0}]]},"Scrapes more than one page - uses /crawl endpoint":{"main":[[{"node":"Wait 60 seconds - for scraping","type":"main","index":0}]]}}}


name: Interactive Slack Approval & Data Submission System with Webhooks
author_name: Niranjan G
author_username: niranjan
nodes_used: ["n8n-nodes-base.slack"]
categories: []
created_at: 2025-06-19T14:48:52.116Z
updated_at: 2025-06-19T14:48:52.116Z
url: https://n8n.io/workflows/5049
scraped_at: 2025-07-06 21:16:30
description:
  Slack Bot n8n Integration Hub - Workflow Submission

  🚀 Showcase: Endless Possibilities with n8n Integration

  This repository demonstrates a powerful Slack Bot Socket App that seamlessly integrates with n8n for automation workflows. This is just a showcase of what's possible when combining Slack's interactive capabilities with n8n's automation power - the possibilities are truly endless!

  📋 Project Overview

  Repository: slack-n8n-integration-hub

  Status: ✅ Committed and Ready for Submission

  This project showcases how to create seamless interactions between Slack users and n8n workflows, demonstrating:

  Real-time Data Submission** from Slack to n8n workflows
  Interactive Approval/Rejection** workflows triggered from Slack
  Secure Webhook Communication** with optional Basic Authentication
  Dynamic Modal Interactions** with immediate feedback
  Error Handling and User Experience** optimization

  🎯 Key Features Demonstrated

  1. Data Input Integration
  Users can submit custom data directly from Slack
  Data is instantly sent to n8n workflows for processing
  Real-time feedback and confirmation messages

  2. Approval Workflow Automation
  Interactive approve/reject buttons in Slack modals
  Decisions trigger different n8n workflow paths
  Automated decision logging and processing

  3. Enhanced User Experience
  Modal closes automatically after actions
  Submit button positioned below input for better UX
  Comprehensive error handling and user feedback

  4. Security & Authentication
  Optional HTTP Basic Auth for webhook security
  Environment-based configuration management
  Secure credential handling

  🔧 Technical Implementation

  Slack Bot Features:
  Socket Mode for real-time communication
  Custom slash commands (/automation)
  Interactive modals with dynamic content
  Button actions and form submissions

  n8n Integration:
  Webhook triggers for data reception
  Structured payload formats
  Authentication support
  Error handling and response management

  Workflow Payload Examples:

  Data Submission:
  {
    "type": "data_submission",
    "data": "User input data here",
    "user": {
      "id": "U1234567890",
      "name": "username"
    },
    "timestamp": "2024-01-01T12:00:00.000Z",
    "source": "slack_bot"
  }

  Approval Action:
  {
    "type": "approval_action",
    "action": "approve",
    "user": {
      "id": "U1234567890",
      "name": "username"
    },
    "timestamp": "2024-01-01T12:00:00.000Z",
    "source": "slack_bot"
  }

  🌟 Why This Matters for n8n Community

  This project demonstrates how n8n can be the backbone for:

  Human-in-the-loop** automation workflows
  Interactive approval** processes
  Real-time data collection** from team communication tools
  Seamless integration** between chat platforms and automation
  Scalable workflow triggers** from multiple sources

  🚀 Endless Possibilities

  This is just the beginning! With this foundation, you can build:

  IT Service Desk** automation with Slack approvals
  Content Publishing** workflows with team reviews
  Data Collection** and processing pipelines
  Incident Management** with automated escalations
  Project Management** with status updates and approvals
  Customer Support** ticket routing and responses
  DevOps Deployments** with approval gates
  Financial Approvals** with audit trails
  HR Processes** with automated workflows
  Marketing Campaigns** with content approvals

  📁 Repository Structure

  slack-n8n-integration-hub/
  ├── app.js                          # Main Slack Bot application
  ├── package.json                    # Dependencies and scripts
  ├── .env.example                    # Environment configuration template
  ├── README.md                       # Complete setup documentation
  ├── CONTRIBUTING.md                 # Contribution guidelines
  ├── Slack_Bot_n8n_Integration_Hub.json  # n8n workflow export
  ├── n8n-workflow-examples.json     # Additional workflow examples
  └── test-webhook.js                 # Webhook testing utilities

  🎉 Ready for n8n Community

  This workflow is:
  ✅ Fully Tested and working
  ✅ Well Documented with setup instructions
  ✅ Open Source and ready for community use
  ✅ Extensible for various use cases
  ✅ Production Ready with error handling

  🔗 Get Started

  Clone the repository: git clone https://github.com/iam-niranjan/slack-n8n-integration-hub.git
  Follow the setup guide in the main README.md
  Import the n8n workflows from the JSON files
  Customize for your use case and explore the possibilities!

  This showcase demonstrates that with n8n and Slack integration, the automation possibilities are truly endless! 🚀

  Ready to submit to n8n community for sharing and collaboration.

workflow_json:
  {"id":"5rr11oY3PWtqx8az","meta":{"instanceId":"c62c01f3e843893075a10f252ec7d6d69e5ab593af019f50055d506cb3081b99","templateCredsSetupCompleted":true},"name":"Slack Bot N8N Integration Hub","tags":[{"id":"XuoVybTXeUXuim6G","name":"✅ Live","createdAt":"2025-06-08T07:59:43.586Z","updatedAt":"2025-06-08T07:59:43.586Z"},{"id":"RiQR5FfzNZyblqRY","name":"🛠️ Utility","createdAt":"2025-06-08T08:02:50.794Z","updatedAt":"2025-06-08T08:02:50.794Z"},{"id":"TEMBBqocz4kZADTv","name":"📤 Submitted Workflows","createdAt":"2025-06-08T07:38:04.084Z","updatedAt":"2025-06-08T07:38:04.084Z"}],"nodes":[{"id":"b62c6302-387e-4ef3-af4c-92c87fdfef1b","name":"n8n Data Webhook","type":"n8n-nodes-base.webhook","position":[-140,-360],"webhookId":"874768ff-6631-42a8-8c49-25b63ead3fec","parameters":{"path":"874768ff-6631-42a8-8c49-25b63ead3fec","options":{},"httpMethod":"POST","authentication":"basicAuth"},"credentials":{"httpBasicAuth":{"id":"pmJaCcMGEkPDYowB","name":"Basic Auth Webhook credential"}},"typeVersion":2},{"id":"6e22fc14-5eb0-4dab-944f-e527b10292a2","name":"Slack - Data Acknowledgment","type":"n8n-nodes-base.slack","position":[80,-360],"webhookId":"16b35492-6886-4319-ade7-eca8ef1a141b","parameters":{"text":"=Data Input 📥 : {{$json.body.data || $json.data || 'No data provided'}}\n\n✅ Data received and processed successfully! Your automation request has been submitted.","select":"channel","channelId":{"__rl":true,"mode":"id","value":"A12B1C1DEFG"},"otherOptions":{}},"credentials":{"slackApi":{"id":"i1yhHILyYn4V6kjy","name":"Slack account"}},"typeVersion":2.3},{"id":"48d837e7-626e-472b-b528-8b75ad2d86a5","name":"n8n Button Webhook","type":"n8n-nodes-base.webhook","position":[-140,-80],"webhookId":"fa872cfc-abe3-481d-ab7c-74f78d83a070","parameters":{"path":"fa872cfc-abe3-481d-ab7c-74f78d83a070","options":{},"httpMethod":"POST","authentication":"basicAuth"},"credentials":{"httpBasicAuth":{"id":"pmJaCcMGEkPDYowB","name":"Basic Auth Webhook credential"}},"typeVersion":2},{"id":"16390c39-acbd-437a-ae90-be702e67bed6","name":"Process Button Action","type":"n8n-nodes-base.function","position":[80,-80],"parameters":{"functionCode":"// Process approval/rejection action\nconst webhookData = items[0].json;\n\n// Extract data from the webhook payload\nconst body = webhookData.body || webhookData;\nconst action = body.action;\nconst user = body.user || {};\nconst timestamp = body.timestamp || Date.now();\n\n// Create response based on action\nlet message = '';\nlet emoji = '';\nlet status = '';\n\nconst userDisplayName = user.name || user.id || 'Unknown User';\n\nif (action === 'approve') {\n  emoji = '✅';\n  status = 'APPROVED';\n  message = `${emoji} *Request ${status}*\\n\\n` +\n           `👤 *Approved by:* ${userDisplayName}\\n` +\n           `⏰ *Time:* ${new Date(timestamp).toLocaleString()}\\n` +\n           `🎯 *Action:* Request has been processed successfully and approved for execution.\\n` +\n           `📋 *Next Steps:* The automation workflow will proceed with the approved action.`;\n} else if (action === 'reject') {\n  emoji = '❌';\n  status = 'REJECTED';\n  message = `${emoji} *Request ${status}*\\n\\n` +\n           `👤 *Rejected by:* ${userDisplayName}\\n` +\n           `⏰ *Time:* ${new Date(timestamp).toLocaleString()}\\n` +\n           `🚫 *Action:* Request has been rejected and will not be processed.\\n` +\n           `📋 *Next Steps:* No further action will be taken for this request.`;\n} else {\n  emoji = '⚠️';\n  status = 'UNKNOWN';\n  message = `${emoji} *Unknown Action Received*\\n\\n` +\n           `👤 *User:* ${userDisplayName}\\n` +\n           `⏰ *Time:* ${new Date(timestamp).toLocaleString()}\\n` +\n           `❓ *Action:* ${action || 'undefined'}\\n` +\n           `📋 *Status:* Unable to process this action type.`;\n}\n\n// Return processed data\nreturn [{\n  json: {\n    ...webhookData,\n    processedMessage: message,\n    emoji: emoji,\n    status: status,\n    processedAt: new Date().toISOString()\n  }\n}];\n"},"typeVersion":1},{"id":"bbb48629-5773-42d6-a3f7-10f87fbb439c","name":"Slack - Button Acknowledgment","type":"n8n-nodes-base.slack","position":[300,-80],"webhookId":"16b35492-6886-4319-ade7-eca8ef1a141b","parameters":{"text":"={{$json.processedMessage}}","select":"channel","channelId":{"__rl":true,"mode":"id","value":"A12B1C1DEFG"},"otherOptions":{}},"credentials":{"slackApi":{"id":"i1yhHILyYn4V6kjy","name":"Slack account"}},"typeVersion":2.3},{"id":"63a966d9-4eab-4736-9cac-74f79f1f680e","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-240,-460],"parameters":{"width":760,"height":280,"content":"## DATA_WEBHOOK "},"typeVersion":1},{"id":"82e8b699-3e70-4ffe-8f18-e32d15b3fc67","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-240,-160],"parameters":{"color":4,"width":760,"height":280,"content":"## BUTTON_WEBHOOK"},"typeVersion":1},{"id":"81cd3810-cc40-436c-b3a6-2c651eccf014","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-640,-460],"parameters":{"width":380,"height":240,"content":"🚀 SLACK BOT N8N INTEGRATION HUB\n\n📌 Purpose: Complete Slack automation workflow\n🔗 Handles: Data submission + Approval workflows\n⚡ Features: Real-time responses, dual webhooks\n\n🎯 Use Cases:\n• Employee approval requests\n• Data collection & processing\n• Interactive team workflows\n• Automated decision routing"},"typeVersion":1},{"id":"1aff3893-1619-43b2-9c89-37e086189716","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-640,-200],"parameters":{"width":380,"height":200,"content":"🛠️ QUICK SETUP GUIDE\n\n1️⃣ Configure webhook URLs in Slack bot\n2️⃣ Set Slack channel ID in response nodes\n3️⃣ Update Slack credentials\n4️⃣ Test with /automation command\n\n🔐 Optional: Enable Basic Auth for security\n📖 Full docs: https://github.com/iam-niranjan/slack-n8n-integration-hub"},"typeVersion":1},{"id":"c82d2e8a-34f2-4699-a1b0-c605797390e4","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-640,20],"parameters":{"width":380,"height":260,"content":"📂 COMPLETE SOURCE CODE\n\n🌟 GitHub: https://github.com/iam-niranjan/slack-n8n-integration-hub\n\n📦 Includes:\n✅ Slack Bot source code\n✅ Environment setup guide\n✅ Authentication examples\n✅ Troubleshooting docs\n\n⭐ Star the repo if helpful!"},"typeVersion":1}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"fef3bea8-23c9-4266-8a10-0aa072e25a74","connections":{"n8n Data Webhook":{"main":[[{"node":"Slack - Data Acknowledgment","type":"main","index":0}]]},"n8n Button Webhook":{"main":[[{"node":"Process Button Action","type":"main","index":0}]]},"Process Button Action":{"main":[[{"node":"Slack - Button Acknowledgment","type":"main","index":0}]]}}}


name: Track LinkedIn Profile Changes with Google Sheets & Slack Notifications
author_name: Matthieu
author_username: yaznow
nodes_used: ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","n8n-nodes-base.slack"]
categories: []
created_at: 2025-06-19T19:38:39.249Z
updated_at: 2025-06-19T19:38:39.249Z
url: https://n8n.io/workflows/5052
scraped_at: 2025-07-06 21:16:30
description:
  LinkedIn Profile Tracker Automation

  Who is this for?
  This template is ideal for sales teams, recruiters, business development professionals, and relationship managers who need to monitor changes in their network's LinkedIn profiles. Perfect for agencies tracking client personnel changes, HR teams monitoring talent movements, sales professionals staying updated on prospect job changes, and content teams tracking influencer activity.

  What problem does this workflow solve?
  Manually checking LinkedIn profiles for updates like job changes, status modifications, profile edits, or latest posts is extremely time-consuming and easy to miss. 
  This automation eliminates the need for constant manual monitoring while ensuring you never miss important changes that could signal new business opportunities, relationship updates, or content engagement opportunities.

  What this workflow does
  This workflow automatically monitors a list of LinkedIn profiles on a weekly schedule, detects any changes in:
  Personal information** (name, headline, summary)
  Job status** (hiring/open to work flags)
  Latest work experience** (new positions, company changes)
  Recent posts** (latest content activity)

  When changes are detected, it immediately sends Slack notifications with before/after comparisons and updates your tracking database to maintain historical records of all profile evolution.

  Setup
  Create a Ghost Genius API account and get your API key for LinkedIn profile scraping
  Configure HTTP Request nodes with Header Auth credentials using your Ghost Genius API key
  Set up your Google Sheets database with columns:
     Firstname, Lastname, LinkedIn URL, ID
     Tagline, Summary, Latest experience
     Open to work?, Hiring?, Latest post
  Configure Slack webhook integration for real-time notifications
  Set up credentials for Google Sheets and Slack following n8n documentation
  Add LinkedIn profile URLs to your Google Sheet to start monitoring

  How to customize this workflow
  Modify the schedule trigger** to check profiles daily, bi-weekly, or monthly based on your monitoring needs
  Customize Slack notification messages** to include additional context, mentions, or custom formatting
  Add email notifications** alongside Slack alerts for critical changes like job transitions
  Set up filtered notifications** to only alert on specific types of changes (e.g., job changes only, posts from key influencers)
  Add post content analysis** to detect mentions of your company or competitors
  Integrate with CRM systems** to automatically update lead records when profile changes occur

workflow_json:
  {"id":"V0pIUPQVqZHuqnjs","meta":{"instanceId":"95a1299fb2b16eb2219cb044f54e72c2d00dcd2c72efe717b3c308d200f29927","templateCredsSetupCompleted":true},"name":"Track LinkedIn profile changes and send Slack notifications","tags":[],"nodes":[{"id":"cf0ab5e0-8f6e-4384-abe6-2dfb578ad2ba","name":"If","type":"n8n-nodes-base.if","position":[480,180],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"49d03a4f-fcba-4f56-bab9-c0b69fa089a4","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $json.url }}","rightValue":"="}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"7c89e4f8-8b3a-4175-aabb-b39ae3e390e5","name":"Read Profiles List","type":"n8n-nodes-base.googleSheets","onError":"continueRegularOutput","position":[-2160,880],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit#gid=0","cachedResultName":"Profiles"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5,"alwaysOutputData":true},{"id":"abd18245-3576-4575-afe8-68771f18137e","name":"Filter New Profiles","type":"n8n-nodes-base.filter","onError":"continueRegularOutput","position":[-1940,880],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"93ed7045-0dae-4d88-9fe8-64df5956fc41","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.ID }}","rightValue":""}]}},"typeVersion":2.2,"alwaysOutputData":true},{"id":"ffeb0106-cfb3-41c8-bb9c-409e10b71097","name":"Scrape New Profiles","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[-1280,880],"parameters":{"url":"https://api.ghostgenius.fr/v2/profile","options":{"batching":{"batch":{"batchSize":1,"batchInterval":2500}}},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","queryParameters":{"parameters":[{"name":"url","value":"={{ $('Filter New Profiles').item.json.LinkedIn }}"}]}},"credentials":{"httpHeaderAuth":{"id":"exbeu4lymvA5NhXa","name":"Ghost Genius"}},"typeVersion":4.2,"alwaysOutputData":true},{"id":"375dc96b-0803-4eb9-805f-08fa0a4d5ea6","name":"Read Existing Data","type":"n8n-nodes-base.googleSheets","position":[-620,880],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit#gid=0","cachedResultName":"Profiles"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"executeOnce":true,"typeVersion":4.5},{"id":"5a1d6661-a4db-4fff-abb9-fed34f5ca8f8","name":"Scrape Current Data","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[-220,880],"parameters":{"url":"https://api.ghostgenius.fr/v2/profile","options":{"batching":{"batch":{"batchSize":1,"batchInterval":2500}}},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","queryParameters":{"parameters":[{"name":"url","value":"={{ $('Read Existing Data').item.json.LinkedIn }}"}]}},"credentials":{"httpHeaderAuth":{"id":"exbeu4lymvA5NhXa","name":"Ghost Genius"}},"executeOnce":false,"typeVersion":4.2,"alwaysOutputData":true},{"id":"2aa50779-4ba0-475a-a69e-9618f3143dc0","name":"Detect Changes","type":"n8n-nodes-base.switch","position":[40,780],"parameters":{"rules":{"values":[{"outputKey":"Firstname","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"871b00da-26ee-4561-8d01-44487789a53f","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.first_name }}","rightValue":"={{ $('Read Existing Data').item.json.Firstname }}"}]},"renameOutput":true},{"outputKey":"Lastname","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"60c00e9c-9baf-4cc7-a056-1d7bd395b50e","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.last_name }}","rightValue":"={{ $('Read Existing Data').item.json.Lastname }}"}]},"renameOutput":true},{"outputKey":"Tagline","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"baa12563-6083-4795-a941-8b564835585a","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.headline }}","rightValue":"={{ $('Read Existing Data').item.json.Tagline }}"}]},"renameOutput":true},{"outputKey":"Summary","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"ea2ee3a7-d9f9-4031-9a94-8391dbd3aaf3","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.summary }}","rightValue":"={{ $('Read Existing Data').item.json.Summary }}"}]},"renameOutput":true},{"outputKey":"Latest experience","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"f8b1a1bb-ea43-4bde-ac33-7b112cad3a11","operator":{"type":"string","operation":"notEquals"},"leftValue":"=Company name: {{ $json.experiences[0].company.name }}\nCompany url: {{ $json.experiences[0].company.url }}\nPosition: {{ $json.experiences[0].position }}\nDescription: {{ $json.experiences[0].description }} \nLocation: {{ $json.experiences[0].location }}\nStart: {{ $json.experiences[0].start }}\nEnd: {{ $json.experiences[0].end }}","rightValue":"={{ $('Read Existing Data').item.json['Latest experience'] }}"}]},"renameOutput":true},{"outputKey":"Open to work?","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"036d2d87-ecc0-4808-8e3e-93c2d21fc111","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.is_open_to_work }}","rightValue":"={{ $('Read Existing Data').item.json['Open to work?'] }}"}]},"renameOutput":true},{"outputKey":"Hiring?","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"d2c5e3dc-765c-405a-b938-80f8107e8f0b","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.is_hiring }}","rightValue":"={{ $('Read Existing Data').item.json['Hiring?'] }}"}]},"renameOutput":true},{"outputKey":"Latest Post ","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"82003e54-3790-4680-8240-e496de2ec94c","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Scrape Current Posts').item.json.data[0].url }}","rightValue":"={{ $('Read Existing Data').item.json['Latest Post'] }}"}]},"renameOutput":true}]},"options":{"allMatchingOutputs":true},"looseTypeValidation":true},"typeVersion":3.2,"alwaysOutputData":true},{"id":"5ce196d0-47a6-4258-9a66-983e88532095","name":"Alert First Name","type":"n8n-nodes-base.slack","position":[800,200],"webhookId":"68cbad6c-f951-4b5b-bb52-ed356e92d12b","parameters":{"text":"=🚨 First name change detected\n🔄 {{ $('Read Existing Data').item.json.Firstname }} → {{ $('Scrape Current Data').item.json.first_name }} \n----------------------------------------------------------------------------------------\nLinkedIn: {{ $('Read Existing Data').item.json.LinkedIn }}\nRow: {{ $('Read Existing Data').item.json.row_number }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08RP1DL69M","cachedResultName":"demo"},"otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"HQccwvwEod5q40Mw","name":"Slack account 6"}},"typeVersion":2.3},{"id":"624db6fe-0636-421a-90f9-6c38bf1972dd","name":"Update First Name","type":"n8n-nodes-base.googleSheets","position":[1020,200],"parameters":{"columns":{"value":{"ID":"={{ $('Scrape Current Data').item.json.id }}","Firstname":"={{ $('Scrape Current Data').item.json.first_name }}"},"schema":[{"id":"Firstname","type":"string","display":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"removed":true,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":true,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"removed":true,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":true,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":true,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":true,"required":false,"displayName":"Hiring?","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":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5},{"id":"542e29ea-8d5a-4db0-b926-9e4f2d18e6ab","name":"Alert Last Name","type":"n8n-nodes-base.slack","position":[800,420],"webhookId":"68cbad6c-f951-4b5b-bb52-ed356e92d12b","parameters":{"text":"=🚨 Last name change detected\n🔄 {{ $('Read Existing Data').item.json.Lastname }} → {{ $('Scrape Current Data').item.json.last_name }}\n----------------------------------------------------------------------------------------\nLinkedIn: {{ $('Read Existing Data').item.json.LinkedIn }}\nRow: {{ $('Read Existing Data').item.json.row_number }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08RP1DL69M","cachedResultName":"demo"},"otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"HQccwvwEod5q40Mw","name":"Slack account 6"}},"typeVersion":2.3},{"id":"cce9db9d-4cb9-443d-856d-75282dadf4e8","name":"Update Last Name","type":"n8n-nodes-base.googleSheets","position":[1020,420],"parameters":{"columns":{"value":{"ID":"={{ $('Scrape Current Data').item.json.id }}","Lastname":"={{ $('Scrape Current Data').item.json.last_name }}"},"schema":[{"id":"Firstname","type":"string","display":true,"removed":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"removed":false,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":true,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"removed":true,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":true,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":true,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":true,"required":false,"displayName":"Hiring?","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":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5},{"id":"aba088b5-e50a-42f8-8623-52ab68784f14","name":"Alert Tagline","type":"n8n-nodes-base.slack","position":[800,640],"webhookId":"68cbad6c-f951-4b5b-bb52-ed356e92d12b","parameters":{"text":"=🚨 Tagline change detected\n🔄 {{ $('Read Existing Data').item.json.Tagline }} → {{ $('Scrape Current Data').item.json.headline }}\n----------------------------------------------------------------------------------------\nLinkedIn: {{ $('Read Existing Data').item.json.LinkedIn }}\nRow: {{ $('Read Existing Data').item.json.row_number }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08RP1DL69M","cachedResultName":"demo"},"otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"HQccwvwEod5q40Mw","name":"Slack account 6"}},"typeVersion":2.3},{"id":"845633b0-67ff-4d18-b4e3-d148ff0c7335","name":"Update Tagline","type":"n8n-nodes-base.googleSheets","position":[1020,640],"parameters":{"columns":{"value":{"ID":"={{ $('Scrape Current Data').item.json.id }}","Tagline":"={{ $('Scrape Current Data').item.json.headline }}"},"schema":[{"id":"Firstname","type":"string","display":true,"removed":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"removed":true,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":true,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"removed":false,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":true,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":true,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":true,"required":false,"displayName":"Hiring?","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":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5},{"id":"0ead1440-bc27-4739-b35c-f04dac3ba216","name":"Alert Summary","type":"n8n-nodes-base.slack","position":[800,860],"webhookId":"68cbad6c-f951-4b5b-bb52-ed356e92d12b","parameters":{"text":"=🚨 Summary change detected\n🔄 {{ $('Read Existing Data').item.json.Summary }} → {{ $('Scrape Current Data').item.json.summary }}\n----------------------------------------------------------------------------------------\nLinkedIn: {{ $('Read Existing Data').item.json.LinkedIn }}\nRow: {{ $('Read Existing Data').item.json.row_number }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08RP1DL69M","cachedResultName":"demo"},"otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"HQccwvwEod5q40Mw","name":"Slack account 6"}},"typeVersion":2.3},{"id":"faa69200-bf8a-45e3-8090-eab5ecd11d18","name":"Update Summary","type":"n8n-nodes-base.googleSheets","position":[1020,860],"parameters":{"columns":{"value":{"ID":"={{ $('Scrape Current Data').item.json.id }}","Summary":"={{ $('Scrape Current Data').item.json.summary }}"},"schema":[{"id":"Firstname","type":"string","display":true,"removed":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"removed":true,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":true,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"removed":true,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":false,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":true,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":true,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":true,"required":false,"displayName":"Hiring?","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":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5},{"id":"8ab4f7c9-0cb9-43c6-b9c5-ef8795c582dc","name":"Alert Experience","type":"n8n-nodes-base.slack","position":[800,1080],"webhookId":"68cbad6c-f951-4b5b-bb52-ed356e92d12b","parameters":{"text":"=🚨 Latest experience change detected\n🔄 {{ $('Read Existing Data').item.json['Latest experience'] }} \n→ \nCompany name: {{ $json.experiences[0].company.name }}\nCompany url: {{ $json.experiences[0].company.url }}\nPosition: {{ $json.experiences[0].position }}\nDescription: {{ $json.experiences[0].description }} \nLocation: {{ $json.experiences[0].location }}\nStart: {{ $json.experiences[0].start }}\nEnd: {{ $json.experiences[0].end }}\n----------------------------------------------------------------------------------------\nLinkedIn: {{ $('Read Existing Data').item.json.LinkedIn }}\nRow: {{ $('Read Existing Data').item.json.row_number }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08RP1DL69M","cachedResultName":"demo"},"otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"HQccwvwEod5q40Mw","name":"Slack account 6"}},"typeVersion":2.3},{"id":"ac7d0dee-b9d7-449f-95a3-4f910a0d1486","name":"Update Experience","type":"n8n-nodes-base.googleSheets","position":[1020,1080],"parameters":{"columns":{"value":{"ID":"={{ $('Scrape Current Data').item.json.id }}","Latest experience":"=Company name: {{ $('Scrape Current Data').item.json.experiences[0].company.name }}\nCompany url: {{ $('Scrape Current Data').item.json.experiences[0].company.url }}\nPosition: {{ $('Scrape Current Data').item.json.experiences[0].position }}\nDescription: {{ $('Scrape Current Data').item.json.experiences[0].description }}\nLocation: {{ $('Scrape Current Data').item.json.experiences[0].location }}\nStart: {{ $('Scrape Current Data').item.json.experiences[0].start }}\nEnd: {{ $('Scrape Current Data').item.json.experiences[0].end }}"},"schema":[{"id":"Firstname","type":"string","display":true,"removed":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"removed":true,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":true,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"removed":true,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":false,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":true,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":true,"required":false,"displayName":"Hiring?","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":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5},{"id":"cdf9a73c-64c3-4897-87bc-dd74fc2befe8","name":"Alert Open to Work","type":"n8n-nodes-base.slack","position":[800,1320],"webhookId":"68cbad6c-f951-4b5b-bb52-ed356e92d12b","parameters":{"text":"=🚨 Open to work? change detected\n🔄 {{ $('Read Existing Data').item.json['Open to work?'] }} → {{ $('Scrape Current Data').item.json.is_open_to_work }}\n----------------------------------------------------------------------------------------\nLinkedIn: {{ $('Read Existing Data').item.json.LinkedIn }}\nRow: {{ $('Read Existing Data').item.json.row_number }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08RP1DL69M","cachedResultName":"demo"},"otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"HQccwvwEod5q40Mw","name":"Slack account 6"}},"typeVersion":2.3},{"id":"a1f9e5bb-1206-48ed-ba81-217980c346c4","name":"Update Open to Work","type":"n8n-nodes-base.googleSheets","position":[1020,1320],"parameters":{"columns":{"value":{"ID":"={{ $('Scrape Current Data').item.json.id }}","Open to work?":"={{ $('Scrape Current Data').item.json.is_open_to_work }}"},"schema":[{"id":"Firstname","type":"string","display":true,"removed":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"removed":true,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":true,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"removed":true,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":true,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":false,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":true,"required":false,"displayName":"Hiring?","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":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5},{"id":"68a0f534-10bf-46dc-887d-b2e1af096ccb","name":"Alert Hiring Status","type":"n8n-nodes-base.slack","position":[800,1540],"webhookId":"68cbad6c-f951-4b5b-bb52-ed356e92d12b","parameters":{"text":"=🚨 Hiring? change detected\n🔄 {{ $('Read Existing Data').item.json['Hiring?'] }} → {{ $('Scrape Current Data').item.json.is_hiring }}\n----------------------------------------------------------------------------------------\nLinkedIn: {{ $('Read Existing Data').item.json.LinkedIn }}\nRow: {{ $('Read Existing Data').item.json.row_number }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08RP1DL69M","cachedResultName":"demo"},"otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"HQccwvwEod5q40Mw","name":"Slack account 6"}},"typeVersion":2.3},{"id":"25adecba-9349-4148-9513-73b378fbafd7","name":"Update Hiring Status","type":"n8n-nodes-base.googleSheets","position":[1020,1540],"parameters":{"columns":{"value":{"ID":"={{ $('Scrape Current Data').item.json.id }}","Hiring?":"={{ $('Scrape Current Data').item.json.is_hiring }}"},"schema":[{"id":"Firstname","type":"string","display":true,"removed":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"removed":true,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":true,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"removed":true,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":true,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":true,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":false,"required":false,"displayName":"Hiring?","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":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5},{"id":"bb6c182c-a68b-4b1b-8ddf-465cc8ab1824","name":"No Change ","type":"n8n-nodes-base.noOp","position":[800,40],"parameters":{},"typeVersion":1},{"id":"3661febd-2212-47f7-a425-0fa3b9b965c6","name":"Update New Profiles","type":"n8n-nodes-base.googleSheets","onError":"continueRegularOutput","position":[-900,1020],"parameters":{"columns":{"value":{"ID":"={{ $json.id }}","Hiring?":"={{ $json.is_hiring }}","Summary":"={{ $json.summary }}","Tagline":"={{ $json.headline }}","Lastname":"={{ $json.last_name }}","LinkedIn":"={{ $('Filter New Profiles').item.json.LinkedIn }}","Firstname":"={{ $json.first_name }}","Latest Post":"={{ $('Scrape New Profiles Posts').item.json.data[0].url }}","Open to work?":"={{ $json.is_open_to_work }}","Latest experience":"=Company name: {{ $json.experiences[0].company.name }}\nCompany url: {{ $json.experiences[0].company.url }}\nPosition: {{ $json.experiences[0].position }}\nDescription: {{ $json.experiences[0].description }} \nLocation: {{ $json.experiences[0].location }}\nStart: {{ $json.experiences[0].start }}\nEnd: {{ $json.experiences[0].end }}"},"schema":[{"id":"Firstname","type":"string","display":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":false,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":false,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":false,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":false,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":false,"required":false,"displayName":"Hiring?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest Post","type":"string","display":true,"removed":false,"required":false,"displayName":"Latest Post","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":["LinkedIn"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5,"alwaysOutputData":true},{"id":"5341adc5-0669-4e68-9c19-a00726d7f49c","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-2440,740],"parameters":{"color":6,"width":1700,"height":440,"content":"## Trigger & Check New Profiles "},"typeVersion":1},{"id":"b5d28560-0597-4dc8-89e3-cc9d302cbb36","name":"Daily Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-2380,880],"parameters":{"rule":{"interval":[{"triggerAtHour":8}]}},"typeVersion":1.2},{"id":"6699b7b3-72bf-4cd8-9d72-159c44c34b83","name":"Wait","type":"n8n-nodes-base.wait","onError":"continueRegularOutput","position":[-1500,880],"webhookId":"0560eb04-be9d-47cb-b27e-76c1333d5519","parameters":{"amount":2},"typeVersion":1.1,"alwaysOutputData":true},{"id":"c2efd436-f951-4665-98c9-0dc49294f664","name":"Scrape New Profiles Posts","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[-1720,880],"parameters":{"url":"https://api.ghostgenius.fr/v2/profile/posts","options":{"batching":{"batch":{"batchSize":1,"batchInterval":2000}}},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","queryParameters":{"parameters":[{"name":"url","value":"={{ $json.LinkedIn }}"},{"name":"page","value":"1"}]}},"credentials":{"httpHeaderAuth":{"id":"exbeu4lymvA5NhXa","name":"Ghost Genius"}},"typeVersion":4.2,"alwaysOutputData":true},{"id":"93fe7695-e6cb-48e2-b726-36369dfc1d8f","name":"If No New Profile","type":"n8n-nodes-base.if","position":[-1080,880],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"932e93ca-de00-48b7-add1-90e2c4c5dc89","operator":{"type":"object","operation":"exists","singleValue":true},"leftValue":"={{ $json.error }}","rightValue":""}]}},"typeVersion":2.2},{"id":"c64a043b-d9ae-483b-97c2-69119fc200ad","name":"Scrape Current Posts","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[-420,880],"parameters":{"url":"https://api.ghostgenius.fr/v2/profile/posts","options":{"batching":{"batch":{"batchSize":1,"batchInterval":2000}}},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","queryParameters":{"parameters":[{"name":"url","value":"={{ $json.LinkedIn }}"},{"name":"page","value":"1"}]}},"credentials":{"httpHeaderAuth":{"id":"exbeu4lymvA5NhXa","name":"Ghost Genius"}},"typeVersion":4.2,"alwaysOutputData":true},{"id":"43fcdb9c-1d50-42b3-9d96-e639c7fb43cd","name":"Alert Post","type":"n8n-nodes-base.slack","position":[800,1760],"webhookId":"68cbad6c-f951-4b5b-bb52-ed356e92d12b","parameters":{"text":"=🚨 New Post detected\nHere's the new post: {{ $('Scrape Current Posts').item.json.data[0].url }}\n----------------------------------------------------------------------------------------\nLinkedIn: {{ $('Read Existing Data').item.json.LinkedIn }}\nRow: {{ $('Read Existing Data').item.json.row_number }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08RP1DL69M","cachedResultName":"demo"},"otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"HQccwvwEod5q40Mw","name":"Slack account 6"}},"typeVersion":2.3},{"id":"72f69137-5720-4d2b-9d82-7699b782349f","name":"Update Post","type":"n8n-nodes-base.googleSheets","position":[1020,1760],"parameters":{"columns":{"value":{"ID":"={{ $('Scrape Current Data').item.json.id }}","Latest Post":"={{ $('Scrape Current Posts').item.json.data[0].url }}"},"schema":[{"id":"Firstname","type":"string","display":true,"removed":true,"required":false,"displayName":"Firstname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lastname","type":"string","display":true,"removed":true,"required":false,"displayName":"Lastname","defaultMatch":false,"canBeUsedToMatch":true},{"id":"LinkedIn","type":"string","display":true,"removed":true,"required":false,"displayName":"LinkedIn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tagline","type":"string","display":true,"removed":true,"required":false,"displayName":"Tagline","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"removed":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest experience","type":"string","display":true,"removed":true,"required":false,"displayName":"Latest experience","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Open to work?","type":"string","display":true,"removed":true,"required":false,"displayName":"Open to work?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Hiring?","type":"string","display":true,"removed":true,"required":false,"displayName":"Hiring?","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Latest Post","type":"string","display":true,"removed":false,"required":false,"displayName":"Latest Post","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":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit#gid=0","cachedResultName":"Feuille 1"},"documentId":{"__rl":true,"mode":"list","value":"1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1sMDpgl3zVFggyfIS3AaLovuO4mc8hv5cQ0lu9kzlTZw/edit?usp=drivesdk","cachedResultName":"Copy of Profiles Tracker"}},"credentials":{"googleSheetsOAuth2Api":{"id":"YGM9YMykoOmGLZhV","name":"Google Sheets account 5"}},"typeVersion":4.5},{"id":"9ea0d1dc-aabb-4081-b7c8-8a9f73272618","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-680,740],"parameters":{"color":4,"width":620,"height":440,"content":"## Scrape Current Data"},"typeVersion":1},{"id":"3c8ee59a-5819-4252-933f-e961a0c02b46","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[0,0],"parameters":{"color":5,"width":1280,"height":1940,"content":"## Track if there is a change, Alert and Update"},"typeVersion":1},{"id":"1e0aaf6b-8aae-4dab-b9ea-0ac408743be0","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-1140,340],"parameters":{"width":460,"height":260,"content":"## Resources \n[Video Setup](https://youtu.be/RIMS4Xu8-Eg)\n\nScraper LinkedIn (cookieless): [Ghost Genius API](https://www.ghostgenius.fr/) \n\nGoogle Sheet: [Make a copy here](https://docs.google.com/spreadsheets/d/1fGlKRGQrY0rW41DQ7GdtBh0QBR4P8Npbyr_k00DF_5Q/edit?usp=sharing)\n\nGoogle Sheet Credential Setup: [Video Tutorial](https://www.youtube.com/watch?v=pWGXlZBGu4k)\n\nSlack Credential Setup: [Video Tutorial](https://www.youtube.com/watch?v=9s4D36wDBwY&t) (Follow the instructions for OAuth2 only)"},"typeVersion":1},{"id":"2df36728-9c97-46ee-856a-fa5dd51df87f","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1520,420],"parameters":{"color":3,"height":80,"content":"# [Video Setup](https://youtu.be/RIMS4Xu8-Eg)"},"typeVersion":1}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"28e6944e-0464-40a5-a9dd-ca6a6d9e28fb","connections":{"If":{"main":[[{"node":"No Change ","type":"main","index":0}],[{"node":"Alert First Name","type":"main","index":0}]]},"Wait":{"main":[[{"node":"Scrape New Profiles","type":"main","index":0}]]},"Alert Post":{"main":[[{"node":"Update Post","type":"main","index":0}]]},"Alert Summary":{"main":[[{"node":"Update Summary","type":"main","index":0}]]},"Alert Tagline":{"main":[[{"node":"Update Tagline","type":"main","index":0}]]},"Daily Trigger":{"main":[[{"node":"Read Profiles List","type":"main","index":0}]]},"Detect Changes":{"main":[[{"node":"If","type":"main","index":0}],[{"node":"Alert Last Name","type":"main","index":0}],[{"node":"Alert Tagline","type":"main","index":0}],[{"node":"Alert Summary","type":"main","index":0}],[{"node":"Alert Experience","type":"main","index":0}],[{"node":"Alert Open to Work","type":"main","index":0}],[{"node":"Alert Hiring Status","type":"main","index":0}],[{"node":"Alert Post","type":"main","index":0}]]},"Alert Last Name":{"main":[[{"node":"Update Last Name","type":"main","index":0}]]},"Alert Experience":{"main":[[{"node":"Update Experience","type":"main","index":0}]]},"Alert First Name":{"main":[[{"node":"Update First Name","type":"main","index":0}]]},"If No New Profile":{"main":[[{"node":"Read Existing Data","type":"main","index":0}],[{"node":"Update New Profiles","type":"main","index":0}]]},"Alert Open to Work":{"main":[[{"node":"Update Open to Work","type":"main","index":0}]]},"Read Existing Data":{"main":[[{"node":"Scrape Current Posts","type":"main","index":0}]]},"Read Profiles List":{"main":[[{"node":"Filter New Profiles","type":"main","index":0}]]},"Alert Hiring Status":{"main":[[{"node":"Update Hiring Status","type":"main","index":0}]]},"Filter New Profiles":{"main":[[{"node":"Scrape New Profiles Posts","type":"main","index":0}]]},"Scrape Current Data":{"main":[[{"node":"Detect Changes","type":"main","index":0}]]},"Scrape New Profiles":{"main":[[{"node":"If No New Profile","type":"main","index":0}]]},"Update New Profiles":{"main":[[{"node":"Read Existing Data","type":"main","index":0}]]},"Scrape Current Posts":{"main":[[{"node":"Scrape Current Data","type":"main","index":0}]]},"Scrape New Profiles Posts":{"main":[[{"node":"Wait","type":"main","index":0}]]}}}


name: Multi-Engine Search API Server with SerpApi - Complete MCP Integration
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-19T21:10:14.447Z
updated_at: 2025-06-19T21:10:14.447Z
url: https://n8n.io/workflows/5055
scraped_at: 2025-07-06 21:16:30
description:
  This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

  🛠️ SerpApi Official Tool MCP Server

  Complete MCP server exposing all SerpApi Official Tool operations to AI agents. Zero configuration needed - all 22 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every SerpApi Official Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n SerpApi Official Tool tool with full error handling

  📋 Available Operations (22 total)

  Every possible SerpApi Official Tool operation is included:

  🔧 Search (22 operations)

  • Search Baidu
  • Search Bing Images
  • Search Bing
  • Search DuckDuckGo
  • Search eBay
  • Search Google Autocomplete
  • Search Google Flights
  • Search Google Images
  • Search Google Jobs
  • Search Google Lens
  • Search Google
  • Search Google Local
  • Search Google Maps
  • Search Google Maps Directions
  • Search Google Maps Reviews
  • Search Google News
  • Search Google Product
  • Search Google Scholar
  • Search Google
  • Search Google Shopping
  • Search Google Trends
  • Search Google Videos

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native SerpApi Official Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every SerpApi Official Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"meta":{"instanceId":"cd59eaaeb7b34d06e24511380db94cdb7fbce6037cc4de22e539c5158ab9cdfc","templateCredsSetupCompleted":true},"nodes":[{"id":"8591fe9f-7dfb-4ec3-91bc-bb845e16f3e6","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1420,120],"parameters":{"content":""},"typeVersion":1},{"id":"5b94cc9c-99e1-48c9-9677-4eba0e08bb12","name":"SerpApi Official Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-400,100],"webhookId":"132f4f9a-6bb9-467a-8b2a-69a6df2c1506","parameters":{},"typeVersion":1},{"id":"694f0168-63b4-4f19-b4eb-edd91404c0d0","name":"Search Baidu","type":"n8n-nodes-serpapi.serpApiTool","position":[-800,360],"parameters":{},"typeVersion":1},{"id":"993f1d9e-a387-4d26-aba1-18b874e2b9b9","name":"Search Bing Images","type":"n8n-nodes-serpapi.serpApiTool","position":[-580,360],"parameters":{},"typeVersion":1},{"id":"2153dd91-c0d5-4124-a21d-b213fe805fd2","name":"Search Bing","type":"n8n-nodes-serpapi.serpApiTool","position":[-360,360],"parameters":{},"typeVersion":1},{"id":"ec4286e9-1f56-49d4-8c09-ff94387ad956","name":"Search DuckDuckGo","type":"n8n-nodes-serpapi.serpApiTool","position":[-140,360],"parameters":{},"typeVersion":1},{"id":"b7878c19-6c37-4ac9-a15f-d97c56577cd3","name":"Search eBay","type":"n8n-nodes-serpapi.serpApiTool","position":[60,360],"parameters":{},"typeVersion":1},{"id":"5517a3e8-81a8-4273-9300-70fdc0c7b531","name":"Search Google Autocomplete","type":"n8n-nodes-serpapi.serpApiTool","position":[-580,580],"parameters":{},"typeVersion":1},{"id":"bdc88baf-c233-461b-96ce-7e0d62e07f16","name":"Search Google Flights","type":"n8n-nodes-serpapi.serpApiTool","position":[520,840],"parameters":{},"typeVersion":1},{"id":"e49a3041-ab46-41be-8dab-ebfecba91e3a","name":"Search Google Images","type":"n8n-nodes-serpapi.serpApiTool","position":[520,580],"parameters":{},"typeVersion":1},{"id":"8b917530-d19c-4d92-bbd0-e18700893fe9","name":"Search Google Jobs","type":"n8n-nodes-serpapi.serpApiTool","position":[520,360],"parameters":{},"typeVersion":1},{"id":"60035b5f-555c-4138-bc55-be388dc8224d","name":"Search Google Lens","type":"n8n-nodes-serpapi.serpApiTool","position":[-360,580],"parameters":{},"typeVersion":1},{"id":"3ff124df-8f28-4948-9884-655c9938d4f5","name":"Search Google Local","type":"n8n-nodes-serpapi.serpApiTool","position":[-800,840],"parameters":{},"typeVersion":1},{"id":"4d27f2c8-e60e-4c99-b1ff-8a4e6f94f930","name":"Search Google Maps","type":"n8n-nodes-serpapi.serpApiTool","position":[-580,840],"parameters":{},"typeVersion":1},{"id":"fc281433-ee37-4525-baa0-0cbd3cb629ba","name":"Search Google Maps Directions","type":"n8n-nodes-serpapi.serpApiTool","position":[-360,840],"parameters":{},"typeVersion":1},{"id":"d8105146-c558-4368-bb80-344160f30b07","name":"Search Google Maps Reviews","type":"n8n-nodes-serpapi.serpApiTool","position":[-140,840],"parameters":{},"typeVersion":1},{"id":"b0f729ff-fe1f-4169-915d-5bda23b4d888","name":"Search Google News","type":"n8n-nodes-serpapi.serpApiTool","position":[100,840],"parameters":{},"typeVersion":1},{"id":"91d83d65-cb4c-4b50-b540-4cb87cd11296","name":"Search Google Product","type":"n8n-nodes-serpapi.serpApiTool","position":[300,580],"parameters":{},"typeVersion":1},{"id":"2c99a3c3-5811-4d49-b398-84cb3d5fb500","name":"Search Google Scholar","type":"n8n-nodes-serpapi.serpApiTool","position":[300,840],"parameters":{},"typeVersion":1},{"id":"3c7e9fd2-5ce2-4c9f-9116-add52fc6a36c","name":"Search Google","type":"n8n-nodes-serpapi.serpApiTool","position":[-800,580],"parameters":{},"typeVersion":1},{"id":"6b9aa973-80ea-4ff0-a9ce-d80984061536","name":"Search Google Shopping","type":"n8n-nodes-serpapi.serpApiTool","position":[300,360],"parameters":{},"typeVersion":1},{"id":"6b4a488f-ce64-417b-b838-41c356b78227","name":"Search Google Trends","type":"n8n-nodes-serpapi.serpApiTool","position":[-140,580],"parameters":{},"typeVersion":1},{"id":"28aa8406-f36f-42ac-94c2-44c5fbaa34fc","name":"Search Google Videos","type":"n8n-nodes-serpapi.serpApiTool","position":[80,580],"parameters":{},"typeVersion":1},{"id":"18abcacc-0791-4845-8f8e-3a44bc703629","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-940,340],"parameters":{"content":""},"typeVersion":1}],"pinData":{},"connections":{"Search Bing":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search eBay":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Baidu":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search DuckDuckGo":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Bing Images":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Jobs":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Lens":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Maps":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google News":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Local":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Images":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Trends":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Videos":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Flights":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Product":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Scholar":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Shopping":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Autocomplete":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Maps Reviews":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Maps Directions":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]}}}


name: Expose Zoom Meeting Operations to AI Agents via MCP Server
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-19T21:19:40.395Z
updated_at: 2025-06-19T21:19:40.395Z
url: https://n8n.io/workflows/5056
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Zoom Tool MCP Server

  Complete MCP server exposing all Zoom Tool operations to AI agents. Zero configuration needed - all 5 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Zoom Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Zoom Tool tool with full error handling

  📋 Available Operations (5 total)

  Every possible Zoom Tool operation is included:

  🔧 Meeting (5 operations)

  • Create a meeting
  • Delete a meeting
  • Get a meeting
  • Get many meetings
  • Update a meeting

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Zoom Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Zoom Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"meta":{"instanceId":"cd59eaaeb7b34d06e24511380db94cdb7fbce6037cc4de22e539c5158ab9cdfc"},"nodes":[{"id":"2dd5f113-2e0a-42b1-91de-35a1e66bd04b","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,-100],"parameters":{"content":""},"typeVersion":1},{"id":"204f1d23-c33e-4775-add2-ff249a3a1f20","name":"Zoom Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-440,-100],"webhookId":"5aa7e79a-4408-45b8-a9b6-39da01bc3f19","parameters":{},"typeVersion":1},{"id":"e10938ff-cc22-4883-a86d-4bfc33905eda","name":"Create a meeting","type":"n8n-nodes-base.zoomTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"a267e448-0124-4938-9564-9d200ff9b512","name":"Delete a meeting","type":"n8n-nodes-base.zoomTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"8de20282-bd8d-4909-9717-5f980bea8a42","name":"Get a meeting","type":"n8n-nodes-base.zoomTool","position":[-360,140],"parameters":{},"typeVersion":1},{"id":"4b56d2eb-8818-4ba5-a8ff-4fb9cc01c4f5","name":"Get many meetings","type":"n8n-nodes-base.zoomTool","position":[-140,140],"parameters":{},"typeVersion":1},{"id":"a7097408-57f5-4a9c-b8fe-1b9b32ce4c08","name":"Update a meeting","type":"n8n-nodes-base.zoomTool","position":[80,140],"parameters":{},"typeVersion":1},{"id":"beb0238a-2441-443f-ab29-ff1fb7790f44","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1}],"pinData":{},"connections":{"Get a meeting":{"ai_tool":[[{"node":"Zoom Tool MCP Server","type":"ai_tool","index":0}]]},"Create a meeting":{"ai_tool":[[{"node":"Zoom Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a meeting":{"ai_tool":[[{"node":"Zoom Tool MCP Server","type":"ai_tool","index":0}]]},"Update a meeting":{"ai_tool":[[{"node":"Zoom Tool MCP Server","type":"ai_tool","index":0}]]},"Get many meetings":{"ai_tool":[[{"node":"Zoom Tool MCP Server","type":"ai_tool","index":0}]]}}}


name: Complete Zendesk API Integration with MCP Server for AI Agents
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-19T21:32:13.024Z
updated_at: 2025-06-19T21:32:13.024Z
url: https://n8n.io/workflows/5057
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Zendesk Tool MCP Server

  Complete MCP server exposing all Zendesk Tool operations to AI agents. Zero configuration needed - all 23 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Zendesk Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Zendesk Tool tool with full error handling

  📋 Available Operations (23 total)

  Every possible Zendesk Tool operation is included:

  🔧 Ticket (6 operations)

  • Create a ticket
  • Delete a ticket
  • Get a ticket
  • Get many tickets
  • Recover a ticket
  • Update a ticket

  🔧 Ticketfield (2 operations)

  • Get a ticket field
  • Get many ticket fields

  👤 User (8 operations)

  • Create a user
  • Delete a user
  • Get a user
  • Get many users
  • Get a user's organizations
  • Get data related to a user
  • Search a user
  • Update a user

  🏢 Organization (7 operations)

  • Count organizations
  • Create an organization
  • Delete an organization
  • Get an organization
  • Get many organizations
  • Get data related to an organization
  • Update an organization

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Zendesk Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Zendesk Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"meta":{"instanceId":"cd59eaaeb7b34d06e24511380db94cdb7fbce6037cc4de22e539c5158ab9cdfc"},"nodes":[{"id":"8599811c-a16f-4cdf-b6c8-7e35235a5e23","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1480,80],"parameters":{"content":""},"typeVersion":1},{"id":"5ad3932d-e944-4c85-aee3-09b52de98bd0","name":"Zendesk Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-420,-240],"webhookId":"fb9903bd-25df-4dd1-8c4b-6e803cb5773b","parameters":{},"typeVersion":1},{"id":"cdffa7c7-32ea-478d-99c0-e1e076d5fb8a","name":"Create a ticket","type":"n8n-nodes-base.zendeskTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"debcfdd4-6a47-4c28-8863-d558000787b0","name":"Delete a ticket","type":"n8n-nodes-base.zendeskTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"a2911fad-f382-4def-abea-fc7f3ac6d1b6","name":"Get a ticket","type":"n8n-nodes-base.zendeskTool","position":[-360,140],"parameters":{},"typeVersion":1},{"id":"99befa30-3ed6-4b5f-a30a-55625d64cf54","name":"Get many tickets","type":"n8n-nodes-base.zendeskTool","position":[-140,140],"parameters":{},"typeVersion":1},{"id":"b2e0e242-3b0d-4462-99b8-7c6f7ae09d69","name":"Recover a ticket","type":"n8n-nodes-base.zendeskTool","position":[80,140],"parameters":{},"typeVersion":1},{"id":"ff2539fb-4f90-4f44-85f7-0fc2f265cd24","name":"Update a ticket","type":"n8n-nodes-base.zendeskTool","position":[300,140],"parameters":{},"typeVersion":1},{"id":"8f048137-705d-442a-91f1-0fb96c7cf853","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1},{"id":"d5bc6d8b-7589-4d3c-9999-791a2fb7249a","name":"Get a ticket field","type":"n8n-nodes-base.zendeskTool","position":[-800,380],"parameters":{},"typeVersion":1},{"id":"d8d9b926-fe3d-4a6a-a9dc-3849252bb31a","name":"Get many ticket fields","type":"n8n-nodes-base.zendeskTool","position":[-580,380],"parameters":{},"typeVersion":1},{"id":"a3e0cadc-a383-4f99-b8ae-e166ee878240","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"content":""},"typeVersion":1},{"id":"2c6f643a-28bd-42b4-81f8-61f5380d8034","name":"Create a user","type":"n8n-nodes-base.zendeskTool","position":[-800,620],"parameters":{},"typeVersion":1},{"id":"a897678e-d78a-4cc0-9219-e69d628119aa","name":"Delete a user","type":"n8n-nodes-base.zendeskTool","position":[-580,620],"parameters":{},"typeVersion":1},{"id":"e338fe10-9aa7-4809-af3a-6c5bff310037","name":"Get a user","type":"n8n-nodes-base.zendeskTool","position":[-360,620],"parameters":{},"typeVersion":1},{"id":"e701096e-b360-45d5-bf18-ca656207ac9b","name":"Get many users","type":"n8n-nodes-base.zendeskTool","position":[-140,620],"parameters":{},"typeVersion":1},{"id":"2f853cd4-a9bc-4a71-bfb8-14547a413a02","name":"Get a user's organizations","type":"n8n-nodes-base.zendeskTool","position":[80,620],"parameters":{},"typeVersion":1},{"id":"d245f3e2-3fb6-42be-8c69-168c4aedb22e","name":"Get data related to a user","type":"n8n-nodes-base.zendeskTool","position":[300,620],"parameters":{},"typeVersion":1},{"id":"f16a5885-3be8-4965-bb7c-73bb5514c239","name":"Search a user","type":"n8n-nodes-base.zendeskTool","position":[520,620],"parameters":{},"typeVersion":1},{"id":"e9552090-b05e-4c15-96e7-bf57d14d8559","name":"Update a user","type":"n8n-nodes-base.zendeskTool","position":[740,620],"parameters":{},"typeVersion":1},{"id":"8f0c2ba1-1775-42a6-8cbf-3986bbcbb517","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"content":""},"typeVersion":1},{"id":"24c59f46-d57a-4ab0-bb07-e18e562860d2","name":"Count organizations","type":"n8n-nodes-base.zendeskTool","position":[-800,860],"parameters":{},"typeVersion":1},{"id":"6079a472-292b-414f-95f3-0358f807efb4","name":"Create an organization","type":"n8n-nodes-base.zendeskTool","position":[-580,860],"parameters":{},"typeVersion":1},{"id":"a70f34e8-735e-472e-aa8e-fb581ad74aa1","name":"Delete an organization","type":"n8n-nodes-base.zendeskTool","position":[-360,860],"parameters":{},"typeVersion":1},{"id":"f20cabf4-10f9-4d03-a78e-7ae0013e47f1","name":"Get an organization","type":"n8n-nodes-base.zendeskTool","position":[-140,860],"parameters":{},"typeVersion":1},{"id":"92f68cbd-6149-476f-9c78-b6c1d68249aa","name":"Get many organizations","type":"n8n-nodes-base.zendeskTool","position":[80,860],"parameters":{},"typeVersion":1},{"id":"4e4a8e5b-8ff9-4f67-8b83-00f506e9a211","name":"Get data related to an organization","type":"n8n-nodes-base.zendeskTool","position":[300,860],"parameters":{},"typeVersion":1},{"id":"0b762964-5132-466b-8299-2fc6629972a4","name":"Update an organization","type":"n8n-nodes-base.zendeskTool","position":[520,860],"parameters":{},"typeVersion":1},{"id":"fd907297-71a8-476a-ae6e-d79bd0474cba","name":"Sticky Note 4","type":"n8n-nodes-base.stickyNote","position":[-1000,840],"parameters":{"content":""},"typeVersion":1}],"pinData":{},"connections":{"Get a user":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get a ticket":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Create a user":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a user":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Search a user":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Update a user":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get many users":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Create a ticket":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Delete a ticket":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Update a ticket":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get many tickets":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Recover a ticket":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get a ticket field":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Count organizations":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get an organization":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Create an organization":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Delete an organization":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get many organizations":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get many ticket fields":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Update an organization":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get a user's organizations":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get data related to a user":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]},"Get data related to an organization":{"ai_tool":[[{"node":"Zendesk Tool MCP Server","type":"ai_tool","index":0}]]}}}


name: Close Tickets Faster 🛠️ Zammad Tool MCP Server 💪 all 20 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-19T21:36:44.070Z
updated_at: 2025-06-19T21:36:44.070Z
url: https://n8n.io/workflows/5058
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Zammad Tool MCP Server

  Complete MCP server exposing all Zammad Tool operations to AI agents. Zero configuration needed - all 20 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Zammad Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Zammad Tool tool with full error handling

  📋 Available Operations (20 total)

  Every possible Zammad Tool operation is included:

  🔧 Group (5 operations)

  • Create a group
  • Delete a group
  • Get a group
  • Get many groups
  • Update a group

  🏢 Organization (5 operations)

  • Create an organization
  • Delete an organization
  • Get an organization
  • Get many organizations
  • Update an organization

  🔧 Ticket (4 operations)

  • Create a ticket
  • Delete a ticket
  • Get a ticket
  • Get many tickets

  👤 User (6 operations)

  • Create a user
  • Delete a user
  • Get a user
  • Get many users
  • Get currently logged-in user
  • Update a user

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Zammad Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Zammad Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"meta":{"instanceId":"cd59eaaeb7b34d06e24511380db94cdb7fbce6037cc4de22e539c5158ab9cdfc","templateCredsSetupCompleted":true},"nodes":[{"id":"8591fe9f-7dfb-4ec3-91bc-bb845e16f3e6","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1420,120],"parameters":{"content":""},"typeVersion":1},{"id":"5b94cc9c-99e1-48c9-9677-4eba0e08bb12","name":"SerpApi Official Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-400,100],"webhookId":"132f4f9a-6bb9-467a-8b2a-69a6df2c1506","parameters":{},"typeVersion":1},{"id":"694f0168-63b4-4f19-b4eb-edd91404c0d0","name":"Search Baidu","type":"n8n-nodes-serpapi.serpApiTool","position":[-800,360],"parameters":{},"typeVersion":1},{"id":"993f1d9e-a387-4d26-aba1-18b874e2b9b9","name":"Search Bing Images","type":"n8n-nodes-serpapi.serpApiTool","position":[-580,360],"parameters":{},"typeVersion":1},{"id":"2153dd91-c0d5-4124-a21d-b213fe805fd2","name":"Search Bing","type":"n8n-nodes-serpapi.serpApiTool","position":[-360,360],"parameters":{},"typeVersion":1},{"id":"ec4286e9-1f56-49d4-8c09-ff94387ad956","name":"Search DuckDuckGo","type":"n8n-nodes-serpapi.serpApiTool","position":[-140,360],"parameters":{},"typeVersion":1},{"id":"b7878c19-6c37-4ac9-a15f-d97c56577cd3","name":"Search eBay","type":"n8n-nodes-serpapi.serpApiTool","position":[60,360],"parameters":{},"typeVersion":1},{"id":"5517a3e8-81a8-4273-9300-70fdc0c7b531","name":"Search Google Autocomplete","type":"n8n-nodes-serpapi.serpApiTool","position":[-580,580],"parameters":{},"typeVersion":1},{"id":"bdc88baf-c233-461b-96ce-7e0d62e07f16","name":"Search Google Flights","type":"n8n-nodes-serpapi.serpApiTool","position":[520,840],"parameters":{},"typeVersion":1},{"id":"e49a3041-ab46-41be-8dab-ebfecba91e3a","name":"Search Google Images","type":"n8n-nodes-serpapi.serpApiTool","position":[520,580],"parameters":{},"typeVersion":1},{"id":"8b917530-d19c-4d92-bbd0-e18700893fe9","name":"Search Google Jobs","type":"n8n-nodes-serpapi.serpApiTool","position":[520,360],"parameters":{},"typeVersion":1},{"id":"60035b5f-555c-4138-bc55-be388dc8224d","name":"Search Google Lens","type":"n8n-nodes-serpapi.serpApiTool","position":[-360,580],"parameters":{},"typeVersion":1},{"id":"3ff124df-8f28-4948-9884-655c9938d4f5","name":"Search Google Local","type":"n8n-nodes-serpapi.serpApiTool","position":[-800,840],"parameters":{},"typeVersion":1},{"id":"4d27f2c8-e60e-4c99-b1ff-8a4e6f94f930","name":"Search Google Maps","type":"n8n-nodes-serpapi.serpApiTool","position":[-580,840],"parameters":{},"typeVersion":1},{"id":"fc281433-ee37-4525-baa0-0cbd3cb629ba","name":"Search Google Maps Directions","type":"n8n-nodes-serpapi.serpApiTool","position":[-360,840],"parameters":{},"typeVersion":1},{"id":"d8105146-c558-4368-bb80-344160f30b07","name":"Search Google Maps Reviews","type":"n8n-nodes-serpapi.serpApiTool","position":[-140,840],"parameters":{},"typeVersion":1},{"id":"b0f729ff-fe1f-4169-915d-5bda23b4d888","name":"Search Google News","type":"n8n-nodes-serpapi.serpApiTool","position":[100,840],"parameters":{},"typeVersion":1},{"id":"91d83d65-cb4c-4b50-b540-4cb87cd11296","name":"Search Google Product","type":"n8n-nodes-serpapi.serpApiTool","position":[300,580],"parameters":{},"typeVersion":1},{"id":"2c99a3c3-5811-4d49-b398-84cb3d5fb500","name":"Search Google Scholar","type":"n8n-nodes-serpapi.serpApiTool","position":[300,840],"parameters":{},"typeVersion":1},{"id":"3c7e9fd2-5ce2-4c9f-9116-add52fc6a36c","name":"Search Google","type":"n8n-nodes-serpapi.serpApiTool","position":[-800,580],"parameters":{},"typeVersion":1},{"id":"6b9aa973-80ea-4ff0-a9ce-d80984061536","name":"Search Google Shopping","type":"n8n-nodes-serpapi.serpApiTool","position":[300,360],"parameters":{},"typeVersion":1},{"id":"6b4a488f-ce64-417b-b838-41c356b78227","name":"Search Google Trends","type":"n8n-nodes-serpapi.serpApiTool","position":[-140,580],"parameters":{},"typeVersion":1},{"id":"28aa8406-f36f-42ac-94c2-44c5fbaa34fc","name":"Search Google Videos","type":"n8n-nodes-serpapi.serpApiTool","position":[80,580],"parameters":{},"typeVersion":1},{"id":"18abcacc-0791-4845-8f8e-3a44bc703629","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-940,340],"parameters":{"content":""},"typeVersion":1}],"pinData":{},"connections":{"Search Bing":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search eBay":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Baidu":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search DuckDuckGo":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Bing Images":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Jobs":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Lens":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Maps":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google News":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Local":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Images":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Trends":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Videos":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Flights":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Product":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Scholar":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Shopping":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Autocomplete":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Maps Reviews":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]},"Search Google Maps Directions":{"ai_tool":[[{"node":"SerpApi Official Tool MCP Server","type":"ai_tool","index":0}]]}}}


name: Get stats, shorten URLs 🛠️ Yourls Tool MCP Server 💪 all 3 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-19T21:38:58.244Z
updated_at: 2025-06-19T21:38:58.244Z
url: https://n8n.io/workflows/5059
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Yourls Tool MCP Server

  Complete MCP server exposing all Yourls Tool operations to AI agents. Zero configuration needed - all 3 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Yourls Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Yourls Tool tool with full error handling

  📋 Available Operations (3 total)

  Every possible Yourls Tool operation is included:

  🔧 Url (3 operations)

  • Expand a URL
  • Shorten a URL
  • Get stats for a URL

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Yourls Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Yourls Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"meta":{"instanceId":"cd59eaaeb7b34d06e24511380db94cdb7fbce6037cc4de22e539c5158ab9cdfc"},"nodes":[{"id":"67cab801-1959-48b2-aab3-f4d91a95d065","name":"Workflow Overview","type":"n8n-nodes-base.stickyNote","position":[-1460,-100],"parameters":{"content":""},"typeVersion":1},{"id":"6dbb0524-dfba-4388-b12b-05718ae80ec4","name":"Yourls Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-860,-80],"webhookId":"4f094d4c-3a44-46f4-9c5a-5975fd8f04a2","parameters":{},"typeVersion":1},{"id":"fcb9f196-13c1-4d21-946f-e05ac2f04f4f","name":"Expand a URL","type":"n8n-nodes-base.yourlsTool","position":[-800,140],"parameters":{},"typeVersion":1},{"id":"0b0fa272-780f-4d1a-a900-a1dbc911994f","name":"Shorten a URL","type":"n8n-nodes-base.yourlsTool","position":[-580,140],"parameters":{},"typeVersion":1},{"id":"0007277a-c1fa-4f6e-aea0-1982b4552d20","name":"Get stats for a URL","type":"n8n-nodes-base.yourlsTool","position":[-360,140],"parameters":{},"typeVersion":1},{"id":"cbdc5018-c3e6-49db-9d60-500ee808a900","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"content":""},"typeVersion":1}],"pinData":{},"connections":{"Expand a URL":{"ai_tool":[[{"node":"Yourls Tool MCP Server","type":"ai_tool","index":0}]]},"Shorten a URL":{"ai_tool":[[{"node":"Yourls Tool MCP Server","type":"ai_tool","index":0}]]},"Get stats for a URL":{"ai_tool":[[{"node":"Yourls Tool MCP Server","type":"ai_tool","index":0}]]}}}


name: Create, Update Posts 🛠️ Wordpress Tool MCP Server 💪 all 12 operations
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-19T21:44:37.776Z
updated_at: 2025-06-19T21:44:37.776Z
url: https://n8n.io/workflows/5060
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Wordpress Tool MCP Server

  Complete MCP server exposing all Wordpress Tool operations to AI agents. Zero configuration needed - all 12 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Wordpress Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Wordpress Tool tool with full error handling

  📋 Available Operations (12 total)

  Every possible Wordpress Tool operation is included:

  🔧 Post (4 operations)

  • Create a post
  • Get a post
  • Get many posts
  • Update a post

  🔧 Page (4 operations)

  • Create a page
  • Get a page
  • Get many pages
  • Update a page

  👤 User (4 operations)

  • Create a user
  • Get a user
  • Get many users
  • Update a user

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Wordpress Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Wordpress Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"meta":{"instanceId":"cd59eaaeb7b34d06e24511380db94cdb7fbce6037cc4de22e539c5158ab9cdfc"},"nodes":[{"id":"005460f3-40d0-4bd4-990c-a87e8a838b86","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,-60],"parameters":{"width":420,"height":820,"content":"## 🛠️ Wordpress Tool MCP Server\n\n### 📋 Available Operations (12 total)\n\n**Post**: create, get, get all, update\n**Page**: create, get, get all, update\n**User**: create, get, get all, update\n\n### ⚙️ Setup Instructions\n\n1. **Import Workflow**: Load this workflow into your n8n instance\n\n1. **🔑 Add Credentials**: Configure Wordpress Tool authentication in one tool node then open and close all others.\n2. **🚀 Activate**: Enable this workflow to start your MCP server\n3. **🔗 Get URL**: Copy webhook URL from MCP trigger (right side)\n4. **🤖 Connect**: Use MCP URL in your AI agent configurations\n\n### ✨ Ready-to-Use Features\n\n• Zero configuration - all 12 operations pre-built\n• AI agents automatically populate parameters via `$fromAI()` expressions\n• Every resource and operation combination available\n• Native n8n error handling and response formatting\n• Modify parameter defaults in any tool node as needed\n\n### 💬 Need Help?\nCheck the [n8n documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolmcp/) or ping me on [discord](https://discord.me/cfomodz) for MCP integration guidance or customizations."},"typeVersion":1},{"id":"f47eb565-a24a-49b4-9191-67d57de433c1","name":"Wordpress Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-400,-60],"webhookId":"2f45ae61-1f77-4cfc-ac20-0f3abe3fa8e3","parameters":{"path":"wordpress-tool-mcp"},"typeVersion":1},{"id":"dd8e9f89-5ae2-4a80-a661-226afc73e7c4","name":"Create a post","type":"n8n-nodes-base.wordpressTool","position":[-800,140],"parameters":{"title":"={{ $fromAI('Title', ``, 'string') }}","additionalFields":{}},"credentials":{},"typeVersion":1},{"id":"f914bd64-5f64-4bb2-b2dc-a0a67f970aca","name":"Get a post","type":"n8n-nodes-base.wordpressTool","position":[-580,140],"parameters":{"postId":"={{ $fromAI('Post_Id', ``, 'string') }}","options":{},"operation":"get"},"credentials":{},"typeVersion":1},{"id":"13cbe143-1d72-4e20-828d-ef3e15b8bf1a","name":"Get many posts","type":"n8n-nodes-base.wordpressTool","position":[-360,140],"parameters":{"limit":"={{ $fromAI('Limit', ``, 'number') }}","options":{},"operation":"getAll","returnAll":"={{ $fromAI('Return_All', ``, 'boolean') }}"},"credentials":{},"typeVersion":1},{"id":"68a51089-0551-4929-a120-50612a3bdb42","name":"Update a post","type":"n8n-nodes-base.wordpressTool","position":[-140,140],"parameters":{"postId":"={{ $fromAI('Post_Id', ``, 'string') }}","operation":"update","updateFields":{}},"credentials":{},"typeVersion":1},{"id":"64caeaaf-89b8-411a-8ae6-e13dffa1dca7","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"color":4,"width":1060,"content":"## Post"},"typeVersion":1},{"id":"94ef8b8a-ebaa-4588-8cc7-91018ff8b707","name":"Create a page","type":"n8n-nodes-base.wordpressTool","position":[-800,380],"parameters":{"title":"={{ $fromAI('Title', ``, 'string') }}","resource":"page","additionalFields":{}},"credentials":{},"typeVersion":1},{"id":"9891db2b-4349-48b4-bd38-da5d90a81110","name":"Get a page","type":"n8n-nodes-base.wordpressTool","position":[-580,380],"parameters":{"pageId":"={{ $fromAI('Page_Id', ``, 'string') }}","options":{},"resource":"page","operation":"get"},"credentials":{},"typeVersion":1},{"id":"5d023e5f-4abd-4bec-b040-cf30803ba3e3","name":"Get many pages","type":"n8n-nodes-base.wordpressTool","position":[-360,380],"parameters":{"limit":"={{ $fromAI('Limit', ``, 'number') }}","options":{},"resource":"page","operation":"getAll","returnAll":"={{ $fromAI('Return_All', ``, 'boolean') }}"},"credentials":{},"typeVersion":1},{"id":"a359be80-b02b-4641-9e7c-e4ccb8ea8ada","name":"Update a page","type":"n8n-nodes-base.wordpressTool","position":[-140,380],"parameters":{"pageId":"={{ $fromAI('Page_Id', ``, 'string') }}","resource":"page","operation":"update","updateFields":{}},"credentials":{},"typeVersion":1},{"id":"e56871a7-ec63-4d81-87da-01f9e6a90693","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"color":5,"width":1060,"content":"## Page"},"typeVersion":1},{"id":"de2c7b94-b369-496c-8fc6-80bb6addee88","name":"Create a user","type":"n8n-nodes-base.wordpressTool","position":[-800,620],"parameters":{"name":"={{ $fromAI('Name', ``, 'string') }}","email":"={{ $fromAI('Email', ``, 'string') }}","lastName":"={{ $fromAI('Last_Name', ``, 'string') }}","password":"={{ $fromAI('Password', ``, 'string') }}","resource":"user","username":"={{ $fromAI('Username', ``, 'string') }}","firstName":"={{ $fromAI('First_Name', ``, 'string') }}","additionalFields":{}},"credentials":{},"typeVersion":1},{"id":"65fd53ab-1335-4bd8-87de-e17c52755ed0","name":"Get a user","type":"n8n-nodes-base.wordpressTool","position":[-580,620],"parameters":{"userId":"={{ $fromAI('User_Id', ``, 'string') }}","options":{},"resource":"user","operation":"get"},"credentials":{},"typeVersion":1},{"id":"a4656dba-97ae-4b40-b412-f85c7efdb866","name":"Get many users","type":"n8n-nodes-base.wordpressTool","position":[-360,620],"parameters":{"limit":"={{ $fromAI('Limit', ``, 'number') }}","options":{},"resource":"user","operation":"getAll","returnAll":"={{ $fromAI('Return_All', ``, 'boolean') }}"},"credentials":{},"typeVersion":1},{"id":"e147534f-b433-42a5-8fb1-f0e8bb2fb8e7","name":"Update a user","type":"n8n-nodes-base.wordpressTool","position":[-140,620],"parameters":{"userId":"={{ $fromAI('User_Id', ``, 'string') }}","resource":"user","operation":"update","updateFields":{}},"credentials":{},"typeVersion":1},{"id":"a6abf660-7b15-430f-b742-2f04d6627813","name":"Sticky Note 3","type":"n8n-nodes-base.stickyNote","position":[-1000,600],"parameters":{"color":6,"width":1060,"content":"## User"},"typeVersion":1}],"pinData":{},"connections":{"Get a page":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Get a post":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Get a user":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Create a page":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Create a post":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Create a user":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Update a page":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Update a post":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Update a user":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Get many pages":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Get many posts":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]},"Get many users":{"ai_tool":[[{"node":"Wordpress Tool MCP Server","type":"ai_tool","index":0}]]}}}


name: Benchmark LLM Performance on Legal Documents with Google Sheets and OpenRouter
author_name: Adam Janes
author_username: adamjanes
categories: []
created_at: 2025-06-20T01:24:04.318Z
updated_at: 2025-06-20T01:24:04.318Z
url: https://n8n.io/workflows/5066
scraped_at: 2025-07-06 21:16:30
description:
  This workflow demonstrates a simple way to run evals on a set of test cases stored in a Google Sheet.

  The example we are using comes from an info extraction task dataset, where we tested 6 different LLMs on 18 different test cases.

  This workflow extends the functionality of my simple eval for benchmarking legal tasks here.

  Rather than running executions sequentially (waiting for each one to respond before making another request), we use parallel processing to fire 2 requests every second.

  You can see our sample data in this spreadsheet here to get started.

  Once you have this working for our dataset, you can plug in your own test cases matching different LLMs to see how it works with your own data.

  How it works
  Pull our test cases from Google Sheets.
  For each case, fire off an HTTP request to a webhook.
  That webhook grabs the relevant source file from Google Drive and converts it to text.
  The text gets sent to an LLM via Open Router (so we can easily swap out models).
  Results come back and are logged in Google Sheets.

  Set up steps:
  Add your credentials for Google Sheets, Google Drive, and OpenRouter.
  Make a copy of the original data spreadsheet so that you can edit it yourself. You will need to plug your version in the Update Results node to see the spreadsheet update on each run of the loop.

nodes_used:
  ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","n8n-nodes-base.googleDrive","@n8n/n8n-nodes-langchain.chainLlm","@n8n/n8n-nodes-langchain.outputParserStructured","@n8n/n8n-nodes-langchain.lmChatOpenRouter"]

workflow_json:
  {"meta":{"instanceId":"45e293393b5dd8437fb351e5b1ef5511ef67e6e0826a1c10b9b68be850b67593"},"nodes":[{"id":"17f30fc7-7b73-4588-8d10-27b1a98ea795","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[-180,260],"parameters":{},"typeVersion":1},{"id":"ca19d73c-7c73-4e3d-96cd-842fc0e4f014","name":"Webhook","type":"n8n-nodes-base.webhook","position":[580,500],"webhookId":"1cbce320-d28e-4e97-8663-bf2c6a36a358","parameters":{"path":"1cbce320-d28e-4e97-8663-bf2c6a36a358","options":{},"httpMethod":"POST","responseData":"allEntries","responseMode":"lastNode"},"typeVersion":2},{"id":"99b69f4c-e429-40f8-8a22-8ed5fc3c4daa","name":"Merge1","type":"n8n-nodes-base.merge","position":[2180,420],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.1},{"id":"29d94760-0dd8-4c28-b31e-a499962b14df","name":"Get Tests","type":"n8n-nodes-base.googleSheets","position":[-20,260],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/10l_gMtPsge00eTTltGrgvAo54qhh3_twEDsETrQLAGU/edit#gid=0","cachedResultName":"Tests"},"documentId":{"__rl":true,"mode":"list","value":"10l_gMtPsge00eTTltGrgvAo54qhh3_twEDsETrQLAGU","cachedResultUrl":"https://docs.google.com/spreadsheets/d/10l_gMtPsge00eTTltGrgvAo54qhh3_twEDsETrQLAGU/edit?usp=drivesdk","cachedResultName":"Info Extraction Tasks (LLM Judge)"}},"credentials":{"googleSheetsOAuth2Api":{"id":"04iXS2lwUVyzn6F2","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"0853cbfc-f7fc-4097-88f1-1d08504d93d0","name":"Is PDF?","type":"n8n-nodes-base.if","position":[140,260],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"1609d1f6-2142-4965-8d6b-01cfa53251c4","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $json['Relevant Source Reference'] }}","rightValue":".pdf"},{"id":"6b767c0f-071c-4663-a0c5-b4278b413650","operator":{"type":"number","operation":"gt"},"leftValue":"={{ $json.row_number }}","rightValue":0}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"dd3eacbb-d93d-4e2d-83ce-7853e16ab00b","name":"Structured Output Parser2","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[1800,520],"parameters":{"jsonSchemaExample":"{\n  \"reasoning\": \"The Assistant fabricated a $1 million figure and a 12-month provision that are not found in the source. This breaches factual correctness and completeness. The output would mislead business stakeholders if used without correction.\",\n  \"decision\": \"Fail\"\n}"},"typeVersion":1.2},{"id":"ccaf5c92-d95a-4cff-aa19-1f7bd7f1aa0c","name":"Basic LLM Chain1","type":"@n8n/n8n-nodes-langchain.chainLlm","onError":"continueErrorOutput","position":[1640,340],"parameters":{"text":"=INPUT:\n\n{\n  \"task\": {{ $('Save Input/Output').item.json['Input '] }},\n  \"source\": {{ $json.text }},\n  \"output\": {{ $('Save Input/Output').item.json['Output '] }}\n}\n\nOUTPUT:","messages":{"messageValues":[{"message":"=You are an evaluator of LLMs in the legal domain.\n\nYou will be given:\n\n- *Source Material*: the underlying document(s) that the AI Assistant was supposed to review.\n- *AI Assistant Output*: the answer generated by the AI Assistant in response to a legal task.\n\nYou must carefully review the source material to determine whether the AI Assistant’s output is accurate, relevant, and complete.\n\n---\n\n## Accuracy Standard\n\nThe AI Assistant’s response must satisfy *all three* of the following requirements:\n\n1. *Factual Correctness*  \nThe response must accurately reflect the information in the source material.  \nNo hallucinated, fabricated, or incorrect information is allowed.  \nIf the answer is missing from the source material, the Assistant must acknowledge this. Inventing information = Fail.\n\n2. *Relevance to the Query*  \nThe response must directly answer the specific question asked, without introducing unrelated or off-topic information.\n\n3. *Completeness*  \nThe response must contain enough information to fully answer the question based on the source material.  \nOmitting critical points that are needed to address the query = Fail.\n\n*Key Rule:*  \n- If the output *materially fails any one* of the three requirements, the overall result must be marked *Fail*.\n- Minor phrasing or style issues that do not affect the meaning are acceptable.\n\n---\n\n## Common Failure Patterns to Watch For\n\nBe alert to the following known AI weaknesses:\n\n- Incomplete responses when the task is broad or vague.\n- Fabricated answers when the information is missing from the source.\n- Failure to correctly process or cross-reference multiple documents.\n- Reinforcing incorrect assumptions made in the question without verifying them.\n- Technical failures (e.g., missing pages, unreadable scans) that affect the output.\n- Ignoring contradictory information in the source.\n\nIf any of these issues occur and affect the substantive quality of the response, the correct result is *Fail*.\n\n---\n\n## How to Structure Your Evaluation\n\n*Reasoning:*  \nBriefly explain why you reached this decision.  \nReference the source material where necessary.  \nState clearly whether the AI Assistant’s output was factually correct, relevant, and complete.\n\n*Final Decision:* Pass or Fail\n\nThe output that you give should be given in a JSON format, with keys of \"reasoning\" and \"decision\" as shown in the examples below. Return your answer as a raw JSON object under a top-level key called \"output\" — no markdown, no extra text.\n\n---\n\n## Example 1\n\nINPUT:\n\n{\n  \"task\": \"Extract the liability cap and time-based provisions from a limitation of liability clause.\",\n  \"source\": \"- The liability cap figure is redacted.\\n- There is no 12-month time limit mentioned.\",\n  \"output\": \"The liability cap is $1 million with a 12-month limit.\"\n}\n\nOUTPUT:\n\n{\n  \"output\": {\n    \"reasoning\": \"The Assistant fabricated a $1 million figure and a 12-month provision that are not found in the source. This breaches factual correctness and completeness. The output would mislead business stakeholders if used without correction.\",\n    \"decision\": \"Fail\"\n  }\n}\n\n## Example 2\n\nINPUT:\n\n{\n  \"task\": \"Identify LinkedIn’s indemnity obligations under a Master Services Agreement.\",\n  \"source\": \"- LinkedIn has no indemnity obligations under the agreement.\\n- The indemnities are provided by the vendor only.\",\n  \"output\": \"LinkedIn has no indemnity obligations under this MSA.\"\n}\n\nOUTPUT:\n\n{\n  \"output\": {\n    \"reasoning\": \"The Assistant correctly identified that LinkedIn has no indemnity obligations, fully answering the query. The response is factually correct, relevant, and complete based on the source material.\",\n    \"decision\": \"Pass\"\n  }\n}"}]},"promptType":"define","hasOutputParser":true},"typeVersion":1.4},{"id":"ae455c78-78aa-4857-bfea-5aed468ce224","name":"Google Drive","type":"n8n-nodes-base.googleDrive","onError":"continueErrorOutput","position":[1220,360],"parameters":{"fileId":{"__rl":true,"mode":"id","value":"={{ $json[\"URL\"].match(/[-\\w]{25,}/)[0] }}"},"options":{},"operation":"download"},"credentials":{"googleDriveOAuth2Api":{"id":"yej6mV2w6RslwOGo","name":"Google Drive account"}},"typeVersion":3},{"id":"d33dc3e9-1f41-44e6-8a95-83c2ab735061","name":"Extract from File","type":"n8n-nodes-base.extractFromFile","position":[1420,340],"parameters":{"options":{},"operation":"pdf"},"typeVersion":1},{"id":"a1b8590f-6ec8-477d-ad8b-b4ca2ffbdd76","name":"Save Input/Output","type":"n8n-nodes-base.set","position":[940,480],"parameters":{"mode":"raw","options":{},"jsonOutput":"={{ $json.body }}"},"typeVersion":3.4},{"id":"76f8fed7-50d5-42d9-9dda-67a8d547da90","name":"Execute Subworkflow","type":"n8n-nodes-base.httpRequest","onError":"continueErrorOutput","maxTries":2,"position":[580,240],"parameters":{"url":"https://webhook-processor-production-48f8.up.railway.app/webhook/1cbce320-d28e-4e97-8663-bf2c6a36a358","method":"POST","options":{"batching":{"batch":{"batchSize":1,"batchInterval":500}}},"jsonBody":"={{ $json }}","sendBody":true,"specifyBody":"json"},"retryOnFail":false,"typeVersion":4.2},{"id":"2644c10f-9b1f-4d91-b49e-f3114b3df205","name":"OpenRouter Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[1640,520],"parameters":{"model":"openai/gpt-4.1","options":{}},"credentials":{"openRouterApi":{"id":"ipzDVYsZqbum9bX4","name":"OpenRouter account 2"}},"typeVersion":1},{"id":"2d326d74-85c9-4363-b4d6-ee0b2a8abeb3","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[520,20],"parameters":{"color":4,"height":700,"content":"## 2. Execute Subworkflow\nThis node runs immediately (batching requests), but waits for the result before moving to the next step."},"typeVersion":1},{"id":"57ee0b46-fb57-48f3-80fb-51d3e1102bdf","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-120,460],"parameters":{"width":460,"height":280,"content":"## Data format\nOur Tests Sheet contains the following columns:\n- ID: A unique identifier for each row\n- Test No.: The test that the LLM was given\n- AI Platform: The LLM that was given the test.\n- Relevant Source: The file name of the source document that was given to the LLM.\n- URL: The Google Drive URL where the file is stored.\n- Input: The input prompt that the LLM was given.\n- Output: The response that the LLM gave."},"typeVersion":1},{"id":"ddfb78af-ff3b-4c83-ac30-b2c36b217eb3","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[-40,20],"parameters":{"color":6,"width":340,"height":420,"content":"## 1. Fetch test cases\nWe start by grabbing our list of test cases stored in a Google Sheet [here](https://docs.google.com/spreadsheets/d/10l_gMtPsge00eTTltGrgvAo54qhh3_twEDsETrQLAGU/edit?usp=sharing).\n\nWe only want the rows that connect to a PDF document, as DOCX downloads will need to be handled separately."},"typeVersion":1},{"id":"9d6ee8f0-0d88-4100-bd2a-78bd4439b448","name":"Keep Original Data","type":"n8n-nodes-base.set","position":[1440,840],"parameters":{"mode":"raw","options":{},"jsonOutput":"={{ $json.body }}"},"typeVersion":3.4},{"id":"d5f9df9c-e94e-4880-89e4-2792a2757256","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[1180,20],"parameters":{"color":4,"width":360,"height":540,"content":"## 3. Grab the PDF as text\nWe download the PDF from the Google Drive link in the Google Sheet, extracting the file as text for the next step. We filter out any files that do not return data."},"typeVersion":1},{"id":"bab6b7ec-250a-407e-a1b8-c2d1a3e1afec","name":"Sticky Note12","type":"n8n-nodes-base.stickyNote","position":[840,20],"parameters":{"color":6,"width":260,"height":380,"content":"## 5. Update results\nWe create a new row in our output sheet, containing our original data together with the judge decision/reasoning."},"typeVersion":1},{"id":"7c0216ab-f5e7-4eb1-a3bd-3c71c72f1c39","name":"Limit (for testing)","type":"n8n-nodes-base.limit","disabled":true,"position":[360,240],"parameters":{"maxItems":3},"typeVersion":1},{"id":"7320f4c7-cccb-465d-a103-eb76cc51feb0","name":"Sticky Note13","type":"n8n-nodes-base.stickyNote","position":[1600,20],"parameters":{"color":4,"width":360,"height":660,"content":"## 4. Judge LLM outputs\nOur prompt judges the LLM input/output and decides if the LLM passed the test. We also ask for a reason why the judge made its decision, which we can use to refine our eval later.\n\nWe're using OpenRouter here, which lets us easily tweak which LLM we want to use.\n\nThe output parser makes sure that the output is in JSON format, making the data easy to parse in the next step."},"typeVersion":1},{"id":"b7d997a9-acf6-415d-a4d3-30a4985f53f7","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-440,240],"parameters":{"width":180,"height":200,"content":"## Start Here\nMake sure to click \"Execute Workflow\" here, rather than underneath, as that will set the webhook in listening mode."},"typeVersion":1},{"id":"de440bcf-2ff2-46fb-958d-158fecc1c451","name":"Sticky Note14","type":"n8n-nodes-base.stickyNote","position":[2120,20],"parameters":{"color":4,"width":220,"height":600,"content":"## 5. Combine data and return\nReturn the result of the subworkflow back to our HTTP request.\n\nWe are merging our pass/fail + reason together with the original data that was passed in the body of our HTTP request, so we still have access to the other data here."},"typeVersion":1},{"id":"73f53c55-3374-4759-be24-28f54b795886","name":"Update Results","type":"n8n-nodes-base.googleSheets","position":[920,220],"parameters":{"columns":{"value":{"ID":"={{ $json['ID'] }}","URL":"={{ $json['URL'] }}","Input":"={{ $json['Input'] }}","Output":"={{ $json['Output'] }}","Decision":"={{ $json.output.decision }}","Test No.":"={{ $json['Test No'][\"\"] }}","Reasoning":"={{ $json.output.reasoning }}","AI Platform":"={{ $json['AI Platform'] }}","Relevant Source Reference":"={{ $json['Relevant Source Reference'] }}"},"schema":[{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Test No.","type":"string","display":true,"removed":false,"required":false,"displayName":"Test No.","defaultMatch":false,"canBeUsedToMatch":true},{"id":"AI Platform","type":"string","display":true,"required":false,"displayName":"AI Platform","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Relevant Source Reference","type":"string","display":true,"removed":false,"required":false,"displayName":"Relevant Source Reference","defaultMatch":false,"canBeUsedToMatch":true},{"id":"URL","type":"string","display":true,"removed":false,"required":false,"displayName":"URL","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Input","type":"string","display":true,"required":false,"displayName":"Input","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Output","type":"string","display":true,"required":false,"displayName":"Output","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Decision","type":"string","display":true,"removed":false,"required":false,"displayName":"Decision","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Reasoning","type":"string","display":true,"required":false,"displayName":"Reasoning","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":537199982,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/10l_gMtPsge00eTTltGrgvAo54qhh3_twEDsETrQLAGU/edit#gid=537199982","cachedResultName":"Results"},"documentId":{"__rl":true,"mode":"list","value":"10l_gMtPsge00eTTltGrgvAo54qhh3_twEDsETrQLAGU","cachedResultUrl":"https://docs.google.com/spreadsheets/d/10l_gMtPsge00eTTltGrgvAo54qhh3_twEDsETrQLAGU/edit?usp=drivesdk","cachedResultName":"Info Extraction Tasks (LLM Judge)"}},"credentials":{"googleSheetsOAuth2Api":{"id":"04iXS2lwUVyzn6F2","name":"Google Sheets account"}},"typeVersion":4.5}],"pinData":{},"connections":{"Is PDF?":{"main":[[{"node":"Limit (for testing)","type":"main","index":0}]]},"Webhook":{"main":[[{"node":"Keep Original Data","type":"main","index":0},{"node":"Save Input/Output","type":"main","index":0}]]},"Get Tests":{"main":[[{"node":"Is PDF?","type":"main","index":0}]]},"Google Drive":{"main":[[{"node":"Extract from File","type":"main","index":0}]]},"Basic LLM Chain1":{"main":[[{"node":"Merge1","type":"main","index":0}]]},"Extract from File":{"main":[[{"node":"Basic LLM Chain1","type":"main","index":0}]]},"Save Input/Output":{"main":[[{"node":"Google Drive","type":"main","index":0}]]},"Keep Original Data":{"main":[[{"node":"Merge1","type":"main","index":1}]]},"Execute Subworkflow":{"main":[[{"node":"Update Results","type":"main","index":0}]]},"Limit (for testing)":{"main":[[{"node":"Execute Subworkflow","type":"main","index":0}]]},"OpenRouter Chat Model":{"ai_languageModel":[[{"node":"Basic LLM Chain1","type":"ai_languageModel","index":0}]]},"Structured Output Parser2":{"ai_outputParser":[[{"node":"Basic LLM Chain1","type":"ai_outputParser","index":0}]]},"When clicking ‘Test workflow’":{"main":[[{"node":"Get Tests","type":"main","index":0}]]}}}


name: Daily AI News Digest to LinkedIn Posts with OpenAI GPT and RSS Feeds
author_name: iTechNotion
author_username: itechnotion
nodes_used: ["n8n-nodes-base.gmail","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.openAi"]
categories: []
created_at: 2025-06-20T08:45:07.562Z
updated_at: 2025-06-20T08:45:07.562Z
url: https://n8n.io/workflows/5068
scraped_at: 2025-07-06 21:16:30
description:
  🔁 What This Workflow Does
  This automation fetches daily AI-related articles from trusted RSS feeds, summarizes them using OpenAI (GPT), and generates a ready-to-post LinkedIn update in your writing style. It then emails the post to you every morning for review and publishing.

  High-Level Steps:
  Triggers every morning via Cron.
  Fetches latest AI news from multiple RSS sources.
  Filters recent articles (last 24 hrs).
  Summarizes each article using OpenAI (ChatGPT).
  Generates a LinkedIn-style post using your tone.
  Sends the post to your Gmail for review.

  ⚙️ Setup Steps
  Estimated setup time: 15–30 minutes

  You’ll need:

  OpenAI API key
  Gmail account connected in n8n
  RSS feed URLs (defaults are provided)

  Add your email in the Gmail node to receive daily posts.

  Add your tone/style prompt in the ChatGPT nodes (instructions inside workflow).

workflow_json:
  {"id":"A1BpZBaWcvkOWcwa","meta":{"instanceId":"165eeeab01794b7e17149140feede9770abd551f548c8e5e659bb131cbf1c42e","templateCredsSetupCompleted":true},"name":"Linkedin Daily Post","tags":[{"id":"RvSTTevqmRPvoZLN","name":"AI Automation","createdAt":"2025-06-12T09:29:23.843Z","updatedAt":"2025-06-12T09:29:23.843Z"}],"nodes":[{"id":"f9cd99e7-e2be-4a7b-8531-f5456baa874b","name":"Daily AI News Check1","type":"n8n-nodes-base.scheduleTrigger","position":[640,540],"parameters":{"rule":{"interval":[{"field":"hours","hoursInterval":24}]}},"typeVersion":1.1},{"id":"ec5c4fce-1b9a-493c-83cf-03bfbdc53900","name":"VentureBeat AI RSS1","type":"n8n-nodes-base.rssFeedRead","position":[860,340],"parameters":{"url":"https://feeds.feedburner.com/venturebeat/SZYF","options":{}},"typeVersion":1},{"id":"685ec481-1944-4641-ba1b-4ce614300ab0","name":"TechCrunch AI RSS1","type":"n8n-nodes-base.rssFeedRead","position":[860,540],"parameters":{"url":"https://techcrunch.com/category/artificial-intelligence/feed/","options":{}},"typeVersion":1},{"id":"16c0389b-a162-43ca-8ca6-3d8177343743","name":"OpenAI Blog RSS1","type":"n8n-nodes-base.rssFeedRead","position":[860,740],"parameters":{"url":"https://openai.com/blog/rss.xml","options":{}},"typeVersion":1},{"id":"ccceb4bb-8a58-4b99-8aef-4f2cf3413ed4","name":"Filter Recent AI Articles1","type":"n8n-nodes-base.code","position":[1300,540],"parameters":{"jsCode":"// Filter articles from last 48 hours and relevant to AI\nconst now = new Date();\nconst twoDaysAgo = new Date(now.getTime() - (48 * 60 * 60 * 1000));\n\n// Create a Set to track unique articles (by title or link)\nconst uniqueArticles = new Map();\n\nitems.forEach(item => {\n  const articleDate = new Date(item.json.pubDate || item.json.date);\n  const isRecent = articleDate >= twoDaysAgo;\n  \n  const title = (item.json.title || '').toLowerCase();\n  const description = (item.json.description || '').toLowerCase();\n  \n  const aiKeywords = ['ai', 'artificial intelligence', 'machine learning', 'ml', 'neural', 'gpt', 'llm', 'chatbot', 'automation', 'deep learning', 'agentic ai'];\n  const isAIRelated = aiKeywords.some(keyword => \n    title.includes(keyword) || description.includes(keyword)\n  );\n  \n  // Only add if recent, AI-related, and not already added\n  if (isRecent && isAIRelated) {\n    const uniqueKey = item.json.link || item.json.title;\n    if (!uniqueArticles.has(uniqueKey)) {\n      uniqueArticles.set(uniqueKey, {\n        title: item.json.title,\n        description: item.json.description,\n        link: item.json.link,\n        pubDate: item.json.pubDate || item.json.date,\n        source: item.json.source || 'RSS Feed',\n        dateObj: articleDate // Keep for sorting\n      });\n    }\n  }\n});\n\n// Convert Map to array, sort by date (newest first) and limit to top 10\nconst sortedItems = Array.from(uniqueArticles.values())\n  .sort((a, b) => b.dateObj - a.dateObj)\n  .slice(0, 10);\n\n// Return formatted items without dateObj\nreturn sortedItems.map(item => ({\n  json: {\n    title: item.title,\n    description: item.description,\n    link: item.link,\n    pubDate: item.pubDate,\n    source: item.source\n  }\n}));"},"typeVersion":2},{"id":"ec596d9a-e00b-4692-8b4e-2516587fdd06","name":"Merge All Sources1","type":"n8n-nodes-base.merge","position":[1080,540],"parameters":{"mode":"combine","options":{},"combinationMode":"multiplex"},"typeVersion":2.1},{"id":"80882e61-b50d-49cc-bfc0-a9f4a5c74d0f","name":"AI News Summarizer1","type":"@n8n/n8n-nodes-langchain.openAi","position":[1960,640],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"gpt-4.1-mini","cachedResultName":"GPT-4.1-MINI"},"options":{},"messages":{"values":[{"content":"=You are an expert AI industry analyst with deep knowledge of artificial intelligence trends, breakthroughs, and market developments. Your task is to analyze multiple AI news articles and create a compelling, insightful summary for LinkedIn professionals.\n\n**Your Analysis Should:**\n- Identify the most significant and impactful AI developments from the provided articles\n- Focus on stories that will matter to business leaders, developers, and AI enthusiasts\n- Highlight breakthrough technologies, major company announcements, funding news, or industry shifts\n- Connect developments to broader AI trends and implications\n- Prioritize recency and relevance over minor updates\n\n**Content Requirements:**\n- Write 3-4 concise, punchy sentences (80-120 words total)\n- Lead with the most newsworthy development\n- Include specific company names, product names, or key figures when relevant\n- Mention concrete details (funding amounts, performance metrics, release dates) if significant\n- End with a forward-looking statement about industry impact\n- Use professional but engaging language suitable for LinkedIn\n\n**Style Guidelines:**\n- Write in active voice with strong, decisive language\n- Avoid technical jargon that would confuse general business audience\n- Use numbers and specific details to add credibility\n- Create a sense of momentum and importance\n- Don't oversell - be factual but compelling\n\n**If Multiple Major Stories Exist:**\n- Mention 2-3 key developments maximum\n- Connect them thematically if possible (e.g., \"funding surge,\" \"enterprise adoption,\" \"new capabilities\")\n- Prioritize stories with broader business implications\n\nNow analyze these AI news articles and create a summary covering the most important developments:\n\n{{ $json.articles }}\n\nFocus particularly on major funding rounds, significant product launches, and industry-changing developments from the list above."}]}},"credentials":{"openAiApi":{"id":"f7L6E1EUdFJcLPvL","name":"OpenAi account"}},"typeVersion":1.3},{"id":"2bc85161-3605-4314-8b6a-d2c69446f7f9","name":"Prepare Articles for Summary1","type":"n8n-nodes-base.code","position":[1520,540],"parameters":{"jsCode":"// Combine all articles into a single string for summarization\nconst articles = items.map(item => {\n  return `Title: ${item.json.title}\\nDescription: ${item.json.description}\\nSource: ${item.json.source}\\nDate: ${item.json.pubDate}\\nLink: ${item.json.link}\\n---`;\n}).join('\\n\\n');\n\nreturn [{\n  json: {\n    articles: articles,\n    articleCount: items.length,\n    processedAt: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"cdaedb20-4077-4a99-90fd-1dcb9b571f2d","name":"Generate LinkedIn Post1","type":"@n8n/n8n-nodes-langchain.openAi","position":[2336,640],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"gpt-4.1-mini","cachedResultName":"GPT-4.1-MINI"},"options":{},"messages":{"values":[{"content":"=You are a professional LinkedIn content creator specializing in AI and technology. Your expertise lies in transforming complex AI news into engaging, shareable posts that drive meaningful professional discussions.\n\n**Your Mission:**\nCreate a compelling LinkedIn post that will stop professionals from scrolling and encourage them to engage through likes, comments, and shares.\n\n**Content Foundation:**\n{{ $json.message.content }}\n\n**Post Requirements:**\n\n**Structure:**\n- Hook: Start with an attention-grabbing opening line or question\n- Body: 2-3 short paragraphs (2-3 sentences each)\n- Call-to-Action: End with an engaging question that invites discussion\n\n**Tone & Style:**\n- Professional yet conversational and approachable\n- Confident but not overly promotional\n- Use \"I\" or \"We\" occasionally to add personal touch\n- Mix of industry insights with accessible language\n\n**Content Elements:**\n- Lead with the most impactful development from the summary\n- Include specific numbers, company names, and concrete details\n- Connect AI developments to broader business implications\n- Add 2-3 relevant emojis (🚀 🤖 💡 🧠 ⚡ 🔥 🎯) - use sparingly and strategically\n- Keep total length 250-300 words maximum\n\n**Engagement Optimization:**\n- Use short paragraphs for mobile readability\n- Include 5-7 relevant hashtags at the end: #AI #ArtificialIntelligence #TechNews #Innovation #MachineLearning #StartupFunding #TechTrends\n- End with a thought-provoking question that encourages comments\n- Use line breaks for visual appeal\n\n**Question Examples for Ending:**\n- \"What's your take on this development?\"\n- \"How do you see this impacting your industry?\"\n- \"Which of these developments excites you most?\"\n- \"Are we moving too fast or not fast enough?\"\n- \"What challenges do you foresee with this technology?\"\n\n**Visual Format:**\nUse line breaks between paragraphs and before hashtags for better readability.\n\n**Sample Structure:**\n[Hook/Opening statement] 🚀\n\n[Key development with specifics]\n\n[Industry impact/implications]\n\n[Engaging question]\n\n#AI #TechNews #Innovation #MachineLearning #StartupFunding\n\n**Important:**\n- Make it shareable - professionals should want to repost this\n- Focus on business relevance, not just technical details\n- Create urgency around staying informed in AI\n- Avoid buzzwords and hype - be authentic and informative"}]}},"credentials":{"openAiApi":{"id":"f7L6E1EUdFJcLPvL","name":"OpenAi account"}},"typeVersion":1.3},{"id":"0fc05ed0-2436-4ca8-a7e2-c64a3cd09430","name":"Send for Review1","type":"n8n-nodes-base.gmail","position":[2712,640],"webhookId":"aebb12c8-3e28-4ac0-b92d-48fac000adb2","parameters":{"message":"={{ $json.message.content }}","options":{"appendAttribution":false},"subject":"LinkedIn AI Post Ready for Review","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"4tHgDbStdK9Sf0qM","name":"Gmail account (Avkash)"}},"typeVersion":2.1},{"id":"ed56b632-c173-4e53-9a71-5c1acc974746","name":"Check Articles Exist1","type":"n8n-nodes-base.if","position":[1740,540],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"has-articles-condition","operator":{"type":"number","operation":"gt"},"leftValue":"={{ $json.articleCount }}","rightValue":0}]}},"typeVersion":2},{"id":"e407c536-a7c9-472d-b996-e621c2fd3ca6","name":"No Articles Notification1","type":"n8n-nodes-base.gmail","position":[2038,440],"webhookId":"73b80b01-cad4-41a0-aa14-4e9321cdea4b","parameters":{"message":"No AI News Found Today","options":{},"subject":"No AI News Found Today","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"4tHgDbStdK9Sf0qM","name":"Gmail account (Avkash)"}},"typeVersion":2.1},{"id":"2627909f-3c21-48a4-9591-b97609d9f7a5","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[600,140],"parameters":{"color":4,"width":620,"height":820,"content":"## 1) Research for AI articles\n"},"typeVersion":1},{"id":"b0cdaa66-7053-42e8-a1d1-614381a52d8a","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1240,140],"parameters":{"color":5,"width":1000,"height":820,"content":"## 2) Summarise AI related articles"},"typeVersion":1},{"id":"88a3211c-4536-44f4-8ba4-c800da1031db","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[2260,140],"parameters":{"color":6,"width":760,"height":820,"content":"## 3) Generate Linkedin Post and send to email"},"typeVersion":1}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"a04da0bf-2fa1-41be-9216-bae771d23a14","connections":{"OpenAI Blog RSS1":{"main":[[{"node":"Merge All Sources1","type":"main","index":1}]]},"Merge All Sources1":{"main":[[{"node":"Filter Recent AI Articles1","type":"main","index":0}]]},"TechCrunch AI RSS1":{"main":[[{"node":"Merge All Sources1","type":"main","index":1}]]},"AI News Summarizer1":{"main":[[{"node":"Generate LinkedIn Post1","type":"main","index":0}]]},"VentureBeat AI RSS1":{"main":[[{"node":"Merge All Sources1","type":"main","index":0}]]},"Daily AI News Check1":{"main":[[{"node":"VentureBeat AI RSS1","type":"main","index":0},{"node":"TechCrunch AI RSS1","type":"main","index":0},{"node":"OpenAI Blog RSS1","type":"main","index":0}]]},"Check Articles Exist1":{"main":[[{"node":"AI News Summarizer1","type":"main","index":0}],[{"node":"No Articles Notification1","type":"main","index":0}]]},"Generate LinkedIn Post1":{"main":[[{"node":"Send for Review1","type":"main","index":0}]]},"Filter Recent AI Articles1":{"main":[[{"node":"Prepare Articles for Summary1","type":"main","index":0}]]},"Prepare Articles for Summary1":{"main":[[{"node":"Check Articles Exist1","type":"main","index":0}]]}}}


name: AI Sales Agent with Telegram Approvals & Google Sheets Sync
author_name: David Olusola
author_username: dae221
categories: []
created_at: 2025-06-20T15:52:04.394Z
updated_at: 2025-06-20T15:52:04.394Z
url: https://n8n.io/workflows/5074
scraped_at: 2025-07-06 21:16:30
description:
  A complete, ready-to-deploy Telegram chatbot template for food delivery businesses. This intelligent assistant handles orders, payments, customer service, and order tracking with human-in-the-loop payment verification.
  ✨ Key Features

  🤖 AI-Powered Conversations - Natural language order processing using Google Gemini
  📱 Telegram Integration - Seamless customer interaction via Telegram
  💳 Payment Verification - Screenshot-based payment confirmation with admin approval
  📊 Order Tracking - Automatic Google Sheets logging of all orders
  🧠 Memory Management - Contextual conversation memory for better customer experience
  🌍 Multi-Currency Support - Easily customizable for any currency (USD, EUR, GBP, etc.)
  📍 Location Flexible - Adaptable to any city/country
  🔄 Human Oversight - Manual payment approval workflow for security

  🛠️ What This Template Includes
  Core Workflow

  Customer Interaction - AI assistant takes orders via Telegram
  Order Confirmation - Summarizes order with total and payment details
  Information Collection - Gathers customer name, phone, and delivery address
  Payment Processing - Handles payment screenshots and verification
  Admin Approval - Human verification of payments before order confirmation
  Order Tracking - Automatic logging to Google Sheets with delivery estimates

  Technical Components

  AI Agent Node - Google Gemini-powered conversation handler
  Memory System - Maintains conversation context per customer
  Google Sheets Integration - Automatic order logging and tracking
  Telegram Nodes - Customer and admin communication
  Payment Verification - Screenshot detection and approval workflow
  Conditional Logic - Smart routing based on message types

  🚀 Quick Setup Guide
  Prerequisites

  n8n instance (cloud or self-hosted)
  Telegram Bot Token
  Google Sheets API access
  Google Gemini API key

  Step 1: Replace Placeholders
  Search and replace the following placeholders throughout the template:
  Business Information

  [YOUR_BUSINESS_NAME] → Your restaurant/food business name
  [ASSISTANT_NAME] → Your bot's name (e.g., "Alex", "Bella", "Chef Bot")
  [YOUR_CITY] → Your city
  [YOUR_COUNTRY] → Your country
  [YOUR_ADDRESS] → Your business address
  [YOUR_PHONE] → Your business phone number
  [YOUR_EMAIL] → Your business email
  [YOUR_HOURS] → Your operating hours (e.g., "9AM - 11PM daily")

  Currency & Localization

  [YOUR_CURRENCY] → Your currency name (e.g., "USD", "EUR", "GBP")
  [CURRENCY_SYMBOL] → Your currency symbol (e.g., "$", "€", "£")
  [YOUR_TIMEZONE] → Your timezone (e.g., "EST", "PST", "GMT")
  [PREFIX] → Order ID prefix (e.g., "FB" for "Food Business")

  Menu Items (Customize Completely)

  [CATEGORY_1] → Food category (e.g., "Burgers", "Pizza", "Sandwiches")
  [ITEM_1] through [ITEM_8] → Your menu items
  [PRICE_1] through [DELIVERY_FEE] → Your prices
  Add or remove categories and items as needed

  Payment & Support

  [YOUR_PAYMENT_DETAILS] → Your payment information
  [YOUR_PAYMENT_PROVIDER] → Your payment method (e.g., "Venmo", "PayPal", "Bank Transfer")
  [YOUR_SUPPORT_HANDLE] → Your Telegram support username

  Step 2: Configure Credentials

  Telegram Bot - Add your bot token to Telegram credentials
  Google Sheets - Connect your Google account and create/select your orders spreadsheet
  Google Gemini - Add your Gemini API key
  Sheet ID - Replace [YOUR_GOOGLE_SHEET_ID] with your actual Google Sheet ID

  Step 3: Customize Menu
  Update the menu section in the AI Agent system message with your actual:

  Food categories
  Item names and prices
  Delivery fees
  Any special offerings or combos

  Step 4: Test & Deploy

  Import the template into your n8n instance
  Test the conversation flow with a test Telegram account
  Verify Google Sheets logging works correctly
  Test the payment approval workflow
  Activate the workflow

  💰 Currency Examples
  USD Version
  🍔 MENU & PRICES (USD)
  Burgers
  Classic Burger – $12.99
  Cheese Burger – $14.99
  Deluxe Burger – $18.99

  Delivery Fee – $3.99
  EUR Version
  🍔 MENU & PRICES (EUR)
  Burgers
  Classic Burger – €11.50
  Cheese Burger – €13.50
  Deluxe Burger – €17.50

  Delivery Fee – €3.50
  📊 Google Sheets Structure
  The template automatically logs orders with these columns:

  Order ID
  Customer Name
  Chat ID
  Phone Number
  Delivery Address
  Order Info
  Total Price
  Payment Status
  Order Status
  Timestamp

  🔧 Customization Options
  Easy Customizations

  Menu Items - Add/remove/modify any food items
  Pricing - Update to your local pricing structure
  Currency - Change to any currency worldwide
  Business Hours - Modify operating hours
  Delivery Areas - Add location restrictions
  Payment Methods - Update payment information# Header 1

nodes_used:
  ["n8n-nodes-base.telegram","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.memoryBufferWindow","@n8n/n8n-nodes-langchain.lmChatGoogleGemini","@n8n/n8n-nodes-langchain.textClassifier"]

workflow_json:
  {"id":"FRSKpIbukzy1vMnJ","meta":{"instanceId":"2000c64071c20843606b95c63795bb0797c41036047055a6586498e855b96efc"},"name":"Telegram Sales Agent For Business","tags":[],"nodes":[{"id":"f9ca2a43-862b-4e09-8fd4-4a06b7ca0cdd","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-1100,-140],"parameters":{"text":"={{ $json.message.text }} {{ $json.data.text }}","options":{"systemMessage":"=## [YOUR_BUSINESS_NAME] Assistant\n\nYou are [ASSISTANT_NAME], the friendly and efficient virtual assistant for [YOUR_BUSINESS_NAME] in [YOUR_CITY], [YOUR_COUNTRY]. Always:\n✅ Use simple, polite language\n✅ Send responses in plain text (NO markdown *, _, `)\n✅ Use only 1–2 emojis per message for warmth\n✅ Display time in [YOUR_TIMEZONE] (e.g., EST = UTC-5)\n✅ Ensure order records match Google Sheets format\n\n🍔 MENU & PRICES ([YOUR_CURRENCY])\n[CATEGORY_1]\n- [ITEM_1] – [CURRENCY_SYMBOL][PRICE_1]\n- [ITEM_2] – [CURRENCY_SYMBOL][PRICE_2]\n- [ITEM_3] – [CURRENCY_SYMBOL][PRICE_3]\n\n[CATEGORY_2]\n- [ITEM_4] – [CURRENCY_SYMBOL][PRICE_4]\n- [ITEM_5] – [CURRENCY_SYMBOL][PRICE_5]\n\nOthers\n- [ITEM_6] – [CURRENCY_SYMBOL][PRICE_6]\n- [ITEM_7] – [CURRENCY_SYMBOL][PRICE_7]\n- [ITEM_8] – [CURRENCY_SYMBOL][PRICE_8]\n- Delivery Fee – [CURRENCY_SYMBOL][DELIVERY_FEE]\n\n📝 ORDER FLOW\n1️⃣ Greet the customer:\n\"Hi! I'm [ASSISTANT_NAME] from [YOUR_BUSINESS_NAME] 😊 What would you like to order today?\"\n\n2️⃣ Clarify orders:\n- Ask for type when they mention general categories\n- Confirm all combos and add-ons\n\n3️⃣ Confirm order:\nSummarize like this:\nYour order:\n1x [ITEM] – [CURRENCY_SYMBOL][PRICE]\n1x [ITEM] – [CURRENCY_SYMBOL][PRICE]\nDelivery – [CURRENCY_SYMBOL][DELIVERY_FEE]\nTOTAL: [CURRENCY_SYMBOL][TOTAL]\n💳 Pay to: [YOUR_PAYMENT_DETAILS]\nReply \"Paid\" after sending payment\n\n4️⃣ Collect delivery info:\n\"Almost done! Please send:\nFull name\nPhone number (for delivery)\nDelivery address\"\n\n5️⃣ When they send delivery information:\nReply: \"Thank you for providing your details! We're now verifying your order. Please send your payment screenshot for confirmation 😊\"\n\n6️⃣ When they send a payment screenshot:\nReply:\n⌛ Thanks for your payment! Verifying with [YOUR_PAYMENT_PROVIDER]... (2–3 mins) 😊\n(This message happens automatically when payment screenshot is detected)\n\n7️⃣ HUMAN-IN-THE-LOOP DECISION:\nWhen staff approves the payment through the Check Feedback node:\n- The system will automatically send:\n  \"✅ Payment confirmed! Your order will arrive by [deliveryTime] 🚚\"\n  (Delivery time is 1 hour from now, e.g. \"16:45\")\n\n- The system will then automatically log this data to Google Sheets:\n  Format: Order id|Customer Name|Chat ID|Phone Number|Delivery Address|Order info|Total Price|Payment Status|Order Status|Timestamp\n  Example: [PREFIX]-1712345678|John|1085503473|+1234567890|123 Main St|1x Burger|25.00|Confirmed|Preparing|10/07/2024 16:45\n\n8️⃣ If staff rejects the payment:\nReply:\n❌ Sorry, we couldn't verify your payment. Please send a clearer screenshot or try again.\n\n📌 STATUS RESPONSES:\nWhen user types \"Status?\":\n⏳ Still verifying! We'll notify you as soon as it's confirmed 💛\n\nWhen user types \"Agent\":\nConnecting you to @[YOUR_SUPPORT_HANDLE] 💬\n\nWhen user asks for FAQ or information about [YOUR_BUSINESS_NAME]:\n📍 Location: [YOUR_ADDRESS]\n⏰ Hours: [YOUR_HOURS]\n📞 Contact: [YOUR_PHONE]\n📧 Email: [YOUR_EMAIL]\n\n📊 SHEET FORMAT (strict):\nOrder id | Customer Name | Chat ID | Phone Number | Delivery Address | Order info | Total Price | Payment Status | Order Status | Timestamp\nTimestamp format = MM/DD/YYYY HH:MM (24hr [YOUR_TIMEZONE])\n\n## APPROVAL HANDLING\nIf $json.data.text is \"Approved\", then:\n- Calculate the delivery time (1 hour from current time)\n- Send: \"✅ Payment confirmed! Your order will arrive by [deliveryTime] 🚚\"\n- Log the order data to Google Sheets, making sure to include the Chat ID ({{ $json.message.from.id }} or {{ $json.chat.id }})"},"promptType":"define"},"typeVersion":1.8},{"id":"dda87278-b547-4d5f-b52c-d2c3341ac616","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[-400,-40],"parameters":{"sessionKey":"={{ $('Telegram Trigger').item.json.message.chat.id }}  ","sessionIdType":"customKey","contextWindowLength":10},"typeVersion":1.3},{"id":"ade1189c-1214-4578-9bb5-3fee28694f77","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[-1540,-60],"webhookId":"dd966a62-ffb5-4c52-a830-5cf7e96e946a","parameters":{"updates":["message"],"additionalFields":{}},"typeVersion":1.1},{"id":"be4aec62-7321-42b4-8ba9-43c64b08054a","name":"Google Sheets","type":"n8n-nodes-base.googleSheetsTool","position":[-280,-40],"parameters":{"columns":{"value":{"Chat id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Chat_id', ``, 'string') }}","Order id":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Order_id', ``, 'string') }}","Timestamp":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Timestamp', ``, 'string') }}","timestamp":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('timestamp', ``, 'string') }}","Total Price":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Total_Price', ``, 'string') }}","  Order info":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('__Order_info', ``, 'string') }}","Order Status":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Order_Status', ``, 'string') }}","phone number":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('phone_number', ``, 'string') }}","Customer Name":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Customer_Name', ``, 'string') }}","Payment Status":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Payment_Status', ``, 'string') }}","Delivery Address":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Delivery_Address', ``, 'string') }}"},"schema":[{"id":"Order id","type":"string","display":true,"required":false,"displayName":"Order id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Customer Name","type":"string","display":true,"required":false,"displayName":"Customer Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Chat id","type":"string","display":true,"required":false,"displayName":"Chat id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Delivery Address","type":"string","display":true,"required":false,"displayName":"Delivery Address","defaultMatch":false,"canBeUsedToMatch":true},{"id":"  Order info","type":"string","display":true,"required":false,"displayName":"  Order info","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total Price","type":"string","display":true,"required":false,"displayName":"Total Price","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Payment Status","type":"string","display":true,"required":false,"displayName":"Payment Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Order Status","type":"string","display":true,"required":false,"displayName":"Order Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Timestamp","type":"string","display":true,"required":false,"displayName":"Timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone number","type":"string","display":true,"required":false,"displayName":"phone number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"timestamp","type":"string","display":true,"required":false,"displayName":"timestamp","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"[YOUR_GOOGLE_SHEET_ID]","cachedResultName":"Order Details Sheet"}},"typeVersion":4.5},{"id":"a05b26a5-4495-4419-8ec4-f9202d44083a","name":"Telegram","type":"n8n-nodes-base.telegram","position":[-780,-140],"webhookId":"4a058acc-6544-49bc-9981-c484756f0d42","parameters":{"text":"={{ $json.output }} ","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"typeVersion":1.2},{"id":"deec8df2-d232-43a6-965f-f0373c029480","name":"Check Feedback","type":"@n8n/n8n-nodes-langchain.textClassifier","position":[-540,140],"parameters":{"options":{},"inputText":"={{ $json.data.text }}","categories":{"categories":[{"category":"approved","description":"admin approves the order"},{"category":"declined","description":"admin declined the order"}]}},"typeVersion":1},{"id":"b7a2a270-4308-46ed-8019-3590b6230a87","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-680,-1640],"parameters":{"color":6,"width":700,"height":80,"content":"# Food Delivery Chatbot Template | Ready to Customize"},"typeVersion":1},{"id":"26fb592b-08b8-4b8f-9a91-6f65da7b7950","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[-560,-20],"parameters":{"options":{},"modelName":"models/gemini-2.0-flash-exp"},"typeVersion":1},{"id":"db0cf32d-297f-44d9-96bd-159ae6bbe030","name":"Admin Approval Request","type":"n8n-nodes-base.telegram","position":[-780,140],"webhookId":"d0ca05e5-391f-4f67-b00f-40e72a5de2aa","parameters":{"message":"Payment received for order. Approve or decline?","options":{"appendAttribution":false},"operation":"sendAndWait","responseType":"freeText"},"typeVersion":1.2},{"id":"d0647205-8b66-4228-a7ab-779bb3e3a45b","name":"Forward Payment Screenshot","type":"n8n-nodes-base.telegram","position":[-1060,140],"webhookId":"e8df6e57-dfef-424b-ac17-d32b8ecddfc8","parameters":{"file":"={{ $json.message.photo[0].file_id }}","operation":"sendPhoto","additionalFields":{"caption":"={{ $('Telegram Trigger').item.json.message.caption }}"}},"typeVersion":1.2},{"id":"1cd62845-ad31-423c-8eb3-a154f1595571","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-600,-120],"parameters":{"color":5,"width":440,"height":220,"content":"## AI Tools & Memory"},"typeVersion":1},{"id":"d0e6e088-235b-4cfe-b78d-65e75079b6db","name":"Payment Screenshot Check","type":"n8n-nodes-base.if","position":[-1300,-60],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"02d9bd52-4f62-4f32-b0c3-a4723f913b46","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $json.message.photo[0] }} {{ $json.message.caption }}","rightValue":""},{"id":"d50f068a-c563-4a95-a6e6-2e3514028e28","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $json.message.text }}","rightValue":""}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"6934b6bb-5ac4-48ee-9188-3284a9ee6c0a","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-1160,100],"parameters":{"width":1300,"height":180,"content":"## Payment Verification Flow"},"typeVersion":1},{"id":"b5bd59de-66bc-4e62-8d1d-a04f94403b4c","name":"Payment Declined","type":"n8n-nodes-base.telegram","position":[-160,140],"webhookId":"74f30de0-1908-4640-b6c5-13325e770462","parameters":{"text":"❌ Sorry, we couldn't verify your payment. Please send a clearer screenshot or try again.","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"typeVersion":1.2},{"id":"9978f9af-8fda-43c9-bebe-8db51596f689","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-1160,-180],"parameters":{"color":3,"width":580,"height":280,"content":"## AI Assistant Brain"},"typeVersion":1},{"id":"f92bcb7a-b5f0-43d0-a647-a2c162a10412","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-2480,-360],"parameters":{"width":760,"height":1200,"content":"## 🚀 Quick Setup Guide\n\n### Prerequisites\n- n8n instance (cloud or self-hosted)\n- Telegram Bot Token\n- Google Sheets API access\n- Google Gemini API key\n\n### Step 1: Replace Placeholders\nSearch and replace the following placeholders throughout the template:\n\n#### Business Information\n- [YOUR_BUSINESS_NAME] → Your restaurant/food business name\n- [ASSISTANT_NAME] → Your bot's name (e.g., \"Alex\", \"Bella\", \"Chef Bot\")\n- [YOUR_CITY] → Your city\n- [YOUR_COUNTRY] → Your country\n- [YOUR_ADDRESS] → Your business address\n- [YOUR_PHONE] → Your business phone number\n- [YOUR_EMAIL] → Your business email\n- [YOUR_HOURS] → Your operating hours (e.g., \"9AM - 11PM daily\")\n\n#### Currency & Localization\n- [YOUR_CURRENCY] → Your currency name (e.g., \"USD\", \"EUR\", \"GBP\")\n- [CURRENCY_SYMBOL] → Your currency symbol (e.g., \"$\", \"€\", \"£\")\n- [YOUR_TIMEZONE] → Your timezone (e.g., \"EST\", \"PST\", \"GMT\")\n- [PREFIX] → Order ID prefix (e.g., \"FB\" for \"Food Business\")\n\n#### Menu Items (Customize Completely)\n- [CATEGORY_1] → Food category (e.g., \"Burgers\", \"Pizza\", \"Sandwiches\")\n- [ITEM_1] through [ITEM_8] → Your menu items\n- [PRICE_1] through [DELIVERY_FEE] → Your prices\n- Add or remove categories and items as needed\n\n#### Payment & Support\n- [YOUR_PAYMENT_DETAILS] → Your payment information\n- [YOUR_PAYMENT_PROVIDER] → Your payment method (e.g., \"Venmo\", \"PayPal\", \"Bank Transfer\")\n- [YOUR_SUPPORT_HANDLE] → Your Telegram support username\n\n### Step 2: Configure Credentials\n1. **Telegram Bot** - Add your bot token to Telegram credentials\n2. **Google Sheets** - Connect your Google account and create/select your orders spreadsheet\n3. **Google Gemini** - Add your Gemini API key\n4. **Sheet ID** - Replace [YOUR_GOOGLE_SHEET_ID] with your actual Google Sheet ID\n\n### Step 3: Customize Menu\nUpdate the menu section in the AI Agent system message with your actual:\n- Food categories\n- Item names and prices\n- Delivery fees\n- Any special offerings or combos\n\n### Step 4: Test & Deploy\n1. Import the template into your n8n instance\n2. Test the conversation flow with a test Telegram account\n3. Verify Google Sheets logging works correctly\n4. Test the payment approval workflow\n5. Activate the workflow\n\n## 💰 Currency Examples\n\n### USD Version\n🍔 MENU & PRICES (USD)\nBurgers\n- Classic Burger – $12.99\n- Cheese Burger – $14.99\n- Deluxe Burger – $18.99\n\nDelivery Fee – $3.99\n\n\n### EUR Version\n🍔 MENU & PRICES (EUR)\nBurgers\n- Classic Burger – €11.50\n- Cheese Burger – €13.50\n- Deluxe Burger – €17.50\n\nDelivery Fee – €3.50\n\n\n## 📊 Google Sheets Structure\nThe template automatically logs orders with these columns:\n- Order ID\n- Customer Name\n- Chat ID\n- Phone Number\n- Delivery Address\n- Order Info\n- Total Price\n- Payment Status\n- Order Status\n- Timestamp\n\n## 🔧 Customization Options\n\n### Easy Customizations\n- **Menu Items** - Add/remove/modify any food items\n- **Pricing** - Update to your local pricing structure\n- **Currency** - Change to any currency worldwide\n- **Business Hours** - Modify operating hours\n- **Delivery Areas** - Add location restrictions\n- **Payment Methods** - Update payment information\n\n### Advanced Customizations\n- **Multiple Locations** - Add location selection logic\n- **Inventory Management** - Add stock tracking\n- **Promotional Codes** - Implement discount systems\n- **Multi-language** - Add language detection and responses\n- **SMS Integration** - Add SMS notifications\n- **Email Receipts** - Integrate email confirmation\n\n## 📱 Customer Experience Flow\n1. Customer starts chat with bot\n2. Bot greets and shows menu\n3. Customer places order\n4. Bot confirms order and total\n5. Customer provides delivery details\n6. Customer sends payment screenshot\n7. Admin approves/declines payment\n8. Customer receives confirmation with delivery time\n9. Order is tracked in Google Sheets\n\n## 🛡️ Security Features\n- Human payment verification\n- Chat ID tracking for user identification\n- Timestamped order logging\n- Payment screenshot archival\n- Admin approval controls\n\n## 🎯 Perfect For\n- Restaurants\n- Food trucks\n- Catering services\n- Bakeries\n- Coffee shops\n- Grocery delivery\n- Meal prep services\n- Any food-related business\n\n## 🆘 Support Notes\n- This template requires basic n8n knowledge for setup\n- Google Sheets API setup required\n- Telegram Bot creation required\n- Customization may require some technical skills\n\n## 📈 Scalability\n- Handles multiple concurrent customers\n- Conversation memory per customer\n- Unlimited order volume\n- Easy to add new menu items\n- Expandable with additional features\n"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"75215d5e-63a8-4bb5-b26e-5fa6a6d6f4f1","connections":{"AI Agent":{"main":[[{"node":"Telegram","type":"main","index":0}]]},"Google Sheets":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Check Feedback":{"main":[[{"node":"AI Agent","type":"main","index":0}],[{"node":"Payment Declined","type":"main","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Payment Screenshot Check","type":"main","index":0}]]},"Admin Approval Request":{"main":[[{"node":"Check Feedback","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"Check Feedback","type":"ai_languageModel","index":0},{"node":"AI Agent","type":"ai_languageModel","index":0}]]},"Payment Screenshot Check":{"main":[[{"node":"Forward Payment Screenshot","type":"main","index":0}],[{"node":"AI Agent","type":"main","index":0}]]},"Forward Payment Screenshot":{"main":[[{"node":"Admin Approval Request","type":"main","index":0}]]}}}


name: Call & SMS 🛠️ Twilio Tool MCP Server
author_name: David Ashby
author_username: cfomodz
nodes_used: []
categories: []
created_at: 2025-06-20T19:26:19.397Z
updated_at: 2025-06-20T19:26:19.397Z
url: https://n8n.io/workflows/5078
scraped_at: 2025-07-06 21:16:30
description:
  🛠️ Twilio Tool MCP Server

  Complete MCP server exposing all Twilio Tool operations to AI agents. Zero configuration needed - all 2 operations pre-built.

  ⚡ Quick Setup

  Import this workflow into your n8n instance
  Activate the workflow to start your MCP server
  Copy the webhook URL from the MCP trigger node
  Connect AI agents using the MCP URL

  🔧 How it Works

  • MCP Trigger: Serves as your server endpoint for AI agent requests
  • Tool Nodes: Pre-configured for every Twilio Tool operation
  • AI Expressions: Automatically populate parameters via $fromAI() placeholders
  • Native Integration: Uses official n8n Twilio Tool tool with full error handling

  📋 Available Operations (2 total)

  Every possible Twilio Tool operation is included:

  🔧 Call (1 operations)

  • Make a call

  🔧 Sms (1 operations)

  • Send an SMS/MMS/WhatsApp message

  🤖 AI Integration

  Parameter Handling: AI agents automatically provide values for:
  • Resource IDs and identifiers
  • Search queries and filters
  • Content and data payloads
  • Configuration options

  Response Format: Native Twilio Tool API responses with full data structure

  Error Handling: Built-in n8n error management and retry logic

  💡 Usage Examples

  Connect this MCP server to any AI agent or workflow:

  • Claude Desktop: Add MCP server URL to configuration
  • Custom AI Apps: Use MCP URL as tool endpoint
  • Other n8n Workflows: Call MCP tools from any workflow
  • API Integration: Direct HTTP calls to MCP endpoints

  ✨ Benefits

  • Complete Coverage: Every Twilio Tool operation available
  • Zero Setup: No parameter mapping or configuration needed
  • AI-Ready: Built-in $fromAI() expressions for all parameters
  • Production Ready: Native n8n error handling and logging
  • Extensible: Easily modify or add custom logic

  &gt; 🆓 Free for community use! Ready to deploy in under 2 minutes.

workflow_json:
  {"meta":{"instanceId":"cd59eaaeb7b34d06e24511380db94cdb7fbce6037cc4de22e539c5158ab9cdfc"},"nodes":[{"id":"4afc24ac-c8fe-46f3-8b43-d835416fd5c3","name":"Workflow Overview 0","type":"n8n-nodes-base.stickyNote","position":[-1460,-100],"parameters":{"width":420,"height":800,"content":"## 🛠️ Twilio Tool MCP Server\n\n### 📋 Available Operations (2 total)\n\n**Call**: make\n**Sms**: send\n\n### ⚙️ Setup Instructions\n\n1. **Import Workflow**: Load this workflow into your n8n instance\n\n1. **🔑 Add Credentials**: Configure Twilio Tool authentication in one tool node then open and close all others.\n2. **🚀 Activate**: Enable this workflow to start your MCP server\n3. **🔗 Get URL**: Copy webhook URL from MCP trigger (right side)\n4. **🤖 Connect**: Use MCP URL in your AI agent configurations\n\n### ✨ Ready-to-Use Features\n\n• Zero configuration - all 2 operations pre-built\n• AI agents automatically populate parameters via `$fromAI()` expressions\n• Every resource and operation combination available\n• Native n8n error handling and response formatting\n• Modify parameter defaults in any tool node as needed\n\n### 💬 Need Help?\nCheck the [n8n documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolmcp/) or ping me on [discord](https://discord.me/cfomodz) for MCP integration guidance or customizations."},"typeVersion":1},{"id":"810f5278-761a-4df8-a514-e6ddf03dcf9d","name":"Twilio Tool MCP Server","type":"@n8n/n8n-nodes-langchain.mcpTrigger","position":[-760,-80],"webhookId":"45f82627-d1d3-4a79-b3a9-34dca1da6e9e","parameters":{"path":"twilio-tool-mcp"},"typeVersion":1},{"id":"0e1f592c-0143-4281-bddb-4e274f8de596","name":"Make a call","type":"n8n-nodes-base.twilioTool","position":[-800,140],"parameters":{"to":"={{ $fromAI('To', ``, 'string') }}","from":"={{ $fromAI('From', ``, 'string') }}","twiml":"={{ $fromAI('Twiml', ``, 'boolean') }}","message":"={{ $fromAI('Message', ``, 'string') }}","options":{},"resource":"call"},"credentials":{},"typeVersion":1},{"id":"367c5a60-13e3-426f-9bdf-6e848a53ecf5","name":"Sticky Note 1","type":"n8n-nodes-base.stickyNote","position":[-1000,120],"parameters":{"color":4,"width":400,"content":"## Call"},"typeVersion":1},{"id":"3de7d333-b6de-4f29-a226-27da412aaa65","name":"Send an SMS/MMS/WhatsApp message","type":"n8n-nodes-base.twilioTool","position":[-800,380],"parameters":{"to":"={{ $fromAI('To', ``, 'string') }}","from":"={{ $fromAI('From', ``, 'string') }}","message":"={{ $fromAI('Message', ``, 'string') }}","options":{},"toWhatsapp":"={{ $fromAI('To_Whatsapp', ``, 'boolean') }}"},"credentials":{},"typeVersion":1},{"id":"4b0dbf71-35e4-4024-ade9-a02b24f3d2c8","name":"Sticky Note 2","type":"n8n-nodes-base.stickyNote","position":[-1000,360],"parameters":{"color":5,"width":400,"content":"## Sms"},"typeVersion":1}],"pinData":{},"connections":{"Make a call":{"ai_tool":[[{"node":"Twilio Tool MCP Server","type":"ai_tool","index":0}]]},"Send an SMS/MMS/WhatsApp message":{"ai_tool":[[{"node":"Twilio Tool MCP Server","type":"ai_tool","index":0}]]}}}


name: Bidirectional GitHub Workflow Sync & Version Control for n8n Workflows
author_name: Wikus Bergh
author_username: rustedviking
nodes_used: ["n8n-nodes-base.github","n8n-nodes-base.code"]
categories: []
created_at: 2025-06-20T21:28:00.351Z
updated_at: 2025-06-20T21:28:00.351Z
url: https://n8n.io/workflows/5081
scraped_at: 2025-07-06 21:16:30
description:
  Who is this for?
  This template is ideal for n8n administrators, automation engineers, and DevOps teams who want to maintain bidirectional synchronization between their n8n workflows and GitHub repositories. It helps teams keep their workflow backups up-to-date and ensures consistency between their n8n instance and version control system.

  What problem is this workflow solving?
  Managing workflow versions across n8n and GitHub can become complex when changes happen in both places. This workflow solves that by automatically synchronizing workflows bidirectionally, ensuring that the most recent version is always available in both systems without manual intervention or version conflicts.

  What this workflow does:

  Runs on a weekly schedule (every Monday) to check for synchronization needs.
  Fetches all workflows from your n8n instance and compares them with GitHub repository files.
  Identifies workflows that exist only in n8n and uploads them to GitHub as JSON backups.
  Identifies workflows that exist only in GitHub and creates them in your n8n instance.
  For workflows that exist in both places, compares timestamps and syncs the most recent version:

    If n8n version is newer → Updates GitHub with the latest workflow
    If GitHub version is newer → Updates n8n with the latest workflow
  Automatically handles file naming, encoding/decoding, and commit messages with timestamps.

  Setup:

  Connect GitHub: Configure GitHub API credentials in the GitHub nodes.
     Note: Use a GitHub Personal Access Token (classic) with repo permissions to read and write workflow files.
  Connect n8n API: Provide your n8n API credentials in the n8n nodes. Check this doc
  Configure GitHub Details in the Set GitHub Details node:

     github_account_name: Your GitHub username or organization
     github_repo_name: The repository name where workflows should be stored
     repo_workflows_path: The folder path in your repo (e.g., workflows or n8n-workflows)
  Adjust Schedule: Modify the Schedule Trigger if you want a different sync frequency (currently set to weekly on Mondays).
  Test the workflow: Run it manually first to ensure all connections and permissions are working correctly.

  How to customize this workflow to your needs:

  Change sync frequency**: Modify the Schedule Trigger to run daily, hourly, or on-demand.
  Add filtering**: Extend the Filter node to exclude certain workflows (e.g., test workflows, templates).
  Add notifications**: Insert Slack, email, or webhook notifications to report sync results.
  Implement conflict resolution**: Add custom logic for handling workflows with the same timestamp.
  Add workflow validation**: Include checks to validate workflow JSON before syncing.
  Branch management**: Modify to sync to different branches or create pull requests instead of direct commits.
  Backup retention**: Add logic to maintain multiple versions or archive old workflows.

  Key Features:

  Bidirectional sync**: Handles changes from both n8n and GitHub
  Timestamp-based conflict resolution**: Always keeps the most recent version
  Automatic file naming**: Converts workflow names to valid filenames
  Base64 encoding/decoding**: Properly handles JSON workflow data
  Comprehensive comparison**: Uses dataset comparison to identify differences
  Automated commits**: Includes timestamps in commit messages for traceability

  This automated synchronization workflow provides a robust backup and version control solution for n8n workflows, ensuring your automation assets are always safely stored and consistently available across environments.

workflow_json:
  {"id":"zlH1bFBsYAWpBVVw","meta":{"instanceId":"c63eb69e3ae130557a7966f936bb2cc113f6e64ff70b2268c8cd506848caf9d5","templateCredsSetupCompleted":true},"name":"github_repo_workflows_sync","tags":[{"id":"oiAlopPbS90SR7YK","name":"github","createdAt":"2025-06-20T15:54:28.386Z","updatedAt":"2025-06-20T15:54:28.386Z"}],"nodes":[{"id":"ffc98138-8afa-4cd6-8ba4-b235cc18c739","name":"Create new workflow in n8n","type":"n8n-nodes-base.n8n","position":[1740,780],"parameters":{"operation":"create","requestOptions":{},"workflowObject":"={{ $json.toJsonString()  }}"},"typeVersion":1},{"id":"d4891039-f8d2-465b-bbb6-098050f9e06c","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-260,280],"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[1]}]}},"typeVersion":1.2},{"id":"174b78dc-e584-4fc1-82a2-0e58b4a98b36","name":"List files from repo","type":"n8n-nodes-base.github","position":[360,400],"webhookId":"0614066f-212d-4f9e-9da2-fa4a80b44baf","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $json.github_account_name }}"},"filePath":"=/{{ $json.repo_workflows_path }}","resource":"file","operation":"list","repository":{"__rl":true,"mode":"name","value":"={{ $json.github_repo_name }}"}},"typeVersion":1,"alwaysOutputData":true},{"id":"3dcf4423-8024-4797-adee-71912ba87c2b","name":"GitHub","type":"n8n-nodes-base.github","position":[800,400],"webhookId":"71ad7d84-99cd-4fbd-a365-52537e69525b","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set GitHub Details').item.json.github_account_name }}"},"filePath":"={{ $json.path }}","resource":"file","operation":"get","repository":{"__rl":true,"mode":"name","value":"={{ $('Set GitHub Details').item.json.github_repo_name }}"},"asBinaryProperty":false,"additionalParameters":{}},"typeVersion":1.1},{"id":"315a2e65-1c4d-46b4-b17d-b949c776c116","name":"n8n","type":"n8n-nodes-base.n8n","position":[580,200],"parameters":{"filters":{},"requestOptions":{}},"typeVersion":1},{"id":"404e87cf-e561-4807-865a-26a6109c228f","name":"Upload file","type":"n8n-nodes-base.github","position":[2400,-80],"webhookId":"ce4b561b-acb9-4cd8-b76f-4928dada9674","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set GitHub Details').item.json.github_account_name }}"},"filePath":"={{ $('Set GitHub Details').item.json.repo_workflows_path }}/{{ $node['Edit for Upload'].json.fileName }}","resource":"file","repository":{"__rl":true,"mode":"name","value":"={{ $('Set GitHub Details').item.json.github_repo_name }}"},"fileContent":"={{ $('To base64').item.json.data }}","commitMessage":"=n8n_backup_sync-{{ $node['Edit for Upload'].json.commitDate }}","additionalParameters":{"branch":{"branch":"main"}}},"typeVersion":1},{"id":"aee4f541-7ff4-441d-9c6b-1545676be55a","name":"Json file","type":"n8n-nodes-base.convertToFile","position":[1740,-80],"parameters":{"mode":"each","options":{"format":true},"operation":"toJson"},"typeVersion":1.1},{"id":"9047c039-ef8e-4fb2-b58c-3056f02366c7","name":"To base64","type":"n8n-nodes-base.extractFromFile","position":[1960,-80],"parameters":{"options":{},"operation":"binaryToPropery"},"typeVersion":1},{"id":"e5208d64-7f41-4be4-ad09-313aeb5fa89d","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1620,180],"parameters":{"color":3,"width":340,"height":400,"content":"## CHECK WHICH IS NEWER\n\n**IF TRUE** github workflow is the most recent, n8n to be updated\n\n**IF FALSE** n8n workflow is the most recent, github to be updated\n\n"},"typeVersion":1},{"id":"138bd609-541a-46d6-aa1e-792e85a58c05","name":"Update file","type":"n8n-nodes-base.github","position":[3220,560],"webhookId":"27218087-8df7-474d-a39f-70cfa9c34ec8","parameters":{"owner":{"__rl":true,"mode":"name","value":"={{ $('Set GitHub Details').item.json.github_account_name }}"},"filePath":"={{ $('Set GitHub Details').item.json.repo_workflows_path }}/{{ $node['Edit for Update'].json.fileName }}","resource":"file","operation":"edit","repository":{"__rl":true,"mode":"name","value":"={{ $('Set GitHub Details').item.json.github_repo_name }}"},"fileContent":"={{ $('To base').item.json.data }}","commitMessage":"=n8n_backup_sync-{{ $('Edit for Update').item.json.commitDate }}"},"typeVersion":1},{"id":"72bd601d-fdce-4643-a26d-23e95f278110","name":"Json file1","type":"n8n-nodes-base.convertToFile","position":[2560,560],"parameters":{"mode":"each","options":{"format":true},"operation":"toJson"},"typeVersion":1.1},{"id":"3974d157-1135-4068-bc3e-b295917cd49b","name":"To base","type":"n8n-nodes-base.extractFromFile","position":[2780,560],"parameters":{"options":{},"operation":"binaryToPropery"},"typeVersion":1},{"id":"eee2bfd1-e0e3-4db5-b4da-1bbc189f45e7","name":"n8n vs GitHub","type":"n8n-nodes-base.compareDatasets","position":[1260,280],"parameters":{"options":{},"mergeByFields":{"values":[{"field1":"id","field2":"id"}]}},"typeVersion":2.3},{"id":"a94d4e6e-a250-4fe8-a092-a9e1697745c5","name":"Update workflow in n8n","type":"n8n-nodes-base.n8n","position":[2340,300],"parameters":{"operation":"update","workflowId":{"__rl":true,"mode":"id","value":"={{ $json.dataset.id }}"},"requestOptions":{},"workflowObject":"={{ $json.dataset.toJsonString() }}"},"typeVersion":1},{"id":"09d43ee5-7a21-47cd-8bec-45ae16e8422f","name":"Code - InputB","type":"n8n-nodes-base.code","position":[2120,300],"parameters":{"language":"python","pythonCode":"# Get the desired workflow name\nworkflow_id = _('If n8n before GitHub').first().json['same']['id']\n\n# Get all decoded workflow items\nall_decoded = _('Decode to json').all()\n\n# Filter for the matching one\nmatched = [\n    item.json \n    for item in all_decoded \n    if item.json.get('id') == workflow_id\n]\n\n# If there's a match, return it (or empty if none)\nif matched:\n    return [{'json': {'dataset': matched[0]}}]\nelse:\n    return []\n"},"typeVersion":2},{"id":"d3be821f-a331-4dc7-993d-6af348fb1fb2","name":"Code - InputA","type":"n8n-nodes-base.code","position":[2120,560],"parameters":{"language":"python","pythonCode":"# Get the desired workflow name\nworkflow_id = _('If n8n before GitHub').first().json['same']['id']\n\n# Get all decoded workflow items\nall_decoded = _('n8n').all()\n\n# Filter for the matching one\nmatched = [\n    item.json \n    for item in all_decoded \n    if item.json.get('id') == workflow_id\n]\n\n# If there's a match, return it (or empty if none)\nif matched:\n    return [{'json': {'dataset': matched[0]}}]\nelse:\n    return []\n"},"typeVersion":2},{"id":"2a173594-512b-4308-b685-540bac3e2338","name":"Edit Fields","type":"n8n-nodes-base.set","position":[2340,560],"parameters":{"mode":"raw","options":{},"jsonOutput":"={{ $json.dataset }}"},"typeVersion":3.4},{"id":"7a43de98-2d25-4d0f-9b7c-47258dc7b405","name":"Edit for Upload","type":"n8n-nodes-base.set","position":[2180,-80],"parameters":{"options":{},"assignments":{"assignments":[{"id":"fe4a36ef-9f04-40e3-99bd-cc517a49b440","name":"commitDate","type":"string","value":"={{ $now.format('dd-MM-yyyy/H:mm') }}"},{"id":"b0fe1bcc-e79c-4a6b-b8b4-44222c8bf4e8","name":"fileName","type":"string","value":"={{$('n8n vs GitHub').item.json.name\n.trim().replace(/\\s+/g, '-').toLowerCase()\n}}.json"}]}},"typeVersion":3.4},{"id":"911736bd-1c6d-4b49-ade2-52d95f075a7f","name":"Edit for Update","type":"n8n-nodes-base.set","position":[3000,560],"parameters":{"options":{},"assignments":{"assignments":[{"id":"fe4a36ef-9f04-40e3-99bd-cc517a49b440","name":"commitDate","type":"string","value":"={{ $now.format('dd-MM-yyyy/H:mm') }}"},{"id":"b0fe1bcc-e79c-4a6b-b8b4-44222c8bf4e8","name":"fileName","type":"string","value":"={{\n$('Code - InputA').item.json.dataset.name.trim().replace(/\\s+/g, '-').toLowerCase()\n}}.json"}]}},"typeVersion":3.4},{"id":"1193d962-fb0d-4b9e-b94c-04c8942860e4","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1620,-200],"parameters":{"width":1000,"height":320,"content":"## IF ONLY IN N8N\nUpdate GitHub with the relevant workflows"},"typeVersion":1},{"id":"e48eda08-7f73-46d6-ba81-f9e4b008fec3","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1620,640],"parameters":{"color":6,"width":340,"height":340,"content":"## IF ONLY IN GITHUB\nCreate new workflow in n8n"},"typeVersion":1},{"id":"c1909c33-d3f0-4d24-b4d7-fdf1e8074398","name":"If n8n before GitHub","type":"n8n-nodes-base.if","position":[1740,400],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"8ccf743b-3a66-44c0-a30b-72a1d4bcf60b","operator":{"type":"dateTime","operation":"before"},"leftValue":"={{ $json.different.updatedAt.inputA }}","rightValue":"={{ $json.different.updatedAt.inputB }}"}]}},"typeVersion":2.2},{"id":"fd1022a0-4f67-4603-bf94-68415776c587","name":"Decode to json","type":"n8n-nodes-base.set","position":[1020,400],"parameters":{"mode":"raw","options":{},"jsonOutput":"={{  $json.content.base64Decode() }}"},"typeVersion":3.4},{"id":"102aadd9-ace3-4fc6-a9a9-ca546362373e","name":"Filter","type":"n8n-nodes-base.filter","position":[580,400],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"b9ed0bad-4ebe-4378-807e-1a6082c4461d","operator":{"type":"string","operation":"notContains"},"leftValue":"={{ $json.name }}","rightValue":"placeholder"}]}},"typeVersion":2.2},{"id":"0ddf93a8-4db3-4826-a658-8fb4aedb31ce","name":"Set GitHub Details","type":"n8n-nodes-base.set","position":[-40,280],"parameters":{"options":{},"assignments":{"assignments":[{"id":"850e7497-0f2f-470e-a5a2-a85a0c12aaa2","name":"github_account_name","type":"string","value":""},{"id":"5c2be15a-cb93-4fe4-a512-03a1880b8713","name":"github_repo_name","type":"string","value":""},{"id":"f4f1f0c3-7a89-427c-942f-d0e74ba4583f","name":"repo_workflows_path","type":"string","value":""}]}},"typeVersion":3.4}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"f8dfa54c-eb76-40f0-80d8-18cdab254091","connections":{"n8n":{"main":[[{"node":"n8n vs GitHub","type":"main","index":0}]]},"Filter":{"main":[[{"node":"GitHub","type":"main","index":0}]]},"GitHub":{"main":[[{"node":"Decode to json","type":"main","index":0}]]},"To base":{"main":[[{"node":"Edit for Update","type":"main","index":0}]]},"Json file":{"main":[[{"node":"To base64","type":"main","index":0}]]},"To base64":{"main":[[{"node":"Edit for Upload","type":"main","index":0}]]},"Json file1":{"main":[[{"node":"To base","type":"main","index":0}]]},"Edit Fields":{"main":[[{"node":"Json file1","type":"main","index":0}]]},"Code - InputA":{"main":[[{"node":"Edit Fields","type":"main","index":0}]]},"Code - InputB":{"main":[[{"node":"Update workflow in n8n","type":"main","index":0}]]},"n8n vs GitHub":{"main":[[{"node":"Json file","type":"main","index":0}],[],[{"node":"If n8n before GitHub","type":"main","index":0}],[{"node":"Create new workflow in n8n","type":"main","index":0}]]},"Decode to json":{"main":[[{"node":"n8n vs GitHub","type":"main","index":1}]]},"Edit for Update":{"main":[[{"node":"Update file","type":"main","index":0}]]},"Edit for Upload":{"main":[[{"node":"Upload file","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Set GitHub Details","type":"main","index":0}]]},"Set GitHub Details":{"main":[[{"node":"n8n","type":"main","index":0},{"node":"List files from repo","type":"main","index":0}]]},"If n8n before GitHub":{"main":[[{"node":"Code - InputB","type":"main","index":0}],[{"node":"Code - InputA","type":"main","index":0}]]},"List files from repo":{"main":[[{"node":"Filter","type":"main","index":0}]]}}}


name: AI-Powered Proposal Automation Using Google Slides
author_name: David Olusola
author_username: dae221
categories: []
created_at: 2025-06-21T00:57:33.573Z
updated_at: 2025-06-21T00:57:33.573Z
url: https://n8n.io/workflows/5082
scraped_at: 2025-07-06 21:16:30
description:
  When you fill out the form with business challenges and requirements
  GPT-4 analyzes the input and generates a customized proposal using your template
  System automatically creates a Google Slides presentation with personalized content
  Professional proposal email is sent directly to the prospect with the presentation link

  Set up steps
  Estimated time: 15-20 minutes

  Connect your OpenAI API key for GPT-4 access
  Link your Google account for Slides and Gmail integration
  Create your proposal template in Google Slides with placeholder variables
  Customize the AI prompt and email template with your branding
  Test with sample data and activate the workflow

nodes_used:
  ["n8n-nodes-base.googleDrive","n8n-nodes-base.gmail","n8n-nodes-base.googleSlides","@n8n/n8n-nodes-langchain.openAi"]

workflow_json:
  {"id":"UZFZZMrmUMPf3KRG","meta":{"instanceId":"2000c64071c20843606b95c63795bb0797c41036047055a6586498e855b96efc"},"name":"Automated Proposal Generator","tags":[],"nodes":[{"id":"712f76e1-2520-46c7-8268-eaa601e22dff","name":"Replace Text","type":"n8n-nodes-base.googleSlides","position":[260,200],"parameters":{"textUi":{"textValues":[{"text":"{{proposalTitle}}","replaceText":"={{ $('OpenAI').item.json.message.content.proposalTitle }}"},{"text":"{{descriptionName}}","replaceText":"={{ $('OpenAI').item.json.message.content.descriptionName }}"},{"text":"{{oneParagraphProblemSummary}}","replaceText":"={{ $('OpenAI').item.json.message.content.oneParagraphProblemSummary }}"},{"text":"{{solutionHeadingOne}}","replaceText":"={{ $('OpenAI').item.json.message.content.solutionHeadingOne }}"},{"text":"{{solutionHeadingTwo}}","replaceText":"={{ $('OpenAI').item.json.message.content.solutionHeadingTwo }}"},{"text":"{{solutionHeadingThree}}","replaceText":"={{ $('OpenAI').item.json.message.content.solutionHeadingThree }}"},{"text":"{{solutionDescriptionOne}}","replaceText":"={{ $('OpenAI').item.json.message.content.solutionDescriptionOne }}"},{"text":"{{solutionDescriptionTwo}}","replaceText":"={{ $('OpenAI').item.json.message.content.solutionDescriptionTwo }}"},{"text":"{{solutionDescriptionThree}}","replaceText":"={{ $('OpenAI').item.json.message.content.solutionDescriptionThree }}"},{"text":"{{shortScopeTitleOne}}","replaceText":"={{ $('OpenAI').item.json.message.content.shortScopeTitleOne }}"},{"text":"{{shortScopeTitleTwo}}","replaceText":"={{ $('OpenAI').item.json.message.content.shortScopeTitleTwo }}"},{"text":"{{shortScopeTitleThree}}","replaceText":"={{ $('OpenAI').item.json.message.content.shortScopeTitleThree }}"},{"text":"{{shortScopeDescriptionOne}}","replaceText":"={{ $('OpenAI').item.json.message.content.shortScopeDescriptionOne }}"},{"text":"{{shortScopeDescriptionTwo}}","replaceText":"={{ $('OpenAI').item.json.message.content.shortScopeDescriptionTwo }}"},{"text":"{{shortScopeDescriptionThree}}","replaceText":"={{ $('OpenAI').item.json.message.content.shortScopeDescriptionThree }}"},{"text":"{{milestoneOneDay}}","replaceText":"={{ $('OpenAI').item.json.message.content.milestoneOneDay }}"},{"text":"{{milestoneTwoDay}}","replaceText":"={{ $('OpenAI').item.json.message.content.milestoneTwoDay }}"},{"text":"{{milestoneThreeDay}}","replaceText":"={{ $('OpenAI').item.json.message.content.milestoneThreeDay }}"},{"text":"{{milestoneFourDay}}","replaceText":"={{ $('OpenAI').item.json.message.content.milestoneFourDay }}"},{"text":"{{milestoneDescriptionOne}}","replaceText":"={{ $('OpenAI').item.json.message.content.milestoneDescriptionOne }}"},{"text":"{{milestoneDescriptionTwo}}","replaceText":"={{ $('OpenAI').item.json.message.content.milestoneDescriptionTwo }}"},{"text":"{{milestoneDescriptionThree}}","replaceText":"={{ $('OpenAI').item.json.message.content.milestoneDescriptionThree }}"},{"text":"{{milestoneDescriptionFour}}","replaceText":"={{ $('OpenAI').item.json.message.content.milestoneDescriptionFour }}"},{"text":"{{cost}}","replaceText":"={{ $json.Cost }}"}]},"options":{},"operation":"replaceText","presentationId":"={{ $json.id }}"},"typeVersion":2},{"id":"3bdb5c98-f074-4e0f-a132-aed892b0247e","name":"OpenAI","type":"@n8n/n8n-nodes-langchain.openAi","position":[760,0],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"gpt-4o","cachedResultName":"GPT-4O"},"options":{},"messages":{"values":[{"role":"system","content":"You are David Olusola, CEO of DaeX AI - an expert in building AI automation systems for small businesses."},{"content":"Your task is to generate a customized AI automation proposal using input data from a client discovery call. This proposal should be highly specific and professional, reflecting DaeX AI's expertise in n8n workflows, Google Sheets integration, messaging platform automation, and lead generation systems.\n\nContext: DaeX AI specializes in helping small businesses streamline operations, generate leads, and personalize customer engagement through intelligent automation systems.\n\nThe proposal template requires specific fields. Return them in this exact JSON format:\n\n{\n  \"proposalTitle\": \"\",\n  \"descriptionName\": \"\",\n  \"oneParagraphProblemSummary\": \"\",\n  \"solutionHeadingOne\": \"\",\n  \"solutionDescriptionOne\": \"\",\n  \"solutionHeadingTwo\": \"\",\n  \"solutionDescriptionTwo\": \"\",\n  \"solutionHeadingThree\": \"\",\n  \"solutionDescriptionThree\":\"\",\n  \"shortScopeTitleOne\": \"\",\n  \"shortScopeTitleTwo\": \"\",\n  \"shortScopeTitleThree\": \"\",\n  \"shortScopeDescriptionOne\": \"\",\n  \"shortScopeDescriptionTwo\": \"\",\n  \"shortScopeDescriptionThree\": \"\",\n  \"milestoneOneDay\": \"\",\n  \"milestoneTwoDay\": \"\",\n  \"milestoneThreeDay\": \"\",\n  \"milestoneFourDay\": \"\",\n  \"milestoneDescriptionOne\": \"\",\n  \"milestoneDescriptionTwo\": \"\",\n  \"milestoneDescriptionThree\": \"\",\n  \"milestoneDescriptionFour\": \"\"\n}\n\nRules:\n1. Use a professional but approachable tone that reflects DaeX AI's expertise\n2. Focus on AI automation, workflow optimization, and measurable business outcomes\n3. Ensure all fields are completed - no empty variables\n4. Keep descriptions concise (14 words max for description fields)\n5. Reference specific tools like n8n, Google Sheets, and messaging platforms when relevant\n6. Include realistic timelines based on project complexity"},{"content":"{\n  \"companyName\":\"TechStart Solutions\",\n  \"problem\": \"Manual lead qualification process taking 4+ hours daily, missing follow-ups, inconsistent customer communication\",\n  \"solution\": \"AI-powered lead scoring system, automated email sequences, integrated CRM with smart notifications\",\n  \"scope\": \"n8n workflow automation, Google Sheets integration, WhatsApp/Email automation, 30-day setup with training\",\n  \"currentDate\":\"June 20 2025\",\n  \"howSoon\": \"within 6 weeks\",\n  \"depositCost\": \"$2,500\",\n}"},{"role":"assistant","content":"{\n  \"proposalTitle\": \"AI Automation System for TechStart Solutions\",\n  \"descriptionName\": \"intelligent lead management and customer engagement automation designed to scale your operations\",\n  \"oneParagraphProblemSummary\": \"TechStart Solutions is currently spending 4+ hours daily on manual lead qualification, missing critical follow-ups, and struggling with inconsistent customer communication. This manual approach is preventing growth and creating inefficiencies that compound as your business scales. Our AI automation system will eliminate these bottlenecks and create a seamless, intelligent workflow that operates 24/7.\",\n  \"solutionHeadingOne\": \"AI-Powered Lead Scoring & Qualification\",\n  \"solutionDescriptionOne\": \"Automated system that scores and qualifies leads instantly using intelligent algorithms.\",\n  \"solutionHeadingTwo\": \"Smart Email & WhatsApp Automation\",\n  \"solutionDescriptionTwo\": \"Personalized messaging sequences that nurture leads and maintain consistent customer communication.\",\n  \"solutionHeadingThree\": \"Integrated CRM with Smart Notifications\",\n  \"solutionDescriptionThree\": \"Centralized system with intelligent alerts ensuring no opportunities are missed.\",\n  \"shortScopeTitleOne\": \"n8n Workflow Development\",\n  \"shortScopeTitleTwo\": \"Google Sheets CRM Integration\",\n  \"shortScopeTitleThree\": \"30-Day Setup with Training\",\n  \"shortScopeDescriptionOne\": \"Custom automation workflows built specifically for your lead management process.\",\n  \"shortScopeDescriptionTwo\": \"Seamless integration with your existing data and communication tools.\",\n  \"shortScopeDescriptionThree\": \"Complete setup, testing, and team training for immediate implementation.\",\n  \"milestoneOneDay\": \"July 1st, 2025\",\n  \"milestoneTwoDay\": \"July 15th, 2025\",\n  \"milestoneThreeDay\": \"July 25th, 2025\",\n  \"milestoneFourDay\": \"August 1st, 2025\",\n  \"milestoneDescriptionOne\": \"System architecture designed and n8n workflows built.\",\n  \"milestoneDescriptionTwo\": \"Google Sheets integration and messaging automation configured.\",\n  \"milestoneDescriptionThree\": \"Complete system testing and initial optimization.\",\n  \"milestoneDescriptionFour\": \"Team training completed and system fully operational.\"\n}"},{"content":"={\n  \"companyName\":\"{{ $json['Company Name'] }}\",\n  \"problem\": \"{{ $json.Problem }}\",\n  \"solution\": \"{{ $json.Solution}}\",\n  \"scope\": \"{{ $json.Scope }}\",\n  \"currentDate\":\"{{ $now.toLocaleString({ dateStyle: 'medium' }) }}\",\n  \"howSoon\": \"{{ $json['How soon?'] }}\",\n  \"depositCost\": \"{{ $json.Cost }}\",\n}"}]},"jsonOutput":true},"credentials":{"openAiApi":{"id":"AAQM78g30SkuHYxB","name":"OpenAi success"}},"typeVersion":1.6},{"id":"01abcd8b-f115-4ccf-b53e-3ba62740c760","name":"Google Drive","type":"n8n-nodes-base.googleDrive","position":[60,200],"parameters":{"name":"={{ $json.message.content.proposalTitle }}","fileId":{"__rl":true,"mode":"id","value":"1fHzjDQtZouAwfv4kn5uvgpTWqwhTAlPrGkdtkbYBkNE"},"options":{"copyRequiresWriterPermission":false},"operation":"copy"},"typeVersion":3},{"id":"138339d1-bbac-4e94-83ac-bf613b5d8baf","name":"Gmail","type":"n8n-nodes-base.gmail","position":[520,200],"webhookId":"b989215e-e975-44a7-9dc7-fd51e7310cba","parameters":{"sendTo":"={{ $('On form submission').item.json.Email }}","message":"=Hi {{ $('On form submission').item.json['First Name'] }},\n\nGreat connecting with you today. I've put together a detailed automation proposal that addresses the specific challenges we discussed for {{ $('On form submission').item.json['Company Name'] }}.\n\nView your proposal here: https://docs.google.com/presentation/d/{{ $json.presentationId }}/edit\n\nThis outlines exactly how we'll streamline your operations and boost efficiency with our AI automation systems. The solution is designed specifically for your needs and includes everything from setup to training.\n\nHappy to jump on a quick call to walk through any questions or discuss next steps.\n\nBest,\nDavid Olusola\nCEO, DaeX AI","options":{"appendAttribution":false},"subject":"Your Custom AI Automation Proposal - DaeX AI","emailType":"text"},"typeVersion":2.1},{"id":"85344c7a-c7c2-4d0b-b6bf-7a7886b87b16","name":"On form submission","type":"n8n-nodes-base.formTrigger","position":[540,0],"webhookId":"24fd835d-9132-4faf-b715-755e75aee9be","parameters":{"options":{"appendAttribution":false},"formTitle":"DaeX AI - Client Discovery Form","formFields":{"values":[{"fieldLabel":"First Name","requiredField":true},{"fieldLabel":"Last Name","requiredField":true},{"fieldLabel":"Company Name","requiredField":true},{"fieldType":"email","fieldLabel":"Email","requiredField":true},{"fieldLabel":"Website","requiredField":true},{"fieldType":"textarea","fieldLabel":"Problem","requiredField":true},{"fieldType":"textarea","fieldLabel":"Solution","requiredField":true},{"fieldType":"textarea","fieldLabel":"Scope","requiredField":true},{"fieldLabel":"Cost","requiredField":true},{"fieldLabel":"How soon?","requiredField":true}]},"formDescription":"This form captures client requirements and automatically generates a customized AI automation proposal."},"typeVersion":2.2},{"id":"caf30bb1-a385-491d-b17c-0e3a906063c8","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-20,-120],"parameters":{"color":4,"width":1260,"height":440,"content":"## Automated Proposal Generator\n**Intelligent AI automation proposals generated from client discovery calls**\n\nBuilt by David Olusola\n\nSetup Instructions:\n\n*Configure OpenAI credentials in the OpenAI node\nUpdate Google Slides template ID in Google Drive node\nSet up Gmail credentials for automated sending\nCreate your proposal template in Google Slides with placeholder variables\nTest workflow with sample data before going live\nActivate workflow to start generating proposals automatically.*"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"b3e5098d-3df0-49f1-a250-f4e520e7b446","connections":{"OpenAI":{"main":[[{"node":"Google Drive","type":"main","index":0}]]},"Google Drive":{"main":[[{"node":"Replace Text","type":"main","index":0}]]},"Replace Text":{"main":[[{"node":"Gmail","type":"main","index":0}]]},"On form submission":{"main":[[{"node":"OpenAI","type":"main","index":0}]]}}}


name: Medical Records Automation with Mistral OCR & Google Sheets
author_name: David Olusola
author_username: dae221
nodes_used: ["n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest","n8n-nodes-base.code"]
categories: []
created_at: 2025-06-21T01:29:08.272Z
updated_at: 2025-06-21T01:29:08.272Z
url: https://n8n.io/workflows/5083
scraped_at: 2025-07-06 21:16:30
description:
  This plug-and-play n8n workflow automates medical record digitization using Mistral’s OCR API and stores clean, structured data in Google Sheets. Whether you run a clinic or healthtech product, this no-code solution simplifies data entry from scanned or uploaded medical documents.

  📌 Works seamlessly on both self-hosted and cloud-based n8n environments.
  👥 Who is this for?
  Hospitals and private clinics
  Healthtech platforms & startups
  Medical admin and document processing teams
  Clinical researchers and labs
  😓 What problem does it solve?
  ❌ Manual entry from printed forms
  ❌ Unstructured, scattered records
  ❌ Errors in data transcription
  ❌ Inconsistent document storage
  ✅ This automation brings consistency, structure, and speed to the way you handle medical documents.

  ✅ What this workflow does
  Captures uploaded documents through a public form
  Uploads file to Mistral for OCR processing
  Extracts clean text from each page (PDF or image)
  Parses patient fields (Name, DOB, Diagnosis, Medications, etc.)
  Saves records into a structured Google Sheet
  🛠️ Setup Instructions
  Step 1: Google Sheet Prep

  Create a Google Sheet with these columns (case-sensitive):

  Name, Date of Birth, Patient ID, Date of Visit, Referring Physician, 
  Department, Symptoms, Blood Pressure, Heart Rate, Temperature, 
  Lab Results, Diagnosis, Medications, Next Appointment, Notes
  Step 2: Mistral API Access

  Sign up at Mistral AI
  Get your API key
  Ensure your plan supports file upload & OCR endpoints
  Step 3: Google OAuth Credentials (Self-hosted or Cloud)

  Go to n8n → Settings → Credentials, and add:

  Google Sheets OAuth2
  Scopes needed:
  https://www.googleapis.com/auth/spreadsheets
  Step 4: Import Workflow

  Go to Workflows &gt; Import from File
  Upload your JSON file
  Replace:
  Google Sheet document ID in the "Google Sheets" node
  Your Mistral API key in HTTP Header Auth
  Step 5: (Optional) Make Form Public

  In Cloud-based n8n:

  You can expose the form as a public page
  Otherwise, connect it to your website form via webhook
  🧩 Customization Tips
  Extract More Fields

  Update the "Data cleaning" node and extend the list of fields:

  const fields = ["Name", "Diagnosis", "Medications", "Symptoms", ...];
  Add EHR or Database Integration

  After Google Sheets, chain your custom system:

  PostgreSQL
  Airtable
  Supabase
  MongoDB
  Change Output Format

  Want JSON or Markdown output for internal tools?
  Use the Set or Code node before the final output step.

  🧪 Troubleshooting
  Issue	Fix
  File upload fails	Check Mistral API key and file type
  Google Sheets not updating	Verify credentials and document ID
  No data parsed	Check OCR quality; verify field labels in document
  Workflow not triggering	Ensure webhook or form is configured correctly
  🌐 Self-Hosted vs Cloud Comparison
  Feature	Self-Hosted	n8n Cloud
  Public Form Access	Manual setup	Built-in
  OAuth App Config	Required	Pre-configured
  Storage Limits	Depends on server	Included with plan
  Scalability	Fully customizable	Scales automatically
  📣 Getting Support
  n8n Docs
  Mistral API Docs
  n8n Community
  Or reach out to: David Olusola (dimejicole21@gmail.com)
  🌟 Like this template?
  Give it a star in the template library and help other no-code builders discover it.

  "Turn scanned documents into structured data with zero code."

workflow_json:
  {"id":"rLpjED4GqjXQcQvP","meta":{"instanceId":"2000c64071c20843606b95c63795bb0797c41036047055a6586498e855b96efc","templateCredsSetupCompleted":true},"name":"Medical Records OCR Automation V1","tags":[],"nodes":[{"id":"b3717627-b305-46f3-9a5a-e818738743da","name":"On form submission","type":"n8n-nodes-base.formTrigger","position":[-740,140],"webhookId":"f9d60b5f-0a09-4654-a840-84a0f745321e","parameters":{"options":{},"formTitle":"Document OCR","formFields":{"values":[{"fieldType":"file","fieldLabel":"Document","multipleFiles":false,"requiredField":true}]},"formDescription":"Please upload your document for processing."},"typeVersion":2.2},{"id":"b3605b38-3157-4ffe-9064-72b29dcb6df8","name":"Upload to Mistral","type":"n8n-nodes-base.httpRequest","position":[-500,140],"parameters":{"url":"https://api.mistral.ai/v1/files","method":"POST","options":{},"sendBody":true,"contentType":"multipart-form-data","authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"purpose","value":"ocr"},{"name":"file","parameterType":"formBinaryData","inputDataFieldName":"Document"}]},"genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"NwRlovJbDMXbMWOj","name":"Header Auth account 2"}},"typeVersion":4.2},{"id":"ff551a26-b470-45e7-87e4-7165994783aa","name":"Get Signed URL","type":"n8n-nodes-base.httpRequest","position":[-340,140],"parameters":{"url":"=https://api.mistral.ai/v1/files/{{ $json.id }}/url","options":{},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","queryParameters":{"parameters":[{"name":"expiry","value":"24"}]}},"credentials":{"httpHeaderAuth":{"id":"NwRlovJbDMXbMWOj","name":"Header Auth account 2"}},"typeVersion":4.2},{"id":"95ca0fc3-1430-4196-809a-a1de7fa28b86","name":"Get OCR Results","type":"n8n-nodes-base.httpRequest","position":[-180,140],"parameters":{"url":"https://api.mistral.ai/v1/ocr","method":"POST","options":{},"jsonBody":"={\n  \"model\": \"mistral-ocr-latest\",\n  \"document\": {\n    \"type\": \"document_url\",\n    \"document_url\": \"{{ $json.url }}\"\n  },\n  \"include_image_base64\": true\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{}]}},"credentials":{"httpHeaderAuth":{"id":"NwRlovJbDMXbMWOj","name":"Header Auth account 2"}},"typeVersion":4.2},{"id":"99f6bf3f-365f-4119-a71a-0b46a8b1fa90","name":"Google Sheets","type":"n8n-nodes-base.googleSheets","position":[180,140],"parameters":{"columns":{"value":{"Name":"={{ $('Data cleaning').item.json.Name }}","Notes":"={{ $('Data cleaning').item.json.Notes }}"},"schema":[{"id":"Name","type":"string","display":true,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Date of Birth","type":"string","display":true,"removed":false,"required":false,"displayName":"Date of Birth","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Patient ID","type":"string","display":true,"removed":false,"required":false,"displayName":"Patient ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Date of Visit","type":"string","display":true,"removed":false,"required":false,"displayName":"Date of Visit","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Referring Physician","type":"string","display":true,"removed":false,"required":false,"displayName":"Referring Physician","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Department","type":"string","display":true,"removed":false,"required":false,"displayName":"Department","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Symptoms","type":"string","display":true,"removed":false,"required":false,"displayName":"Symptoms","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Blood Pressure","type":"string","display":true,"removed":false,"required":false,"displayName":"Blood Pressure","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Heart Rate","type":"string","display":true,"removed":false,"required":false,"displayName":"Heart Rate","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Temperature","type":"string","display":true,"removed":false,"required":false,"displayName":"Temperature","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Lab Results","type":"string","display":true,"removed":false,"required":false,"displayName":"Lab Results","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Diagnosis","type":"string","display":true,"removed":false,"required":false,"displayName":"Diagnosis","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Medications","type":"string","display":true,"removed":false,"required":false,"displayName":"Medications","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Next Appointment","type":"string","display":true,"removed":false,"required":false,"displayName":"Next Appointment","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Notes","type":"string","display":true,"required":false,"displayName":"Notes","defaultMatch":false,"canBeUsedToMatch":true},{"id":"pages","type":"string","display":true,"removed":false,"required":false,"displayName":"pages","defaultMatch":false,"canBeUsedToMatch":true},{"id":"model","type":"string","display":true,"removed":false,"required":false,"displayName":"model","defaultMatch":false,"canBeUsedToMatch":true},{"id":"usage_info","type":"string","display":true,"removed":false,"required":false,"displayName":"usage_info","defaultMatch":false,"canBeUsedToMatch":true},{"id":"myNewField","type":"string","display":true,"removed":false,"required":false,"displayName":"myNewField","defaultMatch":false,"canBeUsedToMatch":true},{"id":"markdown","type":"string","display":true,"removed":false,"required":false,"displayName":"markdown","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":1417843853,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1jRNGNrHAFnvNAAnCHW0vM2784GxIPolzT4x_rFWZRvU/edit#gid=1417843853","cachedResultName":"Patients"},"documentId":{"__rl":true,"mode":"list","value":"1jRNGNrHAFnvNAAnCHW0vM2784GxIPolzT4x_rFWZRvU","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1jRNGNrHAFnvNAAnCHW0vM2784GxIPolzT4x_rFWZRvU/edit?usp=drivesdk","cachedResultName":"Medical Records - Extracted"}},"credentials":{"googleSheetsOAuth2Api":{"id":"b0RUCwZZREhRN85o","name":"Google Sheets account"}},"typeVersion":4.5},{"id":"1e38c3a0-d0d8-457c-93e9-f038df571790","name":"Data cleaning","type":"n8n-nodes-base.code","position":[-20,140],"parameters":{"jsCode":"// Get OCR results from the input\nconst ocrResults = $input.all().map((item) => item.json);\n\n// Define fields to extract\nconst fields = [\n  \"Name\",\n  \"Date of Birth\",\n  \"Patient ID\",\n  \"Date of Visit\",\n  \"Referring Physician\",\n  \"Department\",\n  \"Symptoms\",\n  \"Blood Pressure\",\n  \"Heart Rate\",\n  \"Temperature\",\n  \"Lab Results\",\n  \"Diagnosis\",\n  \"Medications\",\n  \"Next Appointment\",\n  \"Notes\",\n];\n\nconst allPatientRecords = [];\n\n// Process each OCR result\nocrResults.forEach((result) => {\n  // Combine all pages into a single text for processing\n  let allText = \"\";\n  if (result.pages && Array.isArray(result.pages)) {\n    result.pages.forEach((page) => {\n      if (page.markdown) {\n        allText += page.markdown + \"\\n\";\n      }\n    });\n  }\n  \n  // Split the text into patient record sections\n  // Look for patterns like \"Patient Record 1\", \"🧾 Patient Record 2\", etc.\n  const recordSections = allText.split(/(?:🧾\\s*)?Patient Record\\s*\\d+/g).filter(section => section.trim().length > 0);\n  console.log(`Found ${recordSections.length} potential patient record sections`);\n  \n  // Process each patient record section\n  recordSections.forEach((section, index) => {\n    // Create a new patient record object\n    const patientRecord = {};\n    \n    // Add Patient Name which has a different pattern than other fields\n    const nameMatch = section.match(/Patient Name:\\s*([^\\n]+)/);\n    if (nameMatch) {\n      patientRecord[\"Name\"] = nameMatch[1].trim();\n    }\n    \n    // Extract all other fields\n    fields.forEach((field) => {\n      if (field === \"Name\") return; // Already handled above\n      \n      // Create a regex pattern for the field\n      const pattern = new RegExp(`${field}:\\\\s*([^\\\\n]+)`, 'i');\n      const match = section.match(pattern);\n      \n      if (match) {\n        patientRecord[field] = match[1].trim();\n      }\n      \n      // Special handling for Lab Results which might span multiple lines\n      if (field === \"Lab Results\" && !patientRecord[field]) {\n        const labStartIndex = section.indexOf(\"Lab Results:\");\n        if (labStartIndex !== -1) {\n          let labEndIndex = -1;\n          \n          // Find where lab results end (before Diagnosis or next field)\n          for (const nextField of [\"Diagnosis\", \"Medications\", \"Next Appointment\"]) {\n            const nextFieldIndex = section.indexOf(`${nextField}:`, labStartIndex);\n            if (nextFieldIndex !== -1 && (labEndIndex === -1 || nextFieldIndex < labEndIndex)) {\n              labEndIndex = nextFieldIndex;\n            }\n          }\n          \n          if (labEndIndex !== -1) {\n            let labResults = section.substring(labStartIndex + \"Lab Results:\".length, labEndIndex).trim();\n            // Clean up lab results\n            labResults = labResults.replace(/●/g, '').replace(/\\n\\s*/g, ', ').trim();\n            patientRecord[field] = labResults;\n          }\n        }\n      }\n    });\n    \n    // Only add records that have at least a name or patient ID\n    if (patientRecord[\"Name\"] || patientRecord[\"Patient ID\"]) {\n      console.log(`Extracted data for patient ${index + 1}: ${patientRecord[\"Name\"] || patientRecord[\"Patient ID\"]}`);\n      allPatientRecords.push(patientRecord);\n    }\n  });\n});\n\nconsole.log(`Total patient records extracted: ${allPatientRecords.length}`);\n\n// Return all extracted patient records\nreturn allPatientRecords;"},"typeVersion":2},{"id":"c02eba73-56cc-4757-b010-cba7d7f34e04","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1320,-360],"parameters":{"width":1820,"height":1060,"content":"## 🏥 Medical Records OCR Automation (n8n)\n**🧠 Sticky Node Setup Guide**\n\n##  Author :  [David Olusola](https://www.daexai.com)\n\n\n1. 📥 On form submission\nType: Form Trigger\nPurpose: Captures uploaded documents from users.\nLabel: “Document OCR”\nWhat to Stick:\n\n“Receives uploaded document from user to begin OCR processing.”\n2. ⬆️ Upload to Mistral\nType: HTTP Request\nMethod: POST to https://api.mistral.ai/v1/files\nAuth: HTTP Header Auth\nWhat to Stick:\n\n“Sends uploaded document to Mistral for OCR file hosting.”\n3. 🔗 Get Signed URL\nType: HTTP Request\nPurpose: Retrieves a temporary signed URL from Mistral to access the uploaded file.\nWhat to Stick:\n\n“Gets secure download URL from Mistral for the uploaded document.”\n4. 🧠 Get OCR Results\nType: HTTP Request\nPurpose: Sends signed URL to Mistral OCR API to extract text content.\nWhat to Stick:\n\n“Calls Mistral OCR with signed document URL to extract data.”\n5. 🧹 Data cleaning\nType: Code Node (JavaScript)\nPurpose:\n\nParses OCR text\nExtracts structured fields like Patient Name, Diagnosis, Medications, etc.\nHandles multi-record documents.\nWhat to Stick:\n“Processes raw OCR text into structured patient records for sheet entry.”\n6. 📄 Google Sheets\nType: Google Sheets Append\nTarget: Medical Records → “Patients” sheet\nPurpose: Writes cleaned data into the spreadsheet.\nWhat to Stick:\nMake a copy [Google sheet](https://docs.google.com/spreadsheets/d/1jRNGNrHAFnvNAAnCHW0vM2784GxIPolzT4x_rFWZRvU/edit?usp=sharing)\n\n“Appends cleaned patient data to the Google Sheet.”\n✅ General Notes:\n\nWebhook ID: f9d60b5f-0a09-4654-a840-84a0f745321e (for testing or routing webhooks)\nFile Field: Named Document in form\nImportant Fields Extracted:\nName, DOB, Patient ID, Diagnosis, Medications, Lab Results, Notes, etc."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"63643d00-01e0-4533-8ddc-0537590f8408","connections":{"Data cleaning":{"main":[[{"node":"Google Sheets","type":"main","index":0}]]},"Get Signed URL":{"main":[[{"node":"Get OCR Results","type":"main","index":0}]]},"Get OCR Results":{"main":[[{"node":"Data cleaning","type":"main","index":0}]]},"Upload to Mistral":{"main":[[{"node":"Get Signed URL","type":"main","index":0}]]},"On form submission":{"main":[[{"node":"Upload to Mistral","type":"main","index":0}]]}}}


name: AI Podcast Generator with RSS Feed & ElevenLabs Voice
author_name: David Olusola
author_username: dae221
categories: []
created_at: 2025-06-21T02:34:28.467Z
updated_at: 2025-06-21T02:34:28.467Z
url: https://n8n.io/workflows/5084
scraped_at: 2025-07-06 21:16:30
description:
  🧠 Overview
  This n8n automation turns any RSS feed into a spoken podcast episode, using OpenAI for summarization and ElevenLabs for voice generation. The final audio is then sent straight to your Telegram for instant publishing or listening.

  📌 Works with both self-hosted and cloud-based n8n instances. No-code podcasting made simple.
  👥 Who is this for?
  Podcasters & creators who want to automate content
  News curators or newsletter writers
  Agencies turning articles into daily voice updates
  Anyone who wants to voice AI-generated summaries and distribute via Telegram
  🚀 What this workflow automates
  📡 Pulls the latest article from your chosen RSS feed
  🧠 Uses OpenAI to summarize or rewrite the article
  🗣️ Generates a natural-sounding podcast using ElevenLabs
  📲 Sends the audio file to your Telegram inbox
  🧰 What You’ll Need
  🔗 RSS feed link (any source of fresh content)
  🔑 ElevenLabs API key (for voice generation)
  🧠 OpenAI API key (for summarization or rewriting)
  💬 Telegram Bot Token & your personal Chat ID (to receive the audio)
  🛠️ Setup Instructions
  Step 1: Get Your Chat ID & Telegram Bot Token

  Open Telegram
  Search for @BotFather
  Create a new bot → Copy the token
  Search for @userinfobot → Copy your chat ID
  Save both for use in the Telegram node
  Step 2: Create/Open an ElevenLabs Account

  Go to https://www.elevenlabs.io
  Copy your API key from the dashboard
  Choose your voice (the voice ID will be used in the workflow)
  Ensure your plan supports audio generation (free tier includes monthly usage)
  Step 3: Generate an OpenAI API Key

  Log in to https://platform.openai.com
  Generate your API key
  Use GPT-4 or GPT-3.5 for best results
  Step 4: Configure Credentials in n8n

  In n8n → Settings → Credentials, set up:

  OpenAI API → Add your key
  HTTP Header Auth → For ElevenLabs
  Telegram Bot → Add your token
  Step 5: Import and Configure the Workflow

  Go to n8n → Workflows → Import
  Upload your .json file
  In the RSS node, replace the default link with your own feed
  Update the ElevenLabs node with:
  Your API key
  Voice ID
  Update Telegram node with:
  Your bot token
  Your personal chat ID
  🧩 Customization Tips
  Change the Feed Source

  Swap out the RSS feed URL to pull from different blogs, news sites, or content platforms.

  Control Script Style

  Edit the OpenAI prompt to:

  Make it more casual or formal
  Add a call-to-action or intro line
  Include a sign-off (e.g., “Thanks for listening!”)
  Use Different Voices

  In ElevenLabs, you can:

  Create a custom voice
  Choose one with a specific accent or tone
  Adjust stability or clarity for better results
  Add Distribution Channels

  Send the audio to:

  Email
  Notion
  Google Drive
  A podcast host with API support (e.g. Podbean, Buzzsprout)
  🧪 Troubleshooting
  Problem	Solution
  Audio not generating	Check ElevenLabs voice ID and credit limits
  Telegram not sending	Ensure bot token and chat ID are correct
  RSS not pulling content	Verify feed URL and test in browser
  Summary is too short/long	Adjust prompt or temperature in OpenAI node
  📣 Getting Support
  n8n Docs
  ElevenLabs API Docs
  OpenAI API Reference
  n8n Community
  💌 Need help or customization? Email: dimejicole21@gmail.com
  🌟 Enjoyed this template?
  Give it a ⭐ in the library and help creators automate their podcast workflow with AI and voice tech!

  “From RSS feed to voiced podcast in minutes — fully automated.”

nodes_used:
  ["n8n-nodes-base.telegram","n8n-nodes-base.googleDrive","n8n-nodes-base.gmail","n8n-nodes-base.code","@n8n/n8n-nodes-langchain.openAi"]

workflow_json:
  {"id":"FzYlH9bVnmWRXuX1","meta":{"instanceId":"2000c64071c20843606b95c63795bb0797c41036047055a6586498e855b96efc","templateCredsSetupCompleted":true},"name":"AI Podcast Generator with RSS Feed & ElevenLabs Voice","tags":[],"nodes":[{"id":"09d6e8c5-d872-4aa2-8ae7-a04ec75fcd42","name":"RSS Feed Read","type":"n8n-nodes-base.rssFeedRead","position":[-200,460],"parameters":{},"typeVersion":1},{"id":"676e3464-7388-4847-bae9-72b5e24d51c1","name":"Extract Content","type":"n8n-nodes-base.code","position":[20,460],"parameters":{},"typeVersion":2},{"id":"0a4be47a-489a-41f7-9cf2-23c4ecbce7b2","name":"Upload to Google Drive","type":"n8n-nodes-base.googleDrive","position":[1056,360],"parameters":{},"typeVersion":3},{"id":"8625c58c-8ef8-4c00-b860-c5e43c793dca","name":"Send Telegram Notification","type":"n8n-nodes-base.telegram","position":[1276,260],"webhookId":"deda1da3-b205-4eb1-b45d-d5beaef7000c","parameters":{},"typeVersion":1.1},{"id":"eaace909-273b-49f0-9c57-569b2ce90326","name":"Send Email Notification","type":"n8n-nodes-base.gmail","position":[1276,460],"parameters":{},"typeVersion":1},{"id":"03adbda5-91b9-46b2-8a0d-a75734f534c3","name":"Check Content Length","type":"n8n-nodes-base.if","position":[240,460],"parameters":{},"typeVersion":2},{"id":"55a5326a-a4fe-4f89-977c-d9de6e30c3e4","name":"Content Too Short Error","type":"n8n-nodes-base.stopAndError","position":[538,560],"parameters":{},"typeVersion":1},{"id":"5d7d2089-f4ac-475e-9ed7-c2db68b735ab","name":"ElevenLabs","type":"@elevenlabs/n8n-nodes-elevenlabs.elevenLabs","position":[836,360],"parameters":{},"typeVersion":1},{"id":"aa503004-5e2c-4e8f-aa4c-32055ff2cfa8","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-420,460],"parameters":{},"typeVersion":1.2},{"id":"0493427d-d3c2-4801-920a-cbb61272621b","name":"Generate Podcast Script","type":"@n8n/n8n-nodes-langchain.openAi","position":[460,360],"parameters":{},"typeVersion":1.8},{"id":"2395bbc7-95d9-4a29-b439-7e003c2235fc","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-460,20],"parameters":{"content":""},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"2742c512-5a69-4f11-be78-28471ab98b20","connections":{"ElevenLabs":{"main":[[{"node":"Upload to Google Drive","type":"main","index":0}]]},"RSS Feed Read":{"main":[[{"node":"Extract Content","type":"main","index":0}]]},"Extract Content":{"main":[[{"node":"Check Content Length","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"RSS Feed Read","type":"main","index":0}]]},"Check Content Length":{"main":[[{"node":"Generate Podcast Script","type":"main","index":0}],[{"node":"Content Too Short Error","type":"main","index":0}]]},"Upload to Google Drive":{"main":[[{"node":"Send Email Notification","type":"main","index":0},{"node":"Send Telegram Notification","type":"main","index":0}]]},"Generate Podcast Script":{"main":[[{"node":"ElevenLabs","type":"main","index":0}]]}}}


name: Get an automated, curated newsletter everyday using Perplexity and Gmail
author_name: Abhijay Vuyyuru
author_username: abhijayvuyyuru
nodes_used: ["n8n-nodes-base.gmail","n8n-nodes-base.code","n8n-nodes-base.perplexity"]
categories: []
created_at: 2025-06-21T08:42:02.895Z
updated_at: 2025-06-21T08:42:02.895Z
url: https://n8n.io/workflows/5087
scraped_at: 2025-07-06 21:16:30
description:
  This workflow contains community nodes that are only compatible with the self-hosted version of n8n. 

  Setup Time
  5-10 minutes

  Problem
  ⏳ Researching and personalizing outreach is slow and manual!

  You spend hours searching for the right people, reading through profiles, and then writing custom emails—only to repeat the process for every new lead or opportunity. It’s tedious, error-prone, and not scalable.

  What if you could get a beautifully formatted, ready-to-send newsletter in your Gmail drafts—automatically, every day?

  That’s what this Perplexity Newsletter Workflow does, powered by n8n.

  Prerequisites
  n8n account (self-hosted or cloud)
  Perplexity API key (or OpenAI API key for similar LLMs)
  Gmail account (for sending emails)
  (Optional) Google Sheets account (for archiving newsletters)
  Who is this for?
  🎯 Product Managers who want to stay ahead of trends
  🎯 MBA aspirants tracking admission news
  🎯 AI professionals and enthusiasts seeking curated updates
  🎯 Anyone who wants a daily, personalized, multi-topic newsletter—without manual work

  Step-by-step workflow
  Setup time: 5-10 minutes

  Trigger

  Use a Cron node to schedule the workflow (e.g., every morning at 8am).
  Fetch News from Perplexity

  Add three HTTP Request nodes (or Perplexity nodes if available):
  One for MBA News
  One for Product Management News
  One for AI Automation News
  Each node sends a prompt to Perplexity and receives a summary with citations.
  Merge News Items

  Use a Merge node (mode: Append) to combine the three news responses.
  Format Newsletter

  Add a Code node after the Merge node.
  In the Code node, format each news item with a section header (e.g., “MBA News”, “Product Management”, “AI Automation News”), apply HTML formatting, and combine all into a single HTML message.
  (Use the code from our previous message for beautiful formatting and sectioning.)
  Send Email

  Add a Gmail node.
  Set the “HTML” field to the formatted newsletter from the Code node.
  Set the “Subject” to something like “🤖 Your Daily Perplexity Newsletter”.
  (Optional) Archive to Google Sheets

  Add a Google Sheets node to append the newsletter content and date for future reference.

  Sample Output

  A single, beautifully formatted email in your Gmail drafts, with three clearly labeled sections, clickable sources, and all the latest insights—ready to send or review.

  Ready to automate your daily insights?
  Set up this workflow in n8n and never miss an update again!

  Customization

  Change schedule time in the Cron node
  Modify news topics or prompts in the Perplexity nodes
  Adjust section titles or email styling in the Format Newsletter (Code) node

workflow_json:
  {"id":"3H9yJlSwjn8E3KpP","meta":{"instanceId":"7b22476bf9699de09fe66fed92056e8ae798418cc9901fa9bd85bb46439116b8","templateId":"4412","templateCredsSetupCompleted":true},"name":"Perplexity Newsletter","tags":[],"nodes":[{"id":"a808eaa1-744e-4a01-98d8-d96428346d11","name":"Daily Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[360,640],"parameters":{"rule":{"interval":[{"triggerAtHour":8}]}},"typeVersion":1.2},{"id":"e4e02799-c6e2-44ce-8015-5fd71ef9a848","name":"Workflow Documentation","type":"n8n-nodes-base.stickyNote","position":[180,200],"parameters":{"color":6,"width":350,"height":400,"content":"## Perplexity Newsletter Workflow\nThis workflow runs every day at 9 AM to:\n\nFetch Curated News: Uses Perplexity to gather the latest updates in three domains:\n🎓 MBA News (admissions, trends, opportunities)\n🛠️ Product Management (roles, skills, industry shifts)\n🤖 AI Automation (tools, breakthroughs, job market)\n\nFormat Newsletter: Combines all news into a single, beautifully formatted HTML email with clear section headers and clickable links.\n\nSend to Gmail Drafts: Saves the newsletter as a draft in your Gmail account, ready for review or sending.\nSetup Required:\nPerplexity (or OpenAI) API credentials\nGmail account connected to n8n\nUpdate recipient email address in Gmail node'\n\nCustomization:\nChange schedule time in the Cron node\nModify news topics or prompts in the Perplexity nodes\nAdjust section titles or email styling in the Format Newsletter (Code) node"},"typeVersion":1},{"id":"dd06d61f-a4bd-4813-9586-d690e0177dc8","name":"Setup Instructions","type":"n8n-nodes-base.stickyNote","position":[1020,280],"parameters":{"color":3,"width":300,"height":260,"content":"⚙️ **Configuration Needed:**\n\n1. **Perplexity API**: Add your Perplexity API key.\n\n2. **Email Settings**: \n   - Update SMTP credentials in \"email-credentials\"\n   - Change recipient email in \"Send Email Summary\" node\n   - Update sender email if needed\n\n3. **Timing**: Modify schedule in \"Daily Trigger\" if you want different timing\n\n4. **Content**: Customize the news categories or add more in the Perplexity prompt"},"typeVersion":1},{"id":"492432d5-3c18-4517-85b9-4407c4ed26a3","name":"Gmail","type":"n8n-nodes-base.gmail","position":[1500,640],"webhookId":"6e5776e8-b6b9-4c56-8b3a-812f68959433","parameters":{"sendTo":"v.abhijay@gmail.com","message":"={{ $json.message }}","options":{},"subject":"=Aspyre Community Content"},"credentials":{"gmailOAuth2":{"id":"nl3SKVasBIyYDr5a","name":"Gmail account"}},"typeVersion":2.1},{"id":"db433d7c-e212-4c9b-91d9-195df9ac0a95","name":"Set Dates","type":"n8n-nodes-base.set","position":[600,640],"parameters":{"options":{},"assignments":{"assignments":[{"id":"current-date","name":"currentDate","type":"string","value":"={{ $now.format('yyyy-MM-dd') }}"},{"id":"yesterday-date","name":"lastweekDate","type":"string","value":"={{ $now.minus({days: 7}).format('yyyy-MM-dd') }}"}]}},"typeVersion":3.4},{"id":"73311be6-834f-4065-9018-7e3d73e11c5a","name":"MBA News","type":"n8n-nodes-base.perplexity","position":[840,440],"parameters":{"model":"sonar","options":{},"messages":{"message":[{"role":"system","content":"You're an expert content curator for an international student community applying for MBA programs abroad. Your job is to find a recent, high-quality news link that directly helps students make better decisions about applying. Prioritize articles about:\n\nMBA rankings or business school reputation\n\nScholarships, fellowships, or financial aid\n\nVisa or work authorization updates\n\nYour tone should be natural and human — write 1–2 lines of insight or commentary as if you're Abhijay Arora, an HBS grad helping others navigate this journey. Be thoughtful, sharp, and slightly provocative. Don’t explain. Don’t summarize. Just react like you would in a WhatsApp group.\n\nOutput format:\n\n\n[Headline or title]  \n[URL]  \n[1–2 lines of Abhijay's commentary]"},{"content":"=Give me 1 relevant link published between {{ $json.currentDate }} and {{ $json.lastweekDate }} for Indian students applying to MBA programs abroad this year, with a short, thought-provoking, concise commentary."}]},"simplify":true,"requestOptions":{}},"credentials":{"perplexityApi":{"id":"5nXSmnOqfBNdG3Qo","name":"Perplexity account"}},"typeVersion":1},{"id":"50d29156-abfb-47cd-ab76-1c053d64cd28","name":"Product Management","type":"n8n-nodes-base.perplexity","position":[840,640],"parameters":{"model":"sonar","options":{},"messages":{"message":[{"role":"system","content":"You track new product releases and product management job trends. Your job is to surface one recent link that would interest someone trying to break into product management or stay sharp as a PM. Focus on:\n\nA major tech product or feature launch\n\nA newly listed PM job or hiring signal\n\nProduct strategy discussions or shifts\n\nAfter sharing the link, write a smart, brief reaction (1–2 lines) like a PM would — ideally something that could spark debate or reflection. Use the voice of Abhijay Arora: product-savvy, no fluff, connects the dots.\n\nOutput format:\n\n[Headline or title]  \n[URL]  \n[1–2 lines of product thinking or reaction]"},{"content":"=Share 1 recent product launch or PM job link published between {{ $json.currentDate }} and {{ $json.lastweekDate }} with a smart one-liner commentary."}]},"simplify":true,"requestOptions":{}},"credentials":{"perplexityApi":{"id":"5nXSmnOqfBNdG3Qo","name":"Perplexity account"}},"typeVersion":1},{"id":"10c040d0-70ed-443b-bd64-3ff44f88b820","name":"AI Automation News","type":"n8n-nodes-base.perplexity","position":[840,820],"parameters":{"model":"sonar","options":{},"messages":{"message":[{"role":"system","content":"You uncover practical ways professionals can use AI (especially agentic workflows) to work smarter. Find one recent article, video, or guide that shows:\n\nA useful AI tool to automate tasks\n\nA real workflow that saves time or improves job hunting\n\nA non-obvious productivity hack using AI\n\nWrite a crisp 1–2 line reaction in the voice of Abhijay Arora: strategic, curious, and practical. Make people want to try it, rethink their current process, or share it. No fluff. No generic takes.\n\nOutput format:\n\n\n\n[Title or description of the idea]  \n[URL]  \n[1–2 lines of commentary that provoke or teach]"},{"content":"=Find 1 link published between {{ $json.currentDate }} and {{ $json.lastweekDate }}  that shows a practical AI workflow to boost job productivity or improve job search, with a short reaction."}]},"simplify":true,"requestOptions":{}},"credentials":{"perplexityApi":{"id":"5nXSmnOqfBNdG3Qo","name":"Perplexity account"}},"typeVersion":1},{"id":"800e6cda-ca99-4600-aad4-d293be6c8f3b","name":"Merge","type":"n8n-nodes-base.merge","position":[1100,640],"parameters":{"numberInputs":3},"typeVersion":3.2},{"id":"767b2f00-757b-4c61-af1b-1a04d9a9a919","name":"Combine messages","type":"n8n-nodes-base.code","position":[1280,640],"parameters":{"jsCode":"// Define section titles in the order your items arrive\nconst sectionTitles = [\n  \"MBA News\",\n  \"Product Management\",\n  \"AI Automation News\"\n];\n\n// Combine and format each message with a section header\nconst formattedSections = items.map((item, idx) => {\n  const title = sectionTitles[idx] || `Section ${idx + 1}`;\n  const content = item.json.message || '';\n\n  // Apply your formatting, showing the actual URL as the link text\n  const formattedContent = content\n    .replace(/\\n/g, '<br>')\n    .replace(/## (.*?)<br>/g, '<h2 style=\"color: #2563eb; margin: 25px 0 15px 0; border-bottom: 2px solid #e5e7eb; padding-bottom: 8px;\">$1</h2>')\n    .replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>')\n    .replace(/\\*(.*?)\\*/g, '<em>$1</em>')\n    .replace(/- \\*\\*(.*?)\\*\\*:/g, '<div style=\"margin: 15px 0;\"><strong style=\"color: #1e40af;\">• $1:</strong>')\n    .replace(/\\[\\d+\\]/g, '') // Remove citation numbers for cleaner display\n    .replace(/(https?:\\/\\/[^\\s<]+)/g, '<a href=\"$1\" style=\"color: #2563eb; text-decoration: none;\">$1</a>');\n\n  return `\n    <section style=\"margin-bottom: 40px;\">\n      <h2 style=\"color: #2563eb; margin: 25px 0 15px 0; border-bottom: 2px solid #e5e7eb; padding-bottom: 8px;\">${title}</h2>\n      <div>${formattedContent}</div>\n    </section>\n  `;\n});\n\n// Combine all sections into a single message string\nreturn [{\n  json: {\n    message: formattedSections.join('')\n  }\n}];"},"typeVersion":2}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"54b8123c-00a8-426f-bebd-ece98a63a6e8","connections":{"Gmail":{"main":[[]]},"Merge":{"main":[[{"node":"Combine messages","type":"main","index":0}]]},"MBA News":{"main":[[{"node":"Merge","type":"main","index":0}]]},"Set Dates":{"main":[[{"node":"MBA News","type":"main","index":0},{"node":"Product Management","type":"main","index":0},{"node":"AI Automation News","type":"main","index":0}]]},"Daily Trigger":{"main":[[{"node":"Set Dates","type":"main","index":0}]]},"Combine messages":{"main":[[{"node":"Gmail","type":"main","index":0}]]},"AI Automation News":{"main":[[{"node":"Merge","type":"main","index":2}]]},"Product Management":{"main":[[{"node":"Merge","type":"main","index":1}]]}}}


name: AI-Powered Restaurant Order and Menu Management with WhatsApp and Google Gemini
author_name: Tamer
author_username: tamerelzein
categories: []
created_at: 2025-06-21T10:16:38.019Z
updated_at: 2025-06-21T10:16:38.019Z
url: https://n8n.io/workflows/5096
scraped_at: 2025-07-06 21:16:30
description:
  RestaurantBot Pro - WhatsApp Order Automation System
  Description
  RestaurantBot Pro is a complete AI-powered restaurant ordering system that transforms your WhatsApp into a smart ordering platform. This intelligent automation handles customer interactions in any language you configure, manages your menu database, processes orders, and coordinates delivery operations - all through familiar WhatsApp messaging.
  How It Works
  Customer Experience:

  Customers message your restaurant's WhatsApp number in their preferred language
  The AI assistant greets them and presents your current menu with prices
  Customers can ask questions about items, place orders, and specify delivery details
  The system remembers customer preferences and order history for personalized service
  Customers receive instant confirmation and order updates

  Restaurant Operations:

  All orders are automatically saved to your database with customer details
  The system generates formatted messages for your delivery team with all order specifics
  Menu items are stored using advanced AI search, making it easy to find and recommend dishes
  Customer database grows automatically, tracking preferences and order history
  Real-time order processing with preparation time estimates

  Smart Features:

  Understands natural language ordering in any language (easily customizable in system settings)
  Intelligent menu recommendations based on customer queries
  Automatic price calculations and order summaries
  Memory system that recalls customer preferences across conversations
  Seamless integration between customer orders and delivery coordination
  Fully customizable language support - simply modify the AI agent's system instructions to serve customers in Arabic, English, French, Spanish, or any language of your choice

  Setup Steps
  Database Preparation

  Set up your restaurant database with customer and order tables
  Configure AI-powered menu search capabilities
  Enable vector extensions for intelligent menu recommendations

  WhatsApp Integration

  Connect your business WhatsApp account
  Configure webhook endpoints for message handling
  Set up automated responses and delivery notifications

  AI Configuration

  Connect Google Gemini AI models for natural language processing
  Customize language settings by editing the AI agent's system instructions to match your target audience
  Set up structured order processing and validation

  Menu Management

  Add your menu items through the admin interface
  Include prices, descriptions, categories, and preparation times
  Enable intelligent search and recommendations

  Delivery Setup : just add delevery phone number to the "Send Order to delevery" node


  Perfect for: Restaurants serving any cuisine and customer base - whether you need Arabic, English, French, Spanish, or any other language support. Simply adjust the AI agent's language settings to match your customers' preferences. Ideal for traditional ethnic restaurants, international chains, local eateries, delivery-focused establishments, and any restaurant wanting to modernize their ordering process while maintaining authentic customer communication in their preferred language.

nodes_used:
  ["n8n-nodes-base.supabase","n8n-nodes-base.whatsApp","@n8n/n8n-nodes-langchain.agent","@n8n/n8n-nodes-langchain.memoryBufferWindow","@n8n/n8n-nodes-langchain.outputParserStructured","@n8n/n8n-nodes-langchain.vectorStoreSupabase","@n8n/n8n-nodes-langchain.documentDefaultDataLoader","@n8n/n8n-nodes-langchain.embeddingsGoogleGemini","@n8n/n8n-nodes-langchain.lmChatGoogleGemini"]

workflow_json:
  {"id":"EKJBH7M555cnXxwU","meta":{"instanceId":"b5a944ba8839572df11fe1edab9898c0cc0a8b920d79a8a9e1ccb59618a73552","templateCredsSetupCompleted":true},"name":"Restaurant Orders and Menu automation RAG  System Template","tags":[],"nodes":[{"id":"745c722b-897d-4113-bda4-aae1c6d3b27f","name":"WhatsApp Trigger","type":"n8n-nodes-base.whatsAppTrigger","position":[-400,-280],"webhookId":"cdf8ab22-d835-4254-87d0-745c5b689f64","parameters":{},"typeVersion":1},{"id":"9b9f346b-d86f-4179-a722-90dfacf01d20","name":"AI Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[632,-280],"parameters":{},"typeVersion":2},{"id":"839ec974-57ea-40d9-ad5d-79275cd25f22","name":"Send last message","type":"n8n-nodes-base.whatsApp","position":[1336,-280],"webhookId":"3ea2d08e-30a4-4408-8140-d62f37e71fde","parameters":{},"typeVersion":1},{"id":"e34bdcc9-e4df-4e82-8e17-dfacbedd5a41","name":"Get user","type":"n8n-nodes-base.supabase","position":[-180,-280],"parameters":{},"typeVersion":1,"alwaysOutputData":true},{"id":"7ef6846e-71a6-4a9a-a31e-4125c937c5d7","name":"Check if user exists","type":"n8n-nodes-base.if","position":[40,-280],"parameters":{},"typeVersion":2.2},{"id":"73dcb97b-75cf-4c47-9138-f709ffcc7c4c","name":"Add user to db","type":"n8n-nodes-base.supabase","position":[260,-205],"parameters":{},"typeVersion":1},{"id":"48a8dc25-748d-4329-97f0-0b1d9272378a","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[640,-120],"parameters":{},"typeVersion":1.3},{"id":"8c89d461-b237-49e0-9b6d-30d1477fad11","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[920,-120],"parameters":{},"typeVersion":1.3},{"id":"9a7b9c60-7673-4622-962f-45198b77894a","name":"If","type":"n8n-nodes-base.if","position":[1556,-280],"parameters":{},"typeVersion":2.2},{"id":"9ffd5bae-b8f6-4a1c-b095-b4af9c570802","name":"Create order in database","type":"n8n-nodes-base.supabaseTool","position":[580,180],"parameters":{},"typeVersion":1},{"id":"90aaf3f1-45a5-4b85-947e-c66b90a1034b","name":"Add menu item","type":"n8n-nodes-base.formTrigger","position":[-400,580],"webhookId":"4b906832-a75c-4899-bb16-191e3186644d","parameters":{},"typeVersion":2.2},{"id":"68b376ad-c032-4dd4-8b81-e3b746ef6852","name":"Default Data Loader","type":"@n8n/n8n-nodes-langchain.documentDefaultDataLoader","position":[0,1040],"parameters":{},"typeVersion":1.1},{"id":"507ca6a5-4e84-46ac-8685-80d34665f739","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-740,-300],"parameters":{"content":""},"typeVersion":1},{"id":"d14ab52b-be57-4848-9479-5e281e997eae","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-720,560],"parameters":{"content":""},"typeVersion":1},{"id":"dc6aea8a-3817-401c-881d-16473d1a3a6c","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-1840,-500],"parameters":{"content":""},"typeVersion":1},{"id":"8480f082-c333-465c-9013-ccf7c4ca0a93","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[480,-100],"parameters":{},"typeVersion":1},{"id":"9ca59c15-6c8d-4075-a8e0-5702b1b9253b","name":"Embeddings Google Gemini","type":"@n8n/n8n-nodes-langchain.embeddingsGoogleGemini","position":[340,840],"parameters":{},"typeVersion":1},{"id":"b379404a-2990-4ac8-bf8d-52f8140848ff","name":"Google Gemini Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[1040,20],"parameters":{},"typeVersion":1},{"id":"c17857f8-8723-413c-a366-ac0227a2b74c","name":"Send Order to delevery guy","type":"n8n-nodes-base.whatsApp","position":[1800,-340],"webhookId":"2bdb6a82-ba1e-4a04-80d3-890e8e9daf50","parameters":{},"typeVersion":1},{"id":"835ebb28-6c0f-44c9-88bf-84589275e40b","name":"Insert Menu Item to Vector Store","type":"@n8n/n8n-nodes-langchain.vectorStoreSupabase","position":[-120,580],"parameters":{},"typeVersion":1.3},{"id":"89134aa0-5a75-4f0d-b369-6206eccba221","name":"Get Menu Items from Vector Store","type":"@n8n/n8n-nodes-langchain.vectorStoreSupabase","position":[740,200],"parameters":{},"typeVersion":1.3}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"8b3b31b9-18af-4967-8302-a737298764fa","connections":{"If":{"main":[[{"node":"Send Order to delevery guy","type":"main","index":0}]]},"AI Agent":{"main":[[{"node":"Send last message","type":"main","index":0}]]},"Get user":{"main":[[{"node":"Check if user exists","type":"main","index":0}]]},"Add menu item":{"main":[[{"node":"Insert Menu Item to Vector Store","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"AI Agent","type":"ai_memory","index":0}]]},"Add user to db":{"main":[[{"node":"AI Agent","type":"main","index":0}]]},"WhatsApp Trigger":{"main":[[{"node":"Get user","type":"main","index":0}]]},"Send last message":{"main":[[{"node":"If","type":"main","index":0}]]},"Default Data Loader":{"ai_document":[[{"node":"Insert Menu Item to Vector Store","type":"ai_document","index":0}]]},"Check if user exists":{"main":[[{"node":"AI Agent","type":"main","index":0}],[{"node":"Add user to db","type":"main","index":0}]]},"Create order in database":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Embeddings Google Gemini":{"ai_embedding":[[{"node":"Insert Menu Item to Vector Store","type":"ai_embedding","index":0},{"node":"Get Menu Items from Vector Store","type":"ai_embedding","index":0}]]},"Google Gemini 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}]]},"Google Gemini Chat Model1":{"ai_languageModel":[[{"node":"Structured Output Parser","type":"ai_languageModel","index":0}]]},"Get Menu Items from Vector Store":{"ai_tool":[[{"node":"AI Agent","type":"ai_tool","index":0}]]},"Insert Menu Item to Vector Store":{"ai_tool":[[]]}}}


name: Midjourney Image Generator via Telegram and GoAPI
author_name: Dhruv Dalsaniya
author_username: ddm21
nodes_used: ["n8n-nodes-base.httpRequest","n8n-nodes-base.telegram","n8n-nodes-base.discord"]
categories: []
created_at: 2025-06-21T10:28:50.863Z
updated_at: 2025-06-21T10:28:50.863Z
url: https://n8n.io/workflows/5097
scraped_at: 2025-07-06 21:16:30
description:
  This workflow connects Telegram to Midjourney through GoAPI, enabling automated image generation and upscaling directly from chat.

  How it Works
  Telegram Command Trigger**: The workflow activates upon receiving a message in Telegram.
  Image Generation**: Your prompt is sent to GoAPI, which then generates an image using Midjourney.
  Upscale Selection**: You receive the generated image and select an option for upscaling.
  Image Upscaling**: The selected image is upscaled via GoAPI.
  Notifications and Logs**: Progress updates are sent to Telegram, and all images are logged in Discord.

  Set Up Steps
  Create a Telegram Bot and update credentials in Telegram nodes.
  Create a GoAPI account, obtain an API key, and update the three HTTP nodes: "Get Generation Task," "Upscale," and "Get Upscale Task".
  (Optional) Configure the Discord node for logging if desired.

  Setup takes approximately 10-15 minutes. Detailed descriptions are available in sticky notes within the workflow.

workflow_json:
  {"id":"5vMPZ14K9UsUERpr","meta":{"instanceId":"b35ccbdb9bc4a47681cbf851781510a8ad80dc6d034e832a0621fa8d3517f3e4","templateCredsSetupCompleted":true},"name":"GOAPI - MJ Image Generator","tags":[],"nodes":[{"id":"24695c33-e016-4df2-b31c-259c4dba4efe","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[60,165],"webhookId":"523361db-02c3-4434-9beb-0bf272e249ae","parameters":{"updates":["message"],"additionalFields":{}},"credentials":{"telegramApi":{"id":"ia3cN9ufG9KhvT3V","name":"your_bot_name"}},"typeVersion":1.2},{"id":"bc21ef50-c305-4f27-895d-019ecc5ec3f7","name":"Task","type":"n8n-nodes-base.set","position":[500,165],"parameters":{"options":{},"assignments":{"assignments":[{"id":"7a7bba3d-2761-44a9-97a1-c7ed9f849cfb","name":"chatInput","type":"string","value":"={{ $json.message.text }}"},{"id":"2d103541-f87c-4780-acf1-43f0fb7a488a","name":"sessionId","type":"string","value":"={{ $json.message.from.username }}"}]}},"typeVersion":3.4},{"id":"3ade84ce-e582-445b-b9aa-42b85d763d8a","name":"Wait","type":"n8n-nodes-base.wait","position":[1600,265],"webhookId":"b878dae2-db3c-410a-8ef1-359699b31298","parameters":{},"typeVersion":1.1},{"id":"309a8c7e-74e8-4e0b-9022-be9b524261d7","name":"Generate Image","type":"n8n-nodes-base.httpRequest","position":[720,165],"parameters":{"url":"https://api.goapi.ai/api/v1/task","method":"POST","options":{},"jsonBody":"={\n  \"model\": \"midjourney\",\n  \"task_type\": \"imagine\",\n  \"input\": {\n    \"prompt\": \"{{ $json.chatInput }}\",\n    \"aspect_ratio\": \"12:16\",\n    \"process_mode\": \"fast\",\n    \"skip_prompt_check\": false,\n    \"bot_id\": 0\n  }\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"0UXrjhCwxcOJzsxi","name":"dhruv21 - GoAPI"}},"typeVersion":4.2},{"id":"dbbc2387-0d6e-4ef5-b777-b6a5d95db5ee","name":"Upscale","type":"n8n-nodes-base.httpRequest","position":[1820,40],"parameters":{"url":"=https://api.goapi.ai/api/v1/task","method":"POST","options":{},"jsonBody":"={\n    \"model\": \"midjourney\",\n    \"task_type\": \"upscale\",\n    \"input\": {\n        \"origin_task_id\": \"{{ $('Generate Image').item.json.data.task_id }}\",\n        \"index\": \"{{ $json.data[\"Image Index\"] }}\"\n    }\n}","sendBody":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"0UXrjhCwxcOJzsxi","name":"dhruv21 - GoAPI"}},"typeVersion":4.2},{"id":"f48fbeff-71fd-45ca-abec-7decbab1e524","name":"Get Upscale","type":"n8n-nodes-base.if","position":[2480,-110],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"48d40457-1a52-4a14-b02b-a87254996224","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.data.status }}","rightValue":"completed"}]}},"typeVersion":2.2},{"id":"84c2c579-39ed-4940-9ded-9b9056a12767","name":"Notify Generation","type":"n8n-nodes-base.telegram","position":[940,165],"webhookId":"6e431244-2f6b-49b4-b2e1-d858d3fa270e","parameters":{"text":"=🖼 Generating Image ...","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"credentials":{"telegramApi":{"id":"ia3cN9ufG9KhvT3V","name":"your_bot_name"}},"typeVersion":1.2},{"id":"42506f9c-b2af-425d-8a5b-7f0fb8046d1c","name":"Notify Upscaling","type":"n8n-nodes-base.telegram","position":[2040,40],"webhookId":"6e431244-2f6b-49b4-b2e1-d858d3fa270e","parameters":{"text":"=↗ Upscaling Image ...","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"credentials":{"telegramApi":{"id":"ia3cN9ufG9KhvT3V","name":"your_bot_name"}},"typeVersion":1.2},{"id":"dac78f7a-02d6-4592-ae2a-ca6b6c01e9e4","name":"Wait1","type":"n8n-nodes-base.wait","position":[2700,140],"webhookId":"3d915e34-f435-4143-9465-8dd305c1cb0a","parameters":{},"typeVersion":1.1},{"id":"15c49101-d579-44ae-baed-3d01522a1d96","name":"Status = complete","type":"n8n-nodes-base.if","position":[1380,90],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"48d40457-1a52-4a14-b02b-a87254996224","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.data.status }}","rightValue":"completed"}]}},"typeVersion":2.2},{"id":"c22de90c-3d63-47c9-a2f1-3363d261ba1f","name":"Get Index to Upscale","type":"n8n-nodes-base.telegram","position":[1600,40],"webhookId":"04f9a46d-91b7-4dae-8fc2-d820bd1e64f8","parameters":{"chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","message":"={{ $json.data.output.image_url }}","options":{"appendAttribution":false,"messageButtonLabel":"Select Image to Upscale"},"operation":"sendAndWait","formFields":{"values":[{"fieldType":"number","fieldLabel":"Image Index"}]},"responseType":"customForm"},"credentials":{"telegramApi":{"id":"ia3cN9ufG9KhvT3V","name":"your_bot_name"}},"typeVersion":1.2},{"id":"a02dac7e-365f-46f6-bc2e-8b4a9c3e8376","name":"Discord - Generation Log","type":"n8n-nodes-base.discord","position":[2700,-260],"webhookId":"e4b991b2-3f62-4986-87d4-3a7d38e48d49","parameters":{"content":"=### All Render Image\n\n{{ $('Get Generation Task').item.json.data.output.image_url }}\n\n### Individual Render Image\n\n{{ $('Get Generation Task').item.json.data.output.temporary_image_urls.join('\\n\\n') }}\n\n### Final Upscaled Image\n\n{{ $json.data.output.image_url }}\n","guildId":{"__rl":true,"mode":"list","value":"697416344865472593","cachedResultUrl":"https://discord.com/channels/697416344865472593","cachedResultName":"server"},"options":{"flags":["SUPPRESS_EMBEDS","SUPPRESS_NOTIFICATIONS"]},"resource":"message","channelId":{"__rl":true,"mode":"list","value":"1385916790785314836","cachedResultUrl":"https://discord.com/channels/697416344865472593/1385916790785314836","cachedResultName":"goapi-mj-image-log"}},"credentials":{"discordBotApi":{"id":"uwNeLNyglDNBio3d","name":"Discord Bot - Korex Automation Bot"}},"typeVersion":2},{"id":"5a91e49a-449c-453a-a3b5-a7a74f7eeaae","name":"Main Log","type":"n8n-nodes-base.telegram","position":[2700,-60],"webhookId":"6e431244-2f6b-49b4-b2e1-d858d3fa270e","parameters":{"text":"={{ $json.data.output.image_url }}","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"credentials":{"telegramApi":{"id":"ia3cN9ufG9KhvT3V","name":"your_bot_name"}},"typeVersion":1.2},{"id":"3c144117-29a9-4ee9-9b55-a94daf6c7a98","name":"Get Prompt","type":"n8n-nodes-base.if","position":[280,165],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9e365352-039b-451f-940d-d87ed138e432","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.message.from.username }}","rightValue":"username"},{"id":"40df18a4-0f52-481c-8885-094d1f793b05","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.message.text }}","rightValue":"/start"}]}},"typeVersion":2.2},{"id":"c80a05ba-51ce-44b7-9c28-3ea20ea96fa0","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[80,-180],"parameters":{"width":420,"height":240,"content":"## Setup Instructions\n- Create a Telegram Bot and get the [Token](https://help.zoho.com/portal/en/kb/desk/support-channels/instant-messaging/telegram/articles/telegram-integration-with-zoho-desk#How_to_find_a_token_for_an_existing_Telegram_Bot).\n- Create a Telegram Connection and Update the Credentials in all Telegram Nodes.\n- Create [GoAPI](https://goapi.ai/) Account and [Get the API Key](https://goapi.ai/dashboard/key) and Update the 3 HTTP Nodes \n  - `Get Generation Task`, \n  - `Upscale`, \n  - `Get Upscale Task`"},"typeVersion":1},{"id":"bf94e126-8d22-4e12-bfc7-081867ae4e29","name":"Get Generation Task","type":"n8n-nodes-base.httpRequest","position":[1160,165],"parameters":{"url":"=https://api.goapi.ai/api/v1/task/{{ $('Generate Image').item.json.data.task_id }}\n","options":{},"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"0UXrjhCwxcOJzsxi","name":"dhruv21 - GoAPI"}},"typeVersion":4.2},{"id":"b37fb1b0-4227-4ab9-a211-64120706dd54","name":"Get Upscale Task","type":"n8n-nodes-base.httpRequest","position":[2260,40],"parameters":{"url":"=https://api.goapi.ai/api/v1/task/{{ $('Upscale').item.json.data.task_id }}","options":{},"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"0UXrjhCwxcOJzsxi","name":"dhruv21 - GoAPI"}},"typeVersion":4.2},{"id":"aa413bd6-0468-4497-9b27-2b55bd4ecbf7","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[2620,-360],"parameters":{"width":360,"height":240,"content":"### Optional Log.\nDelete this Node if you don't want to get Logs in Discord."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"callerPolicy":"workflowsFromSameOwner","errorWorkflow":"XqrFvCFdlyFR3Uza","executionOrder":"v1"},"versionId":"37d45c4b-5176-45dd-9493-8fc354552a59","connections":{"Task":{"main":[[{"node":"Generate Image","type":"main","index":0}]]},"Wait":{"main":[[{"node":"Get Generation Task","type":"main","index":0}]]},"Wait1":{"main":[[{"node":"Get Upscale Task","type":"main","index":0}]]},"Upscale":{"main":[[{"node":"Notify Upscaling","type":"main","index":0}]]},"Get Prompt":{"main":[[{"node":"Task","type":"main","index":0}]]},"Get Upscale":{"main":[[{"node":"Main Log","type":"main","index":0},{"node":"Discord - Generation Log","type":"main","index":0}],[{"node":"Wait1","type":"main","index":0}]]},"Generate Image":{"main":[[{"node":"Notify Generation","type":"main","index":0}]]},"Get Upscale Task":{"main":[[{"node":"Get Upscale","type":"main","index":0}]]},"Notify Upscaling":{"main":[[{"node":"Get Upscale Task","type":"main","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Get Prompt","type":"main","index":0}]]},"Notify Generation":{"main":[[{"node":"Get Generation Task","type":"main","index":0}]]},"Status = complete":{"main":[[{"node":"Get Index to Upscale","type":"main","index":0}],[{"node":"Wait","type":"main","index":0}]]},"Get Generation Task":{"main":[[{"node":"Status = complete","type":"main","index":0}]]},"Get Index to Upscale":{"main":[[{"node":"Upscale","type":"main","index":0}]]}}}


