Dunning-agent på autopilot
En dunning-agent läser kundreskontran varje morgon, identifierar förfallna fakturor, skickar påminnelser i tre steg, och eskalerar. På en huvudbok som är ett API är det ett fyrtiotal rader Python eller ett Make-flöde på en eftermiddag. Accounted ger dig reskontran; utskicket bygger du själv. Här är receptet, inklusive den del folk missar.
TL;DREn dunning-agent läser kundreskontran varje morgon, identifierar förfallna fakturor, skickar påminnelser i tre steg, och eskalerar. På en huvudbok som är ett API är det ett fyrtiotal rader Python eller ett Make-flöde på en eftermiddag. Accounted ger dig reskontran; utskicket bygger du själv. Här är receptet, inklusive den del folk missar.
Indriven kapitalbindning är pengar du redan tjänat men inte fått. För de flesta småföretag ligger den någonstans mellan 30 000 och 200 000 kr i onödig drift, helt enkelt för att ingen kommit till att skicka påminnelse. En dunning-agent fixar det utan att du behöver tänka på det. Här är hur du bygger en.
Vad agenten ska göra
Agenten är aktiv, inte rapporterande. Den producerar handlingar, inte PDF:er. Konkret:
- Varje arbetsdag morgon: läs aktiva kundfakturor från reskontran.
- Identifiera förfallna: fakturor där förfallodatum passerats med 1+ dagar.
- Kolla påminnelsestatus: var i sekvensen ligger varje förfallen faktura?
- Skicka nästa steg: om dagsavståndet stämmer med sekvensen, skicka påminnelse.
- Logga: registrera att påminnelse skickats så nästa körning vet var den är.
- Vid sista steget: lägg fakturan på "Manuell uppföljning"-listan för dig att hantera.
Det är hela agenten. Inget fancy. Mest disciplin i datamodellen.
Sekvensen
Standardpraxis i Sverige:
| Dag (efter förfallodag) | Åtgärd | Avgift |
|---|---|---|
| 1 | Vänlig påminnelse 1 | - |
| 8 | Påminnelse 2 med påminnelseavgift | 60 kr |
| 16 | Sista påminnelse innan inkasso | 60 kr |
| 24 | Markera för manuell uppföljning / inkasso | - |
Du kan justera intervallen. Vissa branscher kör tighter (1, 5, 10, 15 dagar) för att indrivningstid är kortare. B2B kör vanligen längre (1, 14, 30, 45) eftersom större företag har långsammare betalningsrutin.
Inkasso är ett separat steg som vanligen sköts av en extern leverantör (Visma Collectors, Visma Inkasso, Kreditor). Det är inte agentens jobb att skicka till inkasso automatiskt. Det är agentens jobb att lägga ärendet på din "att hantera"-lista efter sista påminnelsen.
Implementering: tre nivåer
Nivå 1: Make eller n8n-flöde (en eftermiddag)
För 90 procent av användarna är low-code rätt val.
Först en sak som avgör hur du bygger det här: accounted skickar inte ut påminnelserna åt dig idag. Maskineriet finns i kodbasen — påminnelsenivåer, avgiftsbokföring, dröjsmålsränta enligt räntelagen — men det automatiska utskicket är avstängt. Vad du kan räkna med är kundreskontran som strukturerad data. Utskicket äger ditt flöde, via din egen mejlleverantör.
Det låter som en brist men är i praktiken ointressant — Make och n8n har mejlsteg inbyggda, och du vill ändå ha mallarna där du kan ändra dem utan att fråga någon.
Flödet:
- Trigger: schemalagt 09:00 mån–fre.
- HTTP GET:
/api/v1/companies/{companyId}/reports/ar-ledger?aging=true. Returnerar kundreskontran med åldersfördelning per kund och faktura. - Loop över fakturor: filtrera på förfallna, räkna dagar sedan förfallodatum.
- Conditional: matcha dagsantalet mot din sekvens (1, 8, 16, 24).
- Skicka mejl via Make/n8n:s mejlsteg med rätt mall för steget.
- Logga steget i din egen store (Airtable, en Google Sheet, en Postgres-tabell). Det är här du håller reda på vilken påminnelse som gått ut på vilken faktura — accounted spårar inte det åt dig.
Punkt 6 är den som folk missar. Utan egen state skickar flödet påminnelse 1 varje morgon i evighet.
Slutkostnad: gratis på n8n self-hosted, ~100 kr/mån på Make.
Nivå 2: Python-bot (en dag)
För användare som vill ha mer logik (smart eskalering, kund-specifika regler, integration med Slack-notiser).
Samma uppdelning som ovan: accounted är källan för vem som är skyldig dig vad, din kod äger sekvensen, utskicket och minnet av vad som redan gått ut.
import os, json, requests
from datetime import date
API = "https://app.accounted.se/api/v1"
COMPANY = os.environ["GNUBOK_COMPANY_ID"]
HEADERS = {"Authorization": f"Bearer {os.environ['GNUBOK_API_KEY']}"}
SEKVENS = [
{"days_overdue": 1, "mall": "vanlig-1", "avgift": 0},
{"days_overdue": 8, "mall": "med-avgift", "avgift": 60},
{"days_overdue": 16, "mall": "sista-innan-inkasso", "avgift": 60},
{"days_overdue": 24, "mall": None}, # flagga för manuell hantering
]
# Din egen state: vilken påminnelse har gått ut på vilken faktura.
# En JSON-fil duger tills den inte gör det.
SKICKAT = json.load(open("skickat.json")) if os.path.exists("skickat.json") else {}
def forfallna():
r = requests.get(f"{API}/companies/{COMPANY}/reports/ar-ledger",
params={"aging": "true"}, headers=HEADERS)
r.raise_for_status()
for kund in r.json()["data"]["customers"]:
for faktura in kund["invoices"]:
dagar = (date.today() - date.fromisoformat(faktura["due_date"])).days
if dagar >= 1:
yield kund, faktura, dagar
def nasta_steg(faktura_id, dagar):
gjorda = SKICKAT.get(faktura_id, 0)
if gjorda >= len(SEKVENS):
return None
return gjorda if dagar >= SEKVENS[gjorda]["days_overdue"] else None
for kund, faktura, dagar in forfallna():
steg = nasta_steg(faktura["id"], dagar)
if steg is None:
continue
config = SEKVENS[steg]
if config["mall"] is None:
notifiera_slack(f"{faktura['number']} ({kund['name']}) — {dagar} dagar, dags för inkassobeslut")
else:
skicka_mejl(kund["email"], config["mall"], faktura, config["avgift"])
SKICKAT[faktura["id"]] = steg + 1
json.dump(SKICKAT, open("skickat.json", "w"))
skicka_mejl och notifiera_slack är dina egna — Resend, Postmark, SMTP, vad du nu använder. Schemalägg som cron eller systemd-timer.
Tar du ut en påminnelseavgift är den en egen affärshändelse. Antingen som en separat faktura, eller som en rad du bokför mot 3590 när den faktiskt betalas. Skriv inte upp den på originalfakturan i efterhand.
Nivå 3: MCP-agent via Claude (en kväll, mer dynamik)
Om du redan har accounted MCP-server kopplad (se MCP-server för bokföring) kan du köra dunning som en MCP-workflow:
Schemalagd prompt till Claude varje morgon:
> Stäm av kundreskontran. Identifiera förfallna fakturor.
> Skicka påminnelser enligt vår sekvens (1, 8, 16, 24 dagar).
> Sammanfatta vad du har gjort i ett kort meddelande till #finance i Slack.
Claude kallar gnubok_get_ar_ledger och gnubok_list_invoices för att se läget. Själva mejlutskicket ligger fortfarande utanför accounted — koppla på din mejlleverantörs MCP-server, eller låt Claude skriva utkasten som du skickar. Läsanropen mot huvudboken kräver inget godkännande; skulle något behöva bokföras stagas det som vanligt.
Fördelen: agenten kan göra mer dynamiska bedömningar. "Den här kunden brukar betala på dag 35, hoppa över påminnelse 1 och vänta till dag 14 innan första utskick." Det skulle vara mycket logik i nivå 2 men är trivialt i prompten på nivå 3.
Nackdelen: kostar lite mer per körning (Claude API-tokens) och kräver att MCP-kopplingen är väl konfigurerad.
Vad du behöver i din kontoplan
Inget exotiskt. Men för att räkna effekt:
- 1510: kundfordran (där dina utestående fakturor ligger)
- 3590: påminnelseavgifter (intäkt från avgifter)
- 3591: dröjsmålsränta (om du tar ut)
- 6360: konstaterad kundförlust (för fakturor som aldrig betalas)
Om du saknar något av dessa: lägg till dem. BAS 2026 har dem som standard.
Mått som spelar roll
Sex veckor efter att agenten körts mätbart:
- Genomsnittlig betalningstid (DSO): bör sjunka 5–15 dagar för typiska B2B-kunder, mer för B2C.
- Aktiv kapitalbindning: total summa av förfallna fakturor över 30 dagar. Bör sjunka 30-50%.
- Inkasso-eskalering: ska ligga oförändrat eller marginellt högre. Om det rusar är något fel med påminnelsesekvensen (t.ex. för tighta intervall).
- Kundklagomål: ska vara nästan noll. Om kunder börjar klaga på "för aggressiva påminnelser" är mallen för hård. Mjuka upp.
Tre saker att tänka på
Innehåll i mallen. Påminnelse 1 ska vara informativ och vänlig. Påminnelse 2 ska vara tydlig och nämna avgiften. Påminnelse 3 ska vara strikt och nämna inkasso. Inte tvärtom.
Pause-funktion för enskilda kunder. Vissa kunder har en konstig betalningscykel (kvartalsfaktura, godkännandeflöde med tre veckors fördröjning). De ska hoppa över första påminnelsen. Det här är logik i ditt flöde, inte ett fält i accounted — en undantagslista bredvid din skickat-state räcker gott.
Helger och högtider. Schemalägg agenten att inte köra på helger eller storhelger. Inget värre än att kunder får påminnelse 09:00 första juldagen. Make/n8n har inbyggda calendar-villkor; för Python-versionen lägg till en check mot ett kalenderbibliotek.
Värt att förstå om dunning-strategi i stort
Påminnelser är inte ett straff. De är information. Många kunder glömmer faktiskt, särskilt om fakturan landade i ett semestermejl. En vänlig påminnelse efter 1 dag löser 60–80 procent av sena betalningar utan friktion.
Friktion uppstår vid påminnelse 2 (med avgift) och påminnelse 3 (med inkasso-hot). Det är där kunder börjar bråka. Och det är där de borde börja bråka, om de har anledning. Om en kund hör av sig efter påminnelse 2 och säger "vi har en disput om leveransen" så är det en värdefull konversation. Du vill veta det.
Vad du gör nu
Tre steg:
- Definiera din sekvens. Vilka dagar, vilka mallar, vilka avgifter. 30 minuter i ett dokument med en penna.
- Skapa mallarna i accounted. Inställningar, Fakturamallar, Påminnelser. Skriv tre mallar, en per steg. 30 minuter.
- Sätt upp agenten. Make-flöde, Python-script, eller MCP-prompt. En eftermiddag.
Sex veckor senare ska du ha 30–50 procent mindre i utestående förfallen kapitalbindning. Det är vanligen 30 000–150 000 kr i kassan som du tidigare hade utestående.
Det är vad Bokföringen som tillväxtmotor menar med att bokföringen är aktiv, inte rapporterande. Dunning är det enklaste exemplet på samma idé.
Den dåligaste tiden att bygga det här är när du upptäcker att hälften av reskontran är förfallen. Den bästa är nu.
Vanliga frågor
- Vad är dunning?
- Engelsk term för aktiv inkrävning av förfallna fakturor. På svenska används vanligen 'kravhantering' eller 'påminnelseprocess'. Dunning-agent är samma sak fast automatiserat: ett system som varje dag identifierar förfallna fakturor och vidtar åtgärder enligt en mall, utan att en människa behöver tänka på det.
- Är det lagligt att skicka påminnelser automatiskt?
- Ja. Inkassolagen reglerar vad du får skriva och hur du får eskalera, inte om en människa eller maskin skickar mejlet. Standardpraxis: påminnelse 1 utan avgift, påminnelse 2 med påminnelseavgift 60 kr, sedan inkasso. Allt detta kan en agent göra.
- Behöver jag betala dröjsmålsränta-modulen?
- Beror på din strategi. För B2B är det vanligare att skicka påminnelser utan ränta fram till inkasso. Beräkningen enligt räntelagen finns i accounted; det automatiska utskicket av påminnelser gör det inte, så själva utskicket bygger du i ditt eget flöde.
- Vad händer om kunden bråkar tillbaka?
- Agenten ska aldrig svara på inkommande mejl. Den skickar bara utgående påminnelser enligt schema. Inkommande kundkontakter går till en människa. Det är hur du undviker att en agent ska ta diplomatiska beslut den inte borde.
- Hur ofta körs agenten?
- En gång per dag, vanligen morgon. Den läser reskontran, identifierar förfallna fakturor, kollar var de står i påminnelsesekvensen, och skickar nästa steg om dagsavståndet är rätt. Slutar köras på helger eller vid förkonfigurerade pauser (semester, högtider).
Senast uppdaterad: 26 juli 2026