Du känner igen läget: du spenderar pengar, tänker att du ska logga det senare, och så blir ”senare” en rörig ikapp-körning med kvitton, bankappar och halvt ihågkomna anteckningar.
Den här automationen för utgiftsloggning via WhatsApp slår extra hårt mot frilansare eftersom varje transaktion spelar roll, men även småföretagare och stressade marknadsförare som hanterar utlägg och ersättningar känner av det. I stället för att skriva in allt i ännu en app skickar du bara ett meddelande om vad du spenderat, och det hamnar i din databas – strukturerat och sökbart.
Nedan ser du exakt hur flödet routar meddelanden, gör vanlig svenska till strukturerade fält, sparar allt i PostgreSQL och skickar sammanfattningar vid begäran (eller automatiskt varje morgon).
Problemet: utgiftsspårning faller sönder så fort du blir upptagen
Manuell utgiftsspårning fallerar av en enkel anledning: den kräver att du ändrar beteende när du redan jonglerar jobb, liv och en massa små beslut. Du köper kaffe, betalar en underleverantör eller tar in förbrukningsmaterial, och den där ”snabba loggningen” blir till att öppna en app, välja kategorier, skriva belopp och försöka minnas leverantörens namn. Missar du två dagar känns högen irriterande. Missar du två veckor är det i praktiken kört. Kostnaden är inte bara tid. Det är den där tysta stressen av att inte veta dina siffror förrän det är för sent att agera.
Inget av det här är problemet i sig. Tillsammans är det det.
- Du kopierar samma detaljer till kalkylblad, appar och underlag för ersättning, och något blir alltid missat.
- Kategorier glider över tid, så dina totalsummor för ”mat” eller ”programvara” slutar betyda något när månaden är slut.
- Små fel smyger sig in när du loggar i efterhand, särskilt vid kontantköp eller delade transaktioner.
- Rapporter kräver arbete, vilket gör att du skjuter upp dem tills du verkligen behöver dem.
Så fungerar den här automationen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: WhatsApp till PostgreSQL, utgifter loggas via sms
flowchart LR
subgraph sg0["Incoming WhatsApp Flow"]
direction LR
n0@{ icon: "mdi:wrench", form: "rounded", label: "Date and time", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model1", pos: "b", h: 48 }
n4@{ icon: "mdi:wrench", form: "rounded", label: "Calculator", pos: "b", h: 48 }
n5@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model3", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "Convert to File", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Send Financial Response"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Normal Conversation "]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Incoming WhatsApp Trigger"]
n16@{ icon: "mdi:robot", form: "rounded", label: "Message Intent Classifier", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route by Intent", pos: "b", h: 48 }
n18@{ icon: "mdi:robot", form: "rounded", label: "Parse & Validate Transaction", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Transaction Lines", pos: "b", h: 48 }
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Format Transaction JSON"]
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Validate Transaction Fields"]
n22["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Insert Transaction into DB"]
n23@{ icon: "mdi:robot", form: "rounded", label: "Build Confirmation Message", pos: "b", h: 48 }
n29@{ icon: "mdi:robot", form: "rounded", label: "Build Custom Report Query", pos: "b", h: 48 }
n30["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Transform Custom Query for P.."]
n31["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Format Custom Query Results"]
n32["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Execute Custom Report Query"]
n33@{ icon: "mdi:robot", form: "rounded", label: "Build Custom Financial Summary", pos: "b", h: 48 }
n34["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Send Custom Report"]
n35@{ icon: "mdi:robot", form: "rounded", label: "simple conversation ", pos: "b", h: 48 }
n37@{ icon: "mdi:wrench", form: "rounded", label: "Date and time1", pos: "b", h: 48 }
n38@{ icon: "mdi:wrench", form: "rounded", label: "Date and time2", pos: "b", h: 48 }
n39@{ icon: "mdi:wrench", form: "rounded", label: "Date and time3", pos: "b", h: 48 }
n40@{ icon: "mdi:wrench", form: "rounded", label: "Date and time4", pos: "b", h: 48 }
n41@{ icon: "mdi:wrench", form: "rounded", label: "Date and time5", pos: "b", h: 48 }
n42@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model2", pos: "b", h: 48 }
n43@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model7", pos: "b", h: 48 }
n44@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model8", pos: "b", h: 48 }
n4 -.-> n33
n0 -.-> n18
n37 -.-> n29
n38 -.-> n33
n39 -.-> n23
n40 -.-> n16
n41 -.-> n35
n12 --> n33
n17 --> n29
n17 --> n18
n17 --> n35
n35 --> n14
n2 -.-> n16
n3 -.-> n29
n42 -.-> n18
n5 -.-> n33
n43 -.-> n35
n44 -.-> n23
n20 --> n21
n19 --> n20
n1 -.-> n18
n29 --> n30
n15 --> n16
n16 --> n17
n23 --> n13
n22 --> n23
n32 --> n31
n31 --> n12
n21 --> n22
n18 --> n19
n33 --> n34
n30 --> n32
end
subgraph sg1["Daily 8AM Flow"]
direction LR
n6@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model4", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Postgres2", pos: "b", h: 48 }
n8@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model5", pos: "b", h: 48 }
n9@{ icon: "mdi:wrench", form: "rounded", label: "Calculator1", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser2", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model6", pos: "b", h: 48 }
n24@{ icon: "mdi:play-circle", form: "rounded", label: "Daily 8AM Trigger", pos: "b", h: 48 }
n25@{ icon: "mdi:robot", form: "rounded", label: "Build Daily Report Query", pos: "b", h: 48 }
n26@{ icon: "mdi:robot", form: "rounded", label: "Execute Daily Report Query", pos: "b", h: 48 }
n27@{ icon: "mdi:robot", form: "rounded", label: "Build Daily Financial Summary", pos: "b", h: 48 }
n28["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Send Daily Report"]
n36["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Transform Custom Query for P.."]
n7 -.-> n26
n9 -.-> n27
n24 --> n25
n6 -.-> n25
n8 -.-> n26
n11 -.-> n27
n25 --> n36
n10 -.-> n26
n26 --> n27
n27 --> n28
n36 --> n26
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n15,n24 trigger
class n1,n16,n18,n23,n29,n33,n35,n10,n25,n26,n27 ai
class n2,n3,n5,n42,n43,n44,n6,n8,n11 aiModel
class n0,n4,n37,n38,n39,n40,n41,n9 ai
class n17 decision
class n22,n32,n7 database
class n20,n21,n30,n31,n36 code
classDef customIcon fill:none,stroke:none
class n13,n14,n15,n20,n21,n22,n30,n31,n32,n34,n28,n36 customIcon
Lösningen: gör WhatsApp till din ekonomi-inkorg
Det här flödet behandlar WhatsApp som ytterdörren till ditt privata (eller småföretagets) ekonomisystem. Ett WhatsApp-meddelande triggar automationen, och sedan klassificerar en AI-agent vad du menar: loggar du en transaktion, ber du om en rapport, eller snackar du bara om ekonomi? Om det är en transaktion tolkar flödet ditt naturliga språk till strukturerade fält som datum, kategori, typ (utgift/inkomst/skuld), belopp och person eller företag. Det kontrollerar att obligatoriska fält finns, lägger in posten i PostgreSQL och svarar med en bekräftelse du kan lita på. Om du ber om insikter genererar det en Postgres-fråga, kör den och returnerar en lättläst sammanfattning direkt i chatten.
Flödet startar med inkommande WhatsApp-meddelanden (plus en schemalagd daglig trigger för morgonsammanfattningar). Därifrån avgör intention-routing vilken gren som ska köras: transaktionsloggning, rapporter och analys eller generell ekonomichatt. Till sist skickar WhatsApp bekräftelsen eller rapporten tillbaka till dig, så du aldrig behöver ”gå och kolla” någon annanstans.
Det du får: automation vs. resultat
| Det här flödet automatiserar | Resultatet du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du loggar cirka 10 transaktioner i veckan. Manuellt tar även ett ”snabbt” upplägg kanske 3 minuter per post när du växlar app, väljer kategori och skriver detaljer – vilket blir runt 30 minuter per vecka. Om du hamnar efter och gör allt på en gång känns det som ett tråkigt måste. Med det här flödet skickar du ett WhatsApp-meddelande som tar cirka 20 sekunder, väntar en stund på att AI:n tolkar det och får en bekräftelse tillbaka. Du spårar fortfarande allt, men ansträngningen blir utspridd och minimal.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- WhatsApp Business Cloud API för att ta emot och svara på meddelanden.
- PostgreSQL för att lagra strukturerade transaktioner långsiktigt.
- OpenRouter API-nyckel (hämtas i din OpenRouter-dashboard) för AI-tolkning och rapportgenerering.
Svårighetsnivå: Mellan. Du kopplar några credentials, skapar en databastabell och testar webhooks, men du bygger ingen app från grunden.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett WhatsApp-meddelande (eller en schemalagd morgontrigger) sätter igång allt. När du skickar ”Spenderade 300 på mat på Walmart” tar flödet emot det via WhatsApp-triggern. Det finns också en daglig schematrigger för automatiska sammanfattningar vid en bestämd tid (ofta kl. 08:00).
Meddelandet klassificeras efter intention. En AI-agent läser texten och avgör om du ber om en rapport, loggar en transaktion eller bara har en allmän ekonomichatt. Den routingen är viktig eftersom rapporter kräver databasfrågor, medan transaktioner kräver strukturerad extrahering och validering.
Transaktioner tolkas, kontrolleras och läggs sedan in i PostgreSQL. Flödet extraherar datum, kategori, typ, belopp och person/företag, delar upp flera poster om du skickade dem i samma meddelande och verifierar obligatoriska fält. Därefter lägger det in raden i din Postgres-tabell och skapar ett bekräftelsesvar så att du vet att det fungerade.
Rapporter blir till frågor och sedan läsbara sammanfattningar. Om du skickar ”dagens rapport” eller ”jämför mars vs april utgifter” skapar flödet en SQL-fråga, kör den i PostgreSQL, formaterar resultatet och skickar tillbaka ett tydligt WhatsApp-meddelande med totalsummor och highlights.
Du kan enkelt justera rapporttid och kategorier så att det matchar dina behov. Se den fullständiga implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera WhatsApp-triggern
Det här arbetsflödet startar genom att lyssna efter inkommande WhatsApp-meddelanden och skicka dem vidare till intent-klassificeraren.
- Lägg till eller öppna WhatsApp Incoming Trigger och koppla den till Intent Classification Agent.
- Slutför WhatsApp-triggerns konfiguration så att den kan ta emot inkommande meddelanden från er WhatsApp-leverantör.
- Credential Required: Anslut era WhatsApp-uppgifter (krävs för WhatsApp Incoming Trigger).
Steg 2: Konfigurera Schedule Trigger för dagliga rapporter
En separat schemalagd väg genererar dagliga ekonomisammanfattningar.
- Öppna Daily Morning Trigger och definiera schemat som passar er rapporteringskadens.
- Säkerställ att Daily Morning Trigger skickar output till Compose Daily Report Query enligt exekveringsflödet.
Steg 3: Anslut AI-språkmodeller och verktyg
Flera AI-agenter förlitar sig på OpenRouter-språkmodeller och hjälpverktyg. Dessa måste kopplas till föräldranoderna.
- Koppla OpenRouter Chat Engine som språkmodell för Intent Classification Agent.
- Koppla OpenRouter Chat Engine F till Parse and Verify Transaction, OpenRouter Chat Engine H till Build Confirmation Reply, OpenRouter Chat Engine E till Generate Daily Finance Summary och OpenRouter Chat Engine B till Generate Custom Finance Summary.
- Credential Required: Anslut era OpenRouter-uppgifter på alla OpenRouter-chat engine-noder som används av agenter.
- För AI-verktyg som Timestamp Utility, Timestamp Utility A, Timestamp Utility B, Timestamp Utility C, Timestamp Utility D, Timestamp Utility E, Arithmetic Helper, Math Utility, Structured Result Parser, Structured Result Parser 2 och Postgres Tooling, lägg till uppgifter på föräldra-agentnoderna (inte på verktygsnoderna själva).
Steg 4: Konfigurera intent-routing och transaktionshantering
Inkommande meddelanden klassificeras och routas till transaktionsloggning, anpassad rapportering eller generell konversation.
- Bekräfta flödet från WhatsApp Incoming Trigger → Intent Classification Agent → Intent Routing Switch.
- Verifiera transaktionsvägen: Intent Routing Switch → Parse and Verify Transaction → Split Transaction Entries → Format Transaction JSON Data → Check Transaction Fields → Insert Transaction to DB → Build Confirmation Reply → Send Finance Reply.
- Verifiera vägen för generell konversation: Intent Routing Switch → Basic Conversation Flow → Standard Conversation.
Steg 5: Konfigurera rapportering och databassökningar
Dagliga och anpassade rapporter använder Postgres-frågor som förbereds av AI och formateras till sammanfattningar.
- Flödet för daglig rapport ska följa: Daily Morning Trigger → Compose Daily Report Query → Adapt Daily Query for Postgres → Run Daily Report Query → Generate Daily Finance Summary → Dispatch Daily Report.
- Flödet för anpassad rapport ska följa: Intent Routing Switch → Compose Custom Report Query → Adapt Custom Query for Postgres → Run Custom Report Query → Format Custom Query Output → Convert Data to File → Generate Custom Finance Summary → Dispatch Custom Report.
- Credential Required: Anslut era Postgres-uppgifter i Insert Transaction to DB, Run Custom Report Query och i eventuella agentnoder som använder Postgres Tooling (uppgifterna måste läggas till på föräldranoden).
Steg 6: Konfigurera WhatsApp-svarsutskick
Slutliga svar skickas via WhatsApp för bekräftelser, dagliga rapporter, anpassade rapporter och generella konversationer.
- Säkerställ att Send Finance Reply tar emot output från Build Confirmation Reply.
- Säkerställ att Dispatch Daily Report tar emot output från Generate Daily Finance Summary och att Dispatch Custom Report tar emot output från Generate Custom Finance Summary.
- Säkerställ att Standard Conversation tar emot output från Basic Conversation Flow.
- Credential Required: Anslut era WhatsApp-uppgifter på Send Finance Reply, Dispatch Daily Report, Dispatch Custom Report och Standard Conversation.
Steg 7: Testa och aktivera ert arbetsflöde
Validera både WhatsApp-vägen och den schemalagda vägen innan ni slår på arbetsflödet.
- Använd Execute Workflow och skicka ett WhatsApp-testmeddelande för att trigga WhatsApp Incoming Trigger.
- Bekräfta att en lyckad körning loggar en transaktion i Postgres och skickar ett svar via Send Finance Reply.
- Kör Daily Morning Trigger manuellt för att verifiera att vägen för daglig rapport avslutas vid Dispatch Daily Report.
- När alla vägar fungerar, växla arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Credentials för WhatsApp Business Cloud API kan löpa ut eller sakna rätt behörigheter. Om svar plötsligt slutar fungera, kontrollera först din Meta app-token, phone number ID och inställningar för webhook-prenumeration.
- Om du använder Wait-noder eller extern bearbetning varierar svarstider. Öka väntetiden om nedströmssteg misslyckas eftersom de fick ett tomt eller fördröjt AI-svar.
- Standardprompter för AI är ärligt talat för generiska för konsekventa kategorier. Lägg in din valuta, din föredragna kategorilista och exempelmeddelanden tidigt, annars får du rensa och strukturera data senare.
Vanliga frågor
Cirka 30 minuter om du redan har WhatsApp och PostgreSQL redo.
Nej. Du kopplar mest konton och klistrar in credentials. Det hjälper om du är bekväm med att redigera fält och testa meddelanden.
Ja. n8n har ett gratis alternativ 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 kostnader för OpenRouter API-användning, som beror på vilken modell du väljer.
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 obegränsat antal körningar men kräver grundläggande serverhantering.
Ja, men du bör lägga till en användaridentifierare på varje transaktion. I praktiken betyder det att du fångar avsändaren från WhatsApp-triggern och skriver in den i PostgreSQL som en extra kolumn, och sedan filtrerar rapporter på det fältet. Många lägger också till kategoriregler per användare (så att ”bränsle” och ”bensin” mappas konsekvent). Om du vill kan du routa varje användare till en egen databastabell eller ett eget schema för att hålla det strukturerat.
Oftast beror det på en utgången Meta-token eller ett problem med webhook-konfigurationen. Skapa en ny app-token, bekräfta phone number ID och säkerställ att din webhook fortfarande är prenumererad på meddelandehändelser. Om inkommande meddelanden fungerar men svar misslyckas, kontrollera WhatsApp-mallar eller behörigheter för meddelanden och eventuella kontobegränsningar.
Med n8n Cloud Starter hanterar du normalt enkelt en typisk privat- eller småföretagsvolym, och högre planer stödjer fler körningar. Om du kör egen drift finns ingen körningsgräns (det beror på din server). I vardagsanvändning begränsas det här flödet oftast av AI-svarstid och WhatsApp API-genomströmning, inte PostgreSQL.
För det här användningsfallet är n8n ofta ett bättre val eftersom du kan köra egen drift, lägga till grenlogik för ”transaktion vs rapport vs chatt” och styra hur AI-tolkningen ska bete sig utan att betala per steg på samma sätt. Zapier eller Make kan fortfarande fungera om du bara vill ha ett grundläggande upplägg: ”meddelande in, rad i kalkylblad”. Så fort du vill ha riktig validering, skrivning till databas och anpassade rapportfrågor brukar n8n kännas mer flexibelt. Om du är osäker, fundera på var du vill att datan ska ligga långsiktigt och hur ofta du vill ha rapporter. Prata med en automationsexpert så kan ni reda ut det snabbt.
När det här väl rullar slutar utgiftsspårning vara ett ”projekt” du hela tiden startar om. Flödet tar hand om det repetitiva, och dina siffror är uppdaterade utan att du behöver passa 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.