BankSheet

Bank Statement CSV Formats: US and UK Date, Sign and Column Rules by Bank

A reference for 10 US and UK banks: how each statement's dates are read (month first or day first), how debits, credits and signs are decided, which balance labels count, and the exact CSV columns that come out.

Source and scope. Every row is generated from BankSheet's statement parser and export code, and an automated test runs the real parser against each row. It describes how BankSheet reads each bank's text-based statement PDF, not each bank's own CSV download. Updated .

Statement format rules by bank

The bank is identified from text on the statement, checked top to bottom in this order; the first match wins. The last column shows how the statement line “03/04/2025 …” is read when nothing else on the statement settles the order.

BankCountryIdentified byDate orderNumeric datesWritten monthsYear if not printedRow with no dateAmounts03/04/2025 →
ChaseUS“JPMorgan Chase”, “Chase Bank” or “chase.com”Month first (MM/DD)Slash only (03/04/2025, 03/04/25); year optional (03/04)Not readStatement periodNot read (each row needs its own date)Unsigned (debit / credit columns)2025-03-04
Bank of AmericaUS“Bank of America” or “bankofamerica.com”Month first (MM/DD)Slash only (03/04/2025, 03/04/25); year optional (03/04)Not readStatement periodNot read (each row needs its own date)Unsigned (debit / credit columns)2025-03-04
Wells FargoUS“Wells Fargo” or “wellsfargo.com”Month first (MM/DD)Slash only (03/04/2025, 03/04/25); year optional (03/04)Not readStatement periodNot read (each row needs its own date)Unsigned (debit / credit columns)2025-03-04
CitiUS“Citi” (whole word), “Citibank” or “citi.com”Month first (MM/DD)Slash only (03/04/2025, 03/04/25); year optional (03/04)Not readStatement periodNot read (each row needs its own date)Unsigned (debit / credit columns)2025-03-04
Capital OneUS“Capital One” or “capitalone.com”Month first (MM/DD)Slash only (03/04/2025, 03/04/25); year optional (03/04)Read (2 Aug; 02 Aug 25; 1 Jun 2024; Aug 2; Aug 2, 2025)Statement periodNot read (each row needs its own date)Minus = money out; unsigned follows the balance2025-03-04
American ExpressUS“American Express”, “Amex” (whole word) or “americanexpress.com”Month first (MM/DD)Slash only (03/04/2025, 03/04/25); year optional (03/04); a * straight after the date is ignored (11/21/25*)Not readStatement periodNot read (each row needs its own date)Unsigned (debit / credit columns)2025-03-04
BarclaysUK“Barclays”Day first (DD/MM)Slash or hyphen (03/04/2025, 03-04-25)Read (2 Aug; 02 Aug 25; 1 Jun 2024; Aug 2; Aug 2, 2025)Statement periodTakes the date printed above it, until a page break, a new table header, a balance line or a total lineUnsigned (debit / credit columns)2025-04-03
HSBCUK“HSBC” (whole word)Day first (DD/MM)Slash or hyphen (03/04/2025, 03-04-25)Read (2 Aug; 02 Aug 25; 1 Jun 2024; Aug 2; Aug 2, 2025)Statement periodTakes the date printed above it, until a page break, a new table header, a balance line or a total lineUnsigned (debit / credit columns)2025-04-03
NatWestUK“NatWest” or “National Westminster”Day first (DD/MM)Slash or hyphen (03/04/2025, 03-04-25)Read (2 Aug; 02 Aug 25; 1 Jun 2024; Aug 2; Aug 2, 2025)Statement periodTakes the date printed above it, until a page break, a new table header, a balance line or a total lineUnsigned (debit / credit columns)2025-04-03
RevolutUK / EU (multi-currency)“Revolut” (whole word)Day first (DD/MM); the whole statement switches to month first only if it has a date whose second number is over 12 and none whose first number isSlash or hyphen (03/04/2025, 03-04-25)Read (2 Aug; 02 Aug 25; 1 Jun 2024; Aug 2; Aug 2, 2025)Statement periodNot read (each row needs its own date)Minus = money out; unsigned follows the balance2025-04-03
Other banks (generic fallback)AnyAnything not matched aboveOne order for the whole statement: day first if any date’s first number is over 12, otherwise month first if any date’s second number is over 12, otherwise day first for UK-looking statements (£, GBP, a sort code or a UK bank name) and month first for the restSlash or hyphen (03/04/2025, 03-04-25); year optional (03/04)Read (2 Aug; 02 Aug 25; 1 Jun 2024; Aug 2; Aug 2, 2025)Statement periodTakes the date printed above it when the statement reads day first; otherwise not readUnsigned (debit / credit columns)2025-03-04

