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

Telegram + Google Sheets – utgifter loggas och kategoriseras

Rickard Andersson Partner, Nodenordic.se

Kostnadsspårning fallerar oftast av en trist anledning. Du glömmer inte att spendera pengar – du glömmer att skriva ner det, och så slutar det med att du “kommer ikapp” en söndagskväll med en hög kvitton.

Marknadschefer som hanterar kunders utlägg känner av det. Småföretagare känner av det ännu mer. Och om du är frilansare som jonglerar verktyg är automatiserad utgiftsloggning i Telegram det första som får uppföljningen att kännas smidig i stället för irriterande.

Det här n8n-flödet gör om dina Telegram-meddelanden (text, röst, foton, PDF:er) till felfria, kategoriserade rader i Google Sheets, och låter dig sedan ställa frågor som “Hur mycket på matvaror den här månaden?” utan att bygga ett kalkylbladsmonster.

Så här fungerar automatiseringen

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

n8n Workflow Template: Telegram + Google Sheets – utgifter loggas och kategoriseras

Problemet: utgiftsspårning går sönder så fort du får mycket att göra

Du har redan intentionen att följa upp utgifter. Det som fallerar är det lilla glappet mellan “jag betalade precis” och “jag borde logga det”. Kvitton hamnar i fickan, skärmdumpar försvinner i kamerarullen och röstanteckningar stannar i huvudet tills de inte gör det. Sedan sitter du fast och måste backa fram datum, leverantörer och kategorier från röriga kontoutdrag. Ärligt talat är det värsta inte tiden. Det är den där ständiga mentala fliken som ligger öppen eftersom du vet att siffrorna inte är aktuella.

Det byggs upp snabbt. Här är var det brukar spåra ur.

  • Manuell inmatning blir ett veckogöra, så du skjuter på det och din data blir opålitlig.
  • Kvitton kommer i olika format (foton, PDF:er, skrynkligt papper), vilket gör “en process” omöjlig.
  • Kategorier glider över tid, så “Äta ute” blir “Mat”, “Måltider” och “Restauranger” samma månad.
  • Du kan inte svara snabbt på grundfrågor, eftersom totalsummor och uppdelningar kräver extra kalkylbladsjobb.

Lösningen: logga utgifter från Telegram (text, röst, kvitton)

Det här flödet ger dig en privat Telegram-bot som beter sig som en utgiftsassistent. Du skickar ett kvittofoto, en PDF-faktura, ett röstmeddelande (“Köpte kaffe för fem euro”) eller en snabb text (“50 uber”). Flödet hämtar innehållet från Telegram, omvandlar det till användbar text (OCR för bilder och dokument, transkribering för ljud) och skickar det till en AI-agent som extraherar det viktiga: belopp, datum, leverantör, valuta och kategori. Sedan sparar det det strukturerade resultatet i din utgiftslagring och skriver en felfri, konsekvent logg i Google Sheets så att du kan filtrera, sortera och sammanfatta när du vill.

Det börjar med en Telegram-meddelandetrigger. Därifrån routar n8n meddelandetypen, kör OCR eller transkribering vid behov och skickar ett standardiserat payload till AI-routern. Till sist svarar boten i Telegram med en bekräftelse i stil med “Tillagd: 45,50 EUR – Matvaror (Lidl)”, och ditt ark hålls uppdaterat i bakgrunden.

Det du får: automatisering vs. resultat

Exempel: så här ser det ut

Säg att du loggar 5 utgifter per dag. Manuellt tar det oftast runt 5 minuter per utgift när du ska hitta kvittot, komma ihåg kategorin och skriva in det, så du landar på ungefär 25 minuter per dag (och mer när du missar en dag). Med det här flödet vidarebefordrar du ett kvittofoto eller en röstnotis i Telegram på cirka 1 minut, och sen är du klar. AI-bearbetningen kör medan du går vidare, och ditt Google-ark är redan uppdaterat inför månadens totalsummor.

Det du behöver

  • n8n-instans (testa n8n Cloud gratis)
  • Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
  • Telegram-bot för att ta emot meddelanden och svara.
  • Google Sheets för att lagra en felfri utgiftsjournal.
  • OpenRouter API-nyckel (hämta den i din OpenRouter-dashboard).

Kunskapsnivå: Medel. Du kopplar konton, klistrar in API-nycklar och justerar ett par AI-prompter för kategorier och valuta.

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

Så fungerar det

Ett Telegram-meddelande kommer in. Flödet triggar på vilket meddelande som helst till din bot och fångar kontext (chatt-ID, bilagor, meddelandetyp) så att svaren hamnar rätt.

