Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

Telegram till Google Sheets: utgifter loggas handsfree

Rickard Andersson Partner, Nodenordic.se

Du skulle bara logga den där kaffekostnaden. Sen hände dagen. När du väl kommer ihåg det är kvittot borta, beloppet är oklart och din “budget” är mest en känsla.

Grundare märker det när månadsbokslutet närmar sig. Marknadsförare märker det när utlägg drar ut på tiden. Och om du driver ett litet team känner du redan smärtan i att jaga folk för “bara en utgift till”. Den här automatiseringen för Telegram Sheets expenses löser det.

Du skickar ett snabbt Telegram-meddelande (eller en röstanteckning, eller en kvittobild). Flödet gör om det till korrekt formaterade rader i Google Sheets, uppdaterar budgetar och skickar till och med en diskret daglig sammanfattning när du slutar logga en stund. Så här fungerar det och vad du får ut av det.

Så fungerar den här automatiseringen

Hela n8n-flödet, från trigger till slutresultat:

n8n Workflow Template: Telegram till Google Sheets: utgifter loggas handsfree

Problemet: utgiftsspårning dör i datainmatningen

De flesta utgiftsappar misslyckas av en tråkig anledning: du måste öppna dem. Låsa upp mobilen, hitta appen, vänta på att den laddar, välja kategori, skriva belopp, välja valuta, spara. Det är inte “svårt”, bara tillräckligt störigt för att småköp inte blir loggade. De småköpen blir snabbt mycket, och den större kostnaden är mental. Du går runt med ett konstant “jag borde spåra det här”-dåligt samvete, och sen saknar ditt kalkylark halva historien när du faktiskt behöver den.

Det växer snabbt. Här är var det faller isär i verkligheten.

  • Du glömmer de små sakerna (parkering, kaffe, dricks), och de är oftast de vanligaste.
  • Manuell kategorisering tar längre tid än den borde, så du hoppar över den eller gissar, vilket gör rapporter värdelösa senare.
  • Kvittobilder hamnar i kamerarullen utan struktur, så du kan inte söka, filtrera eller sammanfatta dem.
  • Budgetuppföljning blir en panikinsats en gång i månaden i stället för en lugn daglig vana.

Lösningen: logga utgifter i Telegram, skriv automatiskt till Google Sheets

Det här n8n-flödet gör Telegram till din snabbaste kanal för utgiftsinmatning. Du skriver till en Telegram-bot med det du har i stunden: vanlig text (“Lunch 12, Taxi 8”), en röstanteckning när du kör, eller en bild på ett kvitto. Flödet känner av vad du skickade och använder sedan en AI-modell för att extrahera handlare/vara, belopp, valuta och en rimlig kategori. Om du listar flera poster i ett meddelande delar den smart upp dem till separata utgifter. Till sist lägger den till felfria, strukturerade rader i ditt Google Sheet, där datan är helt din och redo för filtrering, pivottabeller eller en dashboard.

Det börjar med ett Telegram-meddelande och routar efter indatatyp (text, röst, foto). AI hanterar extraktion och valutadetektering, sedan normaliserar n8n resultatet och skriver det till Google Sheets. Efter det väntar ett “tyst” rapportlager i cirka 30 minuter av inaktivitet innan det skickar en snygg sammanfattning, så att du inte blir spammad efter varje inmatning.

Det här får du: automatisering vs. resultat

Exempel: så här ser det ut

Säg att du loggar 6 utgifter per dag. I en vanlig utgiftsapp tar även en “snabb” registrering kanske 1 minut när du låser upp, öppnar, väljer kategori och sparar, så det blir cirka 6 minuter dagligen (och i praktiken hoppar du över några). Med det här flödet kan du skicka “Kaffe 5, Metro 3” i ett Telegram-meddelande på ungefär 10 sekunder, och flödet delar upp det i två rader. Lägg till en kvittobild som tar ytterligare 10 sekunder. Du är klar på under en minut, och ditt ark håller sig korrekt utan att du behöver tänka på det.

Det du behöver

  • n8n-instans (testa n8n Cloud gratis)
  • Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
  • Telegram för att skicka text, röstanteckningar och foton
  • Google Sheets för att lagra din utgiftsjournal
  • Gemini API-nyckel (hämta den via Google AI Studio / Google Cloud)

Kunskapsnivå: Mellannivå. Du kopplar konton, kopierar en Sheet-mall och redigerar några konfigurationsfält i n8n.

Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).

Så fungerar det

Ett Telegram-meddelande triggar allt. När din bot tar emot ett meddelande laddar flödet dina användarinställningar (spreadsheet-ID, standardvaluta, lokal formatering) och avgör om det är en utgiftslogg eller ett kommando som “/add budget 500”.

