secture & code

Cómo automaticé mis gastos personales con n8n, self-hosted en mi Raspberry Pi

Llevaba un tiempo con curiosidad por probar n8n. Había visto muchos ejemplos de automatización y workflows, pero quería evitar el típico «voy a montar algo para probar la herramienta y después no volveré a utilizarlo».

Así que decidí hacer algo sencillo pero que realmente pudiera aportarme: automatizar la gestión de mis gastos personales.

El objetivo era bastante simple: dejar de introducir manualmente los movimientos de mi cuenta bancaria en una hoja de cálculo. Lo que antes me llevaba varios minutos cada vez que revisaba el banco, ahora es enviar una captura y recibir una notificación a los pocos segundos.

Y, de paso, aprender a crear automatizaciones construyendo algo que realmente utilizase.

¿Por qué n8n?

La primera decisión fue utilizar n8n en modalidad self-hosted.

Ya tenía una Raspberry Pi funcionando como pequeño servidor doméstico y utilizo Docker para gestionar mis servicios mediante Portainer, por lo que tenía bastante sentido aprovechar esa infraestructura en lugar de contratar una instancia externa.

Esto también me permitía experimentar con este tipo de automatizaciones sin añadir otro servicio a mi infraestructura y, sobre todo, tener control sobre dónde se ejecutan mis workflows y dónde se almacenan los datos.

El objetivo no era construir un sistema especialmente complejo. Quería aprender haciendo.

El problema: registrar los gastos manualmente

Mi proceso anterior era bastante sencillo:

  • Entrar en la aplicación o web del banco.
  • Consultar los movimientos.
  • Apuntar manualmente los gastos en un Google Sheet.
  • Clasificarlos según el tipo de gasto.

No es una tarea especialmente complicada, pero sí repetitiva.

Y precisamente este tipo de tareas son las que me parecen interesantes para experimentar con automatización.

La idea que me planteé fue:

¿Por qué no hacer una captura de los movimientos y dejar que la plataforma se encargue del resto?

El resultado

El workflow que he terminado construyendo funciona de una forma bastante sencilla desde el punto de vista del usuario.

Hago una o varias capturas de los movimientos de mi cuenta bancaria y las envío a un bot de Telegram.

A partir de ahí:

workflow de automatización de gastos personales con n8n

El resultado es que ya no tengo que introducir los movimientos manualmente uno por uno.

Telegram como punto de entrada

Elegí Telegram como interfaz porque me permite utilizar el workflow desde prácticamente cualquier sitio sin tener que desarrollar una aplicación específica.

Tengo un bot creado específicamente para estas automatizaciones.

Cuando quiero registrar movimientos, simplemente envío la captura al bot.

También puedo enviar varias capturas si necesito cubrir un periodo más amplio.

El workflow recibe las imágenes y continúa con el procesamiento.

Esta parte fue también una de las primeras cosas que tuve que aprender: cómo crear y conectar un bot de Telegram con el workflow.

Como es un bot personal, la primera pregunta que me hice fue: ¿qué pasa si alguien más le escribe? Así que antes de procesar nada, el workflow comprueba que el mensaje venga de mi propio chat de Telegram; cualquier otro remitente se descarta sin llegar a consumir Gemini ni a tocar la hoja de cálculo.

Gemini como capa de interpretación

Una de las partes más interesantes del workflow es el uso de Gemini.

Estoy utilizando Gemini Flash aprovechando su capa gratuita para procesar las capturas.

El modelo recibe la imagen y se encarga de interpretar los movimientos que aparecen en ella, incluyendo la identificación de si se trata de un gasto o un ingreso.

Aquí descubrí una de las partes que más me interesaba experimentar: el prompt importa mucho más de lo que inicialmente pensaba.

La primera versión del prompt no producía exactamente la información que necesitaba para el resto del workflow.

Tuve que ir refinándolo para conseguir que la respuesta fuese suficientemente consistente y que el resto del workflow pudiera trabajar posteriormente con ella.

Es una de las cosas que más me ha gustado del proceso: no se trata simplemente de añadir un nodo de IA y esperar que todo funcione. Hay que entender qué información necesita el siguiente paso y diseñar el prompt teniendo eso en cuenta.

El parser: adaptar la IA a mi estructura de datos