US vs UK statement dates

Chase, Bank of America, Wells Fargo, Citi, Capital One and American Express are read month first (MM/DD) with slashes, and the year may be missing (05/01). Capital One rows written like “Apr 3” are read too, and an American Express date followed by an asterisk (11/21/25*) is read as that date. Barclays, HSBC and NatWest are read day first (DD/MM) with a slash or a hyphen, and written months such as “2 Aug”, “02 Aug 25” or “24 AUG” are read. Revolut dates such as “1 Jun 2024” and “Apr 12, 2023” are read; numeric Revolut dates are day first, and the whole statement switches to month first only if it contains a date whose second number is over 12 (such as 09/13/2025) and none whose first number is.

Banks without their own parser use one order for the whole statement, so a statement never mixes the two: day first if any date's first number is over 12, otherwise month first if any date's second number is over 12, otherwise day first for UK-looking statements (a £ sign, GBP, a sort code or a UK bank name) and month first for the rest. They accept a slash or a hyphen, a missing year and written months.

Year when a row prints none: The year printed on the row; otherwise the statement period or closing date printed on the statement (a December row on a statement ending in January gets the earlier year); with no period, the latest year that keeps the dates in order and not in the future.

Several transactions on one day: Barclays, HSBC and NatWest print the date only on the first transaction of each day. The rows after it take that date until a page break, a new table header, a balance line (such as “Balance carried forward”) or a total line. A transaction whose description runs over several lines, with the amount on the last one (as on HSBC and Barclays statements), is read as one row. Unknown banks get the same handling when the statement reads day first.

A date that cannot exist on the calendar, such as 31/02/2025 or 29/02/2025, is not guessed: the row is kept with the date exactly as printed and flagged in the preview so you can check it against the PDF. A transaction row starts with a date. Which date shapes count (numeric with or without a year, written month) depends on the bank, as in the table. For Barclays, HSBC, NatWest and day-first unknown banks, a row that prints no date takes the date printed above it, and a row whose description runs over several lines is read as one row ending at the line with the amount. Rows that start with an ISO date (2025-03-04) are not read. When lines with an amount but no date sit between rows and are skipped, the preview says how many. Two-digit years are read as 20YY (03/04/25 → 2025). Exports write the date as YYYY-MM-DD (a flagged impossible date stays as printed), so the CSV is unambiguous whichever way the statement printed it.

Debits, credits and sign conventions

Known quirk. The wording match looks for whole words anywhere in the line, so a single-amount line such as “CREDIT CARD PAYMENT” is read as money in. Statements that print separate debit and credit columns (three amounts per line) avoid this; the balance check flags it otherwise.

Opening and closing balance labels

The opening balance is the first amount (with two decimals) after one of these labels, tried in this order: Opening balance, Beginning balance, Previous balance, Balance brought forward, Start balance, Brought forward. The closing balance uses: Closing balance, Ending balance, New balance, Balance carried forward, End balance, Carried forward. Both are needed for the opening-to-closing balance check; without them the check reports “incomplete”.

Currency

Currency comes from the whole statement text, checked in this order: £ or GBP → GBP; € or EUR → EUR; $ or USD → USD; otherwise unknown.

Skipped lines and scanned PDFs

Lines containing “page” followed by a number, and a header line that starts with “Date” and contains “Description”, are skipped. A PDF with fewer than 40 non-space characters of text, or under 30 characters per page, is treated as scanned and nothing is extracted (BankSheet does not do OCR).

The CSV columns BankSheet writes

PresetColumnsSigns
StandardDate, Description, Debit, Credit, BalanceDebit and Credit are positive numbers in their own columns; the unused side is blank.
QuickBooksDate, Description, AmountCredits positive, debits negative. A CSV column layout, not a .QBO or OFX file.
XeroDate, Amount, Payee, Description, ReferenceSigned like QuickBooks. Payee and Reference are left blank.

Every export writes dates as YYYY-MM-DD (except a flagged impossible date, which is kept exactly as printed) and amounts as plain numbers. The Excel download has the same columns on a “Transactions” sheet and a “Statement” sheet with bank, currency, pages, opening and closing balance.

Worked examples from BankSheet's sample statements

