AutomationFlowsSlack & Telegram › Send Crypto Buy/sell Alerts for Top 5 Coins with Openai, Whatsapp, Telegram,…

Send Crypto Buy/sell Alerts for Top 5 Coins with Openai, Whatsapp, Telegram,…

Original n8n title: Send Crypto Buy/sell Alerts for Top 5 Coins with Openai, Whatsapp, Telegram, and Email

ByMohamed Abubakkar @mohamed-abubakkar on n8n.io

This workflow is designed to monitor the Top 5 cryptocurrencies in real-time, calculate trading signals (BUY, SELL, HOLD), and send human-readable alerts through multiple channels. It integrates data fetching, signal processing, AI-generated insights, and multi-channel…

Cron / scheduled trigger★★★★☆ complexityAI-powered22 nodesHTTP RequestOpenAI ChatWhatsAppTelegramEmail SendChain Llm
Slack & Telegram Trigger: Cron / scheduled Nodes: 22 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #12249 — we link there as the canonical source.

This workflow follows the Chainllm → Emailsend 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 →

Download .json
{
  "id": "rBmYg1jUIqPtXRQx",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Crypto Signal Alert Automation Workflow",
  "tags": [],
  "nodes": [
    {
      "id": "9f00df59-fc9a-44d4-ba06-73295cd0975b",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -480,
        0
      ],
      "parameters": {
        "url": "https://api.coingecko.com/api/v3/coins/markets",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "vs_currency",
              "value": "usd"
            },
            {
              "name": "order",
              "value": "market_cap_desc"
            },
            {
              "name": "per_page",
              "value": "5"
            },
            {
              "name": "page",
              "value": "1"
            },
            {
              "name": "price_change_percentage",
              "value": "24h"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "d2553808-944d-4c2f-93db-5611d93212e5",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -32,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "669af83c-b185-40a9-beae-9319ff49856b",
      "name": "Calculate Signal node",
      "type": "n8n-nodes-base.code",
      "position": [
        256,
        144
      ],
      "parameters": {
        "jsCode": "\nconst coin = $input.item.json;\n\nconst symbol = coin.symbol.toUpperCase();\nconst priceChange24h = coin.price_change_percentage_24h || 0;\nconst currentPrice = coin.current_price;\nconst marketCap = coin.market_cap;\n\nlet signal;\nif (priceChange24h <= -2) {\n  signal = 'BUY';\n} else if (priceChange24h >= 2) {\n  signal = 'SELL';\n} else {\n  signal = 'HOLD';\n}\n\nconst redisKey = `crypto:signal:${symbol}`;\n\nreturn {\n  json: {\n    symbol,\n    name: coin.name,\n    currentPrice,\n    priceChange24h: priceChange24h,\n    marketCap,\n    signal,\n    redisKey,\n    timestamp: new Date().toISOString()\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "06d0c973-b4fa-4834-9280-9fce34d4018b",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        944,
        80
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5086dbc5-61db-4927-a900-fb2ef9920e7b",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        816,
        -304
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "91ee8a76-3d50-473a-9a33-d3554eba2320",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1424,
        -128
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "8edcf5c8-c286-4715-97e8-994e8ce29821",
      "name": "Send message",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        1424,
        -592
      ],
      "parameters": {
        "textBody": "={{ $json.text }}",
        "operation": "send",
        "additionalFields": {},
        "recipientPhoneNumber": "123456789"
      },
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "a239d9da-8838-490f-a743-27c223c5308f",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1424,
        -432
      ],
      "parameters": {
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "f67db1e1-86dd-4392-9792-4b77d4bf2a97",
      "name": "Send email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1424,
        -288
      ],
      "parameters": {
        "html": "={{ $json.text }}",
        "options": {},
        "subject": "Crypto signals + system message + alerts",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "a7c8e91e-8697-4ba3-a4a7-e77662062035",
      "name": "Human-readable Message",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1008,
        -128
      ],
      "parameters": {
        "text": "={{ $json.message }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "You are a professional crypto trading assistant.  Your task is to analyze the following coin signals and provide insights.Do not repeat instructions.  Include the coin symbol, signal, and a short recommendation. "
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "18bccd75-8b79-4c12-8e5b-1cd3f56a0d32",
      "name": "Add user message",
      "type": "n8n-nodes-base.code",
      "position": [
        800,
        -128
      ],
      "parameters": {
        "jsCode": "return [{\n  json: {\n    message: `\ud83d\udd34 SELL SIGNAL CONFIRMED\n\nCoin: ${$json.symbol}\n24h Change: ${$json.priceChange24h}%\nTime: ${$json.timestamp}\n\n\u26a0\ufe0f Strong upward move detected`\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "21aa15d9-08cb-4d20-a16c-e99238ab5a85",
      "name": "Sell output",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        544,
        -144
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "fec65683-89e3-410b-a9af-ae9cfc039371",
      "name": "Check Signal Status",
      "type": "n8n-nodes-base.if",
      "position": [
        256,
        -128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "b2ef5fad-7b3d-415f-b5ce-521eabe73c68",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.signal }}",
              "rightValue": "SELL"
            },
            {
              "id": "36288b55-e3f4-4c1c-8063-cf407798733e",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.signal }}",
              "rightValue": "BUY"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "eef2b143-6946-49fd-8ce0-ab0894dc2278",
      "name": "Selected Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        -272,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1043fe17-035c-48b7-86c2-b01d3175bc39",
              "name": "timestamp",
              "type": "string",
              "value": "={{ $now }}"
            },
            {
              "id": "153c8353-4c4d-49fa-9ae3-483afca9e410",
              "name": "coin",
              "type": "string",
              "value": "={{ $json.name }}"
            },
            {
              "id": "1ad79a50-91b5-4e37-98ea-275087776256",
              "name": "symbol",
              "type": "string",
              "value": "={{ $json.symbol }}"
            },
            {
              "id": "f19d6af3-59c5-4366-8748-9beec9773796",
              "name": "price",
              "type": "string",
              "value": "={{ $json.current_price }}"
            },
            {
              "id": "d573589b-4b20-45c2-a145-dcdbc595f0c3",
              "name": "change24h",
              "type": "string",
              "value": "={{ $json.market_cap_change_24h }}"
            },
            {
              "id": "ac67d9be-4762-4917-9d95-f4c666eb075d",
              "name": "marketCap",
              "type": "string",
              "value": "={{ $json.market_cap }}"
            },
            {
              "id": "9acad503-1c56-47ec-aed9-37dbf7c8830f",
              "name": "high24h",
              "type": "string",
              "value": "={{ $json.high_24h }}"
            },
            {
              "id": "5c397fc3-e5e8-4fe5-b552-b1e8337afeac",
              "name": "low24h",
              "type": "string",
              "value": "={{ $json.low_24h }}"
            },
            {
              "id": "e5de1d88-f43b-4bd9-bb2d-bdb66cef050b",
              "name": "price_change_percentage_24h",
              "type": "string",
              "value": "={{ $json.price_change_percentage_24h }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "636fb7c6-5f88-4d9b-ad7f-09fcf7b393e4",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -688,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "945bb13f-18a9-4a82-ac2d-2a176efeca09",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1280,
        -128
      ],
      "parameters": {
        "width": 400,
        "height": 464,
        "content": "## Overview\nThis workflow is designed to monitor the Top 5 cryptocurrencies in real-time, calculate trading signals (BUY, SELL, HOLD), and send human-readable alerts through multiple channels. It integrates data fetching, signal processing, AI-generated insights, and multi-channel notifications to provide a professional-grade crypto monitoring solution.\n\n## How It Works - Process Flow\n\n1. Schedule the trigger\n2. Fetch real-time coin data (CoinGecko, Binance API)\n3. Filter only required fields\n4. Check each data from loop\n5. Add the logic for minimum percentage comparison\n6. Use AI for analysis enhanced insights\n8. Send the notification only if signal is 'SELL' or  'BUY'\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7e5c28e8-4f3a-4d5b-8e2c-13dd378cab2b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        -288
      ],
      "parameters": {
        "color": 7,
        "width": 384,
        "height": 208,
        "content": "## Fetch data and field select\n \nFetch the latest coin data from crypto APi (CoinGecko, Binance or CoinMarketCap)\nUse last 24h API endpoint to get last 24 data from selected coins\n\nSelect only relevant field from the endpoint like symbol, priceChange24h, and so."
      },
      "typeVersion": 1
    },
    {
      "id": "3059cb36-a1b1-4525-b2c6-d5f5d334d090",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        48,
        352
      ],
      "parameters": {
        "color": 7,
        "width": 384,
        "height": 240,
        "content": "## Calculate Signal Node\n \nThis node applies the trading rules to each coins like BUY, SELL, HOLD \n\nIf this percentage increased by 2% this will alert to SELL and if percentage drop by 2% this will alert to BUY \n\nYou can adjust the percentage based on coin circulations."
      },
      "typeVersion": 1
    },
    {
      "id": "87b900ae-fbdc-4ecb-8ff7-09fabdc47227",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -400
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 240,
        "content": "## Check Signal Status\n \nThis node will allow to proceed only if signal status is 'SELL' or 'BUY'\n\nHOLD coins will not be allowed to go further steps.\n\nYou can add logic for HOLD status coins if needed."
      },
      "typeVersion": 1
    },
    {
      "id": "f80490a5-5f48-4ca6-a342-aace64bbb059",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        96
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 192,
        "content": "## Decision Routing\n \nOnce get the signal results this will pass to alerting pipeline\n\nAdd user message node prepares a formatted message with the coin, signal, 24h changes and time"
      },
      "typeVersion": 1
    },
    {
      "id": "0326aa58-5a7d-440b-8471-83843e97d3d8",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        -576
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 240,
        "content": "## AI Model\n \nUsing OpenAI API to enhances the alerts with human-readable insights and recommendations.\n\nConsolidated all the signals into a readable format for notifications channels"
      },
      "typeVersion": 1
    },
    {
      "id": "db346a35-b6ad-4395-afa3-7355f1003cfb",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        -512
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 240,
        "content": "## Notifications\n \nSend alert through multiple channels.\n\n1. Whatsapp\n2. Telegram\n3. Email\n\nprofessional multiple channel delivery."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8eebe3d0-617b-4ce0-a815-abb0d14b8a2c",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Sell output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sell output": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Add user message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Selected Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Check Signal Status",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Calculate Signal node",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Selected Fields": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add user message": {
      "main": [
        [
          {
            "node": "Human-readable Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Human-readable Message",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Check Signal Status": {
      "main": [
        [
          {
            "node": "Sell output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Signal node": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Human-readable Message": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send message",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send email",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow is designed to monitor the Top 5 cryptocurrencies in real-time, calculate trading signals (BUY, SELL, HOLD), and send human-readable alerts through multiple channels. It integrates data fetching, signal processing, AI-generated insights, and multi-channel…

Source: https://n8n.io/workflows/12249/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

Get notified when the International Space Station passes over your location - but only when you can actually see it! This workflow combines real-time ISS tracking with weather condition checks to send

HTTP Request, OpenAI Chat, Chain Llm +5
Slack & Telegram

This template is perfect for: AI art enthusiasts who want to stay updated on trending AI-generated artwork Content curators looking to automate art discovery Japanese-speaking users who want translate

@Apify/N8N Nodes Apify, Google Sheets, OpenAI Chat +6
Slack & Telegram

This n8n workflow, BlogBlitz, automates the creation and publishing of SEO-optimized blog posts for WordPress, saving you hours of content creation time. Triggered via Telegram or a scheduled interval

Chain Llm, Output Parser Structured, WordPress +7
Slack & Telegram

This advanced n8n workflow is designed for SEO specialists, digital agency owners, webmasters, and marketing managers who need a comprehensive, automated solution to track and improve their website's

Google Sheets Tool, Telegram Trigger, Telegram +9
Slack & Telegram

Telegram Code. Uses lmChatOpenAi, outputParserAutofixing, outputParserStructured, telegramTrigger. Event-driven trigger; 43 nodes.

OpenAI Chat, Output Parser Autofixing, Output Parser Structured +4