This workflow corresponds to n8n.io template #6108 — we link there as the canonical source.
This workflow follows the HTTP Request → Telegram 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": "9DnO7e6sTnzOsBor",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "MS_TRENDS",
"tags": [],
"nodes": [
{
"id": "b6c68332-9cd6-4b64-b3a4-57c37e665a2f",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"position": [
260,
0
],
"parameters": {
"url": "https://trends.google.com/trending/rss",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "geo",
"value": "={{ $json.message.text }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "930f0f7d-94bb-48a7-80f4-3948ff830131",
"name": "XML",
"type": "n8n-nodes-base.xml",
"position": [
620,
0
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "88867504-b113-495a-ada0-6d7696482af5",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
980,
0
],
"parameters": {
"jsCode": "// 1. Safely access the array of trend items from the input data.\nconst trends = $json.rss?.channel?.item || [];\n\n// If there are no trends, return a friendly message.\nif (trends.length === 0) {\n return [{\n json: {\n text: \"Could not fetch Google Trends data at this time.\"\n }\n }];\n}\n\n// 2. Create a dynamic header for the report in Arabic.\nconst today = new Date().toLocaleDateString('ar-EG', {\n day: 'numeric',\n month: 'long',\n year: 'numeric'\n});\nconst header = `\ud83d\udd25 *Trends report for $('Telegram Trigger').first().json.message.text *\\n_${today}_\\n\\n`;\n\n\n// 3. Process the top 5 trend items to create formatted blocks.\nconst trendBlocks = trends\n .slice(0, 5) // We only want the top 5 trends\n .map((trend, index) => {\n // Get the main details for the trend.\n const rank = index + 1;\n const title = trend.title;\n const traffic = trend['ht:approx_traffic'] || 'Not available';\n\n // Get the top 2 related news articles for this trend.\n const newsItems = (trend['ht:news_item'] || [])\n .slice(0, 2) // We only want the top 2 news items\n .map(news => {\n const newsTitle = news['ht:news_item_title'];\n const newsUrl = news['ht:news_item_url'];\n const newsSource = news['ht:news_item_source'];\n // Format as: \"\u2022 [Article Title](url) - _Source_\"\n return `\u2022 [${newsTitle}](${newsUrl}) - _${newsSource}_`;\n })\n .join('\\n');\n\n // Combine everything into a single block, optimized for RTL.\n // We put the Arabic title first to help with rendering.\n return `*${title}* (${rank})\\n\ud83d\udcc8 *Searches:* ${traffic}\\n\ud83d\uddde\ufe0f *Related:*\\n${newsItems}`;\n })\n .join('\\n\\n---\\n\\n'); // Join all trend blocks with a separator.\n\n\n// 4. Combine the header and the trend blocks into the final report.\nconst finalReport = header + trendBlocks;\n\n// 5. Wrap the output in the format that n8n expects.\nreturn [{\n json: {\n text: finalReport,\n parse_mode: 'Markdown'\n }\n}];"
},
"typeVersion": 2
},
{
"id": "c8c768d6-f98b-433c-813e-132d650c4f38",
"name": "Send a text message",
"type": "n8n-nodes-base.telegram",
"position": [
1340,
0
],
"parameters": {
"text": "={{ $json.text }}",
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"additionalFields": {
"parse_mode": "HTML",
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "1de3838b-87e9-47b2-879f-7e7bcfb1b76d",
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-80,
0
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {
"chatIds": "={{ $env.chat_id }}"
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "3ed6b167-1d03-43f4-88f3-2a7bff19716e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
180,
-100
],
"parameters": {
"color": 6,
"width": 260,
"height": 280,
"content": "## Fetch trends \nGets trends for provided country code"
},
"typeVersion": 1
},
{
"id": "c08ee391-6aa5-4daf-83e3-6167ad87e6c3",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
540,
-100
],
"parameters": {
"color": 3,
"width": 260,
"height": 280,
"content": "## Convert to json"
},
"typeVersion": 1
},
{
"id": "8f675ed7-2a06-497b-87ea-6e2e9755914d",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
900,
-100
],
"parameters": {
"color": 7,
"width": 260,
"height": 280,
"content": "## Prepare report"
},
"typeVersion": 1
},
{
"id": "74c4d562-f0dc-4c0a-8a08-1b6d22372f51",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1260,
-100
],
"parameters": {
"color": 5,
"width": 260,
"height": 280,
"content": "## Send report"
},
"typeVersion": 1
},
{
"id": "9419f0f0-ed18-4d48-bc8a-cea1a3efff1b",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-100,
-160
],
"parameters": {
"width": 260,
"height": 120,
"content": "## Send country code\nEG | US | SA | ..."
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "22911120-2f7e-4017-b43d-94636740d997",
"connections": {
"XML": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Code": {
"main": [
[
{
"node": "Send a text message",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "XML",
"type": "main",
"index": 0
}
]
]
},
"Telegram Trigger": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"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.
telegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow creates a powerful, multi-country Google Trends bot on Telegram. Users can request the top trending search queries for any country by simply sending its two-letter country code (e.g., , , ). The bot fetches the latest data, formats it into a clean report, and sends…
Source: https://n8n.io/workflows/6108/ — 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.
N8N Complete Final. Uses telegramTrigger, dataTable, telegram, mqtt. Event-driven trigger; 58 nodes.
TextMain. Uses telegramTrigger, stopAndError, telegram, httpRequest. Event-driven trigger; 56 nodes.
Pede Ai. Uses httpRequest, telegram, postgres, telegramTrigger. Event-driven trigger; 53 nodes.
📄 Documentation: Notion Guide
Telegram Wait. Uses stickyNote, httpRequest, redis, noOp. Event-driven trigger; 36 nodes.