{
  "name": "LedgerDrop Bank Statement Test Pack",
  "version": "2026-10-08",
  "publisher": "Tekiba",
  "description": "Fictional bank statement PDFs with a CSV of every transaction each one contains, for testing statement parsers, OCR and accounting imports. Every bank, person, account and amount is invented; account and routing numbers fail their check digits on purpose.",
  "csv_columns": [
    "date (YYYY-MM-DD)",
    "description (as printed)",
    "amount (account currency, money out negative)",
    "currency",
    "balance after the row (blank where the statement prints none)",
    "original_amount (foreign-currency rows)",
    "original_currency"
  ],
  "pitfall_categories": {
    "multi_currency": "Rows charged in another currency, with the original amount and rate on a second line; the account currency is the amount that counts.",
    "page_break": "The table runs over several pages, its heading repeated and a row or a section continued on the next page.",
    "subtotal_rows": "Total, sub-total or end-of-page lines inside the table that look like rows and are not transactions.",
    "minus_notation": "Money out written without a leading minus: by section, in a withdrawals column, with a trailing minus, in brackets, or money in marked CR.",
    "date_format": "Dates without a year, day-first or month-first, month names, or a period that runs from December into January.",
    "encoding": "Descriptions with accented letters (é, ü, ñ, å), which come out garbled when a CSV is opened in the wrong encoding."
  },
  "totals": {
    "statements": 24,
    "pages": 91,
    "rows": 3864,
    "layouts": 6,
    "by_pitfall": {
      "multi_currency": 4,
      "page_break": 18,
      "subtotal_rows": 8,
      "minus_notation": 20,
      "date_format": 24,
      "encoding": 4
    }
  },
  "samples": [
    {
      "id": "sections-no-year-medium",
      "pdf": "sample-sections-no-year-medium.pdf",
      "csv": "sample-sections-no-year-medium.csv"
    },
    {
      "id": "multi-currency-trailing-minus-medium",
      "pdf": "sample-multi-currency-trailing-minus-medium.pdf",
      "csv": "sample-multi-currency-trailing-minus-medium.csv"
    },
    {
      "id": "decimal-comma-brackets-short",
      "pdf": "sample-decimal-comma-brackets-short.pdf",
      "csv": "sample-decimal-comma-brackets-short.csv"
    }
  ],
  "statements": [
    {
      "id": "signed-balance-short",
      "layout": "signed-balance",
      "bank": "Harbour Lane Bank (fictional)",
      "currency": "USD",
      "pages": 1,
      "rows": 14,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "MM/DD/YYYY",
      "sign_style": "leading minus in one amount column",
      "opening_balance": "2371.02",
      "closing_balance": "4925.90",
      "account_number_check": "ABA routing check digit fails",
      "pitfalls": [
        "date_format"
      ],
      "sample": false
    },
    {
      "id": "signed-balance-medium",
      "layout": "signed-balance",
      "bank": "Harbour Lane Bank (fictional)",
      "currency": "USD",
      "pages": 2,
      "rows": 80,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "MM/DD/YYYY",
      "sign_style": "leading minus in one amount column",
      "opening_balance": "5838.80",
      "closing_balance": "13563.32",
      "account_number_check": "ABA routing check digit fails",
      "pitfalls": [
        "date_format",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "signed-balance-long",
      "layout": "signed-balance",
      "bank": "Harbour Lane Bank (fictional)",
      "currency": "USD",
      "pages": 4,
      "rows": 170,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "MM/DD/YYYY",
      "sign_style": "leading minus in one amount column",
      "opening_balance": "5721.28",
      "closing_balance": "20394.72",
      "account_number_check": "ABA routing check digit fails",
      "pitfalls": [
        "date_format",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "signed-balance-year-end",
      "layout": "signed-balance",
      "bank": "Harbour Lane Bank (fictional)",
      "currency": "USD",
      "pages": 8,
      "rows": 380,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "MM/DD/YYYY",
      "sign_style": "leading minus in one amount column",
      "opening_balance": "3823.71",
      "closing_balance": "39872.33",
      "account_number_check": "ABA routing check digit fails",
      "pitfalls": [
        "date_format",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "sections-no-year-short",
      "layout": "sections-no-year",
      "bank": "Northfield Savings & Loan (fictional)",
      "currency": "USD",
      "pages": 1,
      "rows": 14,
      "prints_running_balance": false,
      "foreign_currency_rows": 0,
      "date_format": "MM/DD (no year; December into January)",
      "sign_style": "unsigned; the section says which way",
      "opening_balance": "6154.97",
      "closing_balance": "7996.17",
      "account_number_check": "ABA routing check digit fails",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "subtotal_rows"
      ],
      "sample": false
    },
    {
      "id": "sections-no-year-medium",
      "layout": "sections-no-year",
      "bank": "Northfield Savings & Loan (fictional)",
      "currency": "USD",
      "pages": 2,
      "rows": 80,
      "prints_running_balance": false,
      "foreign_currency_rows": 0,
      "date_format": "MM/DD (no year; December into January)",
      "sign_style": "unsigned; the section says which way",
      "opening_balance": "1550.36",
      "closing_balance": "5559.61",
      "account_number_check": "ABA routing check digit fails",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break",
        "subtotal_rows"
      ],
      "sample": true
    },
    {
      "id": "sections-no-year-long",
      "layout": "sections-no-year",
      "bank": "Northfield Savings & Loan (fictional)",
      "currency": "USD",
      "pages": 4,
      "rows": 170,
      "prints_running_balance": false,
      "foreign_currency_rows": 0,
      "date_format": "MM/DD (no year; December into January)",
      "sign_style": "unsigned; the section says which way",
      "opening_balance": "3741.30",
      "closing_balance": "15911.45",
      "account_number_check": "ABA routing check digit fails",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break",
        "subtotal_rows"
      ],
      "sample": false
    },
    {
      "id": "sections-no-year-year-end",
      "layout": "sections-no-year",
      "bank": "Northfield Savings & Loan (fictional)",
      "currency": "USD",
      "pages": 8,
      "rows": 380,
      "prints_running_balance": false,
      "foreign_currency_rows": 0,
      "date_format": "MM/DD (no year; December into January)",
      "sign_style": "unsigned; the section says which way",
      "opening_balance": "4283.82",
      "closing_balance": "32275.57",
      "account_number_check": "ABA routing check digit fails",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break",
        "subtotal_rows"
      ],
      "sample": false
    },
    {
      "id": "columns-page-totals-short",
      "layout": "columns-page-totals",
      "bank": "Kestrel Coast Bank (fictional)",
      "currency": "AUD",
      "pages": 1,
      "rows": 14,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "DD MON, the year on a line of its own",
      "sign_style": "unsigned Withdrawals and Deposits columns",
      "opening_balance": "4295.92",
      "closing_balance": "5785.40",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "subtotal_rows"
      ],
      "sample": false
    },
    {
      "id": "columns-page-totals-medium",
      "layout": "columns-page-totals",
      "bank": "Kestrel Coast Bank (fictional)",
      "currency": "AUD",
      "pages": 2,
      "rows": 80,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "DD MON, the year on a line of its own",
      "sign_style": "unsigned Withdrawals and Deposits columns",
      "opening_balance": "5501.42",
      "closing_balance": "8753.66",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break",
        "subtotal_rows"
      ],
      "sample": false
    },
    {
      "id": "columns-page-totals-long",
      "layout": "columns-page-totals",
      "bank": "Kestrel Coast Bank (fictional)",
      "currency": "AUD",
      "pages": 4,
      "rows": 170,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "DD MON, the year on a line of its own",
      "sign_style": "unsigned Withdrawals and Deposits columns",
      "opening_balance": "5610.81",
      "closing_balance": "25331.57",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break",
        "subtotal_rows"
      ],
      "sample": false
    },
    {
      "id": "columns-page-totals-year-end",
      "layout": "columns-page-totals",
      "bank": "Kestrel Coast Bank (fictional)",
      "currency": "AUD",
      "pages": 8,
      "rows": 380,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "DD MON, the year on a line of its own",
      "sign_style": "unsigned Withdrawals and Deposits columns",
      "opening_balance": "6169.58",
      "closing_balance": "34274.61",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break",
        "subtotal_rows"
      ],
      "sample": false
    },
    {
      "id": "multi-currency-trailing-minus-short",
      "layout": "multi-currency-trailing-minus",
      "bank": "Ashgrove Bank Singapore (fictional)",
      "currency": "SGD",
      "pages": 1,
      "rows": 14,
      "prints_running_balance": true,
      "foreign_currency_rows": 2,
      "date_format": "DD/MM/YYYY",
      "sign_style": "Withdrawal and Deposit columns; an overdrawn balance as 1,234.56-",
      "opening_balance": "164.78",
      "closing_balance": "2316.93",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "multi_currency"
      ],
      "sample": false
    },
    {
      "id": "multi-currency-trailing-minus-medium",
      "layout": "multi-currency-trailing-minus",
      "bank": "Ashgrove Bank Singapore (fictional)",
      "currency": "SGD",
      "pages": 2,
      "rows": 80,
      "prints_running_balance": true,
      "foreign_currency_rows": 21,
      "date_format": "DD/MM/YYYY",
      "sign_style": "Withdrawal and Deposit columns; an overdrawn balance as 1,234.56-",
      "opening_balance": "315.66",
      "closing_balance": "3221.89",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "multi_currency",
        "page_break"
      ],
      "sample": true
    },
    {
      "id": "multi-currency-trailing-minus-long",
      "layout": "multi-currency-trailing-minus",
      "bank": "Ashgrove Bank Singapore (fictional)",
      "currency": "SGD",
      "pages": 4,
      "rows": 170,
      "prints_running_balance": true,
      "foreign_currency_rows": 52,
      "date_format": "DD/MM/YYYY",
      "sign_style": "Withdrawal and Deposit columns; an overdrawn balance as 1,234.56-",
      "opening_balance": "337.03",
      "closing_balance": "15785.82",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "multi_currency",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "multi-currency-trailing-minus-year-end",
      "layout": "multi-currency-trailing-minus",
      "bank": "Ashgrove Bank Singapore (fictional)",
      "currency": "SGD",
      "pages": 9,
      "rows": 380,
      "prints_running_balance": true,
      "foreign_currency_rows": 87,
      "date_format": "DD/MM/YYYY",
      "sign_style": "Withdrawal and Deposit columns; an overdrawn balance as 1,234.56-",
      "opening_balance": "352.24",
      "closing_balance": "38305.51",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "multi_currency",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "card-cr-credits-short",
      "layout": "card-cr-credits",
      "bank": "Larkspur Card Services (fictional)",
      "currency": "USD",
      "pages": 1,
      "rows": 14,
      "prints_running_balance": false,
      "foreign_currency_rows": 0,
      "date_format": "D-Mon; the year only in the statement period",
      "sign_style": "charges plain, payments and refunds marked CR",
      "opening_balance": "-1863.44",
      "closing_balance": "-836.47",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation"
      ],
      "sample": false
    },
    {
      "id": "card-cr-credits-medium",
      "layout": "card-cr-credits",
      "bank": "Larkspur Card Services (fictional)",
      "currency": "USD",
      "pages": 2,
      "rows": 80,
      "prints_running_balance": false,
      "foreign_currency_rows": 0,
      "date_format": "D-Mon; the year only in the statement period",
      "sign_style": "charges plain, payments and refunds marked CR",
      "opening_balance": "-599.36",
      "closing_balance": "12277.76",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "card-cr-credits-long",
      "layout": "card-cr-credits",
      "bank": "Larkspur Card Services (fictional)",
      "currency": "USD",
      "pages": 4,
      "rows": 170,
      "prints_running_balance": false,
      "foreign_currency_rows": 0,
      "date_format": "D-Mon; the year only in the statement period",
      "sign_style": "charges plain, payments and refunds marked CR",
      "opening_balance": "-1236.43",
      "closing_balance": "6448.22",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "card-cr-credits-year-end",
      "layout": "card-cr-credits",
      "bank": "Larkspur Card Services (fictional)",
      "currency": "USD",
      "pages": 8,
      "rows": 380,
      "prints_running_balance": false,
      "foreign_currency_rows": 0,
      "date_format": "D-Mon; the year only in the statement period",
      "sign_style": "charges plain, payments and refunds marked CR",
      "opening_balance": "-1114.96",
      "closing_balance": "33384.53",
      "account_number_check": "no check digit in this format, or not printed in full; invented",
      "pitfalls": [
        "date_format",
        "minus_notation",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "decimal-comma-brackets-short",
      "layout": "decimal-comma-brackets",
      "bank": "Banco Rivermar (fictional)",
      "currency": "EUR",
      "pages": 1,
      "rows": 14,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "DD.MM.YYYY",
      "sign_style": "one amount column, money out in brackets, decimal comma (1.234,56)",
      "opening_balance": "5900.31",
      "closing_balance": "7658.06",
      "account_number_check": "IBAN mod-97 check fails",
      "pitfalls": [
        "date_format",
        "encoding",
        "minus_notation"
      ],
      "sample": true
    },
    {
      "id": "decimal-comma-brackets-medium",
      "layout": "decimal-comma-brackets",
      "bank": "Banco Rivermar (fictional)",
      "currency": "EUR",
      "pages": 2,
      "rows": 80,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "DD.MM.YYYY",
      "sign_style": "one amount column, money out in brackets, decimal comma (1.234,56)",
      "opening_balance": "7939.72",
      "closing_balance": "14436.74",
      "account_number_check": "IBAN mod-97 check fails",
      "pitfalls": [
        "date_format",
        "encoding",
        "minus_notation",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "decimal-comma-brackets-long",
      "layout": "decimal-comma-brackets",
      "bank": "Banco Rivermar (fictional)",
      "currency": "EUR",
      "pages": 4,
      "rows": 170,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "DD.MM.YYYY",
      "sign_style": "one amount column, money out in brackets, decimal comma (1.234,56)",
      "opening_balance": "8213.01",
      "closing_balance": "22949.78",
      "account_number_check": "IBAN mod-97 check fails",
      "pitfalls": [
        "date_format",
        "encoding",
        "minus_notation",
        "page_break"
      ],
      "sample": false
    },
    {
      "id": "decimal-comma-brackets-year-end",
      "layout": "decimal-comma-brackets",
      "bank": "Banco Rivermar (fictional)",
      "currency": "EUR",
      "pages": 8,
      "rows": 380,
      "prints_running_balance": true,
      "foreign_currency_rows": 0,
      "date_format": "DD.MM.YYYY",
      "sign_style": "one amount column, money out in brackets, decimal comma (1.234,56)",
      "opening_balance": "6974.76",
      "closing_balance": "40865.98",
      "account_number_check": "IBAN mod-97 check fails",
      "pitfalls": [
        "date_format",
        "encoding",
        "minus_notation",
        "page_break"
      ],
      "sample": false
    }
  ]
}
