Kontoutdrag ser enkla ut tills du måste göra om dem till felfria, kategoriserade transaktioner. Då blir det PDF:er med märkliga layouter, CSV-filer utan rubriker och ett kalkylblad som “nästan” matchar förra månaden. Manuell rensning stjäl timmar och gör ändå att du tvivlar på totalerna.
Om du är en marknadsansvarig som försöker följa upp spend känns det här vid månadsskiftet. En småföretagare känner det när likviditeten blir tight och du behöver svar snabbt. Och en byråägare känner det när varje kund använder en annan bank. Den här OpenAI PostgreSQL-automationen gör stökiga kontoutdrag till sökbar, rapportklar data i ett enda flöde.
Nedan ser du hur arbetsflödet fungerar, vad det ersätter och vilka resultat du kan förvänta dig när det väl rullar.
Så fungerar den här automatiseringen
Hela n8n-flödet, från trigger till slutligt resultat:
n8n Workflow Template: OpenAI + PostgreSQL: rensa banktransaktioner snabbt
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Upload Statement"]
n1["<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/>File Handler"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check File Type", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Extract PDF Text", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Parse Excel/CSV", pos: "b", h: 48 }
n5["<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/openAi.dark.svg' width='40' height='40' /></div><br/>AI Data Extractor"]
n6["<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/>Process & Summarize"]
n7["<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/>Save to Database"]
n8["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Send Response"]
n1 --> n2
n2 --> n3
n2 --> n4
n4 --> n5
n3 --> n5
n0 --> n1
n5 --> n6
n6 --> n7
n6 --> n8
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 n2 decision
class n7 database
class n0,n8 api
class n1,n6 code
classDef customIcon fill:none,stroke:none
class n0,n1,n5,n6,n7,n8 customIcon
Problemet: kontoutdrag blir inte användbar data av sig själva
De flesta team har inte svårt att få tag på kontoutdrag. De har svårt att göra om utdragen till något du kan filtrera, söka i och lita på. PDF:er förstör kopiera/klistra in. CSV-exporter byter kolumnnamn utan förvarning. Excel-filer kommer med extra rubrikrader, sammanslagna celler och “hjälpsam” formatering som saboterar importer. Sedan kommer den verkliga tidstjuven: att kategorisera transaktioner konsekvent så att rapporterna inte blir en gissningslek. En liten avvikelse kan snabbt växa till en lång eftermiddag med “varför stämmer inte den här totalen?”.
Det blir snabbt mycket. Här brukar det oftast fallera.
- Varje utdragsformat behöver sin egen manuella rensning innan du ens kan börja kategorisera.
- Kategorisering glider över tid, så “Programvara” blir “Verktyg”, “Prenumerationer” och “SaaS” beroende på vem som rört det.
- Kopiera/klistra-in-fel är tysta, vilket betyder att du ofta upptäcker dem först när rapporteringen ser fel ut.
- Utan en databas kan du inte enkelt köra frågor, jämföra månader eller bygga dashboards utan att bygga om datat först.
Lösningen: ladda upp valfritt kontoutdrag, få felfria transaktioner i PostgreSQL
Det här n8n-arbetsflödet ger dig en enda “inlämningspunkt” för kontoutdrag och gör sedan grovjobbet automatiskt. Du laddar upp ett utdrag till en webhook-endpoint i det format du har (PDF, Excel eller CSV). Flödet identifierar formatet, extraherar texten eller tolkar arket och skickar det rensade innehållet till GPT-4 via en OpenAI Chat Model-nod. Därifrån plockar AI-agenten ut kontodetaljer, saldon och rad-för-rad-transaktioner, och normaliserar dem till en strukturerad transaktionslista med konsekventa kategorier som matvaror, restaurang, bränsle, shopping, hushållstjänster, sjukvård, underhållning, intäkter, avgifter eller övrigt. Till sist skriver den resultaten till PostgreSQL och returnerar en prydlig JSON-sammanfattning som du kan använda i andra verktyg.
Arbetsflödet startar med en uppladdning till /upload-statement. Det skickar PDF:er genom en PDF-läsare och kalkylblad genom en kalkylbladsparser, och slår sedan ihop båda vägarna till ett gemensamt AI-extraktionssteg. Efter en snabb sammanfattningspass sparar det transaktionerna och svarar med totaler och en kategorifördelning.
Det du får: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du hanterar 4 kontoutdrag i veckan (två konton, plus ett kort, plus en export från en betalningsleverantör). Manuellt kanske du lägger cirka 30 minuter per utdrag på att rensa format och ytterligare 30 minuter på att kategorisera, alltså ungefär 4 timmar per vecka. Med det här flödet laddar du upp varje fil på en minut eller två, väntar på bearbetningen (oftast några minuter) och gör sedan en snabb stickkontroll. Realistiskt landar du på cirka 30 minuter i veckan i tillsyn i stället för en halv dag med kalkylbladsarbete.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- OpenAI för GPT-driven extraktion och kategorisering
- PostgreSQL för att lagra transaktioner för rapportering
- OpenAI API-nyckel (hämta den i OpenAI-dashboarden)
Kompetensnivå: Medel. Du kopplar in autentiseringsuppgifter, skapar en Postgres-tabell och testar webhooken med en provfil.
Vill du inte sätta upp det här själv? Prata med en automatiseringsexpert (kostnadsfri 15-minuters konsultation).
Så fungerar det
Uppladdning av kontoutdrag triggar allt. Du skickar en kontoutdragsfil till n8n:s webhook-endpoint (/upload-statement). Den enda ingången gör det enkelt att operationalisera i ett team.
Arbetsflödet förbereder och validerar filen. n8n bygger en rensad payload, kontrollerar filtypen och routar den till rätt väg. PDF:er går till en PDF-textextraktor, medan CSV/Excel-filer går genom kalkylbladsavkodning så att datat förblir strukturerat.
OpenAI extraherar och kategoriserar transaktionerna. Båda vägarna går in i samma AI Statement Parser. Den plockar ut transaktioner, saldon och kontoinformation och applicerar konsekventa kategorier så att din rapportering nedströms inte blir ett manuellt taggningsprojekt.
PostgreSQL blir din källa till sanning. Arbetsflödet sammanfattar vad som extraherades, lagrar de rensade posterna i Postgres och returnerar ett JSON-svar med antal transaktioner, totaler och en kategorifördelning.
Du kan enkelt ändra transaktionskategorierna 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 webhook-triggern
Konfigurera den inkommande webhooken för att ta emot uppladdade kontoutdrag och skicka filerna vidare i workflowet.
- Lägg till noden Incoming Statement Webhook och ställ in Path till
/upload-statement. - Ställ in Response Mode till
responseNodeså att workflowet kan returnera ett anpassat svar. - I Options aktiverar ni Raw Body genom att sätta den till
trueför att acceptera filuppladdningar. - Koppla Incoming Statement Webhook till Prepare File Payload.
Steg 2: Koppla filförberedelse och formatvalidering
Normalisera inkommande filer och routa dem baserat på format innan extrahering.
- I Prepare File Payload behåller ni JavaScript som det är för att mappa
filename,contentTypeochuploadedAttill JSON. - Öppna Validate File Format och ställ in villkoret Left Value till
{{ $json.contentType }}. - Ställ in villkoret Operation till
containsoch Right Value tillapplication/pdf. - Koppla true-utgången från Validate File Format till Read PDF Content och false-utgången till Decode Spreadsheet Data.
Steg 3: Sätt upp extrahering och AI-tolkning
Extrahera text från PDF:er eller kalkylblad och skicka innehållet vidare till AI-tolkaren.
- I Read PDF Content ställer ni in Operation till
extractText. - I Decode Spreadsheet Data ställer ni in Operation till
parseExceloch behåller Header Row på0. - Koppla både Read PDF Content och Decode Spreadsheet Data till AI Statement Parser.
- I AI Statement Parser ställer ni in Model till
gpt-4o-minioch behåller systemprompten samt strukturen för användarmeddelandet intakt. - Credential Required: Anslut era openAiApi-uppgifter i AI Statement Parser.
- Säkerställ att innehållet i användarmeddelandet inkluderar uttrycket
{{ $json.data || $json.extracted_text }}så att tolken får antingen PDF-text eller kalkylbladsdata.
Steg 4: Konfigurera databehandling och utdata
Rensa och sammanfatta AI-utdata, lagra den och returnera ett svar parallellt.
- I Summarize Extracted Data behåller ni den angivna JavaScript-koden för att normalisera transaktioner och bygga sammanfattningsobjektet.
- Koppla AI Statement Parser till Summarize Extracted Data.
- Summarize Extracted Data skickar utdata till både Store in Database och Return API Response parallellt.
- I Store in Database ställer ni in Resource till
database, Operation tillinsertoch Table tillbank_statements. - Mappa kolumner med följande uttryck: raw_data →
{{ JSON.stringify($json) }}, bank_name →{{ $json.account_info.bank_name }}, processed_at →{{ $json.processed_at }}, total_income →{{ $json.summary.total_income }}, account_number →{{ $json.account_info.account_number }}, total_expenses →{{ $json.summary.total_expenses }}, statement_period →{{ $json.account_info.statement_period }}, total_transactions →{{ $json.summary.total_transactions }}. - Credential Required: Anslut era postgres-uppgifter i Store in Database.
- I Return API Response ställer ni in Respond With till
jsonoch använder det angivna uttrycket för Response Body:
{ "success": true, "message": "Statement processed successfully", "data": { "account": "{{ $json.account_info.account_number }}", "transactions_processed": {{ $json.summary.total_transactions }}, "total_expenses": {{ $json.summary.total_expenses }}, "total_income": {{ $json.summary.total_income }}, "categories": {{ JSON.stringify($json.summary.category_breakdown) }} } }
Steg 5: Testa och aktivera ert workflow
Verifiera end-to-end-bearbetning och aktivera workflowet för användning i produktion.
- Klicka på Test Workflow och skicka en fil till URL:en för Incoming Statement Webhook.
- Bekräfta att Read PDF Content eller Decode Spreadsheet Data körs baserat på filformatet och att AI Statement Parser returnerar JSON.
- Verifiera att Store in Database infogar en ny rad i
bank_statementsoch att Return API Response returnerar ett payload för lyckat resultat. - Slå på workflowet till Active för att börja bearbeta uppladdningar i drift.
Vanliga fallgropar
- OpenAI-inloggningsuppgifter kan upphöra att gälla eller begränsas av projektinställningar. Om saker slutar fungera, kontrollera först status för din OpenAI API-nyckel och användningsgränser i OpenAI-dashboarden.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din varumärkesröst tidigt, annars kommer du att redigera output i all evighet.
Vanliga frågor
Cirka 10 minuter om dina API-nycklar och databasen är klara.
Nej. Du klistrar in autentiseringsuppgifter, skapar en tabell och testar en uppladdning en gång.
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 volymer. Du behöver också räkna med OpenAI API-kostnader (ofta några cent per utdrag, beroende på längd).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. Uppdatera prompten i noden AI Statement Parser (OpenAI) så att den inkluderar dina föredragna kategorier och ett par exempel. Vanliga anpassningar är att dela upp “Marknadsföring” i annonser vs. programvara, lägga till “Konsulter” och tvinga vissa handlare att alltid mappas till en kategori.
Oftast är det en ogiltig eller utgången API-nyckel, så generera en ny nyckel och uppdatera den i n8n. Ibland handlar det om fakturering eller kvot, särskilt med större PDF-utdrag. Om det bara fallerar för vissa filer kan den extraherade texten vara tom eller rörig, så kontrollera vad PDF-extraktionssteget faktiskt skickar in i AI-noden.
På n8n Cloud Starter begränsas du av månadsvisa körningar, vilket innebär några tusen körningar för de flesta team. Om du hostar själv finns ingen körningsgräns; det beror främst på din server och OpenAI:s genomströmning. I praktiken kör team detta per utdrag eller per konto per månad, så volym är sällan flaskhalsen. Den större begränsningen är utdragets storlek eftersom längre filer kostar mer och tar längre tid att tolka.
Ofta, ja. Det här flödet behöver grenlogik (PDF vs. kalkylblad), datashaping och en pålitlig skrivning till databasen, och n8n klarar det utan att förvandla allt till en hög av betalda “tasks”. Zapier eller Make kan ändå fungera om dina utdrag alltid har samma format och du bara behöver ett enkelt vidareflöde. Så fort du lägger till flera format, validering och sammanfattningar är n8n oftast det lugnare valet. Om du vill ha en second opinion, prata med en automatiseringsexpert och beskriv din nuvarande process.
När detta väl rullar slutar dina kontoutdrag att vara “dokument du bävar för” och blir felfri data du faktiskt kan använda. Sätt upp det en gång och lägg sedan tiden på beslut i stället för rensning.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.