API
Developers
Documentation

Bank Statement Converter API: Developer Documentation

Published March 14, 2026 -- 10 min read

The Bank Statement Converter API lets you parse PDF bank statements programmatically and get structured transaction data in JSON, CSV, or Excel format. Perfect for fintech apps, accounting automation, and financial data pipelines.

Quick Start

Upload a PDF and get structured data in 3 steps:

1. Upload and Parse

curl -X POST https://bsc-api.up.railway.app/api/convert \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@statement.pdf" \
  -F "bank=auto"

# Response:
{
  "conversion_id": "conv_abc123",
  "bank_detected": "handelsbanken",
  "confidence": 92,
  "pages": 3,
  "transaction_count": 47,
  "currency_info": {
    "primary": "SEK",
    "all": ["SEK"],
    "multi": false
  },
  "preview_rows": [
    {
      "date": "2026-01-15",
      "description": "Spotify AB",
      "amount": -129.00,
      "currency": "SEK",
      "balance": 15432.50
    }
  ]
}

2. Download Structured Data

# Download as JSON
curl "https://bsc-api.up.railway.app/api/convert/conv_abc123/download?format=json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o transactions.json

# Download as CSV
curl "https://bsc-api.up.railway.app/api/convert/conv_abc123/download?format=csv" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o transactions.csv

# Download as Excel
curl "https://bsc-api.up.railway.app/api/convert/conv_abc123/download?format=xlsx" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o transactions.xlsx

# Download as Fortnox-compatible CSV
curl "https://bsc-api.up.railway.app/api/convert/conv_abc123/download?format=fortnox" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o transactions_fortnox.csv

3. Custom Export (Pro)

# Custom columns, date format, and decimal separator
curl "https://bsc-api.up.railway.app/api/convert/conv_abc123/download\
  ?format=csv\
  &columns=date,description,amount\
  &date_format=DD/MM/YYYY\
  &decimal_separator=comma" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o custom_export.csv

API Reference

POST /api/convert

Upload and parse a PDF bank statement.

ParameterTypeDescription
fileFilePDF file (multipart/form-data)
bankstringBank ID or "auto" for auto-detection

GET /api/convert/:id/download

Download parsed transactions in the specified format.

ParameterTypeDescription
formatstringxlsx, csv, fortnox, json
columnsstringComma-separated: date,description,amount,currency,balance (Pro)
date_formatstringYYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY, DD.MM.YYYY (Pro)
decimal_separatorstringperiod (1234.56) or comma (1234,56) (Pro)

GET /api/convert/banks

List all supported bank formats.

Code Examples

Node.js

import fs from 'fs';

const API_URL = 'https://bsc-api.up.railway.app';

async function parseStatement(filePath) {
  const formData = new FormData();
  formData.append('file', new Blob([fs.readFileSync(filePath)]), 'statement.pdf');

  const response = await fetch(`${API_URL}/api/convert`, {
    method: 'POST',
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
    body: formData,
  });

  const { conversion_id, transaction_count, currency_info } = await response.json();
  console.log(`Parsed ${transaction_count} transactions (${currency_info.primary})`);

  // Download JSON
  const download = await fetch(
    `${API_URL}/api/convert/${conversion_id}/download?format=json`,
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );
  const data = await download.json();
  return data.transactions;
}

const transactions = await parseStatement('./statement.pdf');
console.log(transactions);

Python

import requests

API_URL = "https://bsc-api.up.railway.app"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

# Upload and parse
with open("statement.pdf", "rb") as f:
    response = requests.post(
        f"{API_URL}/api/convert",
        headers=HEADERS,
        files={"file": ("statement.pdf", f, "application/pdf")},
    )

result = response.json()
conversion_id = result["conversion_id"]
print(f"Parsed {result['transaction_count']} transactions")

# Download as JSON
download = requests.get(
    f"{API_URL}/api/convert/{conversion_id}/download",
    headers=HEADERS,
    params={"format": "json"},
)
transactions = download.json()["transactions"]
for txn in transactions[:5]:
    print(f"  {txn['date']}: {txn['description']} -> {txn['amount']} {txn['currency']}")

Supported Banks

We support 50+ bank formats including:

Sweden

  • Handelsbanken
  • SEB
  • Nordea
  • Swedbank
  • Lansforsakringar

Norway & Denmark

  • DNB
  • SpareBank 1
  • Danske Bank
  • Jyske Bank
  • Generic (auto-detect)

Rate Limits and Pricing

PlanPricePages/dayFeatures
Free$05Basic banks, watermark
Pro$19/mo100All banks, custom exports, no watermark
Business$49/mo500API access, priority support

Start integrating today

Create a free account and start parsing bank statements in minutes. No credit card required.