API
Developers
Documentation

Bank Statement Sheet API: Developer Documentation

Published March 14, 2026 -- 10 min read

The Bank Statement Sheet 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.

Honest status note: these are the same live endpoints the web app uses. Dedicated API keys are not issued yet — anonymous requests run on the free tier (per-IP limits) and cover Excel/CSV downloads; JSON, OFX and Fortnox downloads require a Pro account's Authorization token. A formal API-key program is planned; contact us if you want early access.

Quick Start

Upload a PDF and get structured data in 3 steps:

1. Upload and Parse

curl -X POST https://api.bankstatementsheet.com/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 CSV (free, no auth needed)
curl "https://api.bankstatementsheet.com/api/convert/conv_abc123/download?format=csv" \
  -o transactions.csv

# Download as Excel (free, no auth needed)
curl "https://api.bankstatementsheet.com/api/convert/conv_abc123/download?format=xlsx" \
  -o transactions.xlsx

# Download as JSON (Pro — authenticate with your account token)
curl "https://api.bankstatementsheet.com/api/convert/conv_abc123/download?format=json" \
  -H "Authorization: Bearer YOUR_ACCOUNT_TOKEN" \
  -o transactions.json

# Download as Fortnox-compatible CSV (Pro)
curl "https://api.bankstatementsheet.com/api/convert/conv_abc123/download?format=fortnox" \
  -H "Authorization: Bearer YOUR_ACCOUNT_TOKEN" \
  -o transactions_fortnox.csv

3. Custom Export (Pro)

# Custom columns, date format, and decimal separator
curl "https://api.bankstatementsheet.com/api/convert/conv_abc123/download\
  ?format=csv\
  &columns=date,description,amount\
  &date_format=DD/MM/YYYY\
  &decimal_separator=comma" \
  -H "Authorization: Bearer YOUR_ACCOUNT_TOKEN" \
  -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 (free) · fortnox, ofx, json (Pro)
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 — CSV becomes semicolon-separated, European convention) (Pro)

GET /api/convert/banks

List all supported bank formats.

Code Examples

Node.js

import fs from 'fs';

const API_URL = 'https://api.bankstatementsheet.com';

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://api.bankstatementsheet.com"
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 major Nordic bank formats — plus any bank via our AI engine — 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$05All banks, Excel/CSV
Pro$19/mo100Fortnox/OFX/JSON, custom exports, batch
Business$49/mo500Everything in Pro, priority support

Start integrating today

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