All posts
AutomationAugust 23, 2026·7 min read

Automatiser bilagsføring med Fiken API og Claude Code

Jeg videresendte kvitteringer til Fiken-inboksen og lot dem ligge. Så satt jeg en kveld i måneden og førte dem manuelt — finn leverandøren, velg konto, velg MVA-kode, last opp PDF-en. Fire klikk, tretten ganger. Så skrev jeg en Claude-skill som gjør det via Fiken API-et.

Automatiser bilagsføring med Fiken API og Claude Code

Jeg videresender kvitteringer til Fiken-inboksen med en gang de kommer. Så blir de liggende. En kveld i måneden satt jeg og førte dem manuelt: finn leverandøren, velg konto, velg MVA-kode, last opp PDF-en, neste. Fire klikk, tretten ganger i måneden. Over femti klikk, alle like.

Så skrev jeg en Claude Code-skill som gjør det via Fiken API-et. Den leser inboksen, leser PDF-en, foreslår konto og MVA basert på hva jeg gjorde forrige gang, viser meg forslaget, og bokfører når jeg sier ja.

Jeg godkjenner fortsatt hvert eneste bilag. Det er ikke et system som fører regnskapet mitt uten tilsyn — det er et system som gjør de fire klikkene for meg.

Her er hele flyten, med ekte kode.

Hva den faktisk gjør

STEG 1–3 Hent finn i inboksen last ned PDF les dokumentet STEG 4–5 Forstå slå opp leverandør hent siste kjøp foreslå konto + MVA ← her ligger gevinsten STEG 6 Jeg bekrefter forslaget vises ingenting skjer før jeg sier ja STEG 7–9 Bokfør post kjøpet legg ved PDF bekreft og rydd 95 % av bilagene stopper aldri opp i «Forstå» — leverandøren er kjent fra før.
Bare ett trinn tar en avgjørelse. Bare ett krever meg.

Ni steg, fra ubrukt bilag til bokført kjøp med vedlegg:

  • Finner bilaget i Fiken-inboksen
  • Laster ned PDF-en med samme token
  • Leser PDF-en — leverandør, beløp, dato, valuta, MVA
  • Slår opp leverandøren i kontaktregisteret
  • Foreslår konto og MVA-kode fra tidligere kjøp hos samme leverandør
  • Viser meg forslaget og venter
  • Poster kjøpet
  • Laster opp PDF-en som vedlegg
  • Bekrefter og rydder opp

Steg fem er hele poenget. Resten er rørlegging.

Autentisering

Fiken bruker OAuth2. Du oppretter en app under innstillingene, får client_id og client_secret, og kjører engangs-oppsettet som fanger callback-en og lagrer tokens lokalt.

Alt går mot https://api.fiken.no/api/v2, og hver forespørsel er scopet til ett selskap:

BASE="https://api.fiken.no/api/v2/companies/$COMPANY_SLUG"
AUTH="Authorization: Bearer $TOKEN"

Steg 1: Finn ubrukte bilag

Fiken-inboksen er et eget endepunkt. status=false betyr ubrukt — altså ikke koblet til et bilag ennå.

curl -s -H "$AUTH" "$BASE/inbox?status=false&sortBy=createdAt%20desc" \
  | jq '.[:10] | .[] | {documentId, name, filename, createdAt}'

Er det bare ett ubrukt, tar skillet det. Er det flere, spør den hvilket.

Steg 2 og 3: Last ned og les PDF-en

Responsen inneholder documentUrl. Samme bearer-token gir deg fila:

curl -s -H "$AUTH" -L "$DOC_URL" -o /tmp/fiken-bilag/$DOC_ID.pdf

Så leser Claude PDF-en direkte. Ingen OCR-tjeneste, ingen regex mot tekstlag — modellen er multimodal og leser kvitteringen slik du ville gjort. Den henter ut leverandør, fakturanummer, dato, valuta, og netto- og bruttobeløp.

Det siste er viktigere enn det høres ut. Utenlandske leverandører legger på MVA på ulike måter, og noen bruker forenklet ordning. Beløpene må leses fra dokumentet, ikke antas.

Steg 4 og 5: Foreslå konto fra historikk

Dette er delen som gjør at det faktisk sparer tid. For å se hvorfor, er det verdt å se på skjemaet den erstatter:

Fikens skjema for nytt kjøp, med tomme felter for leverandør, dato, fakturanummer, dokumentasjon, tekst, kostnadskonto og bruttobeløp
Åtte felter per bilag. Seks er avskrift fra PDF-en jeg allerede har åpen — dato, fakturanummer, beløp. To er tomme fordi de krever en avgjørelse: hvilken leverandør, og hvilken kostnadskonto.

Det er de to tomme feltene alt handler om. Resten er transkribering, og en maskin transkriberer bedre enn meg klokka elleve på kvelden.

Først slår den opp leverandøren:

