{
  "workflow": {
    "id": 6627,
    "name": "Analyze real estate market sentiment with ScrapeGraphAI and Telegram",
    "views": 597,
    "recentViews": 0,
    "totalViews": 597,
    "createdAt": "2025-07-29T10:59:49.754Z",
    "description": "# How it works\n\nThis workflow automatically analyzes real estate market sentiment by scraping investment forums and news sources, then provides AI-powered market predictions and investment recommendations.\n\n## Key Steps\n\n1. **Scheduled Trigger** - Runs on a cron schedule to regularly monitor market sentiment.\n2. **Multi-Source Scraping** - Uses ScrapeGraphAI to extract discussions from BiggerPockets forums and real estate news articles.\n3. **Sentiment Analysis** - JavaScript nodes analyze text content for bullish/bearish keywords and calculate sentiment scores.\n4. **Market Prediction** - Generates investment recommendations (buy/sell/hold) based on sentiment analysis with confidence levels.\n5. **Timing Optimization** - Provides optimal timing recommendations considering seasonal factors and market urgency.\n6. **Investment Advisor Alerts** - Formats comprehensive reports with actionable investment advice.\n7. **Telegram Notifications** - Sends formatted alerts directly to your Telegram channel for instant access.\n\n## Set up steps\n\n**Setup time: 10-15 minutes**\n\n1. **Configure ScrapeGraphAI credentials** - Add your ScrapeGraphAI API key for web scraping.\n2. **Set up Telegram bot** - Create a bot via @BotFather and add your bot token and chat ID.\n3. **Customize data sources** - Update the URLs to target specific real estate forums or news sources.\n4. **Adjust schedule frequency** - Modify the cron expression based on how often you want sentiment updates.\n5. **Test sentiment analysis** - Run manually first to ensure the analysis logic works for your market.\n6. **Configure alert preferences** - Customize the alert formatting and priority levels as needed.\n\n## Technologies Used\n\n- **ScrapeGraphAI** - For extracting structured data from real estate forums and news sites\n- **JavaScript Code Nodes** - For sentiment analysis, market prediction, and timing optimization\n- **Schedule Trigger** - For automated execution using cron expressions\n- **Telegram Integration** - For instant mobile notifications and team alerts\n- **JSON Data Processing** - For structured sentiment analysis and market intelligence\n",
    "workflow": {
      "id": "VhEwspDqzu7ssFVE",
      "meta": {
        "instanceId": "f4b0efaa33080e7774e0d9285c40c7abcd2c6f7cf1a8b901fa7106170dd4cda3",
        "templateCredsSetupCompleted": true
      },
      "name": "My workflow 2",
      "tags": [
        {
          "id": "DxXGubfBzRKh6L8T",
          "name": "Revenue Optimization",
          "createdAt": "2025-07-25T16:24:30.370Z",
          "updatedAt": "2025-07-25T16:24:30.370Z"
        },
        {
          "id": "IxkcJ2IpYIxivoHV",
          "name": "Content Strategy",
          "createdAt": "2025-07-25T12:57:37.677Z",
          "updatedAt": "2025-07-25T12:57:37.677Z"
        },
        {
          "id": "PAKIJ2Mm9EvRcR3u",
          "name": "Trend Monitoring",
          "createdAt": "2025-07-25T12:57:37.670Z",
          "updatedAt": "2025-07-25T12:57:37.670Z"
        },
        {
          "id": "YtfXmaZk44MYedPO",
          "name": "Dynamic Pricing",
          "createdAt": "2025-07-25T16:24:30.369Z",
          "updatedAt": "2025-07-25T16:24:30.369Z"
        },
        {
          "id": "wJ30mjhtrposO8Qt",
          "name": "Simple RAG",
          "createdAt": "2025-07-28T12:55:14.424Z",
          "updatedAt": "2025-07-28T12:55:14.424Z"
        }
      ],
      "nodes": [
        {
          "id": "ca1ec51f-e86e-44f4-b00f-6588ec3bf456",
          "name": "Schedule Trigger",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            1056,
            272
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "cronExpression"
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "f7d52e3a-2ede-4754-ab26-20e4d96f86c3",
          "name": "ScrapeGraphAI - RE Forums",
          "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
          "position": [
            1392,
            400
          ],
          "parameters": {
            "userPrompt": "Extract recent forum discussions about real estate market conditions, investment opportunities, and market sentiment. Focus on posts from the last 24 hours. Return data in this format: { \"discussions\": [{ \"title\": \"discussion title\", \"author\": \"username\", \"date\": \"date posted\", \"content\": \"main discussion content\", \"replies_count\": \"number of replies\", \"sentiment_indicators\": [\"bullish\", \"bearish\", \"neutral indicators\"], \"url\": \"discussion url\" }] }",
            "websiteUrl": "https://www.biggerpockets.com/forums/real-estate-investing"
          },
          "typeVersion": 1
        },
        {
          "id": "728be835-5b88-4132-9289-fcf12f31d554",
          "name": "ScrapeGraphAI - RE News",
          "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
          "position": [
            1392,
            640
          ],
          "parameters": {
            "userPrompt": "Extract the latest real estate investment news and market analysis from the past 24 hours. Focus on market trends, economic indicators, and expert opinions. Return data as: { \"news_articles\": [{ \"headline\": \"article title\", \"author\": \"author name\", \"date\": \"publication date\", \"summary\": \"article summary\", \"key_points\": [\"important points\"], \"market_impact\": \"positive/negative/neutral\", \"url\": \"article url\" }] }",
            "websiteUrl": "https://www.realestateinvestingtrust.com/news"
          },
          "typeVersion": 1
        },
        {
          "id": "6b2e44ec-8c2c-419a-a145-e367bacab041",
          "name": "Sentiment Analyzer",
          "type": "n8n-nodes-base.code",
          "position": [
            1664,
            432
          ],
          "parameters": {
            "jsCode": "// Combine forum and news data for sentiment analysis\nconst forumData = $input.all()[0]?.json?.result?.discussions || [];\nconst newsData = $input.all()[1]?.json?.result?.news_articles || [];\n\nfunction analyzeSentiment(text) {\n  const bullishKeywords = ['buy', 'opportunity', 'growth', 'investment', 'profit', 'rising', 'bullish', 'positive', 'gain', 'uptrend'];\n  const bearishKeywords = ['sell', 'crash', 'decline', 'loss', 'falling', 'bearish', 'negative', 'risk', 'downturn', 'bubble'];\n  \n  const textLower = text.toLowerCase();\n  const bullishCount = bullishKeywords.filter(word => textLower.includes(word)).length;\n  const bearishCount = bearishKeywords.filter(word => textLower.includes(word)).length;\n  \n  if (bullishCount > bearishCount) return 'bullish';\n  if (bearishCount > bullishCount) return 'bearish';\n  return 'neutral';\n}\n\nfunction calculateSentimentScore(sentiment) {\n  switch(sentiment) {\n    case 'bullish': return 1;\n    case 'bearish': return -1;\n    default: return 0;\n  }\n}\n\nconst forumSentiments = forumData.map(discussion => {\n  const sentiment = analyzeSentiment(discussion.title + ' ' + discussion.content);\n  return {\n    source: 'forum',\n    title: discussion.title,\n    sentiment: sentiment,\n    score: calculateSentimentScore(sentiment),\n    url: discussion.url,\n    date: discussion.date\n  };\n});\n\nconst newsSentiments = newsData.map(article => {\n  const sentiment = analyzeSentiment(article.headline + ' ' + article.summary);\n  return {\n    source: 'news',\n    title: article.headline,\n    sentiment: sentiment,\n    score: calculateSentimentScore(sentiment),\n    url: article.url,\n    date: article.date,\n    market_impact: article.market_impact\n  };\n});\n\nconst allSentiments = [...forumSentiments, ...newsSentiments];\nconst totalScore = allSentiments.reduce((sum, item) => sum + item.score, 0);\nconst averageScore = totalScore / allSentiments.length || 0;\n\nlet overallSentiment = 'neutral';\nif (averageScore > 0.3) overallSentiment = 'bullish';\nelse if (averageScore < -0.3) overallSentiment = 'bearish';\n\nreturn [{\n  json: {\n    overall_sentiment: overallSentiment,\n    sentiment_score: averageScore,\n    total_sources: allSentiments.length,\n    bullish_count: allSentiments.filter(s => s.sentiment === 'bullish').length,\n    bearish_count: allSentiments.filter(s => s.sentiment === 'bearish').length,\n    neutral_count: allSentiments.filter(s => s.sentiment === 'neutral').length,\n    detailed_analysis: allSentiments,\n    analysis_timestamp: new Date().toISOString()\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "ed209cd0-b393-4bb8-9e59-5fc605ab1f77",
          "name": "Market Predictor",
          "type": "n8n-nodes-base.code",
          "position": [
            1968,
            416
          ],
          "parameters": {
            "jsCode": "// Market prediction based on sentiment analysis\nconst sentimentData = $input.all()[0].json;\n\nfunction predictMarketDirection(sentimentScore, bullishCount, bearishCount, totalSources) {\n  let prediction = 'hold';\n  let confidence = 0;\n  let reasoning = [];\n  \n  // Strong bullish sentiment\n  if (sentimentScore > 0.5 && bullishCount > bearishCount * 2) {\n    prediction = 'strong_buy';\n    confidence = Math.min(90, 60 + (sentimentScore * 30));\n    reasoning.push('Strong bullish sentiment detected across multiple sources');\n  }\n  // Moderate bullish sentiment\n  else if (sentimentScore > 0.2) {\n    prediction = 'buy';\n    confidence = Math.min(75, 50 + (sentimentScore * 25));\n    reasoning.push('Moderate positive sentiment in the market');\n  }\n  // Strong bearish sentiment\n  else if (sentimentScore < -0.5 && bearishCount > bullishCount * 2) {\n    prediction = 'strong_sell';\n    confidence = Math.min(90, 60 + (Math.abs(sentimentScore) * 30));\n    reasoning.push('Strong bearish sentiment detected - consider exiting positions');\n  }\n  // Moderate bearish sentiment\n  else if (sentimentScore < -0.2) {\n    prediction = 'sell';\n    confidence = Math.min(75, 50 + (Math.abs(sentimentScore) * 25));\n    reasoning.push('Negative sentiment trend - caution advised');\n  }\n  // Neutral/mixed signals\n  else {\n    prediction = 'hold';\n    confidence = 40;\n    reasoning.push('Mixed signals in market sentiment - maintain current positions');\n  }\n  \n  // Adjust confidence based on data volume\n  if (totalSources < 10) {\n    confidence *= 0.8;\n    reasoning.push('Limited data sources - lower confidence');\n  }\n  \n  return {\n    prediction,\n    confidence: Math.round(confidence),\n    reasoning\n  };\n}\n\nconst marketPrediction = predictMarketDirection(\n  sentimentData.sentiment_score,\n  sentimentData.bullish_count,\n  sentimentData.bearish_count,\n  sentimentData.total_sources\n);\n\n// Generate investment recommendations\nlet recommendations = [];\nswitch(marketPrediction.prediction) {\n  case 'strong_buy':\n    recommendations = [\n      'Consider increasing real estate investment allocation',\n      'Look for value opportunities in growth markets',\n      'Accelerate planned property acquisitions'\n    ];\n    break;\n  case 'buy':\n    recommendations = [\n      'Moderate increase in real estate exposure',\n      'Focus on cash-flowing properties',\n      'Monitor market closely for entry points'\n    ];\n    break;\n  case 'strong_sell':\n    recommendations = [\n      'Consider reducing real estate exposure',\n      'Postpone new acquisitions',\n      'Review portfolio for underperforming assets'\n    ];\n    break;\n  case 'sell':\n    recommendations = [\n      'Exercise caution with new investments',\n      'Consider taking profits on recent gains',\n      'Increase cash reserves'\n    ];\n    break;\n  default:\n    recommendations = [\n      'Maintain current investment strategy',\n      'Continue regular market monitoring',\n      'Stay prepared for market shifts'\n    ];\n}\n\nreturn [{\n  json: {\n    ...sentimentData,\n    market_prediction: marketPrediction.prediction,\n    confidence_level: marketPrediction.confidence,\n    reasoning: marketPrediction.reasoning,\n    investment_recommendations: recommendations,\n    risk_level: marketPrediction.confidence > 70 ? 'low' : marketPrediction.confidence > 50 ? 'medium' : 'high',\n    prediction_timestamp: new Date().toISOString()\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "11367ba0-9a2c-4352-85c5-945596f2aab0",
          "name": "Timing Optimizer",
          "type": "n8n-nodes-base.code",
          "position": [
            2272,
            416
          ],
          "parameters": {
            "jsCode": "// Timing optimization based on market prediction and historical patterns\nconst predictionData = $input.all()[0].json;\n\nfunction optimizeTiming(prediction, confidence, sentimentScore) {\n  let timing_recommendation = 'monitor';\n  let urgency = 'low';\n  let optimal_timeframe = '1-3 months';\n  let timing_factors = [];\n  \n  // Determine optimal timing based on prediction strength\n  if (prediction === 'strong_buy' && confidence > 75) {\n    timing_recommendation = 'act_immediately';\n    urgency = 'high';\n    optimal_timeframe = '1-2 weeks';\n    timing_factors.push('Strong market signals indicate immediate action needed');\n  }\n  else if (prediction === 'buy' && confidence > 60) {\n    timing_recommendation = 'act_soon';\n    urgency = 'medium';\n    optimal_timeframe = '2-4 weeks';\n    timing_factors.push('Positive sentiment building - act within optimal window');\n  }\n  else if (prediction === 'strong_sell') {\n    timing_recommendation = 'exit_positions';\n    urgency = 'high';\n    optimal_timeframe = '1-2 weeks';\n    timing_factors.push('Strong negative signals - consider immediate exit strategy');\n  }\n  else if (prediction === 'sell') {\n    timing_recommendation = 'reduce_exposure';\n    urgency = 'medium';\n    optimal_timeframe = '2-6 weeks';\n    timing_factors.push('Negative trend developing - gradual position reduction advised');\n  }\n  \n  // Add seasonal considerations (simplified)\n  const currentMonth = new Date().getMonth();\n  const seasonalFactors = {\n    spring: [2, 3, 4], // March, April, May\n    summer: [5, 6, 7], // June, July, August\n    fall: [8, 9, 10],  // September, October, November\n    winter: [11, 0, 1] // December, January, February\n  };\n  \n  let currentSeason = 'winter';\n  for (const [season, months] of Object.entries(seasonalFactors)) {\n    if (months.includes(currentMonth)) {\n      currentSeason = season;\n      break;\n    }\n  }\n  \n  if (currentSeason === 'spring' || currentSeason === 'summer') {\n    timing_factors.push('Peak real estate season - higher activity expected');\n  } else {\n    timing_factors.push('Off-season period - potentially better deals available');\n  }\n  \n  return {\n    timing_recommendation,\n    urgency,\n    optimal_timeframe,\n    timing_factors,\n    current_season: currentSeason\n  };\n}\n\nconst timingAnalysis = optimizeTiming(\n  predictionData.market_prediction,\n  predictionData.confidence_level,\n  predictionData.sentiment_score\n);\n\nreturn [{\n  json: {\n    ...predictionData,\n    timing_recommendation: timingAnalysis.timing_recommendation,\n    urgency_level: timingAnalysis.urgency,\n    optimal_timeframe: timingAnalysis.optimal_timeframe,\n    timing_factors: timingAnalysis.timing_factors,\n    current_season: timingAnalysis.current_season,\n    timing_analysis_timestamp: new Date().toISOString()\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "a430a788-98ec-469e-9724-dca80245a1e9",
          "name": "Investment Advisor Alert",
          "type": "n8n-nodes-base.code",
          "position": [
            2592,
            416
          ],
          "parameters": {
            "jsCode": "// Generate comprehensive investment advisor alert\nconst analysisData = $input.all()[0].json;\n\nfunction generateAlert(data) {\n  const {\n    overall_sentiment,\n    sentiment_score,\n    market_prediction,\n    confidence_level,\n    timing_recommendation,\n    urgency_level,\n    optimal_timeframe,\n    investment_recommendations,\n    risk_level\n  } = data;\n  \n  // Determine alert priority\n  let alertPriority = 'normal';\n  if (urgency_level === 'high' && confidence_level > 70) {\n    alertPriority = 'critical';\n  } else if (urgency_level === 'medium' || confidence_level > 60) {\n    alertPriority = 'high';\n  }\n  \n  // Generate alert title\n  const alertTitle = `🏠 RE Market Alert: ${market_prediction.toUpperCase().replace('_', ' ')} Signal (${confidence_level}% confidence)`;\n  \n  // Generate detailed message\n  let message = `📊 **REAL ESTATE MARKET ANALYSIS REPORT**\\n\\n`;\n  message += `🎯 **Overall Sentiment:** ${overall_sentiment.toUpperCase()}\\n`;\n  message += `📈 **Market Prediction:** ${market_prediction.replace('_', ' ').toUpperCase()}\\n`;\n  message += `🎲 **Confidence Level:** ${confidence_level}%\\n`;\n  message += `⏰ **Timing:** ${timing_recommendation.replace('_', ' ').toUpperCase()}\\n`;\n  message += `🚨 **Urgency:** ${urgency_level.toUpperCase()}\\n`;\n  message += `📅 **Optimal Timeframe:** ${optimal_timeframe}\\n`;\n  message += `⚠️ **Risk Level:** ${risk_level.toUpperCase()}\\n\\n`;\n  \n  message += `💡 **KEY RECOMMENDATIONS:**\\n`;\n  investment_recommendations.forEach((rec, index) => {\n    message += `${index + 1}. ${rec}\\n`;\n  });\n  \n  message += `\\n🔍 **ANALYSIS SUMMARY:**\\n`;\n  message += `• Total sources analyzed: ${data.total_sources}\\n`;\n  message += `• Bullish signals: ${data.bullish_count}\\n`;\n  message += `• Bearish signals: ${data.bearish_count}\\n`;\n  message += `• Neutral signals: ${data.neutral_count}\\n`;\n  \n  message += `\\n📋 **TIMING FACTORS:**\\n`;\n  data.timing_factors.forEach((factor, index) => {\n    message += `• ${factor}\\n`;\n  });\n  \n  message += `\\n🕐 **Report Generated:** ${new Date().toLocaleString()}\\n`;\n  message += `\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`;\n  \n  return {\n    alert_title: alertTitle,\n    alert_message: message,\n    alert_priority: alertPriority,\n    raw_data: data\n  };\n}\n\nconst alert = generateAlert(analysisData);\n\nreturn [{\n  json: {\n    ...alert,\n    notification_timestamp: new Date().toISOString()\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "d2bd5cbb-7de7-45f3-b106-2200aba40fa4",
          "name": "Telegram Alert",
          "type": "n8n-nodes-base.telegram",
          "position": [
            2896,
            400
          ],
          "webhookId": "e0f221b9-7ee1-4113-850e-1fc0202811f1",
          "parameters": {
            "text": "={{ $json.alert_message }}",
            "chatId": "@real_estate_alerts",
            "additionalFields": {
              "parse_mode": "Markdown"
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "15984e52-8b3a-4739-956c-e3d24197ff3f",
          "name": "Sticky Note - Trigger",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            976,
            -352
          ],
          "parameters": {
            "color": 2,
            "width": 300,
            "height": 1136,
            "content": "# Step 1: Schedule Trigger ⏱️\n\n**Daily Market Monitoring**\n\nThis trigger runs the workflow every day at 8:00 AM to analyze real estate market sentiment.\n\n## Configuration:\n- **Frequency**: Daily at 8:00 AM\n- **Cron Expression**: `0 8 * * *`\n- **Purpose**: Automated daily market analysis\n\n## Why Daily?\n- Real estate markets change gradually\n- Daily analysis captures emerging trends\n- Optimal timing for investment decisions"
          },
          "typeVersion": 1
        },
        {
          "id": "de278e05-8034-4c28-a838-79933be72677",
          "name": "Sticky Note - Data Collection",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1280,
            -352
          ],
          "parameters": {
            "color": 3,
            "width": 300,
            "height": 1136,
            "content": "# Step 2: Data Collection 🔍\n\n**Dual Source Scraping**\n\nTwo ScrapeGraphAI nodes collect data from:\n\n## Forum Scraping:\n- **Source**: BiggerPockets Forums\n- **Focus**: Investor discussions\n- **Data**: Sentiment indicators, trends\n\n## News Scraping:\n- **Source**: RE Investment News\n- **Focus**: Market analysis & expert opinions\n- **Data**: Headlines, market impact\n\n## Benefits:\n- Comprehensive market view\n- Real-time sentiment capture\n- Multiple perspective analysis"
          },
          "typeVersion": 1
        },
        {
          "id": "e14ea293-64f2-4751-a573-5b9f2bed9a8a",
          "name": "Sticky Note - Sentiment Analysis",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1584,
            -352
          ],
          "parameters": {
            "color": 4,
            "width": 300,
            "height": 1136,
            "content": "# Step 3: Sentiment Analysis 🧠\n\n**AI-Powered Market Psychology**\n\nAdvanced sentiment analysis combining forum discussions and news articles.\n\n## Key Features:\n- **Keyword Analysis**: Bullish/bearish indicators\n- **Scoring System**: -1 to +1 sentiment scale\n- **Source Weighting**: News vs forum importance\n- **Trend Detection**: Pattern recognition\n\n## Output:\n- Overall market sentiment\n- Confidence scoring\n- Detailed breakdowns\n- Historical comparison"
          },
          "typeVersion": 1
        },
        {
          "id": "a1d2afa7-e8dc-4e19-8fb3-ac199f9726a9",
          "name": "Sticky Note - Market Prediction",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1888,
            -352
          ],
          "parameters": {
            "color": 5,
            "width": 300,
            "height": 1136,
            "content": "# Step 4: Market Prediction 🔮\n\n**Intelligent Forecasting Engine**\n\nTransforms sentiment into actionable market predictions.\n\n## Prediction Types:\n- **Strong Buy**: High confidence bullish\n- **Buy**: Moderate positive signals\n- **Hold**: Mixed/neutral sentiment\n- **Sell**: Negative trend detected\n- **Strong Sell**: High confidence bearish\n\n## Features:\n- Confidence scoring (0-100%)\n- Risk assessment\n- Investment recommendations\n- Reasoning transparency"
          },
          "typeVersion": 1
        },
        {
          "id": "ce6eb84f-96ca-47a6-9b9a-8e16c1b77b13",
          "name": "Sticky Note - Timing Optimization",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2192,
            -352
          ],
          "parameters": {
            "color": 6,
            "width": 300,
            "height": 1136,
            "content": "# Step 5: Timing Optimization ⏰\n\n**Strategic Entry/Exit Planning**\n\nOptimizes investment timing based on market conditions and seasonal factors.\n\n## Timing Strategies:\n- **Act Immediately**: Strong signals (1-2 weeks)\n- **Act Soon**: Good opportunity (2-4 weeks)\n- **Monitor**: Wait for clarity (1-3 months)\n- **Exit Positions**: Risk mitigation (immediate)\n\n## Factors Considered:\n- Market sentiment strength\n- Seasonal real estate patterns\n- Historical performance data\n- Risk/reward ratios"
          },
          "typeVersion": 1
        },
        {
          "id": "77039ec5-4612-49fb-a4b4-1f4e5c21ec56",
          "name": "Sticky Note - Investment Alert",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2496,
            -352
          ],
          "parameters": {
            "color": 7,
            "width": 300,
            "height": 1136,
            "content": "# Step 6: Investment Alert 🚨\n\n**Professional Advisory System**\n\nGenerates comprehensive investment alerts with actionable recommendations.\n\n## Alert Components:\n- **Priority Level**: Critical/High/Normal\n- **Market Summary**: Key findings\n- **Recommendations**: Specific actions\n- **Risk Assessment**: Potential downsides\n- **Timing Guidance**: When to act\n\n## Alert Types:\n- Immediate action required\n- Opportunity identification\n- Risk warnings\n- Market updates"
          },
          "typeVersion": 1
        },
        {
          "id": "05197e73-8d6b-45e2-8202-6c828a45a9c7",
          "name": "Sticky Note - Telegram Delivery",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2800,
            -352
          ],
          "parameters": {
            "width": 300,
            "height": 1136,
            "content": "# Step 7: Telegram Delivery 📱\n\n**Instant Notification System**\n\nDelivers formatted investment alerts directly to your Telegram channel.\n\n## Features:\n- **Markdown Formatting**: Professional layout\n- **Instant Delivery**: Real-time alerts\n- **Channel Integration**: Team notifications\n- **Mobile Friendly**: Access anywhere\n\n## Setup Requirements:\n- Create Telegram bot via @BotFather\n- Add bot token to credentials\n- Configure channel/chat ID\n- Enable markdown parsing"
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "df60cb6d-f920-46a7-843a-9d4c9bdd76d9",
      "connections": {
        "Market Predictor": {
          "main": [
            [
              {
                "node": "Timing Optimizer",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Schedule Trigger": {
          "main": [
            [
              {
                "node": "ScrapeGraphAI - RE Forums",
                "type": "main",
                "index": 0
              },
              {
                "node": "ScrapeGraphAI - RE News",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Timing Optimizer": {
          "main": [
            [
              {
                "node": "Investment Advisor Alert",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Sentiment Analyzer": {
          "main": [
            [
              {
                "node": "Market Predictor",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "ScrapeGraphAI - RE News": {
          "main": [
            [
              {
                "node": "Sentiment Analyzer",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Investment Advisor Alert": {
          "main": [
            [
              {
                "node": "Telegram Alert",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "ScrapeGraphAI - RE Forums": {
          "main": [
            [
              {
                "node": "Sentiment Analyzer",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 15,
      "nodeTypes": {
        "n8n-nodes-base.code": {
          "count": 4
        },
        "n8n-nodes-base.telegram": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 7
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        },
        "n8n-nodes-scrapegraphai.scrapegraphAi": {
          "count": 2
        }
      }
    },
    "status": "published",
    "user": {
      "name": "vinci-king-01",
      "username": "vinci-king-01",
      "bio": "",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/marco-vinciguerra-7ba365242/"
      ],
      "avatar": "https://gravatar.com/avatar/d939eeef03a5fcb5df08bee8196f12ccb248c38209487414e419032004f0c014?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 49,
        "icon": "file:telegram.svg",
        "name": "n8n-nodes-base.telegram",
        "codex": {
          "data": {
            "alias": [
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/world-poetry-day-workflow/",
                  "icon": "📜",
                  "label": "Celebrating World Poetry Day with a daily poem in Telegram"
                },
                {
                  "url": "https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/",
                  "icon": "💪",
                  "label": "Using Automation to Boost Productivity in the Workplace"
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/",
                  "icon": "🤟",
                  "label": "Creating scheduled text affirmations with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/",
                  "icon": "💬",
                  "label": "Creating Telegram Bots with n8n, a No-Code Platform"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/telegram/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Telegram"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Telegram",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 839,
        "icon": "fa:clock",
        "name": "n8n-nodes-base.scheduleTrigger",
        "codex": {
          "data": {
            "alias": [
              "Time",
              "Scheduler",
              "Polling",
              "Cron",
              "Interval"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\",\"schedule\"]",
        "defaults": {
          "name": "Schedule Trigger",
          "color": "#31C49F"
        },
        "iconData": {
          "icon": "clock",
          "type": "icon"
        },
        "displayName": "Schedule Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 32,
        "name": "Market Research"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": []
  }
}