AutomationFlowsAI & RAG › AI Chat Expense Tracker

AI Chat Expense Tracker

Original n8n title: Expense Tracker

Expense Tracker. Uses chatTrigger, agent, lmChatOpenAi, memoryBufferWindow. Chat trigger; 12 nodes.

Chat trigger trigger★★★☆☆ complexityAI-powered12 nodesChat TriggerAgentOpenAI ChatMemory Buffer WindowTool WorkflowInformation ExtractorExecute Workflow TriggerGoogle Sheets
AI & RAG Trigger: Chat trigger Nodes: 12 Complexity: ★★★☆☆ AI nodes: yes Added:

This workflow follows the Agent → Chat Trigger 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": "Expense Tracker",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        0,
        0
      ],
      "id": "3a151e43-3a25-47a8-80de-a873d6ed5b52",
      "name": "When chat message received"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "You are a helpful assistant. You are used to save expenses or income. Always refer to 2025 year.",
          "maxIterations": 3
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.9,
      "position": [
        220,
        0
      ],
      "id": "96089dcd-7ae1-4d4e-85b0-8d9961855ac0",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        140,
        220
      ],
      "id": "8b04ef29-81c4-4145-aa5a-19a09db949c8",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        320,
        220
      ],
      "id": "6926b20b-38a7-4c88-a6de-1a246355f819",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "ca1c59e3-e8df-4425-b3c4-f9a91f90babe",
              "name": "response",
              "value": "=response {{ $('When chat message received').item.json.chatInput }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        580,
        0
      ],
      "id": "552065e1-136f-4ab5-8280-807d99411195",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "name": "expense_database",
        "description": "call this tool to save the expences to database",
        "workflowId": {
          "__rl": true,
          "value": "Z2prdLuqZHmRjAap",
          "mode": "id"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {},
          "matchingColumns": [],
          "schema": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.1,
      "position": [
        480,
        220
      ],
      "id": "77a0fc40-c03a-4cc3-9c3e-2b3c37247d90",
      "name": "Call n8n Workflow Tool"
    },
    {
      "parameters": {
        "text": "=convert expense to JSON:\n\n {{ $json.query }}",
        "attributes": {
          "attributes": [
            {
              "name": "cost",
              "type": "number",
              "description": "expense cost",
              "required": true
            },
            {
              "name": "description",
              "description": "expense or income description",
              "required": true
            },
            {
              "name": "date",
              "type": "date",
              "description": "date in UTC+2",
              "required": true
            },
            {
              "name": "type",
              "description": "If is an expense or income",
              "required": true
            }
          ]
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "typeVersion": 1,
      "position": [
        220,
        540
      ],
      "id": "3809c715-7f2d-48fe-b040-83f20aa1d875",
      "name": "Information Extractor"
    },
    {
      "parameters": {
        "inputSource": "passthrough"
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        0,
        540
      ],
      "id": "43b2b9bf-f72b-4204-9055-41ad027147b7",
      "name": "When Executed by Another Workflow"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        200,
        760
      ],
      "id": "95bacb6a-c380-4a61-aa39-0222d0b6ce24",
      "name": "OpenAI Chat Model1",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1Pq_hkKnThRvHKEQxANeTS5HHSZ08Vv-3brfVGc4jyIo",
          "mode": "list",
          "cachedResultName": "My Expenses",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Pq_hkKnThRvHKEQxANeTS5HHSZ08Vv-3brfVGc4jyIo/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Pq_hkKnThRvHKEQxANeTS5HHSZ08Vv-3brfVGc4jyIo/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Description": "={{ $json.output.description }}",
            "Cost": "={{ $json.output.cost }}",
            "Date": "={{ $json.output.date }}",
            "Type": "={{ $json.output.type }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "Description",
              "displayName": "Description",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Cost",
              "displayName": "Cost",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "displayName": "Date",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Type",
              "displayName": "Type",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        580,
        540
      ],
      "id": "6d556fd2-4a2e-4961-84cb-4f4df73094e3",
      "name": "Google Sheets",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "# Handle Expences or Income",
        "height": 500,
        "width": 840
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -60,
        -120
      ],
      "id": "254a2012-5e6c-4667-b92e-793480d3074d",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "# Save The Data",
        "height": 500,
        "width": 840,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -60,
        400
      ],
      "id": "c7333aab-204f-4e50-a9d1-39cb6f0da60e",
      "name": "Sticky Note1"
    }
  ],
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call n8n Workflow Tool": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Information Extractor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Information Extractor",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Information Extractor": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "0c5f78c8-9324-4a25-ac87-cc07bd19a7bd",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "Z2prdLuqZHmRjAap",
  "tags": []
}

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

Expense Tracker. Uses chatTrigger, agent, lmChatOpenAi, memoryBufferWindow. Chat trigger; 12 nodes.

Source: https://github.com/Khuzaima-AI-2112/n8n-automation-templates/blob/master/01_Bussiness-&-Support/04_Finance-tracker-ai-agent/Finance_Tracker.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

This n8n template provides a powerful AI-powered chatbot that acts as your personal Spotify DJ. Simply tell the chatbot what kind of music you're in the mood for, and it will intelligently create a cu

OpenAI Chat, Spotify, Chain Llm +7
AI & RAG

I prepared a detailed guide showcasing the process of building an AI agent that interacts with a Snowflake database using n8n. This setup enables conversational querying, secure execution of SQL queri

Chat Trigger, Agent, OpenAI Chat +5
AI & RAG

Description: Overview This workflow generates automated revenue and expense comparison reports from a structured Google Sheet. It enables users to compare financial data across the current period, las

Lm Chat Deep Seek, Memory Buffer Window, Tool Workflow +4
AI & RAG

Currently Work-In-Progress

Chat Trigger, Agent, OpenAI Chat +5
AI & RAG

Build your own AI Prompt Hub inside n8n. This template lets ChatGPT automatically search your saved prompts in Notion using semantic embeddings from HuggingFace. Each time a user sends a message, the

Chat Trigger, Agent, OpenAI Chat +6