Sekretesslås och routing sker direkt. Vid första användningen “claimar” boten en enda användare och sparar preferenser. Efter det avvisas obehöriga chattar, vilket håller din utgiftsdata privat.

Röst, kvittofoton och PDF:er konverteras till text. Ljudfiler hämtas från Telegram och transkriberas. Dokument och bilder hämtas och körs genom OCR så att AI:n kan läsa totalsummor, datum och leverantörsnamn.

AI-agenten extraherar och kategoriserar, och sparar sedan resultatet. Routern skickar det standardiserade payloadet till utgiftsassistenten, som validerar strukturen, tillämpar kategorier, räknar fram statistik när du frågar och skriver utdata till Google Sheets och Telegram.

Du kan enkelt ändra standardvaluta och kategorilista så att det matchar din bokföring. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementation

Steg 1: Konfigurera Telegram-triggern

Sätt upp arbetsflödets startpunkt för att fånga Telegram-meddelanden och bilagor.

  1. Lägg till och öppna Telegram Intake Trigger.
  2. Ställ in Updatesmessage.
  3. I Additional Fields aktiverar ni Download och ställer in Image SizeextraLarge.
  4. Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter.

Steg 2: Anslut appinställningar och behörighet

Fånga språkkontext, hämta appinställningar och kontrollera vem som kan använda boten.

  1. Öppna Capture Message Context och sätt tilldelningen document_language till {{ $json.message.from.language_code ?? "en" }} med Include Other Fields aktiverat.
  2. Öppna Fetch App Preferences och ställ in URL till https://api.ainoflow.io/api/v1/storage/json/config/expense-app-settings.
  3. Autentiseringsuppgifter krävs: Anslut era httpBearerAuth-autentiseringsuppgifter i Fetch App Preferences.
  4. Konfigurera Authorize Chat Access för att jämföra {{ $('Telegram Intake Trigger').item.json.message.chat.id }} med {{ $json.chat_id ?? $('Telegram Intake Trigger').item.json.message.chat.id }}, och tillåt statusen 404 för förstagångssetup.
  5. Säkerställ att Fetch App Preferences matar ut till både Detect First Use och Authorize Chat Access parallellt.
  6. I Detect First Use behåller ni villkoret som kontrollerar att {{ $json.error.status }} är lika med 404, och kopplar sedan vidare till Store App Preferences.
  7. Öppna Store App Preferences och mappa fält: {{ $('Telegram Intake Trigger').item.json.message.chat.id }}, {{ $('Telegram Intake Trigger').item.json.message.date }} och {{ $('Telegram Intake Trigger').item.json.message.chat.first_name }}.
  8. Autentiseringsuppgifter krävs: Anslut era httpBearerAuth-autentiseringsuppgifter i Store App Preferences.
Tips: Arbetsflödet använder parallell routing via Fetch App PreferencesAuthorize Chat Access för att tillåta nya användare samtidigt som obehörig åtkomst förhindras.

Steg 3: Konfigurera meddelanderouting och input-mappning

Routa Telegram-meddelanden till flöden för text, röst, dokument och foto och normalisera allt innehåll till ett gemensamt input-format för agenten.

  1. Öppna Route Message Type och behåll utgångarna för /start, text, röst, dokument och foto med uttryck som {{ $('Telegram Intake Trigger').item.json.message.text }} och {{ $('Telegram Intake Trigger').item.json.message.voice.file_id }}.
  2. Authorize Chat Access matar ut till Route Message Type, Post Processing Notice och Fetch Processing State parallellt.
  3. Konfigurera Send Welcome Note att använda Chat ID {{ $('Telegram Intake Trigger').item.json.message.chat.id }} och den angivna välkomsttexten.
  4. Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter i Send Welcome Note.
  5. För textmeddelanden öppnar ni Map Text Payload och mappar text till {{ $('Telegram Intake Trigger').item.json.message.text }} och chat_id till {{ $('Telegram Intake Trigger').item.json.message.chat.id }}.
  6. För röstmeddelanden konfigurerar ni Retrieve Voice File med {{ $('Telegram Intake Trigger').item.json.message.voice.file_id }}, och därefter Transcribe Voice med fältet languages satt till {{ $('Capture Message Context').item.json.document_language }}.
  7. Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter i Retrieve Voice File och httpBearerAuth-autentiseringsuppgifter i Transcribe Voice.
  8. Mappa transkriptioner i Map Voice Payload med {{ $json.content[0].text }} och {{ $('Telegram Intake Trigger').item.json.message.chat.id }}.
  9. För dokument och foton konfigurerar ni Retrieve Document File och Retrieve Photo File med fil-id:n från triggern, och kör sedan Extract Document Text och Extract Image Text med multipart-form-data och {{ $('Capture Message Context').item.json.document_language }}.
  10. Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter till noderna för filhämtning och httpBearerAuth-autentiseringsuppgifter till extraktionsnoderna.
  11. Normalisera alla dokument-/foto-utdata i Map File Payload och Map Image Payload med den kombinerade textmallen: User uploaded document / photo: {{ $('Capture Message Context').item.json.message.caption ?? "" }} {{ $json.content ? $json.content[0].text : "The uploaded file does not contain text content." }}.
  12. Avslutningsvis öppnar ni Prepare Agent Input och mappar text till {{ $json.text }} och chat_id till {{ $json.chat_id }}.