Después de Gemini tengo un parser encargado de transformar la información obtenida al formato que realmente necesita mi Google Sheet.

Esto es importante porque mi hoja ya existía y tiene una estructura determinada, incluyendo selectores para los tipos de gasto.

Por tanto, no quería simplemente guardar el texto que devolviese Gemini.

Necesitaba adaptar esos datos a mi modelo de datos.

Podríamos resumirlo así:

Captura de pantalla 2026 08 11 a las 8.50.09

De esta forma, cada componente tiene una responsabilidad concreta:

  • Gemini: interpretar la captura.
  • Parser: adaptar la información.
  • n8n: orquestar el proceso.
  • Google Sheets: almacenar los datos.

Evitando duplicados

Aquí apareció otro pequeño problema que no quería dejar de resolver.

Una captura puede contener movimientos que ya había registrado anteriormente.

Por ejemplo, si hoy proceso los últimos movimientos del banco y mañana vuelvo a enviar una captura que contiene parte de esos mismos movimientos, no quiero acabar con registros duplicados.

Así que, después de leer el contenido actual del Google Sheet, utilizo un nodo de código para comprobar cada movimiento antes de insertarlo.

La comprobación utiliza tres datos:

  • concepto
  • cantidad
  • fecha

Si un movimiento con esos datos ya existe, el workflow lo descarta.

Si no existe, lo añade.

Captura de pantalla 2026 08 11 a las 8.50.25

Esto hace que pueda enviar capturas sin tener que preocuparme demasiado por si contienen movimientos que ya había procesado.

La respuesta de Telegram

Una vez termina el workflow, la automatización vuelve a utilizar el mismo bot de Telegram para informarme del resultado.

Si no encuentra ningún movimiento nuevo:

Captura de pantalla 2026 08 11 a las 8.50.38

De esta manera no tengo que entrar en Google Sheets para comprobar si el proceso ha funcionado.

La propia automatización me informa de lo que ha ocurrido.

Lo que he aprendido durante el proceso

Aunque el workflow final parece relativamente sencillo, construirlo me ha servido para aprender bastantes cosas.

Por un lado, he aprendido a trabajar con las APIs y credenciales de Google Cloud para poder conectar servicios como Google Sheets.

También he aprendido a crear y conectar bots de Telegram y a utilizar Telegram como interfaz para interactuar con mis workflows, incluyendo restringir quién puede usarlos.

Otra parte importante ha sido trabajar con Gemini y, especialmente, aprender a refinar un prompt para conseguir una salida que realmente pueda utilizar el resto del workflow.

Y, probablemente, la parte más interesante: aprender a pensar en el workflow como un conjunto de pasos independientes que tienen que encajar entre sí.

No basta con que Gemini interprete correctamente una imagen. Su salida tiene que ser útil para el parser, el parser tiene que producir información válida para Google Sheets y, antes de guardar nada, hay que comprobar que no estamos duplicando información.

Es decir, el reto no está únicamente en hacer que cada pieza funcione, sino en conseguir que todas las piezas funcionen juntas.

What's next?

Lo interesante de haber empezado con algo tan concreto es que ahora tengo una infraestructura sobre la que puedo seguir construyendo.

Mi siguiente objetivo es convertir poco a poco el bot de Telegram en una especie de asistente personal. Por ahora tengo tres ideas concretas sobre la mesa:

  • Procesar fotos de tickets físicos y añadir esos gastos automáticamente.
  • Recibir un resumen periódico de mis gastos, sin tener que abrir el Sheet.
  • Conectar el bot con mi correo y mi calendario para recibir avisos puntuales.

No sé todavía hasta dónde terminará llegando.

Y precisamente esa es una de las cosas que me está resultando más interesante de aprender sobre automatización: no empezar pensando en construir un gran sistema, sino ir automatizando pequeñas cosas que realmente utilizo y descubrir qué puedo delegar después.

Por ahora, una captura de pantalla que antes terminaba en varios minutos de trabajo manual ahora termina en un registro actualizado y una notificación en Telegram.

Para empezar a aprender una herramienta nueva, no está mal.

Find out more at our blog

Full-Stack

Picture of David Pérez López

David Perez Lopez

I like projects to go well
Picture of David Pérez López

David Perez Lopez

I like projects to go well

We are HIRING!

What Can We Do