This workflow follows the Agent → OpenRouter Chat recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "AI Marketing Team",
"nodes": [
{
"parameters": {
"model": "openai/gpt-4.1",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
-180,
200
],
"id": "243cc16f-a8ca-4e9f-8d8a-6e48d2c1796f",
"name": "GPT 4.1",
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"name": "createImage",
"description": "Call this tool to create an image. ",
"workflowId": {
"__rl": true,
"value": "lsZTPeThp35cB3Hs",
"mode": "list",
"cachedResultName": "Create Image"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"chatID": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"imagePrompt": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('imagePrompt', `The image requested by the user`, 'string') }}",
"imageTitle": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('imageTitle', `The title of the image. Should be no more than 4 words.`, 'string') }}"
},
"matchingColumns": [],
"schema": [
{
"id": "imageTitle",
"displayName": "imageTitle",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "imagePrompt",
"displayName": "imagePrompt",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatID",
"displayName": "chatID",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.1,
"position": [
780,
200
],
"id": "b46f6e9a-9719-4540-9aa6-23da285e89f2",
"name": "Create Image"
},
{
"parameters": {
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"text": "={{ $json.output }}",
"additionalFields": {
"appendAttribution": false
}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1160,
-140
],
"id": "9856dbc9-1904-422e-8dfa-f84e210b1edc",
"name": "Telegram",
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"sessionIdType": "customKey",
"sessionKey": "={{ $('Telegram Trigger').item.json.message.chat.id }}"
},
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"typeVersion": 1.3,
"position": [
100,
200
],
"id": "3c80151c-dc63-4981-8136-15f5e16a647f",
"name": "Simple Memory"
},
{
"parameters": {
"name": "editImage",
"description": "Call this tool to edit an image.",
"workflowId": {
"__rl": true,
"value": "nMBpMe21l4gDEjOI",
"mode": "list",
"cachedResultName": "Edit Image"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"image": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('image', `The title of the image the user wants to edit`, 'string') }}",
"chatID": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"request": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('request', `The edit the user wants to make to the image`, 'string') }}",
"pictureID": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('pictureID', `The ID of the image to edit`, 'string') }}"
},
"matchingColumns": [],
"schema": [
{
"id": "image",
"displayName": "image",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "request",
"displayName": "request",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatID",
"displayName": "chatID",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "pictureID",
"displayName": "pictureID",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.1,
"position": [
940,
200
],
"id": "ae38e1af-dc55-48cf-9be2-7439a592453d",
"name": "Edit Image"
},
{
"parameters": {
"name": "searchImages",
"description": "Call this tool to search the image database.",
"workflowId": {
"__rl": true,
"value": "zDYAKGCIEChJa1JH",
"mode": "list",
"cachedResultName": "Search Images"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"intent": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('intent', `The intent of the user. This can either be \"Get\" or \"Edit\"`, 'string') }}",
"image": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('image', `The image title`, 'string') }}",
"chatID": "={{ $('Telegram Trigger').item.json.message.chat.id }}"
},
"matchingColumns": [],
"schema": [
{
"id": "intent",
"displayName": "intent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "image",
"displayName": "image",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatID",
"displayName": "chatID",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.1,
"position": [
1180,
200
],
"id": "e1b30c8b-b081-4689-97fb-22733fbac6a7",
"name": "Search Images"
},
{
"parameters": {
"name": "blogPost",
"description": "Call this tool to create a blog post using a topic and a target audience.",
"workflowId": {
"__rl": true,
"value": "sS2JMp5z7YiqtJpa",
"mode": "list",
"cachedResultName": "Blog Post"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"blogTopic": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('blogTopic', `The topic of the blog.`, 'string') }}",
"targetAudience": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('targetAudience', `The target audience for the blog.`, 'string') }}",
"chatID": "={{ $('Telegram Trigger').item.json.message.chat.id }}"
},
"matchingColumns": [],
"schema": [
{
"id": "blogTopic",
"displayName": "blogTopic",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "targetAudience",
"displayName": "targetAudience",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "chatID",
"displayName": "chatID",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.1,
"position": [
600,
200
],
"id": "c8d4ca3f-591e-4751-91ff-3aa6714e893f",
"name": "Blog Post"
},
{
"parameters": {
"content": "# Marketing Team",
"height": 400,
"width": 460
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
600,
-300
],
"id": "ac099456-afcf-4c32-8d2d-cf9162932ce5",
"name": "Sticky Note"
},
{
"parameters": {
"name": "linkedinPost",
"description": "Call this tool to create a LinkedIn post using a topic and a target audience.",
"workflowId": {
"__rl": true,
"value": "RgUBWsswXoQsX2tI",
"mode": "list",
"cachedResultName": "LinkedIn Post"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"postTopic": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('postTopic', `The topic of the LinkedIn post`, 'string') }}",
"targetAudience": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('targetAudience', `The target audience of the LinkedIn post`, 'string') }}",
"chatID": "={{ $('Telegram Trigger').item.json.message.chat.id }}"
},
"matchingColumns": [],
"schema": [
{
"id": "postTopic",
"displayName": "postTopic",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "targetAudience",
"displayName": "targetAudience",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "chatID",
"displayName": "chatID",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.1,
"position": [
440,
200
],
"id": "93e30328-9637-411f-bb0d-1c5e9cc207e1",
"name": "LinkedIn Post"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "fe7ecc99-e1e8-4a5e-bdd6-6fce9757b234",
"name": "text",
"value": "={{ $json.message.text }}",
"type": "string"
}
]
},
"options": {}
},
"id": "a3451421-dcc6-4643-94a4-f4b187dbb70b",
"name": "Set 'Text'",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
320,
-60
]
},
{
"parameters": {
"resource": "file",
"fileId": "={{ $json.message.voice.file_id }}"
},
"id": "cd462755-96a8-4ca2-a3a8-77e85e83f024",
"name": "Download Voice File",
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
240,
-220
],
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"resource": "audio",
"operation": "transcribe",
"options": {}
},
"id": "26f7a215-90a0-4719-a7a2-fbfba550277b",
"name": "Transcribe Audio",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.6,
"position": [
400,
-220
],
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.message.voice.file_id }}",
"rightValue": "",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Voice"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "8c844924-b2ed-48b0-935c-c66a8fd0c778",
"leftValue": "={{ $json.message.text }}",
"rightValue": "",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Text"
}
]
},
"options": {}
},
"id": "3c795fe4-9c50-4b1d-a43e-2b9d36746a39",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-20,
-140
]
},
{
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"id": "12bb0833-769d-4592-af4d-fa335c6e84ab",
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"typeVersion": 1.1,
"position": [
-160,
-140
],
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"content": "# Trigger\n",
"height": 400,
"width": 360,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-220,
-300
],
"id": "cd9f9d75-e1bf-4279-b733-3339fb383536",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "# Content Creation",
"height": 220,
"width": 480,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
240,
120
],
"id": "97967485-58d3-4f7e-b879-c0895721fd99",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "# Image Creation",
"height": 220,
"width": 320,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
740,
120
],
"id": "5c76b653-8a55-4c6d-b335-35185944a48b",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "# Image Database",
"height": 220,
"width": 300,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1080,
120
],
"id": "079a7833-0fff-4fd3-81d1-9d112b432e24",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "# Response\n\n",
"height": 400,
"width": 300,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1080,
-300
],
"id": "60b95e09-119e-4477-99cb-a5629ef4965a",
"name": "Sticky Note5"
},
{
"parameters": {
"content": "# Brain\n\n",
"height": 220,
"width": 440,
"color": 2
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-220,
120
],
"id": "65a7791a-7d13-4dff-b532-8576692a9ffa",
"name": "Sticky Note6"
},
{
"parameters": {
"content": "# Voice or Text",
"height": 400,
"width": 420,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
160,
-300
],
"id": "6c35946c-e517-40f2-8d96-7b0f391dcb3c",
"name": "Sticky Note7"
},
{
"parameters": {
"name": "video",
"description": "Call this tool to create a video.",
"workflowId": {
"__rl": true,
"value": "7HwL0nnjhjdXJ3FY",
"mode": "list",
"cachedResultName": "Faceless Video"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"videoTopic": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('videoTopic', `The topic of the video`, 'string') }}",
"chatID": "={{ $('Telegram Trigger').item.json.message.chat.id }}"
},
"matchingColumns": [],
"schema": [
{
"id": "videoTopic",
"displayName": "videoTopic",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "chatID",
"displayName": "chatID",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.1,
"position": [
280,
200
],
"id": "5137d58b-d6d9-4877-9d95-6d4cf870d09f",
"name": "Video"
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.text }}",
"options": {
"systemMessage": "=# Overview\nYou are a marketing team AI agent. Your job is to help the user create and edit images based on the request, or create content.\n\n## Tools\ncreateImage - Use this to create an image. Send the requested image prompt to this tool.\neditImage - Use this to edit an image. The user might also say \"make\" rather than \"edit\".\nImage Database - Use this to search the image database. \nblogPost - Use this to create a blog post.\nlinkedinPost - Use this to create a LinkedIn post.\nvideo - Use this tool to create a video.\nThink - Use this if you need help making a decision.\n\n## Instructions\n- If the user asks to 'edit that image' or 'make that...', this indicates they want to edit the last image in the database, the most recent one.\n- If the user requests a blog post or LinkedIn post, use the \"blogPost\" or \"linkedinPost\" tool and output: \"Here's that post you requested. Hope you enjoy it.\"\n\n## Output\n- Make sure to return the image link as a clickable link\n\n"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
700,
-140
],
"id": "13aea3f4-b9b0-4f14-9d68-06baee17bea5",
"name": "Marketing Team Agent"
},
{
"parameters": {},
"type": "@n8n/n8n-nodes-langchain.toolThink",
"typeVersion": 1,
"position": [
-40,
200
],
"id": "7642374d-7e12-4f7d-be49-d74bc85932e5",
"name": "Think"
},
{
"parameters": {
"content": "# \ud83d\udccb Setup Guide \n**Author: [Nate Herk](https://www.youtube.com/@nateherk/videos)**\n---\n### \u2705 First Steps\n1. **Import the following workflows** into your n8n environment:\n - Video\n - LinkedIn Post\n - Blog Post\n - Create Image\n - Edit Image\n - Search Images\n\n2. **Link all workflows** together appropriately.\n - Make sure that the tools the Marketing Team Agent uses are correctly linked to these workflows.\n - Rename workflows as needed to fit your naming system.\n---\n\n### \ud83d\udd17 Credentials to Connect\n- **[Telegram Credential](https://telegram.org/)** (for outbound/inbound communication)\n- **[OpenRouter](https://openrouter.ai/) Credential** (for AI requests)\n- **[Tavily](https://tavily.com/) Credential** (for research inside LinkedIn Post and Blog Post workflows)\n---\n\n### \ud83d\udd11 API Keys to Configure\nInside the **Video Workflow**:\n- **[PiAPI](https://piapi.ai/) API Key** (for video generation)\n- **[Runway](https://runwayml.com/) API Key** (for video processing)\n- **[ElevenLabs](https://elevenlabs.io/) API Key** (for voice generation)\n\nInside the **LinkedIn Post** and **Blog Post Workflows**:\n- **[Tavily](https://tavily.com/) API Key** (for research assistance)\n---\n\n### \ud83d\udcc4 Templates to Download and Connect\n- **[Creatomate](https://creatomate.com/) Image Template** \n \u2192 Download from the Free Skool Community\n\n- **[Google Sheets Log Template](https://docs.google.com/spreadsheets/d/1wQxM9cAwewCigPH22KDidMu_i9j_dx4MHEa5rmJiw5I/edit?usp=sharing)** \n \u2192 Connect it to your n8n Google Sheets node to track content outputs.\n---\n\nMake sure all credentials, APIs, and templates are properly set before running the full system!\n",
"height": 1000,
"width": 560
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-800,
-300
],
"id": "b7c8b7b9-b25d-4f20-8713-3013d2955b9d",
"name": "Sticky Note8"
}
],
"connections": {
"GPT 4.1": {
"ai_languageModel": [
[
{
"node": "Marketing Team Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Create Image": {
"ai_tool": [
[
{
"node": "Marketing Team Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "Marketing Team Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Edit Image": {
"ai_tool": [
[
{
"node": "Marketing Team Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Search Images": {
"ai_tool": [
[
{
"node": "Marketing Team Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Blog Post": {
"ai_tool": [
[
{
"node": "Marketing Team Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"LinkedIn Post": {
"ai_tool": [
[
{
"node": "Marketing Team Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Download Voice File": {
"main": [
[
{
"node": "Transcribe Audio",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "Download Voice File",
"type": "main",
"index": 0
}
],
[
{
"node": "Set 'Text'",
"type": "main",
"index": 0
}
]
]
},
"Transcribe Audio": {
"main": [
[
{
"node": "Marketing Team Agent",
"type": "main",
"index": 0
}
]
]
},
"Set 'Text'": {
"main": [
[
{
"node": "Marketing Team Agent",
"type": "main",
"index": 0
}
]
]
},
"Telegram Trigger": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Video": {
"ai_tool": [
[
{
"node": "Marketing Team Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Marketing Team Agent": {
"main": [
[
{
"node": "Telegram",
"type": "main",
"index": 0
}
]
]
},
"Think": {
"ai_tool": [
[
{
"node": "Marketing Team Agent",
"type": "ai_tool",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "d41cc226-7086-4a5e-bb39-a8fd64014322",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "7LI7szVWjgxuYSD2",
"tags": []
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
openAiApiopenRouterApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow harnesses AI to automate your marketing efforts, generating tailored content, images, and blog posts that save hours of manual work and boost campaign creativity. It's ideal for solo marketers, small teams, or agencies handling social media and content creation without a full staff. The core step routes user queries through an event-driven trigger via Telegram, where lmChatOpenRouter's GPT model analyses requests and invokes specialised tool workflows to produce outputs like edited visuals or full articles, all stored in a memory buffer for context-aware follow-ups.
Use this when you need quick, on-demand marketing assets from simple Telegram commands, such as brainstorming ideas or drafting posts during busy campaigns. Avoid it for high-volume production requiring custom branding rules or when real-time collaboration exceeds basic memory retention. Common variations include swapping OpenAI for other models or adding email integrations for direct publishing.
About this workflow
AI Marketing Team. Uses lmChatOpenRouter, toolWorkflow, telegram, memoryBufferWindow. Event-driven trigger; 25 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Personal Assistant. Uses memoryBufferWindow, agent, agentTool, httpRequestTool. Event-driven trigger; 77 nodes.
Jarvis is a powerful multi-agent productivity assistant built in n8n. It works directly from Telegram and can understand both text messages and voice notes.
Template Carnaval - time instagram. Uses toolWorkflow, lmChatOpenAi, memoryBufferWindow, agent. Event-driven trigger; 56 nodes.
AI-powered Telegram bot for effortless expense tracking. Send receipts, voice messages, or text - the bot automatically extracts and categorizes your expenses. 📸 Receipt & Invoice OCR - Send photos of
Turn your Telegram into a personal Bloomberg terminal. Ask any question about any stock — get institutional-grade analysis back in seconds. TwelveData Pro Analyst is a complete, ready-to-import n8n wo