Rastreador de gastos personales
Este es unPersonal Productivityflujo de automatización del dominio deautomatización que contiene 15 nodos.Utiliza principalmente nodos como Cron, Webhook, Function, GoogleSheets, RespondToWebhook. Gestión de gastos personales con rastreador automatizado de Webhooks y Google Sheets
- •Punto final de HTTP Webhook (n8n generará automáticamente)
- •Credenciales de API de Google Sheets
Nodos utilizados (15)
Categoría
{
"id": "E1CD2pH99IVoXnwp",
"meta": {
"instanceId": "922f87b0adfedb3ae09541ddf50e19d9af2c8cfac1d8da5d9cd4cdfe64d30bee",
"templateCredsSetupCompleted": true
},
"name": "Personal expense tracker",
"tags": [],
"nodes": [
{
"id": "0dc9105c-6579-4bde-b831-b993ac6e1a54",
"name": "Entrada de Gasto Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
240,
100
],
"webhookId": "expense-tracker-api",
"parameters": {
"path": "add-expense",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 1
},
{
"id": "17662aeb-97d6-468e-b1d1-2b82a44dfbb9",
"name": "Validar y Formatear Datos de Gasto",
"type": "n8n-nodes-base.function",
"position": [
540,
100
],
"parameters": {
"functionCode": "// Validate and format expense data\nconst body = $input.first().json.body || {};\n\nconst expense = {\n date: body.date || new Date().toISOString().split('T')[0],\n category: body.category || 'Other',\n description: body.description || 'No description',\n amount: parseFloat(body.amount) || 0,\n payment_method: body.payment_method || 'Cash'\n};\n\n// Validate amount\nif (expense.amount <= 0) {\n throw new Error('Amount must be greater than 0');\n}\n\n// Validate category\nconst validCategories = ['Food', 'Transport', 'Shopping', 'Bills', 'Entertainment', 'Health', 'Other'];\nif (!validCategories.includes(expense.category)) {\n expense.category = 'Other';\n}\n\n// Format amount to 2 decimal places\nexpense.amount = Math.round(expense.amount * 100) / 100;\n\nreturn { json: expense };"
},
"typeVersion": 1
},
{
"id": "0a4044a1-f23e-4c5a-9383-425f0fb5cf9e",
"name": "Guardar Gasto en Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
840,
100
],
"parameters": {
"options": {
"cellFormat": "USER_ENTERED"
},
"operation": "append",
"sheetName": "Expenses",
"documentId": {
"__rl": true,
"mode": "id",
"value": "REPLACE_WITH_YOUR_SPREADSHEET_ID"
}
},
"typeVersion": 4
},
{
"id": "84af3396-544e-41fe-a8ae-5f27f912bf77",
"name": "Calcular Resumen Mensual",
"type": "n8n-nodes-base.function",
"position": [
1140,
100
],
"parameters": {
"functionCode": "// Calculate summary for current expense\nconst currentExpense = $('Validate and Format Expense Data').first().json;\nconst currentDate = new Date(currentExpense.date);\nconst currentMonth = currentDate.getMonth() + 1;\nconst currentYear = currentDate.getFullYear();\n\n// Create response with expense details and summary\nconst summary = {\n expense_added: currentExpense,\n monthly_summary: {\n month: currentMonth,\n year: currentYear,\n category: currentExpense.category,\n amount_added: currentExpense.amount,\n date_updated: new Date().toISOString()\n },\n success: true,\n message: `Expense of $${currentExpense.amount} for ${currentExpense.category} has been recorded successfully.`\n};\n\nreturn { json: summary };"
},
"typeVersion": 1
},
{
"id": "71a8e380-dc27-4cdb-a4e7-388347a38939",
"name": "Enviar Respuesta de Éxito",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1440,
100
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "638d6c11-fcdc-4aa7-a785-6a23dad63e06",
"name": "Enviar Respuesta de Error",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
540,
260
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "026567d0-aef6-49a8-9100-22cbac0bccae",
"name": "Programación de Resumen Diario",
"type": "n8n-nodes-base.cron",
"position": [
240,
400
],
"parameters": {},
"typeVersion": 1
},
{
"id": "483b47d5-4b82-4e5b-9d79-fb1c2337d90a",
"name": "Leer Gastos de Hoy desde la Hoja",
"type": "n8n-nodes-base.googleSheets",
"position": [
540,
400
],
"parameters": {
"options": {},
"sheetName": "Expenses",
"documentId": {
"__rl": true,
"mode": "id",
"value": "REPLACE_WITH_YOUR_SPREADSHEET_ID"
}
},
"typeVersion": 4
},
{
"id": "f166a60d-06f0-4852-88e2-c4a05fbf39c9",
"name": "Calcular Total Diario",
"type": "n8n-nodes-base.function",
"position": [
840,
400
],
"parameters": {
"functionCode": "// Filter and calculate today's expenses\nconst today = new Date().toISOString().split('T')[0];\nconst allExpenses = $input.all()[0].json || [];\n\n// Filter expenses for today\nconst todayExpenses = allExpenses.filter(expense => {\n return expense.date === today;\n});\n\n// Calculate total and by category\nconst categoryTotals = {};\nlet totalToday = 0;\n\ntodayExpenses.forEach(expense => {\n const amount = parseFloat(expense.amount || 0);\n totalToday += amount;\n \n if (!categoryTotals[expense.category]) {\n categoryTotals[expense.category] = 0;\n }\n categoryTotals[expense.category] += amount;\n});\n\nreturn {\n json: {\n date: today,\n total_expenses: Math.round(totalToday * 100) / 100,\n expense_count: todayExpenses.length,\n category_breakdown: categoryTotals,\n expenses: todayExpenses\n }\n};"
},
"typeVersion": 1
},
{
"id": "b395295d-2f98-41cf-9ea3-37aa8ba09e83",
"name": "Explicación del Flujo Principal",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
-100
],
"parameters": {
"color": 4,
"width": 450,
"height": 1180,
"content": "# 💰 Personal Expense Tracker API\n\n## What This Workflow Does\nProvides a complete expense tracking system with webhook API for adding expenses and automatic Google Sheets storage with daily summaries.\n\n## How It Works\n1. **API Endpoint**: Receives expenses via POST webhook\n2. **Data Validation**: Ensures proper format and categories\n3. **Google Sheets Storage**: Automatically saves to spreadsheet\n4. **Daily Reports**: Sends summary at 8 PM daily\n5. **Real-time Responses**: Returns success/error immediately\n\n## API Usage\nSend POST to: `/webhook/add-expense`\n```json\n{\n \"amount\": 25.50,\n \"category\": \"Food\",\n \"description\": \"Lunch at cafe\",\n \"payment_method\": \"Credit Card\"\n}\n```\n\n## Categories\n• Food • Transport • Shopping • Bills\n• Entertainment • Health • Other\n\n## Setup Required\n1. Create Google Sheets with 'Expenses' sheet\n2. Headers: Date | Category | Description | Amount | Payment Method\n3. Replace SPREADSHEET_ID in nodes\n4. Connect Google Sheets OAuth2\n5. Activate workflow\n\n## Perfect For\n✅ Personal finance tracking\n✅ Mobile app integration\n✅ Family expense sharing\n✅ Small business expense logging\n\n**Includes automatic validation, error handling, and daily summaries.**"
},
"typeVersion": 1
},
{
"id": "49605945-3d4d-497c-83f9-2518ebc4e1e9",
"name": "Paso 1 - Entrada API",
"type": "n8n-nodes-base.stickyNote",
"position": [
200,
-220
],
"parameters": {
"color": 7,
"width": 300,
"height": 280,
"content": "## Step 1: API Input\n\n**Webhook** receives expense data via POST request\n\n**Endpoint**: `/webhook/add-expense`\n**Method**: POST\n**Format**: JSON\n\n*Perfect for mobile apps, web forms, or direct API calls*"
},
"typeVersion": 1
},
{
"id": "c02af8e8-6b84-4226-81cb-558bda710a91",
"name": "Paso 2 - Validación de Datos",
"type": "n8n-nodes-base.stickyNote",
"position": [
500,
-200
],
"parameters": {
"color": 7,
"width": 300,
"height": 260,
"content": "## Step 2: Data Validation\n\n**Function Node** validates and cleans data:\n• Checks amount > 0\n• Validates categories\n• Sets defaults for missing fields\n• Formats numbers properly\n\n*Ensures data consistency*"
},
"typeVersion": 1
},
{
"id": "0ab3f049-da8f-48f0-9715-3fd5382310b8",
"name": "Paso 3 - Almacenamiento en Google Sheets",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
-220
],
"parameters": {
"color": 7,
"width": 300,
"height": 280,
"content": "## Step 3: Google Sheets Storage\n\n**Google Sheets Node** appends expense to spreadsheet\n\n**Sheet**: 'Expenses'\n**Columns**: Date | Category | Description | Amount | Payment Method\n\n*Your permanent expense database*"
},
"typeVersion": 1
},
{
"id": "f68eeb78-bf5c-43e6-8ac2-20745b3aa54f",
"name": "Paso 4 - Respuesta API",
"type": "n8n-nodes-base.stickyNote",
"position": [
1140,
-200
],
"parameters": {
"color": 7,
"width": 300,
"height": 260,
"content": "## Step 4: API Response\n\n**Response Nodes** return JSON with:\n✅ Success: Expense details + confirmation\n❌ Error: Validation errors + field requirements\n\n*Immediate feedback for calling applications*"
},
"typeVersion": 1
},
{
"id": "d1a9d5fa-b4d8-492f-b3ed-9d8789194da3",
"name": "Automatización de Resumen Diario",
"type": "n8n-nodes-base.stickyNote",
"position": [
1120,
280
],
"parameters": {
"color": 6,
"width": 500,
"height": 250,
"content": "## 📊 Automated Daily Summary\n\n**Cron Trigger** runs daily at 8:00 PM to:\n• Read all today's expenses from Google Sheets\n• Calculate total spending and category breakdown\n• Generate summary report\n\n**Perfect for**: Evening expense review, budget tracking, spending pattern analysis\n\n*Stay informed about your daily spending habits automatically*"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "aedb5fd0-8999-486c-af50-b440d70e1926",
"connections": {
"0dc9105c-6579-4bde-b831-b993ac6e1a54": {
"main": [
[
{
"node": "17662aeb-97d6-468e-b1d1-2b82a44dfbb9",
"type": "main",
"index": 0
}
]
]
},
"026567d0-aef6-49a8-9100-22cbac0bccae": {
"main": [
[
{
"node": "483b47d5-4b82-4e5b-9d79-fb1c2337d90a",
"type": "main",
"index": 0
}
]
]
},
"84af3396-544e-41fe-a8ae-5f27f912bf77": {
"main": [
[
{
"node": "71a8e380-dc27-4cdb-a4e7-388347a38939",
"type": "main",
"index": 0
}
]
]
},
"0a4044a1-f23e-4c5a-9383-425f0fb5cf9e": {
"main": [
[
{
"node": "84af3396-544e-41fe-a8ae-5f27f912bf77",
"type": "main",
"index": 0
}
]
]
},
"483b47d5-4b82-4e5b-9d79-fb1c2337d90a": {
"main": [
[
{
"node": "f166a60d-06f0-4852-88e2-c4a05fbf39c9",
"type": "main",
"index": 0
}
]
]
},
"17662aeb-97d6-468e-b1d1-2b82a44dfbb9": {
"main": [
[
{
"node": "0a4044a1-f23e-4c5a-9383-425f0fb5cf9e",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Intermedio - Productividad personal
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Solido AI
@solidoaiCompartir este flujo de trabajo