This workflow corresponds to n8n.io template #10092 — 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": "vdiGM9CVl45uLWNS",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Automated Crypto Market Summaries to Discord using Gemini AI & CoinGecko",
"tags": [],
"nodes": [
{
"id": "1743c462-8ac0-4fcd-8292-3044723128a9",
"name": "8AM Everyday",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-48,
16
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.2
},
{
"id": "f23773ff-70db-4f38-b6e0-2b059eb4631b",
"name": "Sentiment Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
272,
-80
],
"parameters": {
"url": "=https://newsapi.org/v2/everything",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "q",
"value": "crypto OR bitcoin OR ethereum OR solana"
},
{
"name": "language",
"value": "en"
},
{
"name": "sortBy",
"value": "publishedAt"
},
{
"name": "pageSize",
"value": "10"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "af2d66f9-0daf-46bf-b82e-ef39a02efb29",
"name": "Market Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
272,
112
],
"parameters": {
"url": "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=bitcoin,ethereum,solana",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "7a09fb3c-bd9c-4ed9-9c4a-96f65769077c",
"name": "Merge Data",
"type": "n8n-nodes-base.code",
"position": [
784,
16
],
"parameters": {
"jsCode": "// Extract merged inputs\nconst newsData = items[0].json.articles || [];\nconst marketData = items.slice(1).map(item => item.json);\n\n// Prepare clean dataset\nconst formatted = marketData.map(market => {\n // Filter relevant articles (mentioning BTC, ETH, SOL)\n const symbol = market.symbol.toUpperCase();\n const relatedArticles = newsData\n .filter(a =>\n a.title?.toLowerCase().includes(symbol.toLowerCase()) ||\n a.description?.toLowerCase().includes(symbol.toLowerCase())\n )\n .slice(0, 5) // limit to 5 for AI token efficiency\n .map(a => ({\n title: a.title,\n description: a.description,\n source: a.source?.name,\n publishedAt: a.publishedAt,\n url: a.url\n }));\n\n return {\n symbol,\n market_overview: {\n current_price: market.current_price,\n price_change_24h: market.price_change_24h,\n price_change_percentage_24h: market.price_change_percentage_24h,\n volume_24h: market.total_volume,\n market_cap: market.market_cap,\n high_24h: market.high_24h,\n low_24h: market.low_24h\n },\n related_news: relatedArticles\n };\n});\n\n// Output one item per crypto asset\nreturn formatted.map(f => ({ json: f }));"
},
"typeVersion": 2
},
{
"id": "5145760a-c928-45fb-a236-3edd3ece1c7f",
"name": "Research Analyst",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1408,
16
],
"parameters": {
"text": "=Analyze the following market and sentiment data, then produce a concise and insightful investment summary.\n\nMarket Data:\n{{ $json.market_overview[0] }}\n{{ $json.market_overview[1] }}\n{{ $json.market_overview[2] }}\n\nSentiment Headlines:\n{{ $json.related_news[0] }}\n{{ $json.related_news[1] }}\n{{ $json.related_news[2] }}\n{{ $json.related_news[3] }}\n\nPerform the following tasks:\n1. Summarize the overall market direction and volatility based on the price changes, highs/lows, and trading volume.\n2. Highlight the top 3 cryptocurrencies by 24h performance and describe what\u2019s driving their movement (e.g., technical strength, on-chain trend, or narrative).\n3. Analyze sentiment \u2014 what narratives, themes, or risks dominate current discussions?\n4. Provide a short actionable takeaway (e.g., \u201cNeutral short-term, bullish mid-term\u201d or \u201cHigh volatility ahead, watch key support zones\u201d).\n5. Assign a **confidence score** (0\u2013100) to your market bias based on alignment between sentiment and market data.\n\nReturn your final answer strictly in this JSON format:\n{\n \"market_summary\": \"\",\n \"top_coins\": [\n {\n \"symbol\": \"\",\n \"performance_summary\": \"\",\n \"driver\": \"\"\n },\n {\n \"symbol\": \"\",\n \"performance_summary\": \"\",\n \"driver\": \"\"\n },\n {\n \"symbol\": \"\",\n \"performance_summary\": \"\",\n \"driver\": \"\"\n }\n ],\n \"sentiment_summary\": \"\",\n \"actionable_takeaway\": \"\",\n \"confidence_score\": \"\",\n \"discord_message\": \"\ud83d\udd25 **Daily Crypto Market Briefing** \ud83d\udd25\\n\\n**Market Summary:** ...\\n**Top Performers:** ...\\n**Sentiment:** ...\\n**Takeaway:** ...\\n\\nConfidence: ...\\n\\n*This is for informational purposes only and not financial advice.*\"\n}",
"options": {
"systemMessage": "You are a professional financial analyst with expertise in crypto fundamentals, market structure, and sentiment research.\n\nYour tone should be analytical yet engaging \u2014 like a daily market newsletter.\nYou must remain objective, concise, and data-driven.\n\nRules:\n\t\u2022\tUse only the data provided.\n\t\u2022\tNever speculate beyond observable data.\n\t\u2022\tFormat clearly for readability in Discord (markdown-friendly).\n\t\u2022\tAlways end with a one-line summary: \u201cThis is for informational purposes only, not financial advice.\u201d\n\nYour goal: Deliver a polished, professional market insight post ready to publish to Discord."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "101175a4-e194-43dc-a679-a380c2d74175",
"name": "Post Message",
"type": "n8n-nodes-base.discord",
"position": [
2112,
16
],
"parameters": {
"content": "=\ud83d\udd25 **Daily Crypto Market Briefing** \ud83d\udd25 \n\ud83d\udcc5 {{ $json.date || (new Date().toISOString().slice(0,10)) }}\n\n**\ud83d\udcca Market Summary:** \n{{ $json.reports[0].market_summary }}\n\n**\ud83c\udfc6 Top Coins:** \n- **{{ $json.reports[0].top_coins[0].symbol }}** \u2192 {{ $json.reports[0].top_coins[0].performance_summary }}\n_Driver:_ {{ $json.reports[0].top_coins[0].driver }}\n- **{{ $json.reports[0].top_coins[1].symbol }}**\u2192 {{ $json.reports[0].top_coins[1].performance_summary }}\n_Driver:_ {{ $json.reports[0].top_coins[1].driver }}\n- **{{ $json.reports[0].top_coins[2].symbol }}**\u2192 {{ $json.reports[0].top_coins[2].performance_summary }}\n_Driver:_ {{ $json.reports[0].top_coins[2].driver }}\n\n**\ud83d\udcf0 Sentiment Overview:** \n{{ $json.reports[0].sentiment_summary }}\n\n**\ud83d\udca1 Takeaway:** \n{{ $json.reports[0].actionable_takeaway }}\n\n**\ud83d\udcc8 Confidence:** {{ $json.reports[0].confidence_score }}/100\n\n---\n\ud83d\udce2 _This is for informational purposes only, not financial advice._",
"guildId": {
"__rl": true,
"mode": "list",
"value": "1280652666577354803",
"cachedResultUrl": "https://discord.com/channels/1280652666577354803",
"cachedResultName": "Renz's server"
},
"options": {},
"resource": "message",
"channelId": {
"__rl": true,
"mode": "list",
"value": "1280652667408089210",
"cachedResultUrl": "https://discord.com/channels/1280652666577354803/1280652667408089210",
"cachedResultName": "general"
}
},
"credentials": {
"discordBotApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "02f04821-bcd6-4106-88a2-4b6c41fdb8d0",
"name": "Extract Keywords",
"type": "n8n-nodes-base.function",
"position": [
1840,
16
],
"parameters": {
"functionCode": "// \ud83e\udde0 AI Output Parser for n8n\n// Handles multiple outputs with ```json ... ``` wrappers\n\nconst parsedReports = [];\n\nfor (const item of items) {\n const raw = item.json.output;\n if (!raw || typeof raw !== \"string\") continue;\n\n // Extract JSON inside ```json ... ```\n const match = raw.match(/```json([\\s\\S]*?)```/);\n if (!match) continue;\n\n try {\n const parsed = JSON.parse(match[1].trim());\n\n // Filter out placeholder reports (no real data)\n if (\n parsed.market_summary &&\n !parsed.market_summary.toLowerCase().includes(\"not provided\") &&\n !parsed.market_summary.toLowerCase().includes(\"no market data\")\n ) {\n parsedReports.push(parsed);\n }\n } catch (err) {\n console.error(\"\u274c Failed to parse AI output:\", err.message);\n }\n}\n\n// If no valid reports were parsed\nif (parsedReports.length === 0) {\n return [\n {\n json: {\n message: \"\u26a0\ufe0f No valid AI reports found.\",\n merged_discord_message: \"\u26a0\ufe0f No valid AI reports found.\",\n reports: [],\n avg_confidence: 0\n }\n }\n ];\n}\n\n// Merge reports into one summary object\nconst mergedMessage = parsedReports\n .map(r => r.discord_message)\n .filter(Boolean)\n .join(\"\\n\\n---\\n\\n\");\n\nconst avgConfidence = Math.round(\n parsedReports.reduce((sum, r) => sum + (Number(r.confidence_score) || 0), 0) /\n parsedReports.length\n);\n\nreturn [\n {\n json: {\n total_reports: parsedReports.length,\n avg_confidence: avgConfidence,\n merged_discord_message: mergedMessage,\n reports: parsedReports\n }\n }\n];"
},
"typeVersion": 1
},
{
"id": "ff3c7874-f1da-469d-b670-79d068ca95a8",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
624,
16
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "25879578-b139-4395-b8d1-f4d821b0292b",
"name": "Parse Data",
"type": "n8n-nodes-base.code",
"position": [
1088,
16
],
"parameters": {
"jsCode": "const data = items.map(i => i.json);\n\nconst merged = {\n market_overview: data.map(d => ({\n symbol: d.symbol,\n ...d.market_overview\n })),\n related_news: data.flatMap(d => \n d.related_news.map(n => ({\n symbol: d.symbol,\n ...n\n }))\n )\n};\n\nreturn [{ json: merged }];"
},
"typeVersion": 2
},
{
"id": "f595a543-332d-4e6d-8e2d-1352b8b1d206",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1408,
192
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "35e848bf-1da0-43c7-a6ce-9fffb770ad2e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-176
],
"parameters": {
"width": 256,
"height": 432,
"content": "### Schedule Trigger \nAutomatically runs every morning at 8AM (modifiable). \nThis node initiates the workflow by fetching real-time market data and crypto news for AI analysis. \nAdjust timing to align with your preferred report cadence (e.g., 12H or weekly).\n"
},
"typeVersion": 1
},
{
"id": "12d5ee8c-0a6f-4528-8b81-a094014aa3d5",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-512
],
"parameters": {
"color": 2,
"width": 368,
"height": 768,
"content": "### CoinGecko API \u2014 Market Overview \nFetches live market data for top coins (BTC, ETH, SOL, etc.) using CoinGecko\u2019s public API. \nPulls: \n- Price (USD), Market Cap, 24H % Change, Volume \n- Ranking & Symbol metadata \nThis forms the quantitative foundation of the AI summary. \nNo authentication required.\n\n### NewsAPI \u2014 Latest Crypto Headlines \nRetrieves the most recent crypto-related news articles. \nIncludes: title, URL, source, and publishedAt fields. \nKeyword filters: \u201ccrypto\u201d, \u201cbitcoin\u201d, \u201cethereum\u201d, \u201csolana\u201d, \u201cblockchain\u201d. \nRequires your **NewsAPI Key** credential. \nThis forms the narrative layer for the AI to interpret sentiment and narrative shifts.\n"
},
"typeVersion": 1
},
{
"id": "408b1da5-a9bd-4b08-8a4a-4f5a82d90ddf",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
-144
],
"parameters": {
"color": 3,
"width": 432,
"height": 400,
"content": "### Data Merger \nCombines outputs from CoinGecko, NewsAPI, and CryptoPanic into one unified dataset. \nEnsures synchronized market metrics and sentiment for AI analysis. \nActs as the bridge between raw data collection and structured AI input.\n"
},
"typeVersion": 1
},
{
"id": "510a7cd8-3750-4e6d-b7b1-f4aebbfde89d",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
-192
],
"parameters": {
"color": 4,
"width": 320,
"height": 448,
"content": "### Market Data Formatter \nNormalizes all incoming data into a standardized schema:\n- coin_name, price_usd, pct_change_24h, sentiment_score, and news_summary \nRemoves duplicates, aligns timestamps, and ensures uniform key-value pairs. \nPrepares data for LLM input with clear structure and readability.\n"
},
"typeVersion": 1
},
{
"id": "cc3abf93-eb89-4d22-a7da-5dbb43206958",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1312,
-384
],
"parameters": {
"color": 5,
"width": 416,
"height": 704,
"content": "### AI Market Analyst (Gemini Model) \nUses **Google Gemini 1.5 Pro** to interpret both quantitative and narrative data. \nProduces a concise market intelligence brief containing: \n- Top 5 Movers (by % change) \n- Sentiment Overview (Bullish/Bearish/Neutral) \n- Market Summary (100\u2013150 words) \n- Analyst Takeaway (Short actionable insight) \nActs as the \u201canalyst brain\u201d of the entire workflow.\n\n### Gemini AI Engine \nPrimary LLM responsible for market analysis and summary generation. \nYou may switch to OpenAI or Anthropic models by adjusting the connection node. \nCredential: \u201cGoogle Gemini API\u201d. \nOutputs are structured JSON for consistent downstream parsing.\n"
},
"typeVersion": 1
},
{
"id": "be9ff135-8b9a-468d-8f1e-78a01b762e1b",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
-224
],
"parameters": {
"color": 6,
"width": 272,
"height": 544,
"content": "### Market Summary Formatter \nConverts parsed JSON into a visually formatted Discord embed message. \nSections:\n- \ud83e\ude99 Top Movers \n- \ud83d\udcca Market Summary \n- \ud83d\udcac Sentiment \n- \u26a1 Analyst Takeaway \nAdds bold titles, emojis, and clean spacing for Discord readability.\n"
},
"typeVersion": 1
},
{
"id": "037f9870-33c2-4ef7-9f73-e2af5ebb90e4",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2032,
-224
],
"parameters": {
"color": 7,
"width": 256,
"height": 544,
"content": "### Discord Auto-Poster \nPublishes the formatted AI-generated market report directly to your chosen Discord channel. \nUses either Bot Token or Webhook URL for authentication. \nDefault channel: #daily-market-summary \nThis is the final output node \u2014 the polished AI summary goes live here.\n"
},
"typeVersion": 1
},
{
"id": "7117884e-da79-465f-b006-4c8f683eb943",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2304,
-592
],
"parameters": {
"width": 752,
"height": 912,
"content": "## Automated Crypto Market Summaries to Discord using Gemini AI & CoinGecko\n\n### Try It Out! \nAutomate professional-grade crypto market reports directly in Discord. \nThis workflow analyzes live prices, sentiment, and news to produce actionable daily summaries via Gemini AI.\n\n### How It Works \n1. Triggers daily at 8AM. \n2. Fetches market data (CoinGecko) + headlines (NewsAPI). \n3. Merges and formats clean dataset. \n4. AI Agent (Gemini) creates a market summary + sentiment report. \n5. Final message is formatted and posted to Discord.\n\n### How to Use \n- Configure your CoinGecko & NewsAPI credentials. \n- Set preferred coins or keywords. \n- Enter your Discord Webhook or Bot Token. \n- Adjust the trigger time to fit your timezone.\n\n### (Optional) Extend This Workflow \n- Add CoinMarketCap or Binance API for extended metrics. \n- Append Twitter API node for trending mentions. \n- Use Google Sheets or Notion node to archive daily summaries.\n\n### Requirements \n- Google Gemini API key \n- NewsAPI key \n- Discord Bot or Webhook URL \n\n### Summary \nA fully automated, AI-powered Discord summary system delivering crypto intelligence, top movers, and market context every day \u2014 hands-free.\n\n## AfK Crypto Website: afkcrypto.com\n## Join our Discord Server! https://discord.com/invite/v4DgTEUUJJ"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "3bd52abd-c5e9-441c-b5df-53d209a2fff7",
"connections": {
"Merge": {
"main": [
[
{
"node": "Merge Data",
"type": "main",
"index": 0
}
]
]
},
"Merge Data": {
"main": [
[
{
"node": "Parse Data",
"type": "main",
"index": 0
}
]
]
},
"Parse Data": {
"main": [
[
{
"node": "Research Analyst",
"type": "main",
"index": 0
}
]
]
},
"Market Data": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"8AM Everyday": {
"main": [
[
{
"node": "Market Data",
"type": "main",
"index": 0
},
{
"node": "Sentiment Data",
"type": "main",
"index": 0
}
]
]
},
"Sentiment Data": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Extract Keywords": {
"main": [
[
{
"node": "Post Message",
"type": "main",
"index": 0
}
]
]
},
"Research Analyst": {
"main": [
[
{
"node": "Extract Keywords",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Research Analyst",
"type": "ai_languageModel",
"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.
discordBotApigooglePalmApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
The AI Investment Research Assistant (Discord Summary Bot) transforms your Discord server into a professional-grade AI-driven crypto intelligence center. Running automatically every morning, it gathers real-time news, sentiment, and market data from multiple trusted sources —…
Source: https://n8n.io/workflows/10092/ — 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.
This workflow automates the complete blog publishing process. It removes manual work from content creation, image generation, category management, and WordPress publishing by using AI and n8n. It help
This n8n workflow automates the complete blog publishing process from topic research to WordPress publication. It researches topics, writes SEO-optimized content, generates images, publishes posts, an
This workflow is a professional-grade market intelligence tool designed to bridge the gap between search interest and social media engagement. It automates the end-to-end process of trend discovery an
The Daily AI-Powered Global Trend Analysis Workflow transforms your Discord server into a real-time AI-driven global intelligence dashboard. Every 6 hours, this automation gathers worldwide data from
LinkedIn_Job_Hunt_and_Cover_Letter. Uses outputParserStructured, outputParserAutofixing, googleDrive, agent. Scheduled trigger; 85 nodes.