Reference
Swedish Banks
CSV

Swedish Bank CSV Formats Explained: Complete Reference

Published March 14, 2026 -- 9 min read

Every Swedish bank exports transaction data in a slightly different CSV format. Column names differ, separators vary, and encoding is inconsistent. This reference documents the exact format for each major bank so you can build reliable import workflows.

Quick Comparison

BankSeparatorEncodingDate FormatDecimal
HandelsbankenTabISO-8859-1YYYY-MM-DDComma
SEBSemicolonUTF-8YYYY-MM-DDComma
NordeaSemicolonISO-8859-1YYYY-MM-DDComma
SwedbankCommaUTF-8 BOMYYYY-MM-DDPeriod
LansforsakringarSemicolonUTF-8YYYY-MM-DDComma
FortnoxSemicolonUTF-8 BOMYYYY-MM-DDComma

Handelsbanken

Handelsbanken exports transactions as tab-separated values with ISO-8859-1 encoding. This is one of the trickiest formats because modern tools default to UTF-8 and comma separators.

Column Layout

Bokforingsdatum	Valutadatum	Text	Belopp	Saldo
2026-01-15	2026-01-15	Spotify AB	-129,00	15 432,50
2026-01-14	2026-01-14	ICA Maxi	-387,45	15 561,50
  • Bokforingsdatum: Posting date (when the bank processed it)
  • Valutadatum: Value date (when money actually moved)
  • Text: Transaction description
  • Belopp: Amount (comma decimal, space thousands separator)
  • Saldo: Running balance

Note: Amounts use space as thousands separator (15 432,50) which can cause parsing issues. Strip spaces before converting comma to period.

SEB

SEB uses semicolon-separated values with UTF-8 encoding. Their format includes a reference number column which is useful for reconciliation.

Column Layout

Datum;Verifikationsnummer;Text;Belopp;Saldo
2026-01-15;;Spotify AB;-129,00;15432,50
2026-01-14;12345;Loneutbetalning;32000,00;15561,50

Nordea

Nordea exports with semicolons and ISO-8859-1 encoding. They include both booking date and interest date.

Column Layout

Bokforingsdag;Belopp;Avsandare;Mottagare;Namn;Rubrik;Saldo;Valuta
2026-01-15;-129,00;;;Spotify AB;Kortbetalning;15432,50;SEK

Note: Nordea includes a Valuta (currency) column. For multi-currency accounts, this will show different currencies per transaction.

Swedbank

Swedbank is the most modern format -- UTF-8 with BOM, comma-separated, and period decimals. This is closest to standard CSV and easiest to parse.

Column Layout

Clearingnr,Kontonr,Datum,Text,Belopp,Saldo,Referensnr
8327,1234567890,2026-01-15,Spotify AB,-129.00,15432.50,
8327,1234567890,2026-01-14,ICA Maxi,-387.45,15561.50,ABC123

Lansforsakringar

Lansforsakringar uses semicolons with UTF-8 encoding. Each of the 23 regional companies may have slight variations.

Datum;Text;Belopp;Saldo
2026-01-15;Spotify AB;-129,00;15432,50

Fortnox Bank Reconciliation Format

For importing into Fortnox, you need a specific format with semicolons, UTF-8 BOM, and Swedish column headers:

Datum;Text;Belopp
2026-01-15;Spotify AB;-129,00
2026-01-14;ICA Maxi;-387,45

Key requirements: UTF-8 encoding with BOM (byte order mark), semicolon separator, comma decimal separator, YYYY-MM-DD dates, and exactly three columns.

Common Parsing Pitfalls

  1. Encoding mismatch: Handelsbanken and Nordea use ISO-8859-1, not UTF-8. Swedish characters (a, a, o) will be garbled if you read with wrong encoding.
  2. Decimal separators: Most Swedish banks use comma (1 234,56). Swedbank uses period (1234.56). Do not assume one format for all banks.
  3. Thousands separators: Handelsbanken uses space (15 432,50). This breaks parseInt() and parseFloat() -- strip spaces first.
  4. Multi-line descriptions: Some banks (especially Nordea) include line breaks in transaction descriptions. Use proper CSV parsing, not simple line splitting.
  5. BOM detection: Swedbank and Fortnox files start with UTF-8 BOM (EF BB BF). Strip the BOM before parsing or your first column name will be corrupted.

Universal Parsing Code

// Parse any Swedish bank CSV
function parseSwedishCSV(content, separator = ';') {
  // Strip BOM if present
  if (content.charCodeAt(0) === 0xFEFF) {
    content = content.slice(1);
  }

  const lines = content.split(/\r?\n/).filter(Boolean);
  const headers = lines[0].split(separator).map(h => h.trim().replace(/^"(.*)"$/, '$1'));

  return lines.slice(1).map(line => {
    const values = line.split(separator).map(v => v.trim().replace(/^"(.*)"$/, '$1'));
    const row = {};
    headers.forEach((h, i) => { row[h] = values[i] || ''; });
    return row;
  });
}

// Parse Swedish number: "15 432,50" -> 15432.50
function parseSwedishNumber(str) {
  return parseFloat(str.replace(/\s/g, '').replace(',', '.')) || 0;
}

Skip the format headaches

Bank Statement Converter handles all Swedish bank formats automatically. Upload any PDF, get clean, standardized output in your preferred format. No manual parsing required.