⚠️ Vanlig fallgrop: Om Retrieve Photo File saknas kommer OCR aldrig att köras och dokumentmeddelanden når inte Prepare Agent Input.

Steg 4: Sätt upp ai-routing och verktyg

Konfigurera den primära ai-routern och dess specialiserade verktyg för att tolka och lagra utgifter.

  1. Öppna Primary AI Router och ställ in Text till {{ $('Prepare Agent Input').item.json.text }} med den angivna systemprompten.
  2. Koppla Main Memory Buffer till Primary AI Router med Session Key agent_{{ $('Prepare Agent Input').item.json.chat_id }} och Context Window Length 30.
  3. Koppla Reflection Tool som ett verktyg för Primary AI Router.
  4. Anslut OpenAI Model som språkmodell med Model satt till openai/gpt-4o.
  5. Autentiseringsuppgifter krävs: Anslut era openRouterApi-autentiseringsuppgifter i OpenAI Model.
  6. Öppna Expense Specialist och behåll verktygsbeskrivningen och systemmeddelandet oförändrade för lagringsregler och kategorier.
  7. Koppla Assistant Memory Buffer till Expense Specialist med Session Key expense_assitant_{{ $('Prepare Agent Input').item.json.chat_id }}.
  8. Anslut Sonnet Model som språkmodell för Expense Specialist med Model anthropic/claude-sonnet-4.5.
  9. Autentiseringsuppgifter krävs: Anslut era openRouterApi-autentiseringsuppgifter i Sonnet Model.
  10. Koppla Reasoning Tool, JSON Storage Tool och Math Helper till Expense Specialist som verktyg.
  11. Autentiseringsuppgifter krävs: Anslut era httpBearerAuth-autentiseringsuppgifter i JSON Storage Tool.
Tips: Main Memory Buffer, Assistant Memory Buffer, Reflection Tool, Reasoning Tool, JSON Storage Tool och Math Helper är ai-undernoder. Lägg till autentiseringsuppgifter på deras överordnade noder (Primary AI Router eller Expense Specialist), inte på undernoderna.

Steg 5: Konfigurera bearbetningsnotiser och städning av status

Använd Telegram-notiser och http-lagring för att visa bearbetningsstatus och ta bort temporära meddelanden när allt är klart.

  1. Öppna Post Processing Notice och ställ in Chat ID till {{ $('Telegram Intake Trigger').item.json.message.chat.id }}.
  2. Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter i Post Processing Notice.
  3. Öppna Record Processing State och ställ in URL till https://api.ainoflow.io/api/v1/storage/json/expense-app-processing/{{ $('Telegram Intake Trigger').item.json.update_id }}.
  4. Mappa Body Parameters till {{ $json.result.chat.id }} och {{ $json.result.message_id }}, och ställ in expiresMs till 3600000.
  5. Autentiseringsuppgifter krävs: Anslut era httpBearerAuth-autentiseringsuppgifter i Record Processing State.
  6. Öppna Fetch Processing State med samma url-mönster och koppla till Check State Presence, som sedan tar bort statusen via Remove Processing Note.
  7. Autentiseringsuppgifter krävs: Anslut era httpBearerAuth-autentiseringsuppgifter i Fetch Processing State och telegramApi-autentiseringsuppgifter i Remove Processing Note.
  8. Behåll Send Unauthorized Alert kopplad till den falska vägen från Authorize Chat Access med meddelandet You are not authorized to use this bot..
  9. Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter i Send Unauthorized Alert.

Steg 6: Konfigurera leverans av agentens output

Leverera ai-svar tillbaka till användaren efter att inputen har bearbetats.

  1. Öppna Send Agent Reply och ställ in Text till {{ $json.output }}.
  2. Ställ in Chat ID till {{ $('Prepare Agent Input').item.json.chat_id }}.
  3. Säkerställ att Additional Fields inkluderar parse_mode satt till Markdown.
  4. Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter i Send Agent Reply.

Steg 7: Konfigurera manuella städverktyg

