Automating Expense Alerts with n8n

Have you ever been surprised by a fixed expense that you totally forgot about?
You know — that gym annual fee, insurance renewal, or car inspection that sneaks up on you right after payday?

That used to happen to me more often than I’d like to admit.
So, I decided to fix it once and for all — with automation.


🧠 The Idea

I wanted to build an automation that reminds me at the start of each month about all the scheduled expenses I should expect — even the ones that don’t happen monthly.

Think of it like a personal financial assistant that checks your expense schedule, summarizes what’s coming, and sends you a friendly message on Telegram.

The goal: Never again be surprised by an unexpected debit.

🧩 The Tools

Here’s what I used:

  • n8n – my automation platform of choice.
  • Google Sheets – a simple and flexible way to store expense data.
  • Google Gemini – for generating a clean, readable summary message.
  • Telegram – to receive the notification directly on my phone.

💡 The Flow at a Glance

Here’s the overview of the workflow:

  1. Trigger: n8n runs once a month (on the 1st day).
  2. Load Data: Fetch rows from a Google Sheet that lists my expenses.
  3. Filter: Keep only the rows that have valid information (description, amount, due date).
  4. Process with Gemini: Send the filtered list to Gemini and ask it to generate a short, human-friendly summary of upcoming expenses.
  5. Send Notification: Post the message to my Telegram account.

📊 The Data (Google Sheet)

To keep things flexible, I used a simple Google Sheet with the following columns (example data):

ExpenseAmount (€)FrequencyMonthNotes
Gym30Monthly
Car Insurance350YearlyOctoberDue on 15th
Netflix10Monthly
Road Tax56YearlyMarchPaid online

You can adjust this schema to your needs — for example, add payment method, category, or next due date.

⚙️ Implementation Details

Step 1 – Google Sheets Node
The workflow starts by pulling all rows from the Google Sheet.

Step 2 – Filter Node
Remove any blank rows or ones missing a description or amount.

Step 3 – Gemini Node
This is where the magic happens.
I send the filtered data to Google Gemini, asking it to:

“Summarize the following expenses for this month in a friendly message, including the total amount and the due dates.”

Example of a prompt (in n8n’s Gemini node):

System: You are a financial assistant that summarizes expenses.
User: Here’s my list of upcoming expenses for {{ $json.month }}. Please create a short, human-friendly summary in Portuguese.
Data: {{ $json.expenses }}

Step 4 – Telegram Node
Finally, I send the generated message to my Telegram account.
The result looks like this:

📱 The Result

Every month, I get a message like this (Portuguese):

🗓️ Hoje é dia 1 de outubro.
Tens 3 despesas programadas para este mês:
• Seguro do Carro (€350) – vence a 15 de outubro
• Ginásio (€30) – mensal
• Netflix (€10) – mensal

💰 Total estimado: €390

Por favor, certifique-se de que tem estes valores acautelados para evitar surpresas. Se precisar de rever o seu orçamento ou discutir estratégias para estas despesas, estou à disposição!

Isn’t this awesome?

It feels like having a small finance assistant keeping you informed.


🧾 Final Thoughts

This small project reminds me why I love automation:
You can turn something annoying and forgettable into a smart, proactive system that works quietly in the background.

If you use n8n and Gemini, try adapting this idea — you’ll probably end up improving it even more.