AutomationFlowsWeb Scraping › Analyze Crypto Market with Coingecko: Volatility Metrics & Investment Signals

Analyze Crypto Market with Coingecko: Volatility Metrics & Investment Signals

Byist00dent @ist00dent on n8n.io

This n8n template lets you automatically pull market data for the cryptocurrencies from CoinGecko every hour, calculate custom volatility and market-health metrics, classify each coin’s price action into buy/sell/hold/neutral signals with risk ratings, and expose both individual…

Webhook trigger★★★★☆ complexity26 nodesHTTP Request
Web Scraping Trigger: Webhook Nodes: 26 Complexity: ★★★★☆ Added:

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

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": "Uw1r9yGqgPRykfUs",
  "name": "day9_getting_updated_in_crypto",
  "tags": [
    {
      "id": "4zX1mtizlZxTekJP",
      "name": "training-tasks-n8n",
      "createdAt": "2025-04-29T10:41:14.716Z",
      "updatedAt": "2025-04-29T10:41:14.716Z"
    },
    {
      "id": "F1KjxL3SjfvVqZqo",
      "name": "training-n8n",
      "createdAt": "2025-04-29T10:40:13.332Z",
      "updatedAt": "2025-04-29T10:40:13.332Z"
    }
  ],
  "nodes": [
    {
      "id": "745e4849-8c61-4b29-9980-24de93821adb",
      "name": "Fetch Crypto Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        220,
        385
      ],
      "parameters": {
        "url": "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=10&page=1&sparkline=false&price_change_percentage=24h,7d,30d",
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "f4e6c40d-ab60-473b-9961-961eb1fa3505",
      "name": "Calculate Market Metrics",
      "type": "n8n-nodes-base.function",
      "position": [
        660,
        385
      ],
      "parameters": {
        "functionCode": "// Calculate a volatility score based on price changes\nconst item = $input.item.json;\n\n// Extract price change percentages\nconst priceChange24h = item.price_change_percentage_24h || 0;\nconst priceChange7d = item.price_change_percentage_7d_in_currency || 0;\nconst priceChange30d = item.price_change_percentage_30d_in_currency || 0;\n\n// Calculate absolute values to measure volatility regardless of direction\nconst absChange24h = Math.abs(priceChange24h);\nconst absChange7d = Math.abs(priceChange7d);\nconst absChange30d = Math.abs(priceChange30d);\n\n// Calculate a weighted volatility score (more weight to recent changes)\nconst volatilityScore = (absChange24h * 0.5) + (absChange7d * 0.3) + (absChange30d * 0.2);\n\n// Calculate market cap to volume ratio (higher means less liquid/more volatile)\nconst marketCapToVolumeRatio = item.market_cap / (item.total_volume || 1);\n\n// Calculate price to ATH ratio (close to 1 means near all-time high)\nconst priceToAthRatio = item.current_price / (item.ath || item.current_price);\n\n// Calculate a composite market score\nconst marketScore = (\n  (volatilityScore * 0.4) + \n  (Math.min(marketCapToVolumeRatio, 10) * 0.3) + \n  ((1 - priceToAthRatio) * 30) // Invert so coins further from ATH get higher scores\n);\n\n// Add calculated metrics to the item\nitem.volatilityScore = parseFloat(volatilityScore.toFixed(2));\nitem.marketCapToVolumeRatio = parseFloat(marketCapToVolumeRatio.toFixed(2));\nitem.priceToAthRatio = parseFloat(priceToAthRatio.toFixed(4));\nitem.marketScore = parseFloat(marketScore.toFixed(2));\n\n// Add a timestamp for the analysis\nitem.analyzedAt = new Date().toISOString();\n\nreturn {json: item};"
      },
      "typeVersion": 1
    },
    {
      "id": "5d760f94-ca2f-44cc-aef0-83eb2cf438ee",
      "name": "IF 24h Price Up >5%",
      "type": "n8n-nodes-base.if",
      "position": [
        880,
        60
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.price_change_percentage_24h }}",
              "value2": 5,
              "operation": "larger"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "19ca8650-b642-4910-ac7c-50b1ceb41ffc",
      "name": "IF 24h Price Down >5%",
      "type": "n8n-nodes-base.if",
      "position": [
        1100,
        260
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.price_change_percentage_24h }}",
              "value2": -5
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c5d69bbb-df7e-4089-b0c8-50653cd936f0",
      "name": "IF High Volatility",
      "type": "n8n-nodes-base.if",
      "position": [
        1320,
        560
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.volatilityScore }}",
              "value2": 10,
              "operation": "larger"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "77902b9a-2cf8-4b6f-95e9-590b51278c59",
      "name": "Set Uptrend Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1540,
        60
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "priceAction",
              "value": "Strong upward momentum in the past 24 hours"
            },
            {
              "name": "signal",
              "value": "BUY"
            },
            {
              "name": "recommendation",
              "value": "Consider buying on continued strength above resistance levels. Set stop loss at recent support."
            },
            {
              "name": "investmentStrategy",
              "value": "Momentum strategy with trailing stop loss. Consider dollar-cost averaging to manage volatility risk."
            }
          ]
        },
        "options": {
          "dotNotation": true
        }
      },
      "typeVersion": 2
    },
    {
      "id": "4706270b-3bdc-4806-a302-830a88c9a982",
      "name": "Set Downtrend Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1540,
        260
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "priceAction",
              "value": "Rapid price decline in the past 24 hours"
            },
            {
              "name": "signal",
              "value": "SELL"
            },
            {
              "name": "recommendation",
              "value": "Consider reducing exposure or implementing hedging strategies. Watch for oversold conditions."
            },
            {
              "name": "investmentStrategy",
              "value": "Capital preservation is priority. Consider re-evaluation after price stabilization."
            }
          ]
        },
        "options": {
          "dotNotation": true
        }
      },
      "typeVersion": 2
    },
    {
      "id": "608729c4-23a5-4c5b-b9a0-d77f12166aa3",
      "name": "Set Volatility Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1540,
        460
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "priceAction",
              "value": "High volatility with significant price swings"
            },
            {
              "name": "signal",
              "value": "HOLD"
            },
            {
              "name": "recommendation",
              "value": "High volatility indicates market uncertainty. Consider waiting for clearer signals before making major positions."
            },
            {
              "name": "investmentStrategy",
              "value": "Range-trading strategy may be effective. Set both upper and lower limit orders."
            }
          ]
        },
        "options": {
          "dotNotation": true
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f8134b51-4b41-4684-97a9-008e5f0260df",
      "name": "Set Stable Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1540,
        660
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "priceAction",
              "value": "Relatively stable price action with minimal volatility"
            },
            {
              "name": "signal",
              "value": "NEUTRAL"
            },
            {
              "name": "recommendation",
              "value": "Market is consolidating. Watch for breakout signals in either direction."
            },
            {
              "name": "investmentStrategy",
              "value": "Consider accumulating small positions or implementing a neutral options strategy."
            }
          ]
        },
        "options": {
          "dotNotation": true
        }
      },
      "typeVersion": 2
    },
    {
      "id": "5f43178c-7bb5-405d-a988-b3b0ae0a0405",
      "name": "Merge Results",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1760,
        360
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e422a9e1-9016-4db9-912b-58be44604eb2",
      "name": "Set High Risk Rating",
      "type": "n8n-nodes-base.set",
      "position": [
        2200,
        -40
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "riskRating",
              "value": "High Risk"
            },
            {
              "name": "investmentStrategy",
              "value": "={{ $json.investmentStrategy }} Due to high risk profile, use strict position sizing (max 2-5% of portfolio)."
            }
          ]
        },
        "options": {
          "dotNotation": true
        }
      },
      "typeVersion": 2
    },
    {
      "id": "383a55c7-f42f-4a32-b6ba-742049406f67",
      "name": "Set Medium Risk Rating",
      "type": "n8n-nodes-base.set",
      "position": [
        2200,
        160
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "riskRating",
              "value": "Medium Risk"
            },
            {
              "name": "investmentStrategy",
              "value": "={{ $json.investmentStrategy }} Moderate risk profile suggests balanced position sizing (5-10% of portfolio)."
            }
          ]
        },
        "options": {
          "dotNotation": true
        }
      },
      "typeVersion": 2
    },
    {
      "id": "2f50e6cd-dd62-4fb2-8ee2-28096c758e23",
      "name": "Set Low Risk Rating",
      "type": "n8n-nodes-base.set",
      "position": [
        2200,
        460
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "riskRating",
              "value": "Low Risk"
            },
            {
              "name": "investmentStrategy",
              "value": "={{ $json.investmentStrategy }} Lower risk profile allows for larger position sizing (10-15% of portfolio)."
            }
          ]
        },
        "options": {
          "dotNotation": true
        }
      },
      "typeVersion": 2
    },
    {
      "id": "5a820de9-11f8-4aa7-8811-afb6153a7b54",
      "name": "Set Default Risk Rating",
      "type": "n8n-nodes-base.set",
      "position": [
        2200,
        660
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "riskRating",
              "value": "Unknown Risk"
            },
            {
              "name": "investmentStrategy",
              "value": "={{ $json.investmentStrategy }} Risk profile is unclear - use conservative position sizing until more data is available."
            }
          ]
        },
        "options": {
          "dotNotation": true
        }
      },
      "typeVersion": 2
    },
    {
      "id": "9b39eb90-f0c8-44df-9721-ef1d60a8a0fc",
      "name": "Final Merge",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2420,
        360
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "f84bd02a-92d1-49c7-9ba3-36e860a31636",
      "name": "Format Final Analysis",
      "type": "n8n-nodes-base.function",
      "position": [
        2640,
        635
      ],
      "parameters": {
        "functionCode": "// Create a formatted summary for each coin\nconst item = $input.item.json;\n\n// Format dollar amounts nicely\nconst formatCurrency = (value) => {\n  return new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD',\n    minimumFractionDigits: 2,\n    maximumFractionDigits: 2\n  }).format(value);\n};\n\n// Format percentages nicely\nconst formatPercent = (value) => {\n  return `${value > 0 ? '+' : ''}${value.toFixed(2)}%`;\n};\n\n// Create a detailed analysis report\nconst analysisReport = {\n  coin: item.name,\n  symbol: item.symbol.toUpperCase(),\n  currentPrice: formatCurrency(item.current_price),\n  marketCap: formatCurrency(item.market_cap),\n  volume24h: formatCurrency(item.total_volume),\n  priceChanges: {\n    \"24h\": formatPercent(item.price_change_percentage_24h),\n    \"7d\": formatPercent(item.price_change_percentage_7d_in_currency),\n    \"30d\": formatPercent(item.price_change_percentage_30d_in_currency)\n  },\n  marketMetrics: {\n    volatilityScore: item.volatilityScore,\n    marketCapToVolumeRatio: item.marketCapToVolumeRatio,\n    priceToAthRatio: item.priceToAthRatio,\n    marketScore: item.marketScore\n  },\n  analysis: {\n    priceAction: item.priceAction,\n    signal: item.signal,\n    riskRating: item.riskRating,\n    recommendation: item.recommendation,\n    investmentStrategy: item.investmentStrategy\n  },\n  timestamp: item.analyzedAt\n};\n\n// Generate a natural language summary\nconst summary = `\n## ${item.name} (${item.symbol.toUpperCase()}) Analysis\n\nCurrent Price: ${formatCurrency(item.current_price)} (${formatPercent(item.price_change_percentage_24h)} 24h)\\n\\n\n\nMarket Signal: **${item.signal}** - *${item.priceAction}*\nRisk Rating: **${item.riskRating}**\\n\\n\n\n**Recommendation:**\n${item.recommendation}\n\n**Investment Strategy:**\n${item.investmentStrategy}\n\n---\n*Analysis based on volatility score of ${item.volatilityScore} and market score of ${item.marketScore}*\n`;\n\n// Return both structured data and a human-readable summary\nreturn {\n  json: {\n    ...item,\n    analysisReport,\n    summary\n  }\n};"
      },
      "typeVersion": 1
    },
    {
      "id": "911280f8-82cb-42ee-bd8a-6de15c58f188",
      "name": "Collect All Analyses",
      "type": "n8n-nodes-base.noOp",
      "position": [
        660,
        -140
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a4de8078-7f49-4b22-a11a-a2efabfa16b1",
      "name": "Generate Portfolio Summary",
      "type": "n8n-nodes-base.function",
      "position": [
        880,
        -140
      ],
      "parameters": {
        "functionCode": "// Create a portfolio summary based on all coin analyses\nconst allCoins = $input.all();\n\n// Extract all analyzed coins\nconst analyzedCoins = allCoins.map(coin => coin.json);\n\n// Count signals by type\nconst signalCounts = {\n  BUY: 0,\n  SELL: 0,\n  HOLD: 0,\n  NEUTRAL: 0\n};\n\n// Count risk ratings\nconst riskCounts = {\n  \"High Risk\": 0,\n  \"Medium Risk\": 0,\n  \"Low Risk\": 0,\n  \"Unknown Risk\": 0\n};\n\n// Calculate portfolio metrics\nanalyzedCoins.forEach(coin => {\n  // Count signals\n  if (coin.signal) {\n    signalCounts[coin.signal] = (signalCounts[coin.signal] || 0) + 1;\n  }\n\n  // Count risk ratings\n  if (coin.riskRating) {\n    riskCounts[coin.riskRating] = (riskCounts[coin.riskRating] || 0) + 1;\n  }\n});\n\n// Sort coins by market score (highest first)\nconst sortedCoins = [...analyzedCoins].sort((a, b) => b.marketScore - a.marketScore);\n\n// Get top recommendation\nconst topOpportunity = sortedCoins[0];\n\n// Generate portfolio summary markdown\nconst portfolioSummary = `# Cryptocurrency Market Analysis\n\n## Market Overview\n**Analyzed Coins:** ${analyzedCoins.length}  \n**Buy Signals:** ${signalCounts.BUY}  \n**Sell Signals:** ${signalCounts.SELL}  \n**Hold Signals:** ${signalCounts.HOLD}  \n**Neutral Signals:** ${signalCounts.NEUTRAL}  \n\n## Risk Distribution\n**High Risk Assets:** ${riskCounts[\"High Risk\"]}  \n**Medium Risk Assets:** ${riskCounts[\"Medium Risk\"]}  \n**Low Risk Assets:** ${riskCounts[\"Low Risk\"]}  \n\n## Top Opportunity  \n${topOpportunity ? `**${topOpportunity.name} (${topOpportunity.symbol.toUpperCase()})**  \n${topOpportunity.summary}` : \"No opportunities found\"}\n\n## Detailed Coin Analyses  \n${sortedCoins.map(coin => `**${coin.name} (${coin.symbol})**  \n${coin.summary}`).join('\\n\\n')}\n\n*Analysis generated on ${new Date().toLocaleString()}*`;\n\nreturn [\n  {\n    json: {\n      portfolioSummary,\n      individualAnalyses: analyzedCoins.map(coin => coin.analysisReport),\n      marketSignals: signalCounts,\n      riskDistribution: riskCounts,\n      timestamp: new Date().toISOString()\n    }\n  }\n];\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3277b96e-ab2c-4561-a29c-958998f45686",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        440,
        385
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "8256a60a-ddb8-4d72-b443-8fba819815bb",
      "name": "Switch by Market Score",
      "type": "n8n-nodes-base.switch",
      "position": [
        1980,
        339
      ],
      "parameters": {
        "rules": {
          "rules": [
            {
              "value2": 20,
              "operation": "larger"
            },
            {
              "value2": 10,
              "operation": "larger"
            },
            {
              "operation": "larger"
            }
          ]
        },
        "value1": "={{ $json.marketScore }}",
        "fallbackOutput": 3
      },
      "typeVersion": 1
    },
    {
      "id": "b8cb4f7d-3818-48df-89ea-9db22797375a",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1100,
        -140
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "individualAnalyses"
      },
      "typeVersion": 1
    },
    {
      "id": "936e9ada-4b6b-4cab-90e1-0bea30eaaa0c",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1320,
        -140
      ],
      "parameters": {
        "options": {},
        "respondWith": "allIncomingItems"
      },
      "typeVersion": 1.1
    },
    {
      "id": "7791cebf-4733-4cf6-8341-96771733b507",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        0,
        380
      ],
      "parameters": {
        "path": "31941fd9-9fd5-4fab-a1b9-9c347e26f5c9",
        "options": {},
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "d25b2427-9fc7-4042-92f2-673de5019206",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2120,
        -140
      ],
      "parameters": {
        "width": 260,
        "height": 960,
        "content": "## Categorize and set the rating of coin"
      },
      "typeVersion": 1
    },
    {
      "id": "ac3a6503-5ce7-406d-9efb-122928239337",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        680,
        40
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c4e4e17d-bf13-44a2-9a9e-1d22104f1062",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        140,
        -20
      ],
      "parameters": {
        "content": "## This workflow aims to"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "be12f8a1-3c44-4a1c-8f74-d1df269de92c",
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Fetch Crypto Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Final Merge": {
      "main": [
        [
          {
            "node": "Format Final Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Results": {
      "main": [
        [
          {
            "node": "Switch by Market Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Collect All Analyses",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Calculate Market Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Stable Data": {
      "main": [
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Uptrend Data": {
      "main": [
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Crypto Data": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF High Volatility": {
      "main": [
        [
          {
            "node": "Set Volatility Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Stable Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Downtrend Data": {
      "main": [
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF 24h Price Up >5%": {
      "main": [
        [
          {
            "node": "Set Uptrend Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "IF 24h Price Down >5%",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Low Risk Rating": {
      "main": [
        [
          {
            "node": "Final Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Volatility Data": {
      "main": [
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Collect All Analyses": {
      "main": [
        [
          {
            "node": "Generate Portfolio Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set High Risk Rating": {
      "main": [
        [
          {
            "node": "Final Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Final Analysis": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF 24h Price Down >5%": {
      "main": [
        [
          {
            "node": "Set Downtrend Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "IF High Volatility",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Medium Risk Rating": {
      "main": [
        [
          {
            "node": "Final Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch by Market Score": {
      "main": [
        [
          {
            "node": "Set High Risk Rating",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Medium Risk Rating",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Low Risk Rating",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Default Risk Rating",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Default Risk Rating": {
      "main": [
        [
          {
            "node": "Final Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Market Metrics": {
      "main": [
        [
          {
            "node": "IF 24h Price Up >5%",
            "type": "main",
            "index": 0
          },
          {
            "node": "IF 24h Price Down >5%",
            "type": "main",
            "index": 0
          },
          {
            "node": "IF High Volatility",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Portfolio Summary": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This n8n template lets you automatically pull market data for the cryptocurrencies from CoinGecko every hour, calculate custom volatility and market-health metrics, classify each coin’s price action into buy/sell/hold/neutral signals with risk ratings, and expose both individual…

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

More Web Scraping workflows → · Browse all categories →

Related workflows

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

Web Scraping

This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di

n8n, Execute Workflow Trigger, HTTP Request +1
Web Scraping

This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .

HTTP Request, Ssh
Web Scraping

This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c

HTTP Request
Web Scraping

Sign PDF documents with legally-compliant digital signatures using X.509 certificates. Supports multiple PAdES signature levels (B, T, LT, LTA) with optional visible stamps.

Execute Command, HTTP Request, Read Write File +1
Web Scraping

📡 This workflow serves as the central Alpha Vantage API fetcher for Tesla trading indicators, delivering cleaned 20-point JSON outputs for three timeframes: , , and . It is required by the following a

HTTP Request