Bank statement template
Extract bank statement transactions
Upload a bank or card statement and get every transaction row with its date, description, reference, debit, credit and running balance, plus the account details and opening and closing balances.
No account needed for the Playground. The Bank Statement template is already picked for you.
At a glance
- 19 keys, including Transactions
- PDF, PNG and JPEG, including scans and photos
- Output: JSON, Excel (.xlsx), CSV
- Built to return null instead of guessing
- Documents are not stored after a request finishes
- Good for: reconciliation and bookkeeping, loan and rental applications, spending analysis
Keys
What gets extracted
The Bank Statement template, exactly as it is saved in a new workspace. Every key comes back in the response. A value that is not on the document is null.
| Key | Type | Description |
|---|---|---|
| Bank Name | string | |
| Account Holder | string | |
| Account NumberrequiredAs printed, including any masking. | string | As printed, including any masking. |
| Account TypeFor example checking, savings, or credit card. | string | For example checking, savings, or credit card. |
| IBAN | string | |
| CurrencyISO 4217 code, for example USD, EUR, or LKR. | string | ISO 4217 code, for example USD, EUR, or LKR. |
| Statement Start Daterequired | date | |
| Statement End Daterequired | date | |
| Opening Balancerequired | number | |
| Closing Balancerequired | number | |
| Total CreditsSum of money in for the period, as printed. | number | Sum of money in for the period, as printed. |
| Total DebitsSum of money out for the period, as printed. | number | Sum of money out for the period, as printed. |
| TransactionsrequiredEvery transaction row, in statement order. Skip balance brought forward and carried forward lines. | object[] | Every transaction row, in statement order. Skip balance brought forward and carried forward lines. |
| └ Daterequired | date | |
| └ Descriptionrequired | string | |
| └ ReferenceCheque number or transaction reference. | string | Cheque number or transaction reference. |
| └ DebitrequiredMoney out, as a positive number. Null if none. | number | Money out, as a positive number. Null if none. |
| └ CreditrequiredMoney in, as a positive number. Null if none. | number | Money in, as a positive number. Null if none. |
| └ BalanceRunning balance after this row, if printed. | number | Running balance after this row, if printed. |
Good to know
Bank statement: keys worth knowing
What the trickier keys in the Bank Statement template hold, and how they relate.
Transactions[].Debit and Transactions[].Credit
The template asks for money out and money in as two separate positive numbers, with null on the side a row does not use. If your bank prints one signed amount column, you can swap them for a single amount field in the layout editor.
Transactions[].Balance
The running balance after each row, when the statement prints one. It is not calculated, so rows without a printed balance come back as null.
Opening Balance and Closing Balance
Copied from the statement summary as printed. A quick check: Opening Balance plus Total Credits minus Total Debits should equal Closing Balance.
Example
From bank statement to JSON
An illustrative bank statement with a made-up company and numbers, and the JSON the Bank Statement template returns for it. Keys that are not on the document come back as null.

{
"Bank Name": "Lakeside Bank PLC",
"Account Holder": "Acme Studio (Pvt) Ltd",
"Account Number": "XXXX XXXX 3307",
"Account Type": "current",
"IBAN": null,
"Currency": "USD",
"Statement Start Date": "2026-10-01",
"Statement End Date": "2026-10-31",
"Opening Balance": 4200,
"Closing Balance": 5416,
"Total Credits": 2500,
"Total Debits": 1284,
"Transactions": [
{
"Date": "2026-10-03",
"Description": "Client payment, Orbit Ltd",
"Reference": "TRF88120",
"Debit": null,
"Credit": 2500,
"Balance": 6700
},
{
"Date": "2026-10-10",
"Description": "Office rent",
"Reference": "CHQ 000214",
"Debit": 1200,
"Credit": null,
"Balance": 5500
},
{
"Date": "2026-10-21",
"Description": "Card, Cloud hosting",
"Reference": "POS44102",
"Debit": 84,
"Credit": null,
"Balance": 5416
}
]
}Common gotchas
Where bank statement extraction trips up
Things that often catch people out with bank statement data, and how to handle them.
Masked account numbers
Account Number is copied as printed, including masking like XXXX 3307. Masked digits stay masked.
Transactions over many pages
Rows that continue across pages come back as one Transactions array in order, with repeated header rows skipped. A statement with no transactions returns an empty array.
Credit card statements
Account Type covers checking, savings and credit card accounts. On a card statement, purchases are normally debits and payments to the card are credits.
How it works
Three steps, no setup.
- Step 1
Upload the document
Drop a bank statement into the Playground. PDF, PNG and JPEG all work, including scans and phone photos.
- Step 2
Pick the template
Choose the Bank Statement layout. It is already in every new workspace and guest browser, and you can edit its keys.
- Step 3
Review and export
The model fills exactly the layout's keys, with numbers as numbers and dates as yyyy-mm-dd. Copy the fields or download Excel or CSV.
Playground
Try the Bank Statement template now
Upload a bank statement with the Bank Statement layout already picked. Edit the keys afterward if you need to match your own records.
FAQ
Bank statement extraction, answered.
Can I get the transactions as CSV or Excel?
Yes. After a parse, use Download and pick CSV for one row per transaction with the account details repeated on each row, or Excel (.xlsx) for the statement summary on one sheet and the transactions on another.
How long a statement can I send?
Free allows up to 10 pages per document, and paid plans allow more. Each page costs one credit, so a 4-page statement uses 4 credits.
Do you store my bank statement documents?
No. The file is processed in memory for the request and then dropped. Neither the document nor the extracted JSON is saved. Only a usage record is kept, with things like the time, page count and credits used.
Can I change the keys?
Yes. Every new workspace, and every guest browser, starts with the Bank Statement template as a normal layout. Edit it, rename keys, add keys or delete it. Changes are yours, and a deleted template does not come back.
What happens when a value is not on the document?
It comes back as null. doc2json is built to return null instead of guessing, so you can tell missing data from real data.
Is it free to try?
Yes. The Playground works without an account, using a small guest allowance. A free account adds monthly credits and saved layouts. One credit is one page.
Need a spreadsheet instead? Bank statement to Excel or Bank statement to CSV
Other templates
Try it on your own bank statement.
Open the Playground with the Bank Statement template picked and drop in a file. Sign up free when you want saved layouts and exports at volume.