Använd den manuella städvägen för att rensa lagrad utgiftsdata vid behov.

  1. Öppna Manual Cleanup Trigger för att tillåta körning vid behov.
  2. Konfigurera Iterate Categories med URL https://api.ainoflow.io/api/v1/storage/json.
  3. Konfigurera Iterate Category Items med URL https://api.ainoflow.io/api/v1/storage/json/{{ $json.category }}.
  4. Konfigurera Delete Stored Item med URL https://api.ainoflow.io/api/v1/storage/json/{{ $json.category }}/{{ $json.key }} och Method DELETE.
  5. Autentiseringsuppgifter krävs: Anslut era httpBearerAuth-autentiseringsuppgifter i Iterate Categories, Iterate Category Items och Delete Stored Item.

Steg 8: Testa och aktivera ert arbetsflöde

Verifiera alla flöden och aktivera arbetsflödet för användning i produktion.

  1. Klicka på Execute Workflow och skicka en Telegram-text som spent 50 on groceries för att bekräfta att Send Agent Reply returnerar ett formaterat svar.
  2. Testa ett röstmeddelande och ett kvittofoto för att bekräfta att Transcribe Voice och Extract Image Text flödar in i Prepare Agent Input.
  3. Verifiera att bearbetningsnotisen visas från Post Processing Notice och tas bort av Remove Processing Note.
  4. Om en chatt inte är behörig, bekräfta att Send Unauthorized Alert skickas.
  5. När alla tester passerar, växla arbetsflödet till Active för att aktivera körning i produktion.
🔒

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

Få den kompletta implementeringsguiden + nedladdningsbar mall

Vanliga fallgropar

  • Telegram-botens autentiseringsuppgifter kan gå ut eller få fel scope. Om svaren slutar fungera, kontrollera först BotFather-token och autentiseringsuppgifterna för Telegram-noden i n8n.
  • Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre ned i flödet fallerar på tomma svar.
  • Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera utdata för alltid.

Vanliga frågor

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

Cirka 30 minuter om du redan har din Telegram-bottoken och dina API-nycklar redo.

Behöver jag kunna koda för att automatisera utgiftsloggning i Telegram?

Ingen kodning krävs. Du kommer främst att koppla konton och klistra in API-nycklar i n8n.

Är n8n gratis att använda för det här flödet för utgiftsloggning i Telegram?

Ja. n8n har ett gratis alternativ för egen hosting 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 OpenRouter API-användning för AI-bearbetning samt kostnader för OCR/transkriberings-API.

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

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

Kan jag anpassa den här automatiseringen för utgiftsloggning i Telegram med olika kategorier och valutor?

Ja, och det bör du. Du kan uppdatera kategorilistan i prompten för Expense Assistant och även ändra standardvalutan där (standard är EUR). Om du föredrar andra AI-modeller byter du ut OpenRouter-chatmodellnoderna som används för huvudbearbetningen och assistentsvaren. Många justerar också svarsformateringen så att Google Sheets får korta beskrivningar medan Telegram får en snyggare sammanfattning.

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

Oftast handlar det om en ogiltig eller roterad bottoken i dina Telegram-autentiseringsuppgifter. Det kan också vara en mismatch i sekretessinställningar (fel chatt, fel bot) eller saknade behörigheter för att hämta filer, vilket märks när noder för hämtning av ljud/foto/dokument börjar fallera. Kontrollera autentiseringsuppgiften för Telegram-noden i n8n, skicka sedan ett enkelt textmeddelande för att bekräfta att triggern fortfarande triggar innan du testar kvitton igen.

Hur många utgifter kan den här automatiseringen för utgiftsloggning i Telegram hantera?

En typisk setup kan hantera hundratals utgifter per månad utan problem; de verkliga begränsningarna kommer från din n8n-plan och dina hastighetsgränser för OCR/transkribering/AI-API.

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

Det beror på vad du gör. Om du bara vill ha “Telegram-meddelande → lägg till en rad” kan Zapier eller Make gå snabbare att klicka ihop. Det här flödet är mer än så: det routar meddelandetyper, hämtar Telegram-filer, kör OCR och transkribering och använder en AI-agent med minne för att både logga utgifter och svara på frågor som “jämför senaste 3 månaderna”. n8n ger dig också möjlighet till egen hosting, vilket är användbart om du inte vill ha prissättning per uppgift varje gång du loggar ett kvitto. Om du vill att någon kvalitetssäkrar din setup, Prata med en automatiseringsexpert.

När detta väl rullar hålls ditt ark uppdaterat utan att du behöver tänka på det. Boten sköter den repetitiva insamlingen, och du får äntligen felfria månadstotaler när du behöver dem.

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