This workflow corresponds to n8n.io template #9055 — we link there as the canonical source.
This workflow follows the Agent → HTTP Request 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 →
{
"id": "Qsx3VDr6JAHBYiU1",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Automate social media content aggregation to a Telegram channel",
"tags": [],
"nodes": [
{
"id": "51ad1db1-1268-43f2-af87-49784184b19e",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
-1056,
80
],
"parameters": {
"url": "https://api.browseract.com/v2/workflow/run-task",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "workflow_id",
"value": "52606771064261730"
}
]
},
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "eb445058-6561-4cdd-aeb6-86b1cea7caac",
"name": "HTTP Request1",
"type": "n8n-nodes-base.httpRequest",
"position": [
-576,
64
],
"parameters": {
"url": "https://api.browseract.com/v2/workflow/get-task",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"queryParameters": {
"parameters": [
{
"name": "=task_id",
"value": "={{ $json.id }}"
}
]
}
},
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "e3a8baef-33a5-4b36-a0ac-f393077dfba9",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
-320,
336
],
"parameters": {
"unit": "minutes",
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "d7afdc55-375d-42f6-aec1-d5ed4073fd86",
"name": "Wait1",
"type": "n8n-nodes-base.wait",
"position": [
-864,
336
],
"parameters": {
"amount": 20
},
"typeVersion": 1.1
},
{
"id": "4f1ec379-162b-4d77-bdb5-e4bcdca86935",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
-864,
80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d48ae258-78a0-4b26-923d-2643b6b774c6",
"operator": {
"type": "object",
"operation": "notExists",
"singleValue": true
},
"leftValue": "={{ $json.error }}",
"rightValue": ""
},
{
"id": "3967a169-8432-45bd-8f89-08795fd12679",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.id }}",
"rightValue": "null"
}
]
}
},
"retryOnFail": false,
"typeVersion": 2.2
},
{
"id": "a50bbd98-fbb7-4bab-bd52-b03c9c12c7b5",
"name": "If1",
"type": "n8n-nodes-base.if",
"position": [
-304,
64
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0347a2a2-eb32-414d-9494-4e648078cf40",
"operator": {
"type": "object",
"operation": "notExists",
"singleValue": true
},
"leftValue": "={{ $json.error }}",
"rightValue": ""
},
{
"id": "99f31959-6f27-40dd-97c3-6ff611da1e0b",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "finished"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "641e6deb-f68f-48ad-99e5-382d0b36df95",
"name": "Send a text message",
"type": "n8n-nodes-base.telegram",
"position": [
464,
112
],
"parameters": {
"text": "={{ $json.Title }}\n{{ $json.Summary }}\n\nBY: {{ $json.PublishedBy }}\n{{ $json.Url }}",
"chatId": "@Test",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "a53dc2cd-7ed0-478a-a610-bca789143af5",
"name": "Code in JavaScript",
"type": "n8n-nodes-base.code",
"position": [
-64,
400
],
"parameters": {
"jsCode": "// This function will iterate through your data and reformat it\n// into a list of single-item lists.\nconst refinedOutput = $input.first().json.output.refined_output\nconst processedItems = [];\n\nfor (const item of refinedOutput) {\n // Create a new item object with a 'json' key\n // that holds the object directly.\n const newItem = {\n json: item,\n };\n processedItems.push(newItem);\n}\n\n// Return the new list of items\nreturn processedItems;"
},
"typeVersion": 2
},
{
"id": "61a053ae-cd55-43b2-9b08-53171f39c37c",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"maxTries": 2,
"position": [
-64,
48
],
"parameters": {
"text": "=in the\n\n{{ $json.output.string }}\n\nlist of maps available like the example below\n\n\n[\n { \n \"Title\": \".............\", \n \"PublishedBy\": \"............\", \n \"Summary\": \".............\", \n \"Url\": \".............\",\n\"Pic\" : \".............\"\n}\n] \n\nRefine the output for each items in the list, Summarize the 'Summary' if needed and remove all duplicated data.\n\n\"refined_output\" : \n {\n \"Title\": <String>,\n \"PublishedBy\": <String>,\n \"Summary\": <String>,\n \"Url\" : <String>,\n \"Pic\" : <String>\n }\n\nadd each one separately as an item \n",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 2.2,
"waitBetweenTries": 1500
},
{
"id": "ce1fbc09-7156-4a7d-b88c-1c1bb881d12a",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
96,
256
],
"parameters": {
"jsonSchemaExample": "{\n \"refined_output\": \n [\n {\n \"Title\": \"<String>\",\n \"PublishedBy\": \"<String>\",\n \"Summary\": \"<String>\",\n \"Url\": \"<String>\",\n \"Pic\": \"<String>\"\n }\n ]\n}"
},
"typeVersion": 1.3
},
{
"id": "55d8a924-c02d-4d5e-893f-094587a8b1a7",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-64,
256
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "c582cfc7-66c7-46da-918f-6758014b8587",
"name": "If2",
"type": "n8n-nodes-base.if",
"position": [
128,
400
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "df1ae316-b51d-4f5a-959a-bea374087a9b",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.Pic }}",
"rightValue": "=no picture"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "e63901a7-2e00-4467-8191-a6e529d9ef90",
"name": "Send a photo message",
"type": "n8n-nodes-base.telegram",
"position": [
464,
336
],
"parameters": {
"file": "={{ $json.Pic }}",
"chatId": "@Test",
"operation": "sendPhoto",
"additionalFields": {
"caption": "={{ $json.Title }} \n\n{{ $json.Summary }} \n\nBY: {{ $json.PublishedBy }}\n\n{{ $json.Url }}"
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "85e66f7d-b04c-494a-a80c-3d54522b8aaa",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1312,
80
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 12
}
]
}
},
"typeVersion": 1.2
},
{
"id": "2170f06f-24de-455c-8f2a-bbd3310a72d0",
"name": "Sticky Note-Intro",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1936,
-128
],
"parameters": {
"width": 592,
"height": 408,
"content": "## Try It Out!\n### This n8n template automatically scrapes and refines content from the X homepage and sends curated posts to your Telegram channel.\n\n### How it works\n* The workflow is triggered automatically on a schedule to scrape the latest posts from X.\n* A series of **If** and **Wait** nodes monitor the scraping job until the full data is ready.\n* An **AI Agent**, powered by **Google Gemini**, refines the scraped content by summarizing posts and removing duplicates.\n* An **If** node checks for an image in the post to decide if a photo or a text message should be sent.\n* Finally, the curated posts are sent to your Telegram channel as rich media messages.\n\n### Requirements\n* **BrowserAct** API account\n* **BrowserAct** **\u201cTwitter/X Content Aggregation\u201d** Template\n* **Gemini** account\n* **Telegram** credentials\n\n### Need Help?\nJoin the [Discord](https://discord.com/invite/UpnCKd7GaU) or Visit Our [Blog](https://www.browseract.com/blog)!\n"
},
"typeVersion": 1
},
{
"id": "80c1e1b8-cb9b-42c4-8509-81106db60295",
"name": "Sticky Note-Scraping",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1152,
-128
],
"parameters": {
"color": 5,
"width": 480,
"height": 164,
"content": "## 1. Trigger the Job Scraper\n\nThis workflow uses an HTTP Request to start a job scraping task via the BrowserAct API. This allows you to collect up-to-date job market data.\n\n### Don't forget to add your BrowserAct Workflow ID. "
},
"typeVersion": 1
},
{
"id": "341dd9f1-bde8-4fc8-9fd9-39dc60107eef",
"name": "Sticky Note-Wait",
"type": "n8n-nodes-base.stickyNote",
"position": [
-656,
-128
],
"parameters": {
"color": 5,
"width": 512,
"height": 164,
"content": "## 2. Wait for Scraping to Finish\n\nThese nodes check the status of the scraping task. The `If` node determines if the task is complete. If it's still running, the `Wait` node pauses the workflow for a set period before retrying to check the status."
},
"typeVersion": 1
},
{
"id": "81b9fbd7-33fc-4563-8a1f-e3a4fc939cb2",
"name": "Sticky Note-AI",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-128
],
"parameters": {
"color": 4,
"width": 448,
"content": "## 3. Refine Content with AI\n\nThis **AI Agent** node, powered by **Google Gemini**, processes the scraped data. Its job is to summarize the posts and remove any duplicate information, ensuring the final output is clean and valuable.\n\n\n### Don't forget to Connect your Gemini "
},
"typeVersion": 1
},
{
"id": "f861965c-7e8c-4008-b6ea-6aa310d0b813",
"name": "Sticky Note-Conditional Send",
"type": "n8n-nodes-base.stickyNote",
"position": [
336,
-128
],
"parameters": {
"color": 3,
"width": 352,
"height": 196,
"content": "## 4. Send to Telegram\n\nAn **If** node checks if the post includes an image. It then routes the data to either a 'send photo' or 'send text message' Telegram node, ensuring the content is sent in the best possible format.\n\n### Don't forget to Connect your Telegram and add your Channel ID. "
},
"typeVersion": 1
},
{
"id": "1f370ea2-d0fd-4442-baa8-ae101cd9e5f7",
"name": "Sticky Note-How to Use",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1936,
288
],
"parameters": {
"width": 592,
"height": 168,
"content": "## How to use\n\n1. **Set up Credentials:** Add your credentials for **BrowserAct**, **Google Gemini**, and **Telegram** to the workflow. They will be used by the relevant nodes.\n2. **Set up BrowserAct:** In your **BrowserAct** account, set up the **X Home Page Scrapper** template.\n3. **Add WorkFlow ID:** Change the `workflow_id` value inside the **HTTP Request** node to match the one from your BrowserAct workflow.\n4. **Activate Workflow:** To enable the automated schedule, simply activate the workflow."
},
"typeVersion": 1
},
{
"id": "323127a9-6e88-41a6-8529-b43cc44b009a",
"name": "Sticky Note-Help",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1936,
464
],
"parameters": {
"width": 592,
"height": 96,
"content": "## 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)"
},
"typeVersion": 1
},
{
"id": "b78bcd09-88bc-4dd9-8ef1-32d3e247a6e1",
"name": "Sticky Note-Video",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1936,
576
],
"parameters": {
"width": 592,
"height": 80,
"content": "## Watch Workflow Guidance and Showcase\n* #### [Automate Your Social Media: Get All X/Twitter Updates Directly in Telegram!](https://youtu.be/6CXe6k9vihk)"
},
"typeVersion": 1
},
{
"id": "f59c80ea-db18-4f18-b623-f4f0fe156c69",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1152,
48
],
"parameters": {
"color": 5,
"width": 480,
"height": 480,
"content": ""
},
"typeVersion": 1
},
{
"id": "c8d84675-275a-4838-961c-9701f8a3a7cb",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-656,
48
],
"parameters": {
"color": 5,
"width": 512,
"height": 480,
"content": ""
},
"typeVersion": 1
},
{
"id": "807e290e-0b2e-4e75-b91d-e4b7ab77cb9e",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
48
],
"parameters": {
"color": 4,
"width": 448,
"height": 480,
"content": ""
},
"typeVersion": 1
},
{
"id": "a821fb85-990c-4a4c-9329-808dff71b184",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
336,
80
],
"parameters": {
"color": 3,
"width": 352,
"height": 448,
"content": ""
},
"typeVersion": 1
},
{
"id": "94468263-32d0-49c2-b805-61f8a0c1b7cb",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
-240
],
"parameters": {
"color": 5,
"width": 182,
"height": 80,
"content": "## \n# Run Node"
},
"typeVersion": 1
},
{
"id": "3116f3bc-dd38-4a46-b62e-713150332933",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-496,
-240
],
"parameters": {
"color": 5,
"width": 182,
"height": 80,
"content": "## \n# Get Node"
},
"typeVersion": 1
},
{
"id": "0c84785c-6e66-47d1-b307-9198ccbc85a4",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-32,
-240
],
"parameters": {
"color": 4,
"width": 230,
"height": 80,
"content": "## \n# Agent Node"
},
"typeVersion": 1
},
{
"id": "ec102a87-733d-4e22-8a08-154d53552139",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
-240
],
"parameters": {
"color": 3,
"width": 214,
"height": 80,
"content": "## \n# Send Node"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "63f14756-172c-40d7-9efc-8ef6737214ca",
"connections": {
"If": {
"main": [
[
{
"node": "HTTP Request1",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"If1": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"If2": {
"main": [
[
{
"node": "Send a text message",
"type": "main",
"index": 0
}
],
[
{
"node": "Send a photo message",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "HTTP Request1",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request1": {
"main": [
[
{
"node": "If1",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "If2",
"type": "main",
"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
}
]
]
}
}
}
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.
googlePalmApihttpBearerAuthtelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is perfect for digital marketers, brand managers, or data analysts and Busy people, seeking to monitor real-time trends and competitor activity without manual effort. The workflow is triggered automatically on a schedule to aggregate the latest social media posts.…
Source: https://n8n.io/workflows/9055/ — 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.
Author: Nguyen Thieu Toan Category: Community & Knowledge Automation Tags: Telegram, Reddit, n8n Forum, AI Summarization, Gemini, Groq
This workflow is perfect for content marketers, journalists, or researchers who need to find specific articles without manually sifting through countless news feeds.
The job search process is filled with manual, frustrating tasks—reading endless job descriptions only to find the seniority is wrong, the role requires a language you don't speak, or a "hybrid" job ha
This workflow automates brand monitoring on X by analyzing both the text and the images in posts. It uses multi-modal AI to score brand relevance, filters out noise, logs important mentions in Airtabl
Automate your deal hunting with this intelligent Amazon price tracker. This workflow uses the power of AI to monitor any Amazon product page at regular intervals. When the price drops to or below your