{"id":"3BkxvtCbF6hHGUgM","meta":{"instanceId":"workflow-4dc69d36","versionId":"1.0.0","createdAt":"2025-09-29T07:07:56.609466","updatedAt":"2025-09-29T07:07:56.609482","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"name":"N8N Financial Tracker Telegram Invoices to Notion with AI Summaries & Reports","nodes":[{"id":"3792ae58-807f-4e83-a219-25c17c8b4048","name":"Google Gemini Chat Model","type":"n8n-nodes-base.noOp","position":[680,380],"parameters":{"options":{},"modelName":"models/gemini-2.5-flash-preview-04-17"},"credentials":{"googlePalmApi":{"id":"haEP6ehKtsSUjFmK","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1,"notes":"This lmChatGoogleGemini node performs automated tasks as part of the workflow."},{"id":"943f87e2-a1ac-4f7e-999b-8ea261259e5a","name":"Basic LLM Chain","type":"n8n-nodes-base.noOp","position":[640,220],"parameters":{"text":"=ini ada base64 invoice rangkumkan Pengeluaran dari invoice tersebut Nama Barang jumlah dan Pengeluaran masing masing barang dan total, outputnya jangan panjang panjang saya cukup berikan \n\ndate: DD-MM-YYYY ( Jika dari OCR tidak ada tanggal ambil tanggal hari ini )\nid:\nname:\n qty: \nprice:\n total:\ncategory:\ntax : (jika di total berbeda dengan item brati ada pajak nya hitungkan juga pajaknya masukan kesini)\n\nuntuk pilihan categorynya : Food & Beverage / Transportation / Utilities / Shopping / Healthcare / Entertaiment / Housing / Education\n\ndalam bentuk JSON array object, berikan juga key message summary untuk rangkuman, berikan rangkauman singkat total pengeluaran dan barang apa saja yang dibeli serta jumlah nya berikan juga pajaknya","messages":{"messageValues":[{"type":"HumanMessagePromptTemplate","messageType":"imageBinary"}]},"promptType":"define","hasOutputParser":true},"typeVersion":1,"notes":"This chainLlm node performs automated tasks as part of the workflow."},{"id":"247b78cb-c3f6-4f31-8559-0fff70de9ba9","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[0,0],"parameters":{"width":1703,"height":580,"content":"## Automated Financial Tracker: Telegram Invoices to Notion with AI Summaries & Reports\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"e20045c2-a8ef-43d6-b619-6825f605e183","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[0,620],"parameters":{"color":5,"width":1706,"height":527,"content":"## Schedule report to send on chanel or private message\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"ed8d6544-af9e-416a-b1f3-624ca108427f","name":"Schedule Trigger | for send chart report","type":"n8n-nodes-base.scheduleTrigger","position":[80,880],"parameters":{"rule":{"interval":[{}]}},"typeVersion":1.2,"notes":"This scheduleTrigger node performs automated tasks as part of the workflow."},{"id":"22ad7ea1-9404-48bd-9d0f-0c58b8b66e3d","name":"Get Recent Data from Notions","type":"n8n-nodes-base.notion","position":[400,940],"parameters":{"filters":{"conditions":[{"key":"YOUR_CREDENTIAL_HERE","condition":"past_week"}]},"options":{},"resource":"databasePage","operation":"getAll","returnAll":true,"databaseId":{"__rl":true,"mode":"list","value":"1d858554-d218-807c-936c-d06c8a8ec769","cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"Pengeluaran Rizqi Dini"},"filterType":"manual"},"credentials":{"notionApi":{"id":"AhjWhO7Jpc5x7xKG","name":"Notion account"}},"typeVersion":2.2,"notes":"This notion node performs automated tasks as part of the workflow."},{"id":"34310645-52da-4f9c-96a2-0a01d0a640f9","name":"Summarize Transaction Data","type":"n8n-nodes-base.summarize","position":[760,920],"parameters":{"options":{},"fieldsToSplitBy":"property_category","fieldsToSummarize":{"values":[{"field":"property_total","aggregation":"sum"}]}},"typeVersion":1,"notes":"This summarize node performs automated tasks as part of the workflow."},{"id":"80a374cb-00cf-46b1-9505-709be1c550da","name":"Generate Chart","type":"n8n-nodes-base.quickChart","position":[1200,900],"parameters":{"data":"={{ $json.chart.data.datasets[0].data }}","labelsMode":"array","labelsArray":"={{ $json.chart.data.labels }}","chartOptions":{},"datasetOptions":{}},"typeVersion":1,"notes":"This quickChart node performs automated tasks as part of the workflow."},{"id":"6b7c67ee-b205-42f5-9441-eb2ecee4a503","name":"Send Chart Image to Group or Private Chat","type":"n8n-nodes-base.telegram","position":[1460,760],"webhookId":"66cce6e1-819c-487b-b8ad-3f02aebd40cb","parameters":{"chatId":"-1001957001324","operation":"sendPhoto","binaryData":true,"additionalFields":{"fileName":"chart","message_thread_id":571}},"credentials":{"telegramApi":{"id":"J8yRVYmsnH74HuaD","name":"Telegram account"}},"typeVersion":1.2,"notes":"This telegram node performs automated tasks as part of the workflow."},{"id":"06afd5ea-77b2-468d-b12b-1386d37a3ee6","name":"Convert Data to JSON chart payload","type":"n8n-nodes-base.code","position":[1080,900],"parameters":{"jsCode":"const labels = [];\nconst values = [];\n\nfor (const item of items) {\n  labels.push(item.json.property_category);\n  values.push(item.json.sum_property_total);\n}\n\nreturn [\n  {\n    json: {\n      chart: {\n        type: 'bar',\n        data: {\n          labels,\n          datasets: [\n            {\n              label: 'Spending by Category',\n              data: values,\n              backgroundColor: 'rgba(54, 162, 235, 0.6)',\n              borderColor: 'rgba(54, 162, 235, 1)',\n              borderWidth: 1\n            }\n          ]\n        },\n        options: {\n          plugins: {\n            title: {\n              display: true,\n              text: 'Spending Summary by Category'\n            }\n          },\n          scales: {\n            y: {\n              beginAtZero: true\n            }\n          }\n        }\n      }\n    }\n  }\n];"},"typeVersion":2,"notes":"This code node performs automated tasks as part of the workflow."},{"id":"4ad8c9c9-fbec-46ce-943d-447ca687e031","name":"Telegram Trigger | When recive photo","type":"n8n-nodes-base.telegramTrigger","position":[160,160],"webhookId":"cac4ce91-ed1f-42ea-aebe-97ac3612aea6","parameters":{"updates":["message"],"additionalFields":{}},"credentials":{"telegramApi":{"id":"J8yRVYmsnH74HuaD","name":"Telegram account"}},"typeVersion":1.1,"notes":"This telegramTrigger node performs automated tasks as part of the workflow."},{"id":"5231929f-2d7d-43ff-b9ae-141374926131","name":"Get Image Info","type":"n8n-nodes-base.editImage","position":[460,160],"parameters":{"operation":"information"},"typeVersion":1,"notes":"This editImage node performs automated tasks as part of the workflow."},{"id":"c8dcc6a1-2367-4049-9a8b-d8a04299ee72","name":"Parse To your object | Table","type":"n8n-nodes-base.noOp","position":[1040,460],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"message\": {\n      \"type\": \"string\"\n    },\n    \"summary\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\"date\": { \"type\": \"date\" },\n          \"id\": { \"type\": \"integer\" },\n          \"name\": { \"type\": \"string\" },\n          \"qty\": { \"type\": \"integer\" },\n          \"price\": { \"type\": \"number\" },\n          \"tax\": { \"type\": \"number\" },\n          \"total\": { \"type\": \"number\" },\"category\": { \"type\": \"string\" }\n        },\n        \"required\": [\"id\", \"name\", \"qty\", \"price\", \"total\",\"category\"]\n      }\n    }\n  },\n  \"required\": [\"message\", \"summary\"]\n}\n"},"typeVersion":1,"notes":"This outputParserStructured node performs automated tasks as part of the workflow."},{"id":"bc098a26-4e55-4908-880c-e5f27737a941","name":"Split Out | data transaction","type":"n8n-nodes-base.splitOut","position":[1120,40],"parameters":{"options":{},"fieldToSplitOut":"output.summary"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"2a42bc4b-a5c7-433e-91e4-aa5531570f73","name":"Sendback to chat and give summarize text","type":"n8n-nodes-base.telegram","position":[1480,400],"webhookId":"f90475fa-69cd-4e19-bc93-bffdceae8324","parameters":{"text":"={{ $json.output.message }}","chatId":"={{ $('Telegram Trigger | When recive photo').item.json.message.chat.id }}","additionalFields":{"appendAttribution":false}},"credentials":{"telegramApi":{"id":"J8yRVYmsnH74HuaD","name":"Telegram account"}},"typeVersion":1.2,"notes":"This telegram node performs automated tasks as part of the workflow."},{"id":"bfc5c52e-313d-4257-bdfa-c542b687a853","name":"Record To Notion Database","type":"n8n-nodes-base.notion","position":[1580,120],"parameters":{"options":{},"resource":"databasePage","databaseId":{"__rl":true,"mode":"list","value":"1d858554-d218-807c-936c-d06c8a8ec769","cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"Pengeluaran Rizqi Dini"},"propertiesUi":{"propertyValues":[{"key":"YOUR_CREDENTIAL_HERE","title":"={{ $json.name }}"},{"key":"YOUR_CREDENTIAL_HERE","numberValue":"={{ $json.qty }}"},{"key":"YOUR_CREDENTIAL_HERE","numberValue":"={{ $json.price }}"},{"key":"YOUR_CREDENTIAL_HERE","numberValue":"={{ $json.total }}"},{"key":"YOUR_CREDENTIAL_HERE","selectValue":"={{ $json.category }}"},{"key":"YOUR_CREDENTIAL_HERE","textContent":"={{ $json.date }}"},{"key":"YOUR_CREDENTIAL_HERE","numberValue":"={{ $json.tax }}"}]}},"credentials":{"notionApi":{"id":"AhjWhO7Jpc5x7xKG","name":"Notion account"}},"typeVersion":2.2,"notes":"This notion node performs automated tasks as part of the workflow."},{"id":"f514554b-eb9e-47e2-ad6b-0b13036beaf4","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[40,60],"parameters":{"color":3,"width":340,"height":280,"content":"📸 INVOICE INPUT 📸\nBot listens here for photos of your receipts/invoices.\nEnsure your Telegram Bot API token is set in credentials."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"53fc4c77-3f16-4cb8-82e8-f4810af1f569","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[600,60],"parameters":{"color":5,"width":360,"height":460,"content":"🤖 AI MAGIC HAPPENS HERE 🧠\n- Image is sent to Google Gemini for data extraction.\n- Check 'Basic LLM Chain' to customize the AI prompt (e.g., categories, output format).\n- Requires Google Gemini API credentials."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"c6fb1193-7cc9-4f45-8a5f-20af41cdf3c8","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[980,340],"parameters":{"color":5,"width":280,"height":200,"content":"✨ STRUCTURING AI DATA ✨\nConverts the AI's text output into a usable JSON object.\nCheck the schema if you modify the AI prompt significantly."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"79a4e9ba-d1ea-4cfc-870c-145bae80c9b4","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1320,0],"parameters":{"color":2,"width":380,"height":240,"content":"📝 SAVING TO NOTION 📝\n- Extracted transaction data is saved here.\n- Configure with your Notion API key & Database ID.\n- Map fields correctly to your database columns!"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"9406306b-9f3d-4877-a888-1f5e16a431c1","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[20,760],"parameters":{"height":280,"content":"REPORTING SCHEDULE 🗓️\nSet how often you want to receive your spending report (e.g., weekly, monthly)."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"1b6c8a28-b0f0-44fb-be02-21725d950716","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[320,760],"parameters":{"color":2,"width":280,"height":380,"content":"📊 FETCHING DATA FOR REPORT 📊\n- Retrieves transactions from Notion for the report period.\n- Default: \"Past Week\". Adjust filter as needed.\n- Requires Notion API credentials & Database ID."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"4612006e-04a9-4ad5-9f05-d49ec13f31cf","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[660,740],"parameters":{"width":320,"height":360,"content":"➕ SUMMARIZING SPENDING ➕\nAggregates your expenses, usually by category,\nto prepare for the chart."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"103132cf-37a6-455f-b19f-14d3e17af912","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[1040,740],"parameters":{"width":300,"height":340,"content":"📈 GENERATING VISUAL REPORT 📈\nCreates the actual chart image based on your spending data.\nYou can customize chart type (bar, pie, etc.) here."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"24324366-33e5-4097-ab36-aac31cef0006","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","position":[1380,640],"parameters":{"color":6,"width":300,"height":300,"content":"📤 SENDING REPORT TO TELEGRAM 📤\n- Delivers the generated chart to your chosen Telegram chat/group.\n- Set the correct Chat ID and Bot API token."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"e9fc1140-411b-411a-87a6-bbe9718ba3b3","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[1320,280],"parameters":{"color":6,"width":300,"height":280,"content":"💬 TRANSACTION SUMMARY 💬\nSends a confirmation message back to the user in Telegram\nwith a summary of the recorded expense."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"013fd587-3504-44b8-97e1-09cad47a0089","name":"Sticky Note12","type":"n8n-nodes-base.stickyNote","position":[40,360],"parameters":{"color":7,"width":460,"height":240,"content":"  🔑 CREDENTIALS NEEDED 🔑\n  Remember to set up API keys/tokens for:\n  - Telegram\n  - Google Gemini\n  - Notion\n\n  💡 CUSTOMIZE ME! 💡\n  - Adjust AI prompts for better accuracy.\n  - Change Notion database structure.\n  - Modify report frequency and content.\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"8f6f0fdb-d3be-4464-a7db-ea4d642a4f55","name":"Telegram","type":"n8n-nodes-base.telegram","position":[320,160],"webhookId":"6e801e0b-72d1-42a9-ac47-61ac113a01d2","parameters":{"fileId":"={{ $json.message.photo[3].file_id }}","resource":"file"},"credentials":{"telegramApi":{"id":"J8yRVYmsnH74HuaD","name":"Telegram account"}},"typeVersion":1.2,"notes":"This telegram node performs automated tasks as part of the workflow."},{"id":"error-24b78587","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"active":true,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"a192c50c-4a77-44ee-b98a-f18d4ced2cb1","connections":{"Google Gemini Chat Model":{"main":[[]]},"Send Chart Image to Group or Private Chat":{"main":[[]]},"Telegram Trigger | When recive photo":{"main":[[]]},"Sendback to chat and give summarize text":{"main":[[]]},"Telegram":{"main":[[]]}},"description":"Automated workflow: N8N Financial Tracker Telegram Invoices to Notion with AI Summaries & Reports. This workflow integrates 14 different services: stickyNote, telegramTrigger, telegram, code, lmChatGoogleGemini. It contains 33 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: N8N Financial Tracker Telegram Invoices to Notion with AI Summaries & Reports. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}