{"workflow":{"id":12436,"name":"Auto-post curated remote jobs to Telegram with BrowserAct and Gemini","views":45,"recentViews":0,"totalViews":45,"createdAt":"2026-01-03T20:21:31.879Z","description":"# Auto-post curated remote jobs to Telegram with BrowserAct & Gemini\n\nThis workflow acts as an intelligent job board curator for your Telegram community. It scrapes multiple sources (Remotive, SimplyHired), uses AI to filter out spam and low-quality listings, formats the best jobs into professional posts, and publishes them automatically on a schedule.\n\n## Target Audience\nCommunity managers running job boards, recruiters, and developers building niche job aggregators.\n\n## How it works\n1. **Scheduled Fetch**: Every 12 hours, the workflow triggers **BrowserAct** to scrape the latest job listings from Remotive and SimplyHired in parallel.\n2. **Merge & Aggregate**: The raw job data from both sources is combined into a single list.\n3. **AI Curation**: An **AI Agent** (using Google Gemini) reviews each job. It removes duplicates, filters out gigs paying less than $20/hr, and discards low-quality descriptions.\n4. **Format Content**: The AI rewrites the remaining jobs into clean, engaging HTML summaries suitable for Telegram.\n5. **Publish**: The workflow loops through the curated list and sends each job to your **Telegram** channel, pausing between messages to avoid rate limits.\n\n## How to set up\n1. **Configure Credentials**: Connect your **Telegram**, **BrowserAct**, and **Google Gemini** accounts in n8n.\n2. **Prepare BrowserAct**: Ensure you have the **Automated Remote Job Fetching & Filtering for Telegram Feed** templates (for Remotive and SimplyHired) saved in your BrowserAct account.\n3. **Configure Telegram**: Ensure your bot is an admin in the target channel and add the Chat ID to the **Send a text message** node.\n4. **Activate**: Turn on the workflow.\n\n## Requirements\n* **BrowserAct** account with the **Automated Remote Job Fetching & Filtering for Telegram Feed** templates.\n* **Telegram** account (Bot Token).\n* **Google Gemini** account.\n\n## How to customize the workflow\n1. **Add More Sources**: Duplicate the BrowserAct nodes to scrape additional sites like We Work Remotely or LinkedIn.\n2. **Refine Filters**: Update the system prompt in the **AI Agent** node to filter by specific keywords (e.g., \"Python\", \"Senior\") or locations.\n3. **Change Frequency**: Adjust the **Schedule Trigger** to run more or less frequently depending on your needs.\n\n## Need Help?\n* [How to Find Your BrowserAct API Key & Workflow ID](https://www.youtube.com/watch?v=pDjoZWEsZlE)\n* [How to Connect n8n to BrowserAct](https://www.youtube.com/watch?v=RoYMdJaRdcQ)\n* [How to Use & Customize BrowserAct Templates](https://www.youtube.com/watch?v=CPZHFUASncY)\n\n---\n### Workflow Guidance and Showcase Video\n\n* #### [Build an AI-Powered Remote Job Aggregator (Remotive & SimplyHired)](https://youtu.be/DEBF0ILrM5E)\n\n\n","workflow":{"id":"2vmW7VCMoHxQAeDi","meta":{"instanceId":"6fcb279fd6b00187153abdc6d8b627acfd9fe31f84b387f64b56a0996e8ea182"},"name":"Auto-post curated remote jobs to Telegram with BrowserAct & Gemini","tags":[],"nodes":[{"id":"72f28ca9-c882-479d-a4d2-53b21ec9b89b","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[2128,720],"parameters":{"autoFix":true,"jsonSchemaExample":"[ { \"text\": \"<b>Senior Developer</b>\\n\\n🏢 <b>Company:</b> TechCorp\\n💰 <b>Salary:</b> $150k\\n\\n<b>About:</b> Leading the backend team.\\n\\n🛠 <b>Stack:</b> Java, AWS\\n\\n<a href=http://link.com>🔗 Apply Here</a>\", \"parse_mode\": \"HTML\", \"disable_web_page_preview\": true } ]"},"typeVersion":1.3},{"id":"1cc72c30-636a-4364-835e-046612127be4","name":"Google Gemini","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[2000,736],"parameters":{"options":{},"modelName":"models/gemini-2.5-pro"},"credentials":{"googlePalmApi":{"id":"9pXYiybR74j5zn4d","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"2919d33c-7fef-4311-b8d3-3e746183807a","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[2752,512],"parameters":{"options":{}},"typeVersion":3},{"id":"5ff7a89e-0eb9-4497-9aa8-6bb1fda7919b","name":"Fix Output","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[2128,848],"parameters":{"options":{},"modelName":"models/gemini-2.5-pro"},"credentials":{"googlePalmApi":{"id":"9pXYiybR74j5zn4d","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1},{"id":"10f08ee5-52b6-4dba-900d-310f2abae1f5","name":"Scrape Jobs Data (SimplyHired)","type":"n8n-nodes-browseract.browserAct","position":[1056,432],"parameters":{"type":"WORKFLOW","timeout":7200,"workflowId":"68979670614019565","workflowConfig":{"value":{},"schema":[{"id":"input-Simplyhired","type":"string","display":true,"removed":true,"required":false,"description":"If left blank, the default value defined in BrowserAct will be used.","displayName":"Simplyhired","defaultMatch":true}],"mappingMode":"defineBelow","matchingColumns":["input-Simplyhired"],"attemptToConvertTypes":false,"convertFieldsToString":false},"open_incognito_mode":false},"credentials":{"browserActApi":{"id":"G1U5ih38TKU5wcI5","name":"BrowserAct account"}},"typeVersion":1},{"id":"002c749a-d8e6-4a42-a309-396fc8b5a680","name":"Scrape Jobs Data (Remotive)","type":"n8n-nodes-browseract.browserAct","position":[1056,592],"parameters":{"type":"WORKFLOW","timeout":7200,"workflowId":"68986628591810026","workflowConfig":{"value":{},"schema":[{"id":"input-Remotive","type":"string","display":true,"removed":true,"required":false,"description":"If left blank, the default value defined in BrowserAct will be used.","displayName":"Remotive","defaultMatch":true}],"mappingMode":"defineBelow","matchingColumns":["input-Remotive"],"attemptToConvertTypes":false,"convertFieldsToString":false},"open_incognito_mode":false},"credentials":{"browserActApi":{"id":"G1U5ih38TKU5wcI5","name":"BrowserAct account"}},"typeVersion":1},{"id":"280ecc28-bcf7-41ea-a404-c59a269d9dfb","name":"Splitting Remotive Data","type":"n8n-nodes-base.code","onError":"continueRegularOutput","position":[1280,592],"parameters":{"jsCode":"// Get the JSON string using the exact path provided by the user.\nconst jsonString = $input.first().json.output.string;\n\nlet parsedData;\n\n// Check if the string exists before attempting to parse\nif (!jsonString) {\n    // Return an empty array or throw an error if no string is found\n    // Throwing an error is usually better to stop the workflow if data is missing.\n    throw new Error(\"Input string is empty or missing at the specified path: $input.first().json.output.string\");\n}\n\ntry {\n    // 1. Parse the JSON string into a JavaScript array of objects\n    parsedData = JSON.parse(jsonString);\n} catch (error) {\n    // Handle JSON parsing errors (e.g., if the string is malformed)\n    throw new Error(`Failed to parse JSON string: ${error.message}`);\n}\n\n// 2. Ensure the parsed data is an array\nif (!Array.isArray(parsedData)) {\n    throw new Error('Parsed data is not an array. It cannot be split into multiple items.');\n}\n\n// 3. Map the array of objects into the n8n item format { json: object }\n// Each element in this array will be treated as a new item by n8n, achieving the split.\nconst outputItems = parsedData.map(item => ({\n    json: item,\n}));\n\n// 4. Return the new array of items\nreturn outputItems;"},"executeOnce":false,"typeVersion":2,"alwaysOutputData":true},{"id":"ad7c8b11-d548-45fd-803f-eb8dee119d6e","name":"Splitting SimplyHired Data","type":"n8n-nodes-base.code","onError":"continueRegularOutput","position":[1280,432],"parameters":{"jsCode":"// Get the JSON string using the exact path provided by the user.\nconst jsonString = $input.first().json.output.string;\n\nlet parsedData;\n\n// Check if the string exists before attempting to parse\nif (!jsonString) {\n    // Return an empty array or throw an error if no string is found\n    // Throwing an error is usually better to stop the workflow if data is missing.\n    throw new Error(\"Input string is empty or missing at the specified path: $input.first().json.output.string\");\n}\n\ntry {\n    // 1. Parse the JSON string into a JavaScript array of objects\n    parsedData = JSON.parse(jsonString);\n} catch (error) {\n    // Handle JSON parsing errors (e.g., if the string is malformed)\n    throw new Error(`Failed to parse JSON string: ${error.message}`);\n}\n\n// 2. Ensure the parsed data is an array\nif (!Array.isArray(parsedData)) {\n    throw new Error('Parsed data is not an array. It cannot be split into multiple items.');\n}\n\n// 3. Map the array of objects into the n8n item format { json: object }\n// Each element in this array will be treated as a new item by n8n, achieving the split.\nconst outputItems = parsedData.map(item => ({\n    json: item,\n}));\n\n// 4. Return the new array of items\nreturn outputItems;"},"typeVersion":2,"alwaysOutputData":true},{"id":"41a99712-6ddf-4a9a-a650-7d60900e74f6","name":"Wait for Both Path Outputs","type":"n8n-nodes-base.merge","position":[1488,512],"parameters":{},"typeVersion":3.2},{"id":"175503ea-1a18-44ed-aa1d-c2d8fa347850","name":"Merge Branch Outputs","type":"n8n-nodes-base.aggregate","position":[1840,512],"parameters":{"options":{},"aggregate":"aggregateAllItemData"},"typeVersion":1},{"id":"5587035c-0262-4ffc-9435-89744d01ba8f","name":"Analyze Job Data & Generate Response","type":"@n8n/n8n-nodes-langchain.agent","position":[2000,512],"parameters":{"text":"={{ $json.data }}","options":{"systemMessage":"You are an expert Job Curator and Social Media Manager for a high-quality professional Telegram channel. Your task is to process a raw JSON array of job listings, filter out low-quality/spam entries, and format the valid jobs into a Telegram-ready JSON response.\n\n1. Filtering Rules (Strictly Apply These):\n\nDeduplicate: If a job appears multiple times (e.g., once with just a link and once with a description), only keep the version with the full_job_description. Discard the others.\n\nRemove Low Quality: Discard entries that have no full_job_description or empty descriptions.\n\nRemove Spam/Gig-Work: Discard roles that appear to be low-tier \"gig\" work, content mills, or surveys (e.g., \"IAPWE\", \"Omni Interactions\", \"Student Representatives\", or generic \"Freelance Writer\" roles with no clear company identity).\n\nSalary Threshold: If a salary is listed as under $20/hour, discard it (unless it is a clear internship at a reputable tech company).\n\n2. Formatting Rules:\n\nOutput Structure: You must output a single JSON array of objects. Each object must have the keys: text, parse_mode, and disable_web_page_preview.\n\nParse Mode: Set parse_mode to \"HTML\".\n\nAllowed Tags: Use only the following HTML tags supported by Telegram: <b>, <i>, <a>, <code>. Do NOT use Markdown (**, __, [ ]).\n\nContent Layout:\n\nHeadline: <b>Job Title</b>\n\nMeta: 🏢 Company: [Name] | 💰 Salary: [Value] | 📍 Location: [Value]\n\nSummary: A 1-2 sentence professional summary of the role.\n\nTags: 🛠 Stack/Skills: [List 3-5 key skills]\n\nCTA: <a href=\"job_link\">🔗 Apply Here</a>\n\n3. Output Constraints:\n\nNo Markdown Blocks: Do not output code blocks (like ```json). Output raw text starting with [ and ending with ].\n\nJSON Validity: Ensure the output is valid, parsable JSON. Escape all special characters (like quotes) inside the JSON strings correctly.\n\nExample Output Format: [ { \"text\": \"<b>Senior Developer</b>\\n\\n🏢 <b>Company:</b> TechCorp\\n💰 <b>Salary:</b> $150k\\n\\n<b>About:</b> Leading the backend team.\\n\\n🛠 <b>Stack:</b> Java, AWS\\n\\n<a href=\"http://link.com\">🔗 Apply Here</a>\", \"parse_mode\": \"HTML\", \"disable_web_page_preview\": true } ]"},"promptType":"define","hasOutputParser":true},"typeVersion":3},{"id":"8f1020f5-850e-4a66-85c1-e77c2f54da17","name":"Split Generated Job Items","type":"n8n-nodes-base.code","position":[2544,512],"parameters":{"jsCode":"// 1. Get the data using the path from your first message\n// We access .output directly because your data shows it as an array, not a string inside .string\nconst rawData = $input.first().json.output;\n\nlet parsedData;\n\n// Check if the data exists before proceeding\nif (!rawData) {\n    // Throw an error to stop the workflow if data is missing\n    throw new Error(\"Input is empty or missing at the specified path: $input.first().json.output\");\n}\n\n// 2. Handle the data format\n// If n8n has already parsed it as an array (standard behavior), we use it directly.\n// If it happens to be a string (edge case), we parse it.\nif (typeof rawData === 'string') {\n    try {\n        parsedData = JSON.parse(rawData);\n    } catch (error) {\n        throw new Error(`Failed to parse JSON string: ${error.message}`);\n    }\n} else {\n    parsedData = rawData;\n}\n\n// 3. Ensure the data is an array\nif (!Array.isArray(parsedData)) {\n    throw new Error('The data at json.output is not an array. It cannot be split into multiple items.');\n}\n\n// 4. Map the array of objects into the n8n item format { json: object }\n// Each element in this array will be treated as a new item by n8n\nconst outputItems = parsedData.map(item => ({\n    json: item,\n}));\n\n// 5. Return the new array of items\nreturn outputItems;"},"typeVersion":2},{"id":"80104868-b954-43f9-ad18-38642658474f","name":"Avoid Rate Limits","type":"n8n-nodes-base.wait","position":[2960,480],"webhookId":"7239ebac-dfa0-4eb8-a7d7-a0a6d9675ee1","parameters":{},"typeVersion":1.1},{"id":"c5c416dd-e13c-42b7-9aaf-b6b612da92cb","name":"Send Travel List to User Channel","type":"n8n-nodes-base.telegram","position":[3168,512],"webhookId":"723a8d8a-1d7e-4917-915a-052ff5f5900d","parameters":{"text":"={{ $json.text }}","chatId":"parameters.chatId==@Channel ID (Use Channel ID or Chat ID)","additionalFields":{"parse_mode":"={{ $json.parse_mode }}","disable_web_page_preview":"={{ $json.disable_web_page_preview }}"}},"credentials":{"telegramApi":{"id":"gJnGTVzNOeiM3LHZ","name":"Telegram account"}},"typeVersion":1.2},{"id":"e9b06a2a-1ae8-42d4-8922-abadece65997","name":"Schedule Daily","type":"n8n-nodes-base.scheduleTrigger","position":[832,512],"parameters":{"rule":{"interval":[{}]}},"typeVersion":1.3},{"id":"c0a06e5a-f431-4b10-82d5-a7c03aa6c5f6","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[832,-144],"parameters":{"color":6,"width":672,"height":384,"content":"@[youtube](DEBF0ILrM5E)"},"typeVersion":1},{"id":"d9933a15-6076-40e4-87eb-460ec5c4751f","name":"Documentation","type":"n8n-nodes-base.stickyNote","position":[432,-144],"parameters":{"width":380,"height":520,"content":"## ⚡ Workflow Overview & Setup\n\n**Summary:** This automation daily scrapes remote job listings from SimplyHired and Remotive using BrowserAct, uses AI to filter spam and curate high-quality roles, and auto-posts them to a Telegram channel.\n\n### Requirements\n* **Credentials:** BrowserAct, Google Gemini (PaLM), Telegram.\n* **Mandatory:** BrowserAct API (Template: **Automated Remote Job Fetching & Filtering for Telegram Feed**)\n\n### How to Use\n1. **Credentials:** Set up your BrowserAct, Google Gemini, and Telegram Bot API keys in n8n.\n2. **BrowserAct Template:** Ensure you have the **Automated Remote Job Fetching & Filtering for Telegram Feed** template saved in your BrowserAct account.\n3. **Configuration:** Update the Telegram node with your target Channel ID (e.g., `@yourchannel`).\n\n### Need Help?\n[How to Find Your BrowserAct API Key & Workflow ID](https://docs.browseract.com)\n[How to Connect n8n to BrowserAct](https://docs.browseract.com)\n[How to Use & Customize BrowserAct Templates](https://docs.browseract.com)"},"typeVersion":1},{"id":"53de33d7-4c6c-498d-bbad-170c2426dd46","name":"Step 1 Explanation","type":"n8n-nodes-base.stickyNote","position":[832,256],"parameters":{"color":7,"width":764,"height":124,"content":"### 🕵️ Step 1: Multi-Source Scraping\n\nThe workflow triggers daily to run dual BrowserAct sessions, scraping the latest remote job listings from SimplyHired and Remotive. The raw data from both sources is then parsed into individual job items for processing."},"typeVersion":1},{"id":"25aeb140-51d0-4858-826e-73f78bc89056","name":"Step 2 Explanation","type":"n8n-nodes-base.stickyNote","position":[1680,256],"parameters":{"color":7,"width":780,"height":124,"content":"### 🧠 Step 2: AI Curation & Quality Control\n\nAn AI agent aggregates the job feeds, performing deduplication and strict filtering. It discards low-tier gig work, spam, and roles below a specific salary threshold while generating professional HTML-formatted posts for Telegram."},"typeVersion":1},{"id":"eb6db87d-a37f-4850-a86f-074f9803592c","name":"Step 3 Explanation","type":"n8n-nodes-base.stickyNote","position":[2544,256],"parameters":{"color":7,"width":776,"height":124,"content":"### 🚀 Step 3: Throttled Delivery\n\nThe curated job list is split into individual items and sent sequentially to the Telegram channel. A wait node is included between posts to respect Telegram's rate limits and ensure consistent delivery."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"a0056f52-2c96-4117-8150-473d54edcf8c","connections":{"Fix Output":{"ai_languageModel":[[{"node":"Structured Output Parser","type":"ai_languageModel","index":0}]]},"Google Gemini":{"ai_languageModel":[[{"node":"Analyze Job Data & Generate Response","type":"ai_languageModel","index":0}]]},"Schedule Daily":{"main":[[{"node":"Scrape Jobs Data (Remotive)","type":"main","index":0},{"node":"Scrape Jobs Data (SimplyHired)","type":"main","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"Avoid Rate Limits","type":"main","index":0}]]},"Avoid Rate Limits":{"main":[[{"node":"Send Travel List to User Channel","type":"main","index":0}]]},"Merge Branch Outputs":{"main":[[{"node":"Analyze Job Data & Generate Response","type":"main","index":0}]]},"Splitting Remotive Data":{"main":[[{"node":"Wait for Both Path Outputs","type":"main","index":1}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Analyze Job Data & Generate Response","type":"ai_outputParser","index":0}]]},"Split Generated Job Items":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Splitting SimplyHired Data":{"main":[[{"node":"Wait for Both Path Outputs","type":"main","index":0}]]},"Wait for Both Path Outputs":{"main":[[{"node":"Merge Branch Outputs","type":"main","index":0}]]},"Scrape Jobs Data (Remotive)":{"main":[[{"node":"Splitting Remotive Data","type":"main","index":0}]]},"Scrape Jobs Data (SimplyHired)":{"main":[[{"node":"Splitting SimplyHired Data","type":"main","index":0}]]},"Send Travel List to User Channel":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Analyze Job Data & Generate Response":{"main":[[{"node":"Split Generated Job Items","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":20,"nodeTypes":{"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.telegram":{"count":1},"n8n-nodes-base.aggregate":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.splitInBatches":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1},"n8n-nodes-browseract.browserAct":{"count":2},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":2},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Madame AI Team | Kai","username":"madame-ai","bio":"I’m a PhD in Physics turned AI enthusiast, passionate about uncovering how AI is transforming content creation, business, and daily life.","verified":true,"links":["https://www.youtube.com/@AI.madame.english"],"avatar":"https://gravatar.com/avatar/44c0d2b4b78d8dda7685aea70ef92b2c2339ca9478738c6ed8049cc70e3af32d?r=pg&d=retro&size=200"},"nodes":[{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1236,"icon":"file:aggregate.svg","name":"n8n-nodes-base.aggregate","codex":{"data":{"alias":["Aggregate","Combine","Flatten","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Aggregate"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="},"displayName":"Aggregate","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1262,"icon":"file:google.svg","name":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatgooglegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDggNDgiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNCIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMCAzN1YxMWwxNyAxM3oiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im0wIDExIDE3IDEzIDctNi4xTDQ4IDE0VjBIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiMzNEE4NTMiIGQ9Im0wIDM3IDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik00OCA0OCAxNyAyNGwtNC0zIDM1LTEweiIgY2xpcC1wYXRoPSJ1cmwoI2IpIi8+PC9zdmc+"},"displayName":"Google Gemini Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":33,"name":"Social Media"},{"id":49,"name":"AI Summarization"}],"image":[]}}