AutomationFlowsSlack & Telegram › Trello Task Management with Telegram Notifications and Supabase Database

Trello Task Management with Telegram Notifications and Supabase Database

ByHermon @hermong on n8n.io

This n8n workflow automates task management by integrating Trello, Supabase, and Telegram to streamline card creation, user assignment, and due date notifications. It ensures seamless synchronization of Trello card data with a Supabase database and sends timely Telegram…

Event trigger★★★★★ complexity30 nodesTrello TriggerTelegramSupabaseHTTP Request
Slack & Telegram Trigger: Event Nodes: 30 Complexity: ★★★★★ Added:

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

This workflow follows the HTTP Request → Supabase recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "My workflow 10",
  "tags": [],
  "nodes": [
    {
      "id": "cc23f775-67b6-47d1-b13f-fa91cb973d9b",
      "name": "Trello Trigger",
      "type": "n8n-nodes-base.trelloTrigger",
      "position": [
        128,
        -16
      ],
      "parameters": {
        "id": "[BOARD_ID]"
      },
      "credentials": {
        "trelloApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b5f7a4e2-32e8-48cd-9bd8-5f6e6edf2e0c",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        128,
        544
      ],
      "parameters": {
        "path": "[WEBHOOK_PATH]",
        "options": {
          "responseData": "ok",
          "allowedOrigins": "*",
          "responseHeaders": {
            "entries": [
              {
                "name": "Content-Type",
                "value": "text/plain"
              }
            ]
          }
        },
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "be79211c-78c1-4823-b0ec-ada0f492bad1",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1024,
        880
      ],
      "parameters": {
        "text": "={{ $json.finalMessage }}\n\n*------------------------------------------------------------------------------*\n\ud83d\udcdd *Card Name*: {{ $json.cardName }}\n\ud83d\udcc4 *Card Description*: {{ $json.description }}\n\ud83d\udd17 *Card URL*: [Link]({{ $json.url }})\n\ud83d\udcc5 *Assigned Date*: {{ $json.date }}\n\u23f0 *Due Date*: {{ $json.dueDate }}\n*------------------------------------------------------------------------------*\n\nFrom the Trello Bot.",
        "chatId": "[TELEGRAM_CHAT_ID]",
        "additionalFields": {
          "message_thread_id": null
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d52b7cd0-d703-4eb9-af5d-55c3a861513a",
      "name": "username",
      "type": "n8n-nodes-base.set",
      "position": [
        576,
        880
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={\n\"username\": \"{{\n  ({\n    \"User1\": \"@user1\",\n    \"User2\": \"@user2\",\n    \"User3\": \"@user3\",\n    \"User4\": \"@user4\",\n    \"User5\": \"@user5\",\n    \"User6\": \"@user6\",\n    \"User7\": \"@user7\"\n  }[$json.body.action.data.member.name] || $json.body.action.data.member.name)\n}}\"\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "acf6a2fe-e127-4ff9-b2b5-4484fa5eb401",
      "name": "Create card",
      "type": "n8n-nodes-base.supabase",
      "position": [
        352,
        -16
      ],
      "parameters": {
        "tableId": "cards",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "id",
              "fieldValue": "={{ $json.action.data.card.id }}"
            },
            {
              "fieldId": "card_name",
              "fieldValue": "={{ $json.action.data.card.name }}"
            },
            {
              "fieldId": "board_name",
              "fieldValue": "={{ $json.action.data.board.name }}"
            }
          ]
        }
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7ce79763-e35f-4f2c-af48-2f791d508ad0",
      "name": "Create Card Webhook",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        576,
        -16
      ],
      "parameters": {
        "url": "https://api.trello.com/1/tokens/[TRELLO_TOKEN]/webhooks/",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "key",
              "value": "[TRELLO_API_KEY]"
            },
            {
              "name": "callbackURL",
              "value": "[WEBHOOK_URL]"
            },
            {
              "name": "idModel",
              "value": "={{ $('Trello Trigger').item.json.action.data.card.id }}"
            },
            {
              "name": "description",
              "value": "=webhook for card  {{ $('Trello Trigger').item.json.action.data.card.name }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b024e07e-73ec-477f-85df-d2cbc2a1e521",
      "name": "Get user row",
      "type": "n8n-nodes-base.supabase",
      "position": [
        576,
        448
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "id",
              "keyValue": "={{ $json.body.action.data.member.id }}"
            }
          ]
        },
        "tableId": "users",
        "operation": "get"
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "7aebe854-c87e-4982-88e6-ecaead011ded",
      "name": "Create user",
      "type": "n8n-nodes-base.supabase",
      "position": [
        1024,
        544
      ],
      "parameters": {
        "tableId": "users",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "id",
              "fieldValue": "={{ $('Webhook').item.json.body.action.data.member.id }}"
            },
            {
              "fieldId": "name",
              "fieldValue": "={{ $('Webhook').item.json.body.action.data.member.name }}"
            }
          ]
        }
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1579543f-8a23-4192-9f17-ab604a5bb78b",
      "name": "Trello Action Type Check",
      "type": "n8n-nodes-base.if",
      "position": [
        336,
        896
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "75ec232c-9f5d-44ca-b895-44746041412a",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.body.action.type }}",
              "rightValue": "addMemberToCard"
            },
            {
              "id": "bcc5b48a-6130-4a4a-99a5-f3e86088e77a",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.body.action.type }}",
              "rightValue": "removeMemberFromCard"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4017bf8e-b104-4708-bac9-f04c5a8679a6",
      "name": "Update card due-date",
      "type": "n8n-nodes-base.supabase",
      "position": [
        336,
        240
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "id",
              "keyValue": "={{ $json.body.action.data.card.id }}",
              "condition": "eq"
            }
          ]
        },
        "tableId": "cards",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "due_date",
              "fieldValue": "={{ new Date($json.body.model.badges.due).toLocaleDateString('en-US') }}"
            },
            {
              "fieldId": "completed",
              "fieldValue": "={{ $json.body.model.badges.dueComplete }}"
            },
            {
              "fieldId": "url",
              "fieldValue": "={{ $json.body.model.url }}"
            }
          ]
        },
        "operation": "update"
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ed643ce9-83d6-4a70-8bc6-70cec72f264a",
      "name": "Create user card relation",
      "type": "n8n-nodes-base.supabase",
      "position": [
        1472,
        432
      ],
      "parameters": {
        "tableId": "card_user",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "cardId",
              "fieldValue": "={{ $json.cardId }}"
            },
            {
              "fieldId": "userId",
              "fieldValue": "={{ $json.userId }}"
            }
          ]
        }
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "693aafe2-8648-453f-93d6-2f10ba200cd8",
      "name": "Code in JavaScript1",
      "type": "n8n-nodes-base.code",
      "position": [
        1248,
        432
      ],
      "parameters": {
        "jsCode": "const cardId = $('Webhook').first().json.body.action.data.card.id;\nconst userIds = $('Webhook').first().json.body.model.idMembers;\n\nreturn userIds.map(userId => ({\n  json: { cardId, userId }\n}));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "205f1a6d-de1a-4fe1-9bdb-11183fc1b2f8",
      "name": "Does User Exist?",
      "type": "n8n-nodes-base.if",
      "position": [
        800,
        448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c4747e03-d718-47bf-9e99-5c59b04bc1db",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "e3059b04-4950-4bda-a130-3276952a1fbd",
      "name": "Delete from users-card",
      "type": "n8n-nodes-base.supabase",
      "position": [
        576,
        640
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "userId",
              "keyValue": "={{ $json.body.action.data.member.id }}",
              "condition": "eq"
            },
            {
              "keyName": "cardId",
              "keyValue": "={{ $json.body.action.data.card.id }}",
              "condition": "eq"
            }
          ]
        },
        "tableId": "card_user",
        "operation": "delete"
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ccdbc090-16c3-47e6-9a35-a3d55b1b2b2a",
      "name": "Send a text message1",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1520,
        1232
      ],
      "parameters": {
        "text": "=\u26a0\ufe0f\u26a0\ufe0f\u26a0\ufe0f\nHey *{{ $json.username }}*, You have a task due *TODAY*! Take the appropriate action ASAP!!!\n\u26a0\ufe0f\u26a0\ufe0f\u26a0\ufe0f\n\n*------------------------------------------------------------------------------*\n\ud83d\udcdd *Card Name*: {{ $json.cardName }}\n\ud83d\udcd3 *Board Name*: {{ $json.boardName }}\n\ud83d\udd17 *Card URL*: [Link]({{ $json.url }})\n\u23f0 *Due Date*: {{ $json.dueDate }}\n*------------------------------------------------------------------------------*\n\nFrom the Trello Bot.",
        "chatId": "[TELEGRAM_CHAT_ID]",
        "additionalFields": {
          "message_thread_id": null
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "752e0fce-9711-49b5-ad6c-dce13d7acd83",
      "name": "Code in JavaScript2",
      "type": "n8n-nodes-base.code",
      "position": [
        1296,
        1232
      ],
      "parameters": {
        "jsCode": "const username = $input.first().json.username;\nconst cardName = $('Get all cards due today').first().json.card_name;\nconst boardName = $('Get all cards due today').first().json.board_name;\nconst dueDate = $('Get all cards due today').first().json.due_date;\nconst url = $('Get all cards due today').first().json.url;\n\nreturn { \n  username,\n  cardName,\n  boardName,\n  url, \n  dueDate\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "6586d8fc-b019-4e9b-83f7-cce440fd66f2",
      "name": "Get users in card",
      "type": "n8n-nodes-base.supabase",
      "position": [
        848,
        1232
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "id",
              "keyValue": "={{ $json.userId }}"
            }
          ]
        },
        "tableId": "users",
        "operation": "get"
      },
      "typeVersion": 1
    },
    {
      "id": "b4ed0a9c-6f23-4a73-bfb5-91437f91601e",
      "name": "Get user-card",
      "type": "n8n-nodes-base.supabase",
      "position": [
        624,
        1232
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "cardId",
              "keyValue": "={{ $json.id }}"
            }
          ]
        },
        "tableId": "card_user",
        "operation": "get"
      },
      "typeVersion": 1
    },
    {
      "id": "e35e0fc7-dec4-473f-b70f-a2767de4f941",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        800,
        880
      ],
      "parameters": {
        "jsCode": "const actionType = $('Webhook').first().json.body.action.type;\nconst username = $('username').first().json.username;\nconst addedBy = $('Webhook').first().json.body.action.memberCreator.fullName;\nconst cardName = $('Webhook').first().json.body.action.data.card.name;\nconst date = new Date($('Webhook').first().json.body.action.date).toLocaleDateString('en-US');\nconst description = $('Webhook').first().json.body.model.desc\nconst url = $('Webhook').first().json.body.model.url\nconst dueDate = new Date($('Webhook').first().json.body.model.due).toLocaleDateString('en-US')\n\nfunction escapeMarkdownV2(text) {\n  return text.replace(/[_*[\\]()~`>#+\\-=|{}.!]/g, '\\\\$&');\n}\n\nconst escapedCardName = escapeMarkdownV2(cardName);\nconst escapedUsername = escapeMarkdownV2(username);\n\nconst addMessages = {\n  \"1\": `\ud83d\udcdd Hey ${escapedUsername}, welcome aboard to a new card *${escapedCardName}*! Don\u2019t mess it up\u2026`,\n  \"2\": `\ud83d\udcdd Yo ${escapedUsername}! You\u2019ve been tossed onto the *${escapedCardName}* card. Good luck, champ!`,\n  \"3\": `\ud83d\udcdd ${escapedUsername}, congrats! You\u2019re now officially stuck with *${escapedCardName}*. Strap on a pair and get it done!`,\n  \"4\": `\ud83d\udcdd Attention ${escapedUsername}! You\u2019ve been drafted into *${escapedCardName}*. Try not to cry.`,\n  \"5\": `\ud83d\udcdd ${escapedUsername}, get ready to shine on *${escapedCardName}*. Or fail spectacularly.`\n};\n\nconst removeMessages = {\n  \"1\": `\ud83d\udd25 Oh ${escapedUsername}, freedom at last! You\u2019re off *${escapedCardName}*. Was the assigner even paying attention?`,\n  \"2\": `\ud83d\udd25 ${escapedUsername}, you\u2019re free from *${escapedCardName}*. Don\u2019t get too excited, there\u2019s always another card!`,\n  \"3\": `\ud83d\udd25 ${escapedUsername}, you\u2019ve been relieved from *${escapedCardName}* card. You lucky soul!`,\n  \"4\": `\ud83d\udd25 ${escapedUsername} vanished from *${escapedCardName}*. Did you even try? You have let your team down.`,\n  \"5\": `\ud83d\udd25 ${escapedUsername}, no more *${escapedCardName}* for you. Time to relax\u2026 or not.`\n};\n\nlet message = \"\";\n\nif (actionType === \"addMemberToCard\") {\n  const keys = Object.keys(addMessages);\n  const randomKey = keys[Math.floor(Math.random() * keys.length)];\n  message = addMessages[randomKey];\n} \nelse if (actionType === \"removeMemberFromCard\") {\n  const keys = Object.keys(removeMessages);\n  const randomKey = keys[Math.floor(Math.random() * keys.length)];\n  message = removeMessages[randomKey];\n}\nelse {\n  message = `\u2139\ufe0f Trello: ${actionType} on \"*${cardName}*\" by ${username} (triggered by ${addedBy}) at ${date}`;\n}\n\nreturn { \n  finalMessage: message,\n  actionType: actionType,\n  username: username,\n  addedBy: addedBy,\n  cardName: cardName,\n  date: date,\n  description,\n  url, \n  dueDate\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "5afda61c-871d-489a-836a-3dea53931913",
      "name": "Due-Date Notification Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        128,
        1232
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 12
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7ad9809d-33bf-47d7-93f1-74e1ac4a95c8",
      "name": "Get all cards due today",
      "type": "n8n-nodes-base.supabase",
      "position": [
        400,
        1232
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "=due_date",
              "keyValue": "={{ new Date().toLocaleDateString('en-US') }}",
              "condition": "eq"
            }
          ]
        },
        "tableId": "cards",
        "operation": "getAll"
      },
      "typeVersion": 1
    },
    {
      "id": "bb94a9b2-c0fa-4d96-bf8d-e8c9539146f1",
      "name": "usernames 1",
      "type": "n8n-nodes-base.set",
      "position": [
        1072,
        1232
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={\n\"username\": \"{{\n  ({\n    \"User1\": \"@user1\",\n    \"User2\": \"@user2\",\n    \"User3\": \"@user3\",\n    \"User4\": \"@user4\",\n    \"User5\": \"@user5\",\n    \"User6\": \"@user6\",\n    \"User7\": \"@user7\"\n  }[$json.name] || $json.name)\n}}\"\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "73521891-8c38-4723-b56d-39f71c551357",
      "name": "Add/Remove Member from Card Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        352,
        544
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "0e78dca3-f83f-464f-bcff-2431d7736b8c",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.action.type }}",
                    "rightValue": "addMemberToCard"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "11b358d2-154c-422b-b7b5-20c3d092b4ab",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.action.type }}",
                    "rightValue": "removeMemberFromCard"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "861b019d-e717-47c0-83e9-d59da9e6eacf",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        224
      ],
      "parameters": {
        "width": 752,
        "height": 1152,
        "content": "# Workflow Overview: Trello \u2192 Supabase \u2192 Telegram Automation\n\n## Main Purpose\nAutomates the creation, update, and notification process for Trello cards by syncing users and due dates with Supabase, and sending timely Telegram reminders.\n\n## \ud83d\udccb Workflows Summary\n\n### 1. Trello Trigger Flow\n**Trigger**: Activated when a new Trello card is created.\n\n- **Create Card \u2192 Create Webhook**  \n  Registers the card in Supabase and sets up a webhook for further updates (due date, members, etc.).\n\n- **Update Card**  \n  Keeps the due date and other details like card description synced between Trello and the database.\n\n- **Add/Remove Member from Card Switch**  \n  Detects when users are added or removed from a card.\n\n- **Get User Row \u2192 Does User Exist?**  \n  Checks if a Trello user already exists in Supabase.\n\n- **Create User (if not found)**  \n  Registers a new user in the database.\n\n- **Code + Create User-Card Relation**  \n  Establishes a link between the card and its assigned members in the `card_user` table.\n\n### 2. Webhook Event Flow\n- **Webhook \u2192 Trello Action Type Check**  \n  Handles Trello webhook payloads for updates like member changes or due date updates.\n\n- **Username + Code + Send Text Message**  \n  Sends formatted Telegram messages notifying users of relevant actions (e.g., being added to a card).\n\n### 3. Due-Date Notification Flow\n**Trigger**: Runs twice a day (scheduled execution).\n\n- **Get All Cards Due Today**  \n  Fetches cards whose due dates match the current day.\n\n- **Get Users in Card / Usernames**  \n  Retrieves users linked to each due card.\n\n- **Code + Send Text Message**  \n  Sends Telegram alerts to users reminding them that their assigned task is due today."
      },
      "typeVersion": 1
    },
    {
      "id": "df0e4a69-1d71-42fb-a4ea-36470b7c6a11",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -704,
        224
      ],
      "parameters": {
        "width": 576,
        "height": 688,
        "content": "# \u2699\ufe0f Instructions for Use\n\n## Webhook Setup\n- Ensure Trello webhooks are active for card events.\n- The webhook URL in Trello must match your n8n Webhook node\u2019s public URL.\n- Follow the following instruction from the official Trello developer docs on how to make Trello invoke your webhook URL every time an action occurs in your Trello board: [Link](https://developer.atlassian.com/cloud/trello/guides/rest-api/webhooks)\n\n## Supabase Connection\n- Confirm Supabase credentials (URL, Key) are correctly configured in all Supabase nodes.\n- Tables used: `cards`, `users`, `card_user`.\n\n## Telegram Setup\n- Use your bot token and chat IDs in the Telegram nodes.\n\n## Scheduler\n- The \u201cDue-Date Notification Schedule Trigger\u201d should be set to run twice daily (change this according to your needs).\n\n## Testing\n- Create a test card in Trello \u2192 add a member \u2192 set a due date \u2192 verify:\n  - Card/user entries appear in Supabase.\n  - Telegram message is sent correctly."
      },
      "typeVersion": 1
    },
    {
      "id": "38e09c6c-4dd0-4c72-8c2e-a2eab7023ecb",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        -352
      ],
      "parameters": {
        "width": 368,
        "height": 352,
        "content": "Replace `[BOARD_ID]` with your Trello board Id. Here is how to get your board Id\n\n1. Go to your Trello board\n2. Open one of your cards in the board, if no card is created, create a new one\n3. On the URL, add \".json\" and hit enter.\n\nFor example, if your Trello board link is: \n`https://trello.com/c/0000000/11-board` \n\nSearch for: \n`https://trello.com/c/0000000/11-board.json`\n\n4. On the json, search for an \"idList\" field, take that value and insert it here.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d1c77fde-62d1-4a64-b632-f63cb83ecef6",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        768
      ],
      "parameters": {
        "width": 304,
        "height": 128,
        "content": "Replace `[TELEGRAM_CHAT_ID]` and the optional `[THREAD_ID]` if your chat has multiple topics with the telegram chat id you intend to send messages to. Beware that this chat has to be one which your bot has access to."
      },
      "typeVersion": 1
    },
    {
      "id": "9806254c-c31f-4147-99e7-05fa63b781d7",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        1024
      ],
      "parameters": {
        "width": 160,
        "content": "If you intend to address users with their usernames on telegram, map each user's name to their respective telegram usernames here"
      },
      "typeVersion": 1
    },
    {
      "id": "802b8a33-2915-4360-b496-0eabb3b430c9",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        -176
      ],
      "parameters": {
        "width": 256,
        "height": 176,
        "content": "- Replace `[TRELLO_TOKEN]` and `[TRELLO_API_KEY]` after getting a Trello API from Atlassian Developer Dashboard\n\n- Replase `[WEBHOOK_URL]` with the URL of the \"webhook\" node below"
      },
      "typeVersion": 1
    },
    {
      "id": "5e2c61d9-45ec-4f0c-83dd-c34ce112a7c2",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        432
      ],
      "parameters": {
        "width": 176,
        "height": 128,
        "content": "- Replace `[WEBHOOK_PATH]` with whatever path you want your webhook URL have"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "",
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Trello Action Type Check",
            "type": "main",
            "index": 0
          },
          {
            "node": "Update card due-date",
            "type": "main",
            "index": 0
          },
          {
            "node": "Add/Remove Member from Card Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "username": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create card": {
      "main": [
        [
          {
            "node": "Create Card Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create user": {
      "main": [
        [
          {
            "node": "Code in JavaScript1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "usernames 1": {
      "main": [
        [
          {
            "node": "Code in JavaScript2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get user row": {
      "main": [
        [
          {
            "node": "Does User Exist?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get user-card": {
      "main": [
        [
          {
            "node": "Get users in card",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trello Trigger": {
      "main": [
        [
          {
            "node": "Create card",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Does User Exist?": {
      "main": [
        [
          {
            "node": "Code in JavaScript1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create user",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get users in card": {
      "main": [
        [
          {
            "node": "usernames 1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript1": {
      "main": [
        [
          {
            "node": "Create user card relation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript2": {
      "main": [
        [
          {
            "node": "Send a text message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get all cards due today": {
      "main": [
        [
          {
            "node": "Get user-card",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trello Action Type Check": {
      "main": [
        [
          {
            "node": "username",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add/Remove Member from Card Switch": {
      "main": [
        [
          {
            "node": "Get user row",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Delete from users-card",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Due-Date Notification Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get all cards due today",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

This n8n workflow automates task management by integrating Trello, Supabase, and Telegram to streamline card creation, user assignment, and due date notifications. It ensures seamless synchronization of Trello card data with a Supabase database and sends timely Telegram…

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

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

[HUB] Жора Action. Uses executeWorkflowTrigger, supabase, telegram, httpRequest. Event-driven trigger; 19 nodes.

Execute Workflow Trigger, Supabase, Telegram +1
Slack & Telegram

Http Telegram. Uses telegramTrigger, httpRequest, supabase, telegram. Event-driven trigger; 17 nodes.

Telegram Trigger, HTTP Request, Supabase +1
Slack & Telegram

Http Telegram. Uses telegramTrigger, httpRequest, supabase, telegram. Event-driven trigger; 17 nodes.

Telegram Trigger, HTTP Request, Supabase +1
Slack & Telegram

[HUB] Жора Capture. Uses executeWorkflowTrigger, httpRequest, supabase, telegram. Event-driven trigger; 8 nodes.

Execute Workflow Trigger, HTTP Request, Supabase +1
Slack & Telegram

TextMain. Uses telegramTrigger, stopAndError, telegram, httpRequest. Event-driven trigger; 56 nodes.

Telegram Trigger, Stop And Error, Telegram +2