財務管理(\u30b3ピ\u30fc)
上級
これはAI Summarization, Multimodal AI分野の自動化ワークフローで、28個のノードを含みます。主にIf, Code, Telegram, GmailTrigger, GoogleSheetsなどのノードを使用。 Gemini AIとGoogle Sheetsを使ってメールとTelegramから自動のに経費を追跡
前提条件
- •Telegram Bot Token
- •Googleアカウント + Gmail API認証情報
- •Google Sheets API認証情報
- •Google Gemini API Key
使用ノード (28)
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "F7mViwFsbCj9e7Xe",
"meta": {
"instanceId": "28da9a1d20d76231ce6336c2bd8963d67423213dc3642a769da091b77ae22990",
"templateCredsSetupCompleted": true
},
"name": "Finance Management(copy)",
"tags": [],
"nodes": [
{
"id": "29348b2b-7acf-423c-86ae-c74030c6bd07",
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-832,
-352
],
"webhookId": "07683922-80fe-4307-bf56-3c4a48cb8a4f",
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"typeVersion": 1.2
},
{
"id": "9f3409c6-3b81-4f2c-a9ac-6043962dd8c4",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-624,
-192
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "a75b2920-738f-4490-98a0-7e6041b66c33",
"name": "予算情報抽出器",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-16,
-608
],
"parameters": {
"text": "={{ $json.text }}",
"batching": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "25975fb8-0637-4c22-a82e-8d275b83c1a8",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-16,
-432
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "Fk40ZO5m3ykqP9XN",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "2551dff4-7fc0-4850-a64f-8bde1842a705",
"name": "経費情報抽出器",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-16,
-112
],
"parameters": {
"text": "={{ $json.text }}",
"batching": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "69a34641-5579-4e16-b804-3e676c5dae36",
"name": "Google Gemini Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-16,
48
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "Fk40ZO5m3ykqP9XN",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "1690b5c3-1281-4298-962e-047c8573f986",
"name": "構造化出力パーサー",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
128,
96
],
"parameters": {
"jsonSchemaExample": "\n{\n \"type\": \"expense\",\n \"Timestamp\": \"ISO datetime\",\n \"Date\": \"DD/MM/YYYY\",\n \"Account\": \"string\",\n \"From\": \"string\",\n \"To\": \"string\",\n \"Type\": \"Debit or Credit\",\n \"Category\": \"string\",\n \"Description\": \"string\",\n \"Amount\": \"number\",\n \"Currency\": \"INR\",\n \"Source\": \"Telegram\",\n \"MessageId\": \"string\",\n \"Status\": \"Posted\"\n}"
},
"typeVersion": 1.3
},
{
"id": "02ae4279-d0d0-4d4b-8026-6641368e9be3",
"name": "構造化出力パーサー1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
128,
-400
],
"parameters": {
"jsonSchemaExample": "{\n \"type\": \"budget\",\n \"Month\": \"MM-YYYY\",\n \"Category\": \"string\",\n \"Budget Amount\": \"number\",\n \"Notes\": \"string\",\n \"UpdatedAt\": \"ISO datetime\"\n}"
},
"typeVersion": 1.3
},
{
"id": "6160ac29-5fb2-45cc-957d-74d44eed0d47",
"name": "Gmail Trigger",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
-832,
720
],
"parameters": {
"filters": {},
"pollTimes": {
"item": [
{
"mode": "everyHour"
}
]
}
},
"typeVersion": 1.3
},
{
"id": "b2dc1c36-a6c4-4be7-a5a6-e697fb128a3f",
"name": "Google Gemini Chat Model3",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-368,
896
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "Fk40ZO5m3ykqP9XN",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "cffa1c59-7dba-49fa-8a72-576d389ed472",
"name": "Google Gemini Chat Model4",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-32,
896
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "Fk40ZO5m3ykqP9XN",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "1d4b1582-8db3-4238-9a80-d6573e78e651",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1776,
-752
],
"parameters": {
"color": 4,
"width": 752,
"height": 2272,
"content": "## Smart Expense Tracker with Gmail + n8n + Google Sheets\n\n### 📌 Summary\n\nThis workflow automates expense tracking by parsing bank transaction emails (HDFC, Indian Bank, IOB, UPI apps, etc.) and logging them directly into Google Sheets. It intelligently classifies, organizes, and updates budgets, providing monthly and yearly insights with zero manual effort.\n\n---\n\n### 🎯 Who Is It For?\n\n* Individuals who want **personal finance automation**.\n* Families or groups needing **shared expense tracking**.\n* Professionals managing **multi-account (bank + UPI) transactions**.\n* Anyone tired of manual expense entry and reconciliation.\n\n---\n\n### ⚙️ Features\n\n* **Automated Gmail Parsing**: Reads bank/UPI alerts and extracts structured transaction details.\n* **Classification by Account**: Distinguishes between HDFC, Indian Bank, IOB, and UPI apps.\n* **Smart Filtering**: Ignores irrelevant or non-financial emails.\n* **Google Sheets Integration**:\n\n * Logs transactions into the **Expenses** sheet.\n * Maintains monthly budgets in the **Budgets** sheet.\n * Tracks total spend, variance vs. budget, and generates alerts.\n* **Yearly Roll-Up**: At each month’s end, logs total monthly expense into the **Yearly Summary** sheet.\n* **Alerts**: Notifies when expenses exceed the allocated budget.\n\n---\n\n### 🚀 How To Use\n\n1. **Copy the Google Sheet template** with tabs: `Expenses`, `Budgets`, `Yearly Summary`.\n2. **Import the n8n workflow** provided.\n3. **Connect Gmail & Sheets** credentials inside n8n.\n4. **Customize Budget Categories** in the `Budgets` tab (e.g., Food, Rent, Travel).\n5. **Run Workflow** manually or set it on a schedule (e.g., every 5 minutes).\n\n---\n\n### 🔧 Configuration Steps\n\n1. **Gmail Setup**\n\n * Configure Gmail Trigger node with filters:\n\n ```\n from:(alerts@hdfcbank.net OR ealerts@iobnet.co.in OR alerts@indianbank.in)\n ```\n * Add UPI alert senders as needed.\n\n2. **LLM Parsing**\n\n * LLM extracts JSON in schema:\n\n ```json\n {\n \"date\": \"DD/MM/YYYY\",\n \"account\": \"Bank/UPI name\",\n \"from\": \"Sender email\",\n \"to\": \"Recipient email\",\n \"type\": \"Credit/Debit\",\n \"category\": \"Expense Category\",\n \"description\": \"Details\",\n \"amount\": \"Number\",\n \"currency\": \"INR\",\n \"source\": \"Gmail\",\n \"messageId\": \"Unique ID\",\n \"status\": \"Posted/Pending\"\n }\n ```\n\n3. **Google Sheets**\n\n * Map schema fields directly into `Expenses` sheet columns.\n * Budget tab pre-filled with categories & monthly allocations.\n * Yearly sheet auto-calculates monthly totals.\n\n4. **Alerts**\n\n * Telegram node (optional) can notify when spending exceeds budget.\n\n---\n\n### ✅ Benefits\n\n* No manual logging needed.\n* Real-time visibility into expenses.\n* Budget control with automatic alerts.\n* Scales from personal to family/shared use.\n* Works with any Gmail-supported bank or UPI provider.\n\n---\n\n⚡ With this setup, you can focus on spending wisely while your system takes care of the tracking.\n"
},
"typeVersion": 1
},
{
"id": "1b130cdf-9f6d-44ac-97ac-ade6da4aa2bc",
"name": "telegram入力からの情報抽出",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-624,
-352
],
"parameters": {
"text": "={{ $json.message.text }}",
"batching": {},
"messages": {
"messageValues": [
{
"message": "=You are a strict financial data parser. Given a text input from a human about budgets or expenses, detect the type and return ONLY a valid JSON object in the correct schema. Classification rules: - If the message contains \"set budget\", \"budget for\", \"allocate\" → type = \"budget\" - If the message describes a transaction like \"paid\", \"give\", \"buy\", \"transfer\" → type = \"expense\" SCHEMA: For Budgets: { \"type\": \"budget\", \"Month\": \"{{ $today.month }}\"-\"{{ $today.year }}\", \"Category\": \"string\", \"Budget Amount\": number, \"Notes\": \"string\", \"UpdatedAt\": \"{{$now}}\" } For Expenses: { \"type\": \"expense\", \"Timestamp\": \"{{$now}}\", \"Date\": \"DD/MM/YYYY\", \"Account\": \"string\", \"From\": \"string\", \"To\": \"string\", \"Type\": \"Debit or Credit\", \"Category\": \"string\", \"Description\": \"string\", \"Amount\": number, \"Currency\": \"INR\", \"Source\": \"Telegram\", \"MessageId\": \"{{$json[\"message\"][\"message_id\"]}}\", \"Status\": \"Posted\" } RULES: - Always output exactly one JSON object. - Do not include any text outside the JSON object. - If any field is missing from the user message, use a reasonable default or leave it blank if truly unknown."
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "3b88a35a-b9b3-40ec-aa93-57dd1000070c",
"name": "取引が「予算」か「経費」かの生データ確認",
"type": "n8n-nodes-base.if",
"position": [
-272,
-352
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "fc41ad95-ebe6-45a4-b6d0-5446d862c662",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ JSON.parse($json.text.replace(/```json\\n?|```/g, '').trim()).type }}",
"rightValue": "budget"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "7f10537f-0feb-4783-b4ff-ea89f6b4cf9f",
"name": "取引が「予算」か「経費」かの確認",
"type": "n8n-nodes-base.if",
"position": [
384,
-352
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "342b8a96-903d-4e39-a54c-4404f1e22f6a",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.type }}",
"rightValue": "budget"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "eabb8a18-e5d7-416c-9ab1-c6165350737e",
"name": "取引データを予算シートに追加",
"type": "n8n-nodes-base.googleSheets",
"position": [
704,
-464
],
"parameters": {
"columns": {
"value": {
"Month": "={{ $json.output.Month }}",
"Notes": "={{ $json.output.Notes }}",
"Category": "={{ $json.output.Category }}",
"Updated At": "={{ $json.output.UpdatedAt }}",
"Budget Amount": "={{ $json.output['Budget Amount'] }}"
},
"schema": [
{
"id": "Month",
"type": "string",
"display": true,
"required": false,
"displayName": "Month",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Budget Amount",
"type": "string",
"display": true,
"required": false,
"displayName": "Budget Amount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Updated At",
"type": "string",
"display": true,
"required": false,
"displayName": "Updated At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1801603029,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit#gid=1801603029",
"cachedResultName": "Budgets"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit?usp=drivesdk",
"cachedResultName": "Finances"
}
},
"typeVersion": 4.7
},
{
"id": "769f49cc-badb-4770-97c4-351a08e80f1c",
"name": "取引データを経費シートに追加",
"type": "n8n-nodes-base.googleSheets",
"position": [
704,
-256
],
"parameters": {
"columns": {
"value": {
"To": "={{ $json.output.To }}",
"Date": "={{ $json.output.Date }}",
"From": "={{ $json.output.From }}",
"Type": "={{ $json.output.Type }}",
"Amount": "={{ $json.output.Amount }}",
"Source": "={{ $json.output.Source }}",
"Status": "={{ $json.output.Status }}",
"Account": "={{ $json.output.Account }}",
"Category": "={{ $json.output.Category }}",
"Currency": "={{ $json.output.Currency }}",
"MessageId": "={{ $json.output.MessageId }}",
"Timestamp": "={{ $json.output.Timestamp }}",
"Description": "={{ $json.output.Description }}"
},
"schema": [
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Account",
"type": "string",
"display": true,
"required": false,
"displayName": "Account",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "From",
"type": "string",
"display": true,
"required": false,
"displayName": "From",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "To",
"type": "string",
"display": true,
"required": false,
"displayName": "To",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Type",
"type": "string",
"display": true,
"required": false,
"displayName": "Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Description",
"type": "string",
"display": true,
"required": false,
"displayName": "Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Amount",
"type": "string",
"display": true,
"required": false,
"displayName": "Amount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Currency",
"type": "string",
"display": true,
"required": false,
"displayName": "Currency",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Source",
"type": "string",
"display": true,
"required": false,
"displayName": "Source",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "MessageId",
"type": "string",
"display": true,
"required": false,
"displayName": "MessageId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1752386962,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit#gid=1752386962",
"cachedResultName": "Expenses"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit?usp=drivesdk",
"cachedResultName": "Finances"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GJU31SO5EP7zjg4m",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "55fbe444-feb4-400b-a0e3-d95d8fc900e2",
"name": "ユーザーに確認返信を送信",
"type": "n8n-nodes-base.telegram",
"position": [
976,
-384
],
"webhookId": "079f4dea-cb14-45c8-820a-61fa4c403590",
"parameters": {
"text": "=Sure, the entry has been added to the finance sheet. You can check the finance sheet by clicking the below link 👇\n\nhttps://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit?usp=sharing\n\nThank you 😊",
"chatId": "={{ $('Telegram Trigger').item.json.message.from.id }}",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "A4nNiaAfDhgWA15H",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "93278ce8-0c1e-4893-8e5f-a4a00190cce0",
"name": "指定された銀行/UPIアプリまたはそれらからの取引のみからメールを抽出",
"type": "n8n-nodes-base.code",
"position": [
-608,
720
],
"parameters": {
"jsCode": "const emailBody = $input.first().json.snippet || \"\";\nconst senderEmail = $input.first().json.From || \"\";\n\n// Account detection\nlet account = \"\";\nif (/alerts@hdfcbank\\.net/i.test(senderEmail)) account = \"HDFC Bank\";\nelse if (/ealerts@iobnet\\.co\\.in/i.test(senderEmail)) account = \"Indian Overseas Bank\";\nelse if (/alerts@indianbank\\.in/i.test(senderEmail)) account = \"Indian Bank\";\nelse if (/@upi|@okhdfcbank|@okaxis|@okicici/i.test(emailBody)) {\n if (/gpay|google pay/i.test(emailBody)) account = \"Google Pay\";\n else if (/phonepe/i.test(emailBody)) account = \"PhonePe\";\n else if (/paytm/i.test(emailBody)) account = \"Paytm\";\n else account = \"UPI\";\n} else {\n account = \"Other\";\n}\n\n// If account is \"Other\", skip output\nif (account === \"Other\") {\n return [];\n}\n\n// Output\nreturn [{\n account,\n from: senderEmail, // exact Gmail \"From\" metadata\n snippet: emailBody,\n messageId: $input.first().json.id || \"\"\n}];\n"
},
"typeVersion": 2
},
{
"id": "7799b2b4-ce6a-461b-b7b0-2af4e7ce3808",
"name": "生メールから構造化データを生成",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-368,
720
],
"parameters": {
"text": "={{ $json.snippet }}",
"batching": {},
"messages": {
"messageValues": [
{
"message": "=You are a financial transaction parser for HDFC Bank, Indian Overseas Bank, and Indian Bank credit/debit alert emails. \nYou only respond with a JSON object in this exact format and nothing else:\n\ninput: {{ $json.snippet }}\n{\n \"date\": \"YYYY-MM-DD or ''\",\n \"account\": \"{{ $json.account }}\",\n \"from\": \"{{ $json.from }}\",\n \"to\": \"Receiver or merchant or ''\",\n \"type\": \"Credit or Debit\",\n \"category\": \"Category based on merchant or purpose\",\n \"description\": \"Full transaction description from email\",\n \"amount\": \"Numeric value without currency symbol or commas\",\n \"currency\": \"INR\",\n \"source\": \"Gmail\",\n \"messageId\": \"{{ $json.messageId }}\",\n \"status\": \"Posted\"\n}\n\nRules:\n1. Process only credit/debit alerts. Ignore promotional, loan, OTP, or info emails.\n2. `account` and `from` are already provided — never change them.\n3. `to` = merchant/payee for debit, your account for credit.\n4. Extract `amount` as a plain number (no commas or currency symbol).\n5. Guess `category` from merchant/purpose. Leave \"\" if unsure.\n6. `date` in YYYY-MM-DD. If missing, use today’s date.\n7. Return only the JSON object. No explanations.\n"
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "d6cb28d2-b720-4709-a56d-623cdb7ef7f7",
"name": "情報を抽出して解析",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
-32,
720
],
"parameters": {
"text": "={{ $json.text }}",
"options": {},
"schemaType": "fromJson",
"jsonSchemaExample": "{\n \"date\": \"string (format: DD/MM/YYYY)\",\n \"account\": \"string\",\n \"from\": \"string (name or email)\",\n \"to\": \"string (name or email)\",\n \"type\": \"string (Credit/Debit)\",\n \"category\": \"string\",\n \"description\": \"string\",\n \"amount\": \"number\",\n \"currency\": \"string (ISO code e.g. INR)\",\n \"source\": \"string (e.g. Gmail, Telegram)\",\n \"messageId\": \"string\",\n \"status\": \"string (e.g. Posted, Pending)\"\n}"
},
"typeVersion": 1.2
},
{
"id": "ee90ad8e-4479-4388-b72a-12c9803f0edf",
"name": "取引が「入金」か「出金」かの確認",
"type": "n8n-nodes-base.if",
"position": [
304,
720
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c7ff91d0-830f-4b19-a407-e17f79b2e263",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.type }}",
"rightValue": "Credit"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "23324adf-301d-4712-b27a-1a3447fee5c8",
"name": "取引データを経費シート1に追加",
"type": "n8n-nodes-base.googleSheets",
"position": [
560,
544
],
"parameters": {
"columns": {
"value": {
"To": "={{ $json.output.to }}",
"Date": "={{ $json.output.date }}",
"From": "={{ $json.output.from }}",
"Type": "={{ $json.output.type }}",
"Amount": "={{ $json.output.amount }}",
"Source": "={{ $json.output.source }}",
"Status": "={{ $json.output.status }}",
"Account": "={{ $json.output.account }}",
"Category": "={{ $json.output.category }}",
"Currency": "={{ $json.output.currency }}",
"MessageId": "={{ $json.output.messageId }}",
"Timestamp": "=",
"Description": "={{ $json.output.description }}"
},
"schema": [
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Account",
"type": "string",
"display": true,
"required": false,
"displayName": "Account",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "From",
"type": "string",
"display": true,
"required": false,
"displayName": "From",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "To",
"type": "string",
"display": true,
"required": false,
"displayName": "To",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Type",
"type": "string",
"display": true,
"required": false,
"displayName": "Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Description",
"type": "string",
"display": true,
"required": false,
"displayName": "Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Amount",
"type": "string",
"display": true,
"required": false,
"displayName": "Amount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Currency",
"type": "string",
"display": true,
"required": false,
"displayName": "Currency",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Source",
"type": "string",
"display": true,
"required": false,
"displayName": "Source",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "MessageId",
"type": "string",
"display": true,
"required": false,
"displayName": "MessageId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1752386962,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit#gid=1752386962",
"cachedResultName": "Expenses"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit?usp=drivesdk",
"cachedResultName": "Finances"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GJU31SO5EP7zjg4m",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "15b46ac4-e38e-4b83-bde8-de754b230350",
"name": "取引データを経費シート2に追加",
"type": "n8n-nodes-base.googleSheets",
"position": [
544,
912
],
"parameters": {
"columns": {
"value": {
"To": "={{ $json.output.to }}",
"Date": "={{ $json.output.date }}",
"From": "={{ $json.output.from }}",
"Type": "={{ $json.output.type }}",
"Amount": "={{ $json.output.amount }}",
"Source": "={{ $json.output.source }}",
"Status": "={{ $json.output.status }}",
"Account": "={{ $json.output.account }}",
"Category": "={{ $json.output.category }}",
"Currency": "={{ $json.output.currency }}",
"MessageId": "={{ $json.output.messageId }}",
"Timestamp": "=",
"Description": "={{ $json.output.description }}"
},
"schema": [
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Account",
"type": "string",
"display": true,
"required": false,
"displayName": "Account",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "From",
"type": "string",
"display": true,
"required": false,
"displayName": "From",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "To",
"type": "string",
"display": true,
"required": false,
"displayName": "To",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Type",
"type": "string",
"display": true,
"required": false,
"displayName": "Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Description",
"type": "string",
"display": true,
"required": false,
"displayName": "Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Amount",
"type": "string",
"display": true,
"required": false,
"displayName": "Amount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Currency",
"type": "string",
"display": true,
"required": false,
"displayName": "Currency",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Source",
"type": "string",
"display": true,
"required": false,
"displayName": "Source",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "MessageId",
"type": "string",
"display": true,
"required": false,
"displayName": "MessageId",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1752386962,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit#gid=1752386962",
"cachedResultName": "Expenses"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fDiKZVLB07hqjNh4Zr6d_9t4B3SSZPIv62-AchIUF14/edit?usp=drivesdk",
"cachedResultName": "Finances"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GJU31SO5EP7zjg4m",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "f94f965a-ac92-4759-a269-2c41c303c5fd",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-864,
-656
],
"parameters": {
"width": 2080,
"height": 912,
"content": ""
},
"typeVersion": 1
},
{
"id": "a65121d0-719b-48ae-80b2-1ba699aa5358",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1232,
-656
],
"parameters": {
"width": 800,
"height": 224,
"content": "Takes input from a telegram bot which is connected to the n8n workflow telegram trigger.\n\nGemini AI Parser extracts structured details (date, amount, category, etc.).\n\nThen it checks, whether the manually specified details is ‘budget’ or ‘expense’, then splits the data -> parse the data -> then again check whether it is ‘Budget’ or ‘Expense’ then appends the structured data to the respective google sheet.\n\nMonthly summary auto-calculates the expense and updates the expense for every month and budgets(sum all budgets if there are more than 1 budgets)."
},
"typeVersion": 1
},
{
"id": "c42b224d-83c9-49ba-84a0-598dddad5586",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-880,
496
],
"parameters": {
"color": 3,
"width": 1680,
"height": 736,
"content": ""
},
"typeVersion": 1
},
{
"id": "2b21cea9-9e6a-40f4-9961-e0d6b2fa00c9",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
816,
512
],
"parameters": {
"color": 3,
"width": 832,
"height": 288,
"content": "Gmail Trigger captures new bank/UPI emails.\n\nGemini AI Parser extracts structured details (date, amount, category, etc.).\n\nFilter Node ensures only valid financial transactions are logged.\n\nInformation extractor will extract the information like Date, account, transaction type(Credit/Debit), description, currency, status, messageId, from email, to email, category -> checks if the transaction is ‘Credit’ or ‘Debit’ then appends the details to the respective google sheet\n\nBudget Validator checks against monthly allocations.\n\nIf the expense is above the budget is raises an alert and will send a email to the connected account."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "48585f82-44de-4fa7-bc8c-a25001de6e5b",
"connections": {
"6160ac29-5fb2-45cc-957d-74d44eed0d47": {
"main": [
[
{
"node": "93278ce8-0c1e-4893-8e5f-a4a00190cce0",
"type": "main",
"index": 0
}
]
]
},
"29348b2b-7acf-423c-86ae-c74030c6bd07": {
"main": [
[
{
"node": "1b130cdf-9f6d-44ac-97ac-ade6da4aa2bc",
"type": "main",
"index": 0
}
]
]
},
"9f3409c6-3b81-4f2c-a9ac-6043962dd8c4": {
"ai_languageModel": [
[
{
"node": "1b130cdf-9f6d-44ac-97ac-ade6da4aa2bc",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"1690b5c3-1281-4298-962e-047c8573f986": {
"ai_outputParser": [
[
{
"node": "2551dff4-7fc0-4850-a64f-8bde1842a705",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"25975fb8-0637-4c22-a82e-8d275b83c1a8": {
"ai_languageModel": [
[
{
"node": "a75b2920-738f-4490-98a0-7e6041b66c33",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"69a34641-5579-4e16-b804-3e676c5dae36": {
"ai_languageModel": [
[
{
"node": "2551dff4-7fc0-4850-a64f-8bde1842a705",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"b2dc1c36-a6c4-4be7-a5a6-e697fb128a3f": {
"ai_languageModel": [
[
{
"node": "7799b2b4-ce6a-461b-b7b0-2af4e7ce3808",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"cffa1c59-7dba-49fa-8a72-576d389ed472": {
"ai_languageModel": [
[
{
"node": "d6cb28d2-b720-4709-a56d-623cdb7ef7f7",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"02ae4279-d0d0-4d4b-8026-6641368e9be3": {
"ai_outputParser": [
[
{
"node": "a75b2920-738f-4490-98a0-7e6041b66c33",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"a75b2920-738f-4490-98a0-7e6041b66c33": {
"main": [
[
{
"node": "7f10537f-0feb-4783-b4ff-ea89f6b4cf9f",
"type": "main",
"index": 0
}
]
]
},
"2551dff4-7fc0-4850-a64f-8bde1842a705": {
"main": [
[
{
"node": "7f10537f-0feb-4783-b4ff-ea89f6b4cf9f",
"type": "main",
"index": 0
}
]
]
},
"d6cb28d2-b720-4709-a56d-623cdb7ef7f7": {
"main": [
[
{
"node": "ee90ad8e-4479-4388-b72a-12c9803f0edf",
"type": "main",
"index": 0
}
]
]
},
"eabb8a18-e5d7-416c-9ab1-c6165350737e": {
"main": [
[
{
"node": "55fbe444-feb4-400b-a0e3-d95d8fc900e2",
"type": "main",
"index": 0
}
]
]
},
"769f49cc-badb-4770-97c4-351a08e80f1c": {
"main": [
[
{
"node": "55fbe444-feb4-400b-a0e3-d95d8fc900e2",
"type": "main",
"index": 0
}
]
]
},
"1b130cdf-9f6d-44ac-97ac-ade6da4aa2bc": {
"main": [
[
{
"node": "3b88a35a-b9b3-40ec-aa93-57dd1000070c",
"type": "main",
"index": 0
}
]
]
},
"ee90ad8e-4479-4388-b72a-12c9803f0edf": {
"main": [
[
{
"node": "23324adf-301d-4712-b27a-1a3447fee5c8",
"type": "main",
"index": 0
}
],
[
{
"node": "15b46ac4-e38e-4b83-bde8-de754b230350",
"type": "main",
"index": 0
}
]
]
},
"7799b2b4-ce6a-461b-b7b0-2af4e7ce3808": {
"main": [
[
{
"node": "d6cb28d2-b720-4709-a56d-623cdb7ef7f7",
"type": "main",
"index": 0
}
]
]
},
"7f10537f-0feb-4783-b4ff-ea89f6b4cf9f": {
"main": [
[
{
"node": "eabb8a18-e5d7-416c-9ab1-c6165350737e",
"type": "main",
"index": 0
}
],
[
{
"node": "769f49cc-badb-4770-97c4-351a08e80f1c",
"type": "main",
"index": 0
}
]
]
},
"3b88a35a-b9b3-40ec-aa93-57dd1000070c": {
"main": [
[
{
"node": "a75b2920-738f-4490-98a0-7e6041b66c33",
"type": "main",
"index": 0
}
],
[
{
"node": "2551dff4-7fc0-4850-a64f-8bde1842a705",
"type": "main",
"index": 0
}
]
]
},
"93278ce8-0c1e-4893-8e5f-a4a00190cce0": {
"main": [
[
{
"node": "7799b2b4-ce6a-461b-b7b0-2af4e7ce3808",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - AI要約, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
AI、Apify、Telegram統合による自動化ツールでの評価
Telegram、Apify、AI、Googleスプレッドシートを使ってWebサイトツール分析を自動化
If
Set
Code
+
If
Set
Code
20 ノードMirza Ajmal
AI要約
LinkedIn オートメーション
Gemini AI と承認ワークフローを使用して Telegram メッセージをプロフェッショナル LinkedIn 投稿に変換する
If
Set
Code
+
If
Set
Code
54 ノードSateesh
コンテンツ作成
第一轮 Telegram と LinkedIn 快速通道 AI 招聘アシスタント
AI候选人筛选流程:LinkedInへTelegram,統合Gemini与Apify
If
Set
Code
+
If
Set
Code
55 ノードDean Pike
人事
URLベースでAI、Telegram、マルチプラットフォームで自動のにソーシャルメディア投稿を生成
URLを基にAI、Telegram、複数のプラットフォームで自動のにソーシャルメディア投稿を作成
If
Set
Code
+
If
Set
Code
42 ノードKarol
コンテンツ作成
水道料金
Telegram、Gemini AI、そして Google Sheets を使って水道料金の計算を自動化
Set
Code
Switch
+
Set
Code
Switch
15 ノードMiftah Rahmat
その他
LinkedInおよびXウイルスのなコンテンツ自動エンジン
AIを使ってLinkedInとXにウイルスのなコンテンツを自動生成して公開する
If
Set
Wait
+
If
Set
Wait
156 ノードDiptamoy Barman
コンテンツ作成
ワークフロー情報
難易度
上級
ノード数28
カテゴリー2
ノードタイプ11
作成者
Alex
@thorodinson7358Full stack software developer with 2+ years of experience, developing, helping, solving problems with automation and solutions.
外部リンク
n8n.ioで表示 →
このワークフローを共有