These lines come from the synthetic sample statements BankSheet ships for testing, with the values the parser returns.

Chase sample line

08/05/2025  CHECKCARD WHOLE FOODS               86.42       0.00        15,563.58

Date 2025-08-05 · Description “CHECKCARD WHOLE FOODS” · Debit 86.42 · Credit — · Balance 15563.58

Barclays sample line

02/08/2025  FASTER PAYMENT FROM CLIENT                      1,500.00     3,600.00

Date 2025-08-02 · Description “FASTER PAYMENT FROM CLIENT” · Debit — · Credit 1500.00 · Balance 3600.00

Revolut sample line

01/09/2025  Card payment · Notion                 -24.00     476.00

Date 2025-09-01 · Description “Card payment · Notion” · Debit 24.00 · Credit — · Balance 476.00

Frequently asked questions

What date format do UK bank statements use in BankSheet?

BankSheet reads numeric Barclays, HSBC, NatWest and Revolut dates day first (DD/MM), with a slash or a hyphen, so 03/04/2025 becomes 3 April 2025. Written months such as 2 Aug, 02 Aug 25 or 1 Jun 2024 are read too, and when a row prints no year the year comes from the statement period. US banks (Chase, Bank of America, Wells Fargo, Citi, Capital One, American Express) are read month first (MM/DD), with or without a year.

What happens when a statement prints the date only once per day?

Barclays, HSBC and NatWest print the date only on the first transaction of each day. BankSheet gives the following rows that date until a page break, a new table header, a balance line or a total line, and reads a description that runs over several lines as one row ending at the line with the amount. Unknown banks get the same handling when the statement reads day first.

How does BankSheet decide whether an amount is a debit or a credit?

When a line has three amounts they are read as debit, credit and balance. When it has one amount plus an optional balance, the amount is a credit if it ends in CR or the line contains money-in wording such as deposit, refund or transfer from; otherwise it is a debit. For Barclays, HSBC and NatWest, when the balance moved by exactly the amount, the balance decides. Capital One (“- $300.00”) and Revolut amounts are signed: a leading minus is money out, and a Revolut amount with no sign takes its direction from the running balance.

What columns are in a BankSheet CSV?

Standard: Date, Description, Debit, Credit, Balance. QuickBooks: Date, Description, Amount (credits positive, debits negative). Xero: Date, Amount, Payee, Description, Reference. Dates are written as YYYY-MM-DD.

How are ambiguous dates like 03/04/2025 read for other banks?

For banks without a dedicated parser, one order is used for the whole statement: day first if any date's first number is over 12 (13/04/2025), otherwise month first if any date's second number is over 12, otherwise day first for UK-looking statements (£, GBP, a sort code or a UK bank name) and month first for the rest. So on a US statement with nothing else to go on, 03/04/2025 is 4 March 2025. Revolut is read day first, and switches to month first only if the same statement contains a date like 09/13/2025 and none like 13/09/2025.

Which statement lines are not read?

Rows that start with an ISO date (2025-03-04), written-month rows for US banks other than Capital One, undated rows for banks that print a date on every row (the preview warns how many were skipped), amounts without exactly two decimals, numbers followed by %, page-number lines and the column header line. For Barclays, HSBC, NatWest and day-first unknown banks, a row with no date takes the date printed above it. A date that cannot exist, such as 31/02, is kept as printed and flagged rather than guessed. Scanned image-only PDFs are not read at all; BankSheet does not do OCR.

Is this each bank's own CSV download format?

No. It documents how BankSheet reads each bank's statement PDF and what CSV BankSheet writes, taken from its parser code and tests. Banks' own CSV downloads have their own columns.

How should I cite this table?

Please cite it as: BankSheet (getbanksheet.com). “Bank statement CSV formats: US & UK date, sign and column rules by bank.” Updated 2026-10-12. https://getbanksheet.com/guides/bank-statement-csv-formats. The table is free to reuse with attribution under CC BY 4.0.

Cite this table

Free to reuse with attribution (CC BY 4.0). Please credit BankSheet (getbanksheet.com) and link to this page:

BankSheet (getbanksheet.com). “Bank statement CSV formats: US & UK date, sign and column rules by bank.” Updated 2026-10-12. https://getbanksheet.com/guides/bank-statement-csv-formats

The same data as CSV and JSON, with BankSheet's synthetic sample statements and the rows the parser returns for them, is published at github.com/Dev-Muhammad-Junaid/bank-statement-formats (CC BY 4.0).

Free tools and converters