{
  "id": "HPuntqVPRH2UITi4",
  "name": "Bitcoin_Price_Drop_Alert_System_via_Bright_Data",
  "tags": [],
  "nodes": [
    {
      "id": "8746bf3b-5e6b-4f14-815d-4b774c3302c3",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        2040,
        780
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "1a5d6ae5-9491-4199-a6fe-ae01593ebedd",
      "name": "Get Last Recorded Price",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2880,
        780
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15DSwLkRw9NK2RIhXLMjzysmF9QYa5afreDXFrDQNXPM/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "15DSwLkRw9NK2RIhXLMjzysmF9QYa5afreDXFrDQNXPM",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/15DSwLkRw9NK2RIhXLMjzysmF9QYa5afreDXFrDQNXPM/edit?usp=drivesdk",
          "cachedResultName": "Bitcoin latest price"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "b48cce2e-63f3-4b4a-b9e7-f7506695dd8a",
      "name": "Send Alert Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3780,
        600
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=Hello,\n\nThe price of Bitcoin has dropped by {{ $json.dropPercent }}% since the last check.\n\nPrevious Price: {{ $json.previousPrice }}\nCurrent Price: {{ $json.currentPrice }}\n\nPlease review accordingly.\n\nBest regards,\nYour Crypto Monitor Bot\n`;\n",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Bitcoin Price has dropped {{ $json.dropPercent }}%",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "d1f96797-9558-403d-a37c-604e07e76563",
      "name": "No Alert Needed",
      "type": "n8n-nodes-base.noOp",
      "position": [
        3780,
        900
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "208006b9-4cae-4199-9342-d7646fe38672",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
      },
      "typeVersion": 1
    },
    {
      "id": "403e8b40-1a0f-464e-8d81-a162c0308252",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        340
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 2558,
        "content": "# \ud83d\udcc9\ud83d\udcb0 **Bitcoin Price Drop Alert Workflow**\n\nThis automated workflow checks the current Bitcoin price and **sends an email alert if it drops by 5% or more** compared to the last recorded value. It\u2019s split into 3 easy-to-understand sections:\n\n---\n\n## \ud83d\udd0e **Section 1: Fetch the Current Bitcoin Price**\n\n\ud83e\udde9 **Nodes:**\n\n1. **\u26a1 Manual Trigger**\n2. **\ud83c\udf10 Fetch Bitcoin Price**\n3. **\ud83e\uddf1 Extract Price**\n\n### \ud83e\udde0 What Happens:\n\n* **\u26a1 Manual Trigger**\n  This starts the process manually. Think of it like pressing a \"Start\" button.\n\n* **\ud83c\udf10 Fetch Bitcoin Price**\n  Uses the [Bright Data API](https://brightdata.com/) to scrape the live Bitcoin price from a specific website using a POST request.\n\n* **\ud83e\uddf1 Extract Price**\n  Extracts the **exact price value** from the scraped HTML using selectors (like CSS paths).\n\n### \ud83d\udca1 Why It\u2019s Useful:\n\nYou can track the **real-time price** of Bitcoin straight from any public site, even those not offering official APIs. It's like building your own live feed.\n\n---\n\n## \ud83d\udcca **Section 2: Calculate and Compare with Historical Price**\n\n\ud83e\udde9 **Nodes:**\n4\\. **\ud83d\udd04 Convert Type**\n5\\. **\ud83d\udcd7 Get Last Recorded Price (Google Sheet)**\n6\\. **\ud83d\udcc9 Find Drop Percentage**\n\n### \ud83e\udde0 What Happens:\n\n* **\ud83d\udd04 Convert Type**\n  Converts the price from a text format to a number so we can calculate with it.\n\n* **\ud83d\udcd7 Get Last Recorded Price**\n  Pulls the **previous Bitcoin price** from a Google Sheet (a record from last check). Acts like your \u201cmemory\u201d.\n\n* **\ud83d\udcc9 Find Drop Percentage**\n  Calculates how much the price has dropped:\n\n  $$\n  \\text{Drop (\\%)} = \\frac{\\text{Previous Price - Current Price}}{\\text{Previous Price}} \\times 100\n  $$\n\n### \ud83d\udca1 Why It\u2019s Useful:\n\nYou\u2019re comparing real-time data with past values automatically\u2014no spreadsheets or calculators needed! This makes it ideal for **traders or enthusiasts** watching for price alerts.\n\n---\n\n## \ud83d\udea8 **Section 3: Send Alert if Drop \u2265 5%**\n\n\ud83e\udde9 **Nodes:**\n7\\. **\ud83d\udd00 If droppercentage >= 5**\n8\\. **\ud83d\udce7 Send Alert Email**\n9\\. **\u27a1\ufe0f No Alert Needed**\n\n### \ud83e\udde0 What Happens:\n\n* **\ud83d\udd00 If Statement**\n  Checks: Has the price dropped by **5% or more**?\n\n* **\ud83d\udce7 Send Alert Email** (if true)\n  Automatically sends an email to notify you about the drop. This could go to your inbox, or a team.\n\n* **\u27a1\ufe0f No Alert Needed** (if false)\n  The workflow ends quietly without doing anything else.\n\n### \ud83d\udca1 Why It\u2019s Useful:\n\nIt **only alerts you when it matters**, saving your attention for big changes. You don\u2019t need to monitor prices all day.\n\n---\n\n## \ud83c\udf81 **Final Benefits:**\n\n\u2705 **No coding required**\n\u2705 **Real-time price check**\n\u2705 **Smart alerts based on thresholds**\n\u2705 **Great for traders, analysts, or crypto fans**\n\u2705 **Fully extendable** \u2013 you could log alerts, update the sheet, send Slack/Telegram messages, etc.\n\n---\n\n## \ud83c\udf08 BONUS IDEA:\n\nWant it to run automatically? Add a **\ud83d\udd52 Cron Trigger** to check every 10 mins, 1 hour, or even daily!\n\n---\n"
      },
      "typeVersion": 1
    },
    {
      "id": "201e7c73-d960-47c5-934e-f8fe0630ca2c",
      "name": "Fetch Bitcoin Price",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2240,
        780
      ],
      "parameters": {
        "url": "https://api.brightdata.com/request",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "zone",
              "value": "n8n_unblocker"
            },
            {
              "name": "url",
              "value": "https://coinmarketcap.com/currencies/bitcoin/"
            },
            {
              "name": "country",
              "value": "us"
            },
            {
              "name": "format",
              "value": "raw"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "ff6d0c30-0e72-4a28-9628-b94606461a20",
      "name": "Extract Price",
      "type": "n8n-nodes-base.html",
      "position": [
        2440,
        780
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": "<span class=\"sc-65e7f566-0 esyGGG base-text\" data-test=\"text-cdp-price-display\">$105,095.42</span>"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "759e26b7-a260-469e-ba17-fc5bee7be762",
      "name": "Convert type",
      "type": "n8n-nodes-base.code",
      "position": [
        2660,
        780
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const priceStr = item.json.price;\n  const priceNumber = parseFloat(priceStr.replace(/[$,]/g, ''));\n  return {\n    json: {\n      price: priceNumber\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c33e81f4-f06e-4e47-942f-4764027f270c",
      "name": "Find drop percentage",
      "type": "n8n-nodes-base.code",
      "position": [
        3100,
        780
      ],
      "parameters": {
        "jsCode": "// Extract current and previous price from separate input items\nconst currentPrice = $('Convert type').first().json.price;\nconst previousPrice = $input.first().json.Price;\n\nconst dropPercent = previousPrice !== 0 \n  ? ((previousPrice - currentPrice) / previousPrice) * 100 \n  : 0;\n\nreturn [{\n  json: {\n    currentPrice,\n    previousPrice,\n    dropPercent: parseFloat(dropPercent.toFixed(2))\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "cb64ae28-6086-4301-85b7-a8bdac6c2370",
      "name": "If droppercentage >= 5",
      "type": "n8n-nodes-base.if",
      "position": [
        3420,
        780
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "9b9dfa4e-92d1-408e-90f0-355141f73d54",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.dropPercent }}",
              "rightValue": 5
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "08bcbb20-2f85-45c9-b56e-61edb70ccd74",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2020,
        0
      ],
      "parameters": {
        "color": 3,
        "width": 540,
        "height": 980,
        "content": "## \ud83d\udd0e **Section 1: Fetch the Current Bitcoin Price**\n\n\ud83e\udde9 **Nodes:**\n\n1. **\u26a1 Manual Trigger**\n2. **\ud83c\udf10 Fetch Bitcoin Price**\n3. **\ud83e\uddf1 Extract Price**\n\n### \ud83e\udde0 What Happens:\n\n* **\u26a1 Manual Trigger**\n  This starts the process manually. Think of it like pressing a \"Start\" button.\n\n* **\ud83c\udf10 Fetch Bitcoin Price**\n  Uses the [Bright Data API](https://brightdata.com/) to scrape the live Bitcoin price from a specific website using a POST request.\n\n* **\ud83e\uddf1 Extract Price**\n  Extracts the **exact price value** from the scraped HTML using selectors (like CSS paths).\n\n### \ud83d\udca1 Why It\u2019s Useful:\n\nYou can track the **real-time price** of Bitcoin straight from any public site, even those not offering official APIs. It's like building your own live feed.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9c153740-4fb9-4ab7-b129-c6bc8c61c274",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2640,
        -40
      ],
      "parameters": {
        "color": 5,
        "width": 600,
        "height": 1020,
        "content": "## \ud83d\udcca **Section 2: Calculate and Compare with Historical Price**\n\n\ud83e\udde9 **Nodes:**\n4\\. **\ud83d\udd04 Convert Type**\n5\\. **\ud83d\udcd7 Get Last Recorded Price (Google Sheet)**\n6\\. **\ud83d\udcc9 Find Drop Percentage**\n\n### \ud83e\udde0 What Happens:\n\n* **\ud83d\udd04 Convert Type**\n  Converts the price from a text format to a number so we can calculate with it.\n\n* **\ud83d\udcd7 Get Last Recorded Price**\n  Pulls the **previous Bitcoin price** from a Google Sheet (a record from last check). Acts like your \u201cmemory\u201d.\n\n* **\ud83d\udcc9 Find Drop Percentage**\n  Calculates how much the price has dropped:\n\n  $$\n  \\text{Drop (\\%)} = \\frac{\\text{Previous Price - Current Price}}{\\text{Previous Price}} \\times 100\n  $$\n\n### \ud83d\udca1 Why It\u2019s Useful:\n\nYou\u2019re comparing real-time data with past values automatically\u2014no spreadsheets or calculators needed! This makes it ideal for **traders or enthusiasts** watching for price alerts.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "58dbf6d5-371f-4123-8838-5c6f40185711",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3380,
        100
      ],
      "parameters": {
        "color": 6,
        "width": 540,
        "height": 940,
        "content": "## \ud83d\udea8 **Section 3: Send Alert if Drop \u2265 5%**\n\n\ud83e\udde9 **Nodes:**\n7\\. **\ud83d\udd00 If droppercentage >= 5**\n8\\. **\ud83d\udce7 Send Alert Email**\n9\\. **\u27a1\ufe0f No Alert Needed**\n\n### \ud83e\udde0 What Happens:\n\n* **\ud83d\udd00 If Statement**\n  Checks: Has the price dropped by **5% or more**?\n\n* **\ud83d\udce7 Send Alert Email** (if true)\n  Automatically sends an email to notify you about the drop. This could go to your inbox, or a team.\n\n* **\u27a1\ufe0f No Alert Needed** (if false)\n  The workflow ends quietly without doing anything else.\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a9608daf-aff9-460a-8ca5-14c1fc41916e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4000,
        100
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 240,
        "content": "## I\u2019ll receive a tiny commission if you join Bright Data through this link\u2014thanks for fueling more free content!\n\n### https://get.brightdata.com/1tndi4600b25"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "125a795b-a427-4a83-abee-62fe60538000",
  "connections": {
    "Convert type": {
      "main": [
        [
          {
            "node": "Get Last Recorded Price",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Price": {
      "main": [
        [
          {
            "node": "Convert type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Fetch Bitcoin Price",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Bitcoin Price": {
      "main": [
        [
          {
            "node": "Extract Price",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find drop percentage": {
      "main": [
        [
          {
            "node": "If droppercentage >= 5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If droppercentage >= 5": {
      "main": [
        [
          {
            "node": "Send Alert Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Alert Needed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Last Recorded Price": {
      "main": [
        [
          {
            "node": "Find drop percentage",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}