Bank Statement Converter - PDF to Excel, CSV & JSON
Pricing
from $10.00 / 1,000 statement pages
Bank Statement Converter - PDF to Excel, CSV & JSON
Convert bank statement PDFs (and scanned statements or photos) into clean transactions: date, description, debit, credit, amount and running balance. Any bank, no templates. Every row is checked against the running balance. Export to Excel, CSV or JSON.
Pricing
from $10.00 / 1,000 statement pages
Rating
0.0
(0)
Developer
Alex
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Bank Statement Converter: PDF to Excel, CSV and JSON
Turn bank statement PDFs into a clean table of transactions. Upload a statement (or paste links to many) and get every transaction with date, description, debit, credit, signed amount and running balance, ready for Excel, Google Sheets, QuickBooks, Xero or your own code.
It works with any bank and any layout, without templates: the Actor finds the date column and the money columns on its own, joins descriptions that wrap over several lines, and then checks every row against the running balance, so you can see at a glance that nothing was missed or misread.
What it handles
- Text PDFs downloaded from online banking, and scanned statements or phone photos (built-in OCR, 10 languages).
- Any column layout: Debit / Credit / Balance, Paid out / Paid in, Money out / Money in, Withdrawals / Deposits, a single signed Amount column, amounts with
CR/DR,-or+after the number, amounts in brackets. - Number formats:
1,234.56,1.234,56,1 234,56, Indian1,23,456.78, currency symbols and codes. - Date formats:
01/15,15/01/2026,2026-01-15,15.01.2026,15 Jan,Jan 15, 2026,15JAN26, date with time; years are filled in when the statement leaves them out. - Statement quirks: the date printed only once per day, the balance shown only at the end of each day, the amount on the last line of a multi-line description, newest-first order, balance brought/carried forward between pages, a separate value date column.
- Password-protected PDFs (the password field is encrypted).
- Many statements in one run: each file gets its own Excel and CSV plus one combined dataset.
What you get
| Field | Example |
|---|---|
date | 2026-01-15 |
description | CARD PAYMENT TO TESCO STORES 3412 |
debit | 45.20 |
credit | null |
amount | -45.20 (negative = money out) |
balance | 1,254.80 |
currency | GBP |
balanceCheck | ok, mismatch, corrected or n/a |
valueDate, page, file | when available |
Per statement, the key-value store also gets:
<file>.xlsxwith a Transactions sheet (real dates and numbers, filters, frozen header) and a Summary sheet,<file>.csv(UTF-8, opens directly in Excel and Google Sheets),SUMMARYwith opening and closing balance, total credits and debits, first and last date, how many rows passed the balance check, and whether opening balance + movements = closing balance.
Balance check: why you can trust the numbers
For every transaction the Actor computes previous balance + amount and compares it with the balance printed on the statement. Rows that add up are marked ok. If a scanned page has a misread digit and the balance proves what the amount must be, the amount is fixed and marked corrected. Anything else is marked mismatch, so you know exactly which rows to look at. Statements without a balance column are checked with opening + movements = closing.
How to use it
- Upload a PDF in Upload a statement, or paste one or more links in Statement URLs (Google Drive and Dropbox share links work).
- If the PDF has a password, enter it.
- Click Start. Download the table from the Output tab as Excel, CSV or JSON, or open the per-statement Excel file from the key-value store.
Input example
{"statementUrls": ["https://example.com/statements/2026-01.pdf"],"dateFormat": "auto","ocr": "auto","ocrLanguages": "eng"}
From code
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("alex9080/bank-statement-converter").call(run_input={"statementUrls": ["https://example.com/statements/2026-01.pdf"],})for tx in client.dataset(run["defaultDatasetId"]).iterate_items():print(tx["date"], tx["amount"], tx["description"])
It also works from Make, Zapier, n8n and AI agents through the Apify API and MCP server.
Pricing
You pay only for pages that contain transactions:
- $0.01 per text page (a regular PDF from online banking),
- $0.02 per scanned page (OCR).
Cover pages, legal notes and pages without transactions are free, and so are files that fail to download or contain no transactions. A typical 4-page monthly statement costs about $0.03.
Tips
- Ambiguous dates like
03/04/2026: Auto decides from the file (any day above 12 settles it; otherwise$statements are read as month-first and others as day-first). Set Date format if your bank uses the other order. - Scans: 300 dpi or a sharp phone photo gives the best results. Add your language in OCR languages, e.g.
eng+deu. - If a statement is not converted correctly, open an issue on the Issues tab with the bank name and what went wrong (no need to share the file). Layout fixes are usually quick.
Privacy
Files are processed inside your own Apify run and stored only in your own Apify storage. Nothing is sent to third-party services or AI models. Delete the run's storage whenever you like.
FAQ
Which banks are supported? Any bank whose statement lists transactions as a table with dates and amounts, from US, UK and EU banks to India, Australia, Ukraine and fintechs like Revolut or Monzo. There are no per-bank templates to wait for.
Does it read credit card statements? Yes, as long as they list transactions with dates and amounts.
Is my data used for anything else? No. The Actor does not keep copies and does not use AI services.