Bruttomarginal per kund i realtid
Du vet vad du fakturerar varje kund. Du vet sällan vad varje kund faktiskt kostar dig. Bruttomarginal per kund kräver att intäkter och allokerade kostnader ligger i samma huvudbok, taggade med samma dimensionsvärde. Med en API-baserad huvudbok är det en dimension-P&L-rapport och ett tiotal rader kod. Här är receptet.
TL;DRDu vet vad du fakturerar varje kund. Du vet sällan vad varje kund faktiskt kostar dig. Bruttomarginal per kund kräver att intäkter och allokerade kostnader ligger i samma huvudbok, taggade med samma dimensionsvärde. Med en API-baserad huvudbok är det en dimension-P&L-rapport och ett tiotal rader kod. Här är receptet.
Det är skillnad på vad du fakturerar och vad du tjänar. Den vanliga missuppfattningen i tillväxtbolag är att tro att intäkten är pengarna. Den är inte. Bruttomarginalen är pengarna. Och bruttomarginalen är intäkt minus de direkta kostnaderna för att leverera till den specifika kunden.
För att räkna det rätt behöver du att intäkter och kostnader är kopplade till samma kund i samma datakälla. Det är vad huvudboken är till för. Här är hur du sätter upp det.
Vad du faktiskt vill räkna
Bruttomarginal per kund i procent:
bruttomarginal % = (intäkt - direkta kostnader) / intäkt
Som siffra i kronor:
täckningsbidrag = intäkt - direkta kostnader
Båda är intressanta. Procentsatsen visar effektivitet (är denna kund lönsam i sig?). Kronan visar bidrag (hur mycket täckningsbidrag tjänar vi totalt på denna kund?).
För beslut: en kund med 90% bruttomarginal men 1 000 kr i intäkt är ofta mindre värdefull än en kund med 30% bruttomarginal men 100 000 kr i intäkt. Räkna båda.
Vad räknas som "direkta kostnader"
Direkta kostnader är de som inte hade funnits om kunden inte funnits. Konkret:
SaaS-företag:
- Hosting/infrastruktur för den specifika kunden (om allokerbart)
- Direct support timmar (kontolisten på 7xxx-konton, allokerade)
- Customer success / onboarding-resurser för stora kunder
- Tredjepartskostnader för API:er som vidarefaktureras (t.ex. AI-tokens, om kunden använder dem)
Konsultbolag:
- Konsulttid (lönekostnad allokerad till kund via tidrapporter)
- Underleverantörers fakturor allokerade till kund
- Resor och hotell relaterade till leveransen
E-handelsbolag:
- Varukostnad (KVS) per kund-order
- Frakt
- Returkostnader
- Betalningsprocessorns avgifter
Vad som INTE räknas:
- Marknadsföring (CAC ligger separat)
- Allmän administration
- Lokalkostnader
- Vd-lön
- Mjukvarulicenser som är allmänna
Det här är fundamentet. Om du har allmänna kostnader allokerade som direkta blir bruttomarginalen lägre och du fattar fel beslut om vilka kunder som är värdefulla.
Steg 1: Sätt upp objektkoder
Taggningen kallas objekt eller dimensioner och kommer från SIE-formatet. Den ligger bredvid kontot på varje rad, så kontoplanen behöver inga extra konton. Kostnadsställe och projekt är de två vanligaste dimensionerna, och en kunddimension är samma mekanik.
I accounted skapar du en dimension "Kund" med SIE-nummer 8 och ett värde per kund. Via API:t ligger de under företaget:
# Dimensionerna du har
curl https://app.accounted.se/api/v1/companies/$COMPANY/dimensions \
-H "Authorization: Bearer gnubok_sk_live_..."
# Värdena i en av dem
curl https://app.accounted.se/api/v1/companies/$COMPANY/dimensions/$DIM/values \
-H "Authorization: Bearer gnubok_sk_live_..."
Du behöver inte tagga varje rad för hand. En faktura kan bära default-dimensioner som slår igenom på raderna, och du kan lägga regler per konto (dimensionen är förvald, tvingande, eller fast) så att bokföringen vägrar släppa igenom en otaggad rad på de konton där det spelar roll. Leverantörsfakturor som du allokerar mot en specifik kund taggar du vid kategorisering.
Steg 2: Tagga intäkter (automatiskt)
När du fakturerar en kund i accounted skapas en verifikation som ser ut såhär:
#VER B 123 20260512 "Faktura 2026-018 Acme AB"
{
#TRANS 1510 {8 "K001"} 12500.00
#TRANS 3001 {8 "K001"} -10000.00
#TRANS 2611 {8 "K001"} -2500.00
}
{8 "K001"} är objektlistan på raden: dimension 8 (kund), värde K001. Den följer raden i huvudboken och blir filtrerbar i rapporterna.
Dimensionsnumren följer SIE: 1 är kostnadsställe, 6 projekt och 8 kund. Utelämnar du numret när du skapar dimensionen får den nästa lediga från 20, vilket också fungerar, men med 8 läser andra system kunddimensionen rätt efter en SIE-export.
Fakturerar du via API sätter du kundens dimensionsvärde som default på fakturan, så slår det igenom på raderna utan att du taggar var och en.
Steg 3: Tagga direkta kostnader (vid bokföring)
Det här är där disciplinen spelar roll. När du bokför en leverantörsfaktura som är direkt allokerbar till en kund, tagga den med kundens objektkod.
Exempel: du hyr en server hos en svensk hostingleverantör, dedikerad till en kund, för 3 000 kr/månad inklusive moms.
#VER D 56 20260501 "Server Acme"
{
#TRANS 6540 {8 "K001"} 2400.00
#TRANS 2641 {8 "K001"} 600.00
#TRANS 2440 {8 "K001"} -3000.00
}
I accounted: vid kategorisering av leverantörsfakturan väljer du dimensionsvärde på raden. Ta det till vana. Det är 5 sekunder extra per faktura men det är skillnaden mellan att räkna bruttomarginal rätt och att gissa.
För återkommande flöden slipper du taggningen. Ett återkommande fakturaschema tar med kundens dimension till varje ny faktura, och när du bokför en bankhändelse från samma motpart igen följer taggen med från den inlärda mallen.
Steg 4: Räkna bruttomarginalen
Rapporten du vill ha är resultaträkningen uppdelad per dimensionsvärde, en matris med konton på raderna och dina kunder som kolumner:
curl "https://app.accounted.se/api/v1/companies/$COMPANY/reports/dimension-pnl?period_id=$PERIOD&dim_no=8" \
-H "Authorization: Bearer gnubok_sk_live_..."
dim_no väljer dimensionen (default 6, projekt) och period_id är räkenskapsperioden. Matrisen är kumulativ från periodens start; to_date kortar av den.
Via MCP är det samma sak med gnubok_get_dimension_pnl, vilket är bekvämare om du bara vill fråga Claude "vilken kund har lägst marginal i år".
Nyckeltalsrapporten ger en färdig procentsats per kund om du filtrerar den på dimensionen (/reports/kpi?period_id=…&dim_no=8&dim_code=K001), men dess bruttomarginal räknar bara klass 4, varuinköp, som direkt kostnad. För ett tjänste- eller SaaS-bolag räknar du därför marginalen själv ur matrisen: intäktskontona (3xxx) minus de direkta kostnadskontona du bestämde tidigare, per kolumn. Det är ett tiotal rader kod och fördelen är att du äger definitionen av "direkt kostnad". Det måste du ändå, eftersom ingen rapportmotor kan gissa vilka av dina 5xxx-, 6xxx- och 7xxx-konton som är direkt allokerbara.
För dashboard-byggande: dra matrisen in i Metabase, Lightdash eller en egen Next.js-app.
Vad du gör med datan
Tre vanliga beslut som blir bättre med kundmarginal:
1. Pris-justering
Kunder under 50% bruttomarginal: kandidater för prishöjning eller scope-reduktion vid förnyelse. Inte automatik, men en signal att titta.
2. Customer success-allokering
Kunder med hög marginal och hög ARR förtjänar mer dedikerad customer success. Kunder med låg marginal får standardiserad onboarding via dokumentation.
3. Beslut att inte förnya
Kunder med konsekvent negativ bruttomarginal trots flera kvartal av justeringar: kandidater för icke-förlängning. Det är en svår beslut men det är ärligare att fatta det med data än utan.
Vad du inte ska göra
Räkna kundmarginal månadsvis och dra slutsatser per månad. En kund som tar 20 timmar onboarding första månaden ser dålig ut den månaden, fantastisk de följande. Räkna rullande 6–12 månader.
Mixa in akquisitionskostnaden i bruttomarginal. CAC är ett separat mått (CAC payback, LTV/CAC). Bruttomarginal är efter akvisition.
Försöka allokera alla kostnader. Vissa kostnader är genuint icke-allokerbara. Lämna dem oallokerade och rapportera dem separat som overhead.
Räkna före intäktsperiodisering. Om en kund betalar för helåret i januari är intäkten 1/12 per månad, inte allt i januari. Använd periodiserade intäkter i bruttomarginalberäkningen.
Konkret recept för att komma igång
- Identifiera dina topp-20 kunder efter omsättning senaste 12 månaderna.
- Skapa objektkoder för dem (K001, K002, ...) i accounted.
- Tagga deras pågående fakturor framåt med rätt objektkod.
- Identifiera direkta kostnader för var och en (hosting, support-tid, underleverantörer) och tagga dessa.
- Kör dimension-P&L-rapporten efter en månad.
Två månader senare har du tillräckligt med data för att se tydliga mönster. Tre månader senare kan du fatta beslut.
För teknisk fördjupning i hur accounteds rapporter fungerar: se Live runway och burn-rate direkt från bokföringen för samma typ av direktläsning från huvudboken.
Varför inte ett data warehouse?
Du kan absolut bygga det här i Snowflake plus dbt och alla tunga verktyg. För 200 kunder och tre månaders historik är det overkill. För 20 000 kunder och fem års historik blir det rimligt.
Brytpunkten är vanligen när du har:
- 1 000+ kunder
- 5+ datakällor som behöver kombineras
- Behov av historiska transformationer (ändrade kontoplaner, ändrade allokeringsregler)
Före brytpunkten är direktläsning från huvudboken snabbare att bygga, snabbare att underhålla, och uppdaterar i realtid. Det är vad Bokföringen som tillväxtmotor menar med "huvudboken är inte slutdestinationen, den är källan".
Vad du gör nu
Logga in i accounted. Gå till Dimensioner (syns menyvalet inte, slå på dimensioner under Inställningar först), skapa en kunddimension och lägg upp värden för dina topp-10 kunder. Tagga nästa månads fakturor och leverantörsfakturor när de bokförs. Kör dimension-P&L dagen efter månadsskiftet och räkna marginalen ur matrisen.
Det är 30 minuter setup och 5 minuter per dag i ny disciplin. Värdet är att du för första gången vet vilka kunder som faktiskt är lönsamma.
Vanliga frågor
- Vad är bruttomarginal per kund?
- Intäkter från en kund minus direkta kostnader för att leverera till samma kund, uttryckt som procent av intäkten. För ett SaaS-företag är direkta kostnader vanligen hosting, support, customer success. För ett konsultbolag är det allokerad konsulttid.
- Varför kan jag inte räkna det i Stripe eller i mitt CRM?
- Stripe har intäkterna men inte kostnaderna. CRM:et har relationen men inte siffrorna. Bara huvudboken har båda kopplade till samma kund via objektkod eller verifikationstext. Det är därför det måste räknas på bokföringsdatan, inte på CRM-datan.
- Behöver jag tagga varje verifikation med kundnamn?
- Varje direkt allokerbar verifikationsrad, ja. Använd objekt, det vill säga dimensioner enligt SIE, där 8 är standardnumret för kund. När du fakturerar en kund taggar du försäljningsintäkten med kundens kod. När du betalar för dedikerad infrastruktur taggar du kostnaden likadant.
- Vad gör jag med overhead som inte går att allokera?
- Lämna oallokerat. Bruttomarginal per kund täcker bara direkta kostnader per definition. Overhead (löner till management, kontorshyra, allmänna verktyg) räknas i resultaträkningen som helhet, inte per kund. Var konsekvent: blanda inte in overhead i kundkostnaden.
- Hur ofta uppdateras siffrorna?
- Sekunden en verifikation bokförs. Om du kör en nattlig cron som dragit ut alla kunders bruttomarginal är morgonens siffror baserade på gårdagens stängning. Om du läser via API i realtid har du minutens läge. Skillnaden spelar sällan stor roll för marginalanalys.
Senast uppdaterad: 27 september 2026