curl -s -H "$AUTH" "$BASE/contacts?name=$(printf %s "$SUPPLIER_NAME" | jq -sRr @uri)" \
  | jq '.[] | select(.supplier == true) | {contactId, name, organizationNumber}'

Så henter den de fem siste kjøpene fra samme leverandør:

curl -s -H "$AUTH" "$BASE/purchases?supplierId=$SUPPLIER_ID&pageSize=5&sortBy=date%20desc" \
  | jq '.[] | {date, identifier, lines: [.lines[] | {account, vatType, description}]}'

Er det treff, gjenbruker den konto og vatType fra sist. Anthropic havner der Anthropic pleier å havne. Fly.io likeså.

Det er ikke maskinlæring. Det er å slå opp hva du gjorde forrige gang.

Og det dekker mer enn du skulle tro. Jeg talte opp mine egne: 98 bilag over åtte måneder, fordelt på 19 leverandører — og 95 % av dem kom fra en leverandør jeg allerede hadde bokført før. Meta, Google Cloud, Shopify, Anthropic, OpenAI, Hetzner, Fly.io. De samme navnene, hver eneste måned.

Kjøpsoversikten i Fiken med bokførte kjøp fra Meta, Anthropic, Resend og Stripe, alle merket oppgjort. Beløp og fakturanumre er maskert.
Sju rader fra kjøpsoversikten. Fire av dem er Meta. Det er ikke et uheldig utvalg — det er hvordan regnskapet i et lite selskap ser ut, og grunnen til at et oppslag i historikken er nok. Beløpene er maskert; det er navnene og gjentakelsen som er poenget.

Nye leverandører må jeg ta stilling til én gang. Neste gang klarer den det selv.

Steg 7 og 8: Bokfør og legg ved

Selve kjøpet er én POST. Fiken svarer med Location-headeren, som inneholder ID-en du trenger for vedlegget:

RESPONSE=$(curl -s -D - -H "$AUTH" -H "Content-Type: application/json" \
  -X POST "$BASE/purchases" -d @payload.json)
PURCHASE_ID=$(basename "$(echo "$RESPONSE" | grep -i '^location:' | awk '{print $2}' | tr -d '\r')")

Så PDF-en som vedlegg, som multipart:

curl -s -H "$AUTH" -X POST "$BASE/purchases/$PURCHASE_ID/attachments" \
  -F "filename=$(basename $PDF_PATH)" \
  -F "attachToSale=true" \
  -F "file=@$PDF_PATH"

Da ligger bilaget der revisor forventer det, koblet til kjøpet.

Det som ikke lar seg kopiere rett av

Skillet min er bygget for et enkeltpersonforetak som ikke er MVA-registrert, der jeg betaler med private kort. Det er en helt vanlig situasjon i Norge, men det er én situasjon av flere, og det preger hele beslutningslogikken.

To ting endrer seg for de fleste andre:

MVA-kodene. Er du MVA-registrert, er vatType en annen for nesten hver linje, og inngående MVA skal behandles. Min variant setter det ikke fordi det ikke skal settes.

Betalingskontoen. Betaler du fra firmakonto, peker paymentAccount et annet sted enn hos meg. Kortmappingen må bygges for dine kort og dine kontoer.

Selve flyten — inbox, les, slå opp historikk, foreslå, bokfør, legg ved — er den samme uansett. Det er beslutningstabellen som er personlig.

Hva det koster

API-tilgang er ikke gratis i Fiken. Det er en tilleggstjeneste til 99 kroner måneden, oppå grunnprisen på 219. Skal du bygge dette, betaler du altså i underkant av 1 200 kroner i året for retten til å snakke med ditt eget regnskap.

Det er verdt å si høyt, for det avgjør om det lønner seg. To timer i måneden mot 99 kroner er en enkel regning for meg. Fører du fem bilag i måneden, er den ikke like enkel.

Claude Code kjører på Max-abonnementet mitt, så bilagsføring koster ikke noe ekstra. Kjører du det mot API-et i stedet, er hvert bilag et par PDF-sider inn og litt JSON ut — små penger, men ikke null.

Det som faktisk kostet noe var å skrive det.

Manuelt lå jeg på drøyt to timer i måneden — tretten bilag, rundt ti minutter hvert når jeg først satt med dem. Det er i overkant av et døgn i året, brukt på å velge de samme kontoene om igjen. Etter dette er en måneds bilag noen minutter med bekreftelser.

Vil du ha det satt opp?

Koden over er hele metoden, og du står fritt til å bygge den selv. Det er derfor jeg skrev artikkelen.

Men skal det virke for din bedrift — med MVA, dine kontoer, dine kort og dine leverandører — er det den delen som må gjøres om, og den er ikke triviell.

Det gjør jeg gjerne for deg. Furås Digital setter opp automatisering og integrasjoner for norske småbedrifter. Ta kontakt, så ser vi på om det passer for ditt oppsett.

automationtechclaude-code