Hvordan vi automatiserte håndtering av kvitteringer med n8n, Supabase og AI
Tech
AI
Hannes Waller
CTO
26. november 2025
Få oversikt over utgifter og tjenester
Som et digitalt produktutviklingsselskap med rundt 20 ansatte bruker vi naturligvis en hel del SaaS-verktøy for design, utvikling, drift, analyse, kommunikasjon, hosting og mer. Hver måned tikker det inn kvitteringer og fakturaer fra mange ulike tjenester.
Utfordringene våre var sammensatte og frustrerende. Det var vanskelig å finne kvitteringer når vi trengte dem, og vi hadde liten samlet oversikt over kostnader. Manuell håndtering stjal verdifull tid, og ulike formater, datoer, beløp og valutaer gjorde det vanskelig å få et raskt svar på enkle spørsmål som “Hva bruker vi egentlig på Figma i løpet av et år?”
Vi ønsket en løsning som automatisk samlet inn alle kvitteringer, lagret dem, trakk ut det viktigste og lot oss spørre en AI-assistent om hva som helst, uten at det krevde mye vedlikehold.
Løsningen: n8n + Supabase + Custom GPT
Jeg har lenge vært interessert av å få teste n8n, som har blitt lovordet mye av mange. Kombinert med Supabase, som jeg er veldig glad i, og en custom-GPT og Slack for kommunikasjon, hadde vi en komplett stack.
Slik fungerer det:
Alle kvitteringer havner i én dedikert Gmail-innboks. Derfra leser n8n hver e-post, finner eller genererer PDF, og ekstraherer metadata. Data blir så lagret i Supabase, strukturert i databaser pluss PDF-filer som lastes opp i en bucket, mens AI-assistenten får tre API-endepunkter den kan bruke for å svare på spørsmål.
Vent, n8n - Hva er det egentlig?
n8n (n-eight-n, fra node-automation) er et verktøy for å automatisere arbeidsflyter uten å nødvendigvis måtte skrive mye kode. Det er en visuell representasjon mellom ulike tjenester: e-post, API-er, databaser, Slack, webhooks og mye, mye mer. I stedet for å manuelt flytte data fra ett sted til et annet, bygger du et diagram av noder som gjør jobben for deg. Det kan trigge på hendelser, hente data, transformere det og sende det videre. Prosesser som før tok tid og oppmerksomhet, skjer nå automatisk i bakgrunnen. For oss som kan kode, gir det også full frihet til å manipulere data som vi vil. Besøk gjerne n8n.io for mer info, og mange eksempler på hva det kan brukes til.
Del 1: n8n - motoren bak
Tilbake til løsningen, jeg bygget fire workflows i n8n: én for arbeidsflyten fra Gmail til Supabase til vår agent, og tre webhooks som fungerer som endepunkter for agenten. Det tok rundt en dag å få alt på plass, der en god del av tiden gikk til å bli kjent med n8n sitt UI, som er veldig bra, men nytt for meg.
Workflow 1: Innsamling av kvitteringer
Vår prosess starter med en node som kjører hvert 30. minutt for å fange opp nye e-poster i vår innboks. Vi henter ut hele innholdet, både HTML, ren tekst og eventuelle vedlegg. Deretter kjører vi dataen gjennom en LLM som trekker ut sentral informasjon, hvem som sendt den, totalbeløp, valuta, dato og annen nyttig metadata. Her sjekker vi om det faktisk er en kvittering vi mottatt. Hvis ikke så har vi en node som kan poste melding til Slack, eller så bare lar vi være å gå videre.
Hvis det er en kvittering så fortsetter vi flyten. Resultatet skrives til to Supabase-tabeller, én for leverandører og én for kvitteringer, komplett med råtekst for feilsøking og en confidence score for å vurdere treffsikkerheten. Hvis avsenderen har lagt ved en PDF, bruker vi den; hvis ikke genererer vi en PDF basert på HTML-innholdet for å sikre et konsistent og arkiverbart format. Så laster vi opp den til en Supabase bucket så den kan hentes senere, og refereres til i meldinger med vår GPT.
Eksempel på output fra LLM-noden som konvertert e-postdata
Til slutt holder systemet oss oppdatert: hver gang en helt ny leverandør dukker opp, sender n8n automatisk et varsel slik at vi kan godkjenne eller avvise den, ved hjelp av en Human-in-the-Loop node. På denne måten får vi en helautomatisk, sporbar og utvidbar flyt for kvitteringshåndtering, uten at noen trenger å åpne en eneste e-post manuelt.
Arbeidsflyt for agenten
For å trygt kunne eksponere vår data fra Supabase må vi ha webhooks som vi kan gi vår agent tilgang til. Dette er lett å sette opp i n8n. I vårt tilfelle trenger vi tre forskjellige webhooks for å gi en god opplevelse.
Workflow 2: Søk på kvitteringer
En webhook som tar inn leverandør og eventuelt dato-intervall, antall og sortering, for å så slå opp i Supabase og returnerer relevante kvitteringer med tjenestens navn, beløp, data, PDF-lenke og metadata. Denne brukes når AI-assistenten skal svare på for eksempel “Gi meg de tre siste Figma-kvitteringene”.
Response på søk på kvitteringer
Workflow 3: Hent sammendrag av pengebruk på en tjeneste
Sammendrag av pengebruk
Dette workflow gir sammendrag på hvor mye vi brukt på en tjeneste. Det tar imot leverandør pluss dato-intervall, henter kostnadene fra Supabase, og kan gruppere etter måneder eller år. Det brukes når vi spør noe som “Hvor mye brukte vi på Notion i 2025?”
Respons fra sammendrag av pengebruk
Workflow 4: Liste ut alle kjente tjenester
Et fuzzy vendor-søk som hjelper når AI-assistenten er usikker. Hvis vi spør om “Den whiteboarding-tjenesten vi bruker”, returnerer den både Miro og FigJam.
Liste ut alle tjenester
Del 2: Custom GPT - vår AI-assistent
Den siste biten er en custom GPT fra ChatGPT. Vi ga den klare instruksjoner for når den skal bruke hvilke Actions, sammen med våre tre endepunkter fra n8n (/agent/search-receipts, /agent/vendor-spend, og /agent/list-vendors) og et OpenAPI-schema for validering og parameter-hjelp.
Hva kan vi spørre om?
Nå kan vi stille spørsmål som “Hva brukte vi på alt fra AWS i fjor?”, “Gi meg alle Figma-kvitteringer fra Q1 2024”, “Send meg PDF-en til sist mottatte kvittering fra One.com”, eller “Vis alle tjenester som inneholder ‘fig’”. Vi får presise svar basert på faktisk data.
Hva vi oppnådde
Systemet gir oss helautomatisert kvitteringshåndtering der ingen trenger å laste ned eller rote rundt i en innboks manuelt. Vi har full sporbarhet siden alle kvitteringer lagres med metadata og PDF, og vi kan få en kostnadsoversikt på sekunder uten manuelle summeringer i Excel. Med én AI-assistent som har full innsikt kan vi bare spørre og få svar, samtidig som varsler for nye leverandører gir oss full kontroll med minimale overraskelser.
Utfordringer underveis
Den største utfordringen var å bli kjent med n8n sitt UI. Som ny bruker tok det litt tid å forstå hvordan nodes, connections og expressions fungerer. Men når man først skjønner logikken, er det utrolig kraftfullt og rimelig enkelt. I tillegg krevde det en del oppsett i Supabase, ikke bare tabeller men RPC funksjoner for å forenkle henting av data.
Hva vi kan gjøre videre
Systemet kan utvides med dashboards for å visualisere kostnader i Supabase eller Metabase. En Slack-bot med for direkte integrasjon mot vår custom-GPT kunne gi en lett tilgjengelig flate for å hente ut information, enn så lenge sender den kun meldinger på nye kvitteringer og leverandører. Integrasjon mot økonomisystemer hadde vært en veldig fin ting, men regnskapssystemet vi bruker har ikke et eget API, så det får bli i fremtiden. Med bedre innsikt i bruken av tjenester kan vi også optimalisere SaaS-kostnadene, for eksempel si opp leverandører som ikke lenger brukes.
Want to know more?
Get in touch with