Flödet identifierar indatatypen. Text skickas direkt till AI-extraktion. Röstanteckningar hämtas först från Telegram och analyseras sedan. Kvittobilder går genom “välj bästa foto”, normalisering och därefter bildanalys (OCR-liknande tolkning).

AI extraherar strukturerade fält du faktiskt kan använda. Utdata normaliseras och tolkas till konsekvent JSON, sedan validerar flödet att det hittade minst en utgift. Om du skrev flera poster delar det upp dem i separata rader så att ditt ark håller sig prydligt.

Google Sheets uppdateras och du får en tydlig bekräftelse. Utgifter läggs till som rader, budgetar kan uppdateras i en separat flik och Telegram svarar med lyckat resultat (eller ett hjälpsamt felmeddelande). En rapport-token + väntelogik säkerställer att du får en sammanfattning efter cirka 30 minuters inaktivitet, inte ständiga ping.

Du kan enkelt justera kategorierna så att de matchar din kontoplan utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementering

Steg 1: Konfigurera Telegram-triggern

Det här arbetsflödet startar när en användare skickar ett Telegram-meddelande (text, foto eller röst) till er bot.

  1. Lägg till och öppna Telegram Incoming Trigger.
  2. Inloggningsuppgifter krävs: Anslut era telegramApi-inloggningsuppgifter.
  3. Låt Updates vara inställt på message för att fånga text-, foto- och röstinmatningar.
  4. Verifiera att triggern är kopplad till User Config Settings enligt körflödet.
Om Telegram-meddelanden inte kommer fram, kontrollera igen er bot-token och webhook-konfigurationen i noden Telegram Incoming Trigger.

Steg 2: Anslut Google Sheets

Arbetsflödet loggar utgifter, budgetuppdateringar och data för dagliga rapporter till Google Sheets.

  1. Öppna User Config Settings och ange era sheet-ID:n: spreadsheet_id till Input your Spread Sheet ID here (ersätt med ert faktiska ID), sheet_gid_log till gid=0 (eller ert loggblads-ID), sheet_gid_dashboard till Input your Sheet "Dashboard" ID here och sheet_gid_budget till Input your Sheet "Budget Topups" ID here.
  2. I Fetch Sheet Rows for Dedup, bekräfta att Document är {{ $('User Config Settings').item.json.spreadsheet_id }} och att Sheet är {{ $('User Config Settings').item.json.sheet_gid_log }}.
  3. I Append Rows to Sheet, verifiera kolumnmappningar som Date{{ $json.date }} och Update_ID{{ $json.update_id }}.
  4. I Fetch Daily Report Range, ställ in Range till D1:I2.
  5. I Update Budget Sheet Row, låt operation vara append och verifiera att sheetName använder {{ Number($('User Config Settings').item.json.sheet_gid_budget) }}.
  6. Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter till alla Google Sheets-noder (inklusive Fetch Sheet Rows for Dedup, Append Rows to Sheet, Fetch Daily Report Range och Update Budget Sheet Row).
⚠️ Vanlig fallgrop: Se till att era GID-värden är faktiska blad-ID:n (numeriska) och inte fliknamn. Felaktiga GID:n leder till tomma läsningar eller misslyckade append-operationer.

Steg 3: Konfigurera routning och deduplicering

Inkommande meddelanden dedupliceras och routas efter kommando och innehållstyp.

  1. I Command Routing Switch, behåll regex-kontrollerna för budgetkommandon: /^\/add(?:@\w+)?\s+budget\b/i.test(($json.message?.text || '').trim()).
  2. Bekräfta att Fetch Sheet Rows for Dedup filtrerar på Update_ID med {{ $json.update_id }}, och sedan går vidare till Duplicate Check Branch.
  3. I Duplicate Check Branch, säkerställ att villkoret kontrollerar att {{ $json.Message_ID }} inte är tomt så att dubbletter blockeras.
  4. Verifiera att Script Restore Telegram Data återställer original-JSON från Telegram så att Route by Input Type kan inspektera message.voice, message.photo och message.text.
  5. Bekräfta att Route by Input Type skickar vidare till Assign Voice Context, Assign Photo Context eller Assign Text Context baserat på meddelandetyp.

Steg 4: Sätt upp AI-bearbetning (Gemini text, bild, ljud)

Gemini-noder extraherar strukturerad utgiftsdata från text, kvittofoton och röstanteckningar.

  1. I Assign Text Context, säkerställ att raw_input är {{ $json.message.text }} och att now använder {{ $now.setZone('Asia/Ho_Chi_Minh').toFormat('yyyy-LL-dd HH:mm:ss') }}.
  2. I Assign Photo Context, behåll caption och raw_input som {{ $json.message.caption || "[photo]" }}.
  3. I Assign Voice Context, behåll file_id som {{ $json.message.voice.file_id }} och raw_input som [voice].
  4. Inloggningsuppgifter krävs: Anslut era googlePalmApi-inloggningsuppgifter i Gemini Text Extraction, Gemini Image Analysis och Gemini Audio Analysis.
  5. Verifiera att Gemini Text Extraction använder modellen models/gemini-2.5-flash och inkluderar prompten som innehåller {{ $json.now }} och {{ $('User Config Settings').item.json.currency_code }}.
  6. Säkerställ att Gemini Image Analysis använder resource image, inputType binary och prompten för kvittoextraktion.
  7. Säkerställ att Gemini Audio Analysis använder resource audio, inputType binary och prompten för transkribering + extraktion.
Normaliseringsnoderna (Script Normalize Text Output, Script Normalize Image Output, Script Normalize Audio Output) standardiserar Gemini-utdata för efterföljande parsning – låt dem vara kopplade som de är.

Steg 5: Bearbeta utgifter och skriv till Sheets

Tolkade utgifter valideras, delas upp i rader och läggs till i ert loggblad, och därefter skapas en rapport-token.

  1. Behåll Script Parse Gemini JSON kopplad efter varje normaliseringsnod för att validera strikt JSON från Gemini.
  2. I Validate Expenses Present, behåll villkoret {{ ($json.expenses || []).length > 0 }}.
  3. Validate Expenses Present skickar vidare till både Script Split Expense Items och Telegram Success Reply parallellt.
  4. I Append Rows to Sheet, bekräfta att kolumnmappningarna för Item, Amount, Category och Payment_Method matchar era rubriker i bladet.
  5. Säkerställ att Script Create Report Token ligger efter Append Rows to Sheet och matar in i Report Token Table.

Steg 6: Konfigurera hantering av budgetkommandon

Budgetuppdateringar parsas från kommandot “/add budget” och skrivs till ett separat blad.

  1. Behåll Command Routing Switch kopplad till Script Parse Budget Value för grenen med budgetkommandot.
  2. I Script Parse Budget Value, låt parslogiken vara som den är och säkerställ att den använder {{ $('User Config Settings').item.json.currency_symbol }}.
  3. Verifiera att Budget Validation Check utvärderar {{ $json.ok }} som en boolean.
  4. I Update Budget Sheet Row, säkerställ att ts använder {{ new Date().toLocaleString('vi-VN', { timeZone: 'Asia/Ho_Chi_Minh' }) }}.
  5. Bekräfta att svar för lyckat resultat och fel hanteras av Telegram Budget Updated och Telegram Budget Error.

Steg 7: Schemalägg och skicka dagliga rapporter

Efter loggning av utgifter sparas en rapport-token och en fördröjd kontroll avgör om en daglig rapport ska skickas.

  1. I Report Token Table, ställ in dataTableId till ert faktiska Data Table-ID (ersätt [YOUR_ID]).
  2. Säkerställ att Report Token TableDelay Timer ligger kvar, och att Delay Timer använder amount 30 och unit minutes.
  3. Uppdatera Data Table Fetch Rows och Data Table Remove Rows så att de använder samma Data Table-ID som Report Token Table.
  4. Bekräfta att Script Verify Latest Token kontrollerar {{ $node["Delay Timer"].json.report_token }} och skickar vidare till Conditional Send Gate.
  5. När Conditional Send Gate är true, säkerställ att flödet går till Data Table Remove RowsFetch Daily Report RangeScript Build Daily ReportTelegram Send Daily Report.
⚠️ Vanlig fallgrop: Om inte alla tre Data Table-noder använder samma dataTableId kommer rapportplaneringen att misslyckas och ingen daglig rapport skickas.

Steg 8: Konfigurera Telegram-svar

Telegram-noder skickar bekräftelser, fel och rapportmeddelanden tillbaka till användaren.

  1. Inloggningsuppgifter krävs: Anslut era telegramApi-inloggningsuppgifter till alla Telegram-noder (inklusive Telegram Success Reply, Telegram Error Reply, Telegram Budget Updated, Telegram Budget Error, Telegram Fetch Voice File, Telegram Fetch Image File och Telegram Send Daily Report).
  2. I Telegram Success Reply, behåll text som {{ $json.summary_text }} och chatId som {{ $json.chat_id }}.
  3. I Telegram Error Reply, behåll text som ⚠️ Could not understand expenses in: "{{$json.raw_input}}" och chatId som {{ $('Telegram Incoming Trigger').item.json.message.chat.id }}.
  4. I Telegram Send Daily Report, behåll chatId som {{ $node["Telegram Incoming Trigger"].json.message.chat.id }}.

Steg 9: Testa och aktivera ert arbetsflöde

Kör end-to-end-tester med olika inmatningstyper och bekräfta att rätt svar, bladuppdateringar och rapportplanering fungerar.

  1. Klicka på Execute Workflow och skicka ett testmeddelande i Telegram: en textutgift som Lunch 10k, ett kvittofoto och en röstanteckning.
  2. Bekräfta att Route by Input Type routar korrekt och att Gemini-noderna producerar strukturerad JSON som passerar Validate Expenses Present.
  3. Verifiera att nya rader dyker upp i loggbladet från Append Rows to Sheet och att budgetposter läggs till i Update Budget Sheet Row när ni använder /add budget 500k.
  4. Kontrollera Telegram-svar från Telegram Success Reply, Telegram Error Reply, Telegram Budget Updated och Telegram Budget Error.
  5. Vänta 30 minuter (eller sänk tillfälligt Delay Timer till 1 minut) och bekräfta att en daglig rapport skickas av Telegram Send Daily Report när token matchar.
  6. När allt fungerar, växla arbetsflödet till Active för att möjliggöra produktionsanvändning.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Vanliga fallgropar

  • Telegram-autentiseringsuppgifter kan löpa ut eller så kan boten tappa behörigheter. Om saker slutar fungera, kontrollera din Telegram-bottoken i n8n-credentials och bekräfta att boten fortfarande är i rätt chatt.
  • Om du använder Wait-noder eller extern bearbetning (röst-/fotoanalys) varierar handläggningstiderna. Öka väntetiden om efterföljande noder misslyckas på grund av tomma svar.
  • Standardprompter i AI-noder är generiska. Lägg in din egen praxis tidigt (kategorier, regler för handlare, “vad som räknas som en utgift”), annars kommer du redigera utdata i all evighet.

Vanliga frågor

Hur lång tid tar det att sätta upp den här automatiseringen för Telegram Sheets expenses?

Cirka 45 minuter om du redan har Telegram och Google Sheets klart.

Behöver jag kunna koda för att automatisera Telegram Sheets expenses?

Nej. Du kopplar mest konton och klistrar in några ID:n från ditt Google Sheet.

Är n8n gratis att använda för det här Telegram Sheets expenses-flödet?

Ja. n8n har ett gratisalternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in Gemini API-kostnader (det är just nu gratis eller väldigt billigt för många användningsfall).

Var kan jag hosta n8n för att köra den här automatiseringen?

Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och klarar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serverhantering.

Kan jag anpassa det här Telegram Sheets expenses-flödet för olika kategorier och valutor?

Ja, och det bör du. Uppdatera standardvärden i noden “CONFIG – User Settings” (valutakod, symbol, locale) och justera AI-extraktionsprompten i Gemini text-/bild-/ljud-noderna så att den matchar din kategorilista. Vanliga justeringar är att lägga till “Kundmåltider” vs “Teammåltider”, tvinga vissa handlare till fasta kategorier och sätta en standardvaluta för otydliga belopp.

Varför misslyckas min Telegram-anslutning i det här flödet?

Oftast är det en utgången bottoken eller fel chattkontext. Kontrollera dina Telegram-credentials i n8n igen och bekräfta sedan att boten fortfarande kan ta emot meddelanden från chatten du testar i. Om röst-/fotostegen fallerar kan det också vara att Telegrams filåtkomst inte returnerar korrekt, så börja med att titta på Telegram-noderna för “fetch file”. Och ja, rate limits händer, särskilt om du skickar en massa foton på en gång.

Hur många utgifter klarar den här automatiseringen för Telegram Sheets expenses?

Många. På n8n Cloud Starter begränsas du av månatliga körningar, medan egen drift främst begränsas av din server och API-kvoter. I praktiken fungerar det här flödet bra för privat bruk och små team som loggar dussintals utgifter per dag, även med kvittobilder.

Är den här automatiseringen för Telegram Sheets expenses bättre än att använda Zapier eller Make?

Ofta, ja. Det här flödet är inte bara “skicka ett meddelande till ett ark”. Det routar olika indatatyper, anropar AI för extraktion, delar upp flera poster, avduplicerar mot befintliga rader och kör en debounce-liknande daglig rapport med hjälp av en datatabell och en wait-timer. Den typen av logik går att göra i Zapier eller Make, men det blir ofta dyrt och pilligt så fort du lägger till förgreningar och lagring. Om du bara behöver ett enkelt tvåstegsflöde “Telegram-text → en rad” kan andra verktyg gå snabbare. Prata med en automationsexpert om du vill ha en rekommendation för din exakta setup.

När det här väl rullar slutar utgiftsspårning vara en “uppgift” och blir ett snabbt meddelande du knappt tänker på. Flödet sköter den repetitiva rensningen, och ditt Google Sheet är alltid redo för riktiga beslut.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Launch login modal Launch register modal