{
  "id": "LRLFh0lVw2OIPJdW",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "\ud83d\udcc8 Hourly Monitoring of Crypto Rates with Alpha Vantage API and Google Sheets",
  "tags": [],
  "nodes": [
    {
      "id": "95d9375b-c423-4346-8dd4-3cba09a62caa",
      "name": "BTC Exchange Rate",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -520,
        -60
      ],
      "parameters": {
        "url": "https://www.alphavantage.co/query",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "function",
              "value": "CURRENCY_EXCHANGE_RATE"
            },
            {
              "name": "from_currency",
              "value": "BTC"
            },
            {
              "name": "to_currency",
              "value": "EUR"
            }
          ]
        }
      },
      "credentials": {
        "httpQueryAuth": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.2
    },
    {
      "id": "5d2a06c6-d2d8-4f55-b9ea-615d5c88612a",
      "name": "Call Every Hour",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -860,
        40
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ede798c5-aec6-4040-9ed8-b9f2cf6ea66f",
      "name": "Save Rate BTC",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -320,
        -60
      ],
      "parameters": {
        "columns": {
          "value": {
            "Ask_Price": "={{ $json['Realtime Currency Exchange Rate']['9. Ask Price'] }}",
            "Bid_Price": "={{ $json['Realtime Currency Exchange Rate']['8. Bid Price'] }}",
            "Time_Zone": "={{ $json['Realtime Currency Exchange Rate']['7. Time Zone'] }}",
            "Exchange_Rate": "={{ $json['Realtime Currency Exchange Rate']['5. Exchange Rate'] }}",
            "Last_Refreshed": "={{ $json['Realtime Currency Exchange Rate']['6. Last Refreshed'] }}",
            "To_Currency_Code": "={{ $json['Realtime Currency Exchange Rate']['3. To_Currency Code'] }}",
            "To_Currency_Name": "={{ $json['Realtime Currency Exchange Rate']['4. To_Currency Name'] }}",
            "From_Currency_Code": "={{ $json['Realtime Currency Exchange Rate']['1. From_Currency Code'] }}",
            "From_Currency_Name": "={{ $json['Realtime Currency Exchange Rate']['2. From_Currency Name'] }}"
          },
          "schema": [
            {
              "id": "Last_Refreshed",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last_Refreshed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Time_Zone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Time_Zone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "From_Currency_Code",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "From_Currency_Code",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "From_Currency_Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "From_Currency_Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "To_Currency_Code",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "To_Currency_Code",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "To_Currency_Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "To_Currency_Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Exchange_Rate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Exchange_Rate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last_Refreshed",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last_Refreshed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Time_Zone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Time_Zone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Bid_Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Bid_Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ask_Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Ask_Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "BTC"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1vtjhgdulJn8niwZE0RQeQL8L1kb00L4z2TOuQK_9mV0",
          "cachedResultUrl": "",
          "cachedResultName": "AlphaVantage"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "2fb8320b-aeb4-4e23-91c5-ff2ceebc8970",
      "name": "Save Rate ETH",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -320,
        120
      ],
      "parameters": {
        "columns": {
          "value": {
            "Ask_Price": "={{ $json['Realtime Currency Exchange Rate']['9. Ask Price'] }}",
            "Bid_Price": "={{ $json['Realtime Currency Exchange Rate']['8. Bid Price'] }}",
            "Time_Zone": "={{ $json['Realtime Currency Exchange Rate']['7. Time Zone'] }}",
            "Exchange_Rate": "={{ $json['Realtime Currency Exchange Rate']['5. Exchange Rate'] }}",
            "Last_Refreshed": "={{ $json['Realtime Currency Exchange Rate']['6. Last Refreshed'] }}",
            "To_Currency_Code": "={{ $json['Realtime Currency Exchange Rate']['3. To_Currency Code'] }}",
            "To_Currency_Name": "={{ $json['Realtime Currency Exchange Rate']['4. To_Currency Name'] }}",
            "From_Currency_Code": "={{ $json['Realtime Currency Exchange Rate']['1. From_Currency Code'] }}",
            "From_Currency_Name": "={{ $json['Realtime Currency Exchange Rate']['2. From_Currency Name'] }}"
          },
          "schema": [
            {
              "id": "Last_Refreshed",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last_Refreshed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Time_Zone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Time_Zone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "From_Currency_Code",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "From_Currency_Code",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "From_Currency_Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "From_Currency_Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "To_Currency_Code",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "To_Currency_Code",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "To_Currency_Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "To_Currency_Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Exchange_Rate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Exchange_Rate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last_Refreshed",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last_Refreshed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Time_Zone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Time_Zone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Bid_Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Bid_Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ask_Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Ask_Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1591416661,
          "cachedResultUrl": "",
          "cachedResultName": "ETH"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1vtjhgdulJn8niwZE0RQeQL8L1kb00L4z2TOuQK_9mV0",
          "cachedResultUrl": "",
          "cachedResultName": "AlphaVantage"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "b0630581-e5cc-4e64-bbb3-2c362b766a8a",
      "name": "ETH Exchange Rate",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -520,
        120
      ],
      "parameters": {
        "url": "https://www.alphavantage.co/query",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "function",
              "value": "CURRENCY_EXCHANGE_RATE"
            },
            {
              "name": "from_currency",
              "value": "ETH"
            },
            {
              "name": "to_currency",
              "value": "EUR"
            }
          ]
        }
      },
      "credentials": {
        "httpQueryAuth": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.2
    },
    {
      "id": "329e3c49-9b8f-49ca-83da-5e7ec00f17f0",
      "name": "Notification BTC",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -80,
        -60
      ],
      "parameters": {
        "text": "=<b>\ud83d\udd04 BTC to EUR Rate Update</b>\n\n<b>From:</b> {{ $json[\"From_Currency_Name\"] }} ({{ $json[\"From_Currency_Code\"] }})\n<b>To:</b> {{ $json[\"To_Currency_Name\"] }} ({{ $json[\"To_Currency_Code\"] }})\n\n<b>\ud83d\udcb1 Exchange Rate:</b> {{ $json[\"Exchange_Rate\"] }}\n<b>\ud83d\udcc9 Bid:</b> {{ $json[\"Bid_Price\"] }}\n<b>\ud83d\udcc8 Ask:</b> {{ $json[\"Ask_Price\"] }}\n\n<b>\ud83d\udd52 Last Updated:</b> {{ $json[\"Last_Refreshed\"] }} ({{ $json[\"Time_Zone\"] }})",
        "chatId": "123456789",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1.2
    },
    {
      "id": "e9920828-9a99-4899-9313-037fc78933dc",
      "name": "Notification ETH",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -80,
        120
      ],
      "parameters": {
        "text": "=<b>\ud83d\udd04 ETH to EUR Rate Update</b>\n\n<b>From:</b> {{ $json[\"From_Currency_Name\"] }} ({{ $json[\"From_Currency_Code\"] }})\n<b>To:</b> {{ $json[\"To_Currency_Name\"] }} ({{ $json[\"To_Currency_Code\"] }})\n\n<b>\ud83d\udcb1 Exchange Rate:</b> {{ $json[\"Exchange_Rate\"] }}\n<b>\ud83d\udcc9 Bid:</b> {{ $json[\"Bid_Price\"] }}\n<b>\ud83d\udcc8 Ask:</b> {{ $json[\"Ask_Price\"] }}\n\n<b>\ud83d\udd52 Last Updated:</b> {{ $json[\"Last_Refreshed\"] }} ({{ $json[\"Time_Zone\"] }})",
        "chatId": "123456789",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1.2
    },
    {
      "id": "3d674add-ca49-4e6f-b3e4-7aaa82f67953",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -900,
        -500
      ],
      "parameters": {
        "color": 7,
        "width": 220,
        "height": 760,
        "content": "### 1. Workflow Trigger every hour\n\nTrigger the collection of ETH and BTC price every hour.\n\n#### How to setup?\n*Nothing to do.*"
      },
      "typeVersion": 1
    },
    {
      "id": "4095c6c9-9cbd-446c-884c-ed713760ddff",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -660,
        -500
      ],
      "parameters": {
        "color": 7,
        "width": 920,
        "height": 760,
        "content": "### 2. Collect BTC and ETH price from Alpha Vantage Insight API\nThis starts by calling the CURRENCY_EXCHANGE_RATE function of the **Alpha Vantage Insight API** to get the exchange rate to euros.\n#### How to setup?\n- **Set up API credentials**\n  1. Get your free API key from [Alpha Vantage](https://www.alphavantage.co/support/#api-key)\n  2. Fill in the API key in the HTTP Request node using query parameters authentication\n- **Load records in the Google Sheet Node**:\n   1. Add your Google Sheet API credentials to access the Google Sheet file\n   2. Select the file using the list, an URL or an ID\n   3. Select the sheet in which you want to record your working sessions\n   4. Map the fields:  `From_Currency_Code`, `From_Currency_Name`, `To_Currency_Code`, `To_Currency_Name`, `Exchange_Rate`, `Bid_Price`, `Ask_Price`, `Last_Refreshed`, `Time_Zone`\t\t\t\t\t\t\t\t\t\t\t\t\n  [Learn more about the Google Sheet Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets)\n- **Send Telegram notification**\n  1. Add your Telegram credentials\n  2. Fill in the Chat ID and message content\n  3. Use dynamic variables for formatting the exchange rate alert\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "cd5a0fe2-298c-40a5-b184-be90d8c220d1",
  "connections": {
    "Save Rate BTC": {
      "main": [
        [
          {
            "node": "Notification BTC",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Rate ETH": {
      "main": [
        [
          {
            "node": "Notification ETH",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call Every Hour": {
      "main": [
        [
          {
            "node": "BTC Exchange Rate",
            "type": "main",
            "index": 0
          },
          {
            "node": "ETH Exchange Rate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "BTC Exchange Rate": {
      "main": [
        [
          {
            "node": "Save Rate BTC",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ETH Exchange Rate": {
      "main": [
        [
          {
            "node": "Save Rate